MYSQL-在图书表和学生表基础上进行子查询
时间: 2024-03-11 18:45:15 浏览: 64
MySQL多表查询和子查询
假设有两个表,一个是图书表 books,另一个是学生表 students,它们的结构和部分数据如下:
```mysql
-- 图书表 books
CREATE TABLE books (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(100) NOT NULL,
author VARCHAR(50) NOT NULL,
price DECIMAL(8,2) NOT NULL,
publish_date DATE NOT NULL
);
INSERT INTO books (title, author, price, publish_date) VALUES
('MySQL入门与精通', '张三', 59.90, '2020-01-01'),
('Java编程思想', 'Bruce Eckel', 108.00, '2018-01-01'),
('Python数据分析与挖掘实战', '李四', 89.00, '2019-06-01'),
('深入浅出Node.js', '朱一凡', 59.00, '2017-03-01'),
('算法图解', 'Aditya Bhargava', 49.90, '2018-07-01');
-- 学生表 students
CREATE TABLE students (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
gender VARCHAR(10) NOT NULL,
age INT NOT NULL,
major VARCHAR(50) NOT NULL
);
INSERT INTO students (name, gender, age, major) VALUES
('张三', '男', 20, '计算机科学与技术'),
('李四', '女', 19, '软件工程'),
('王五', '男', 21, '物联网工程'),
('赵六', '女', 20, '信息管理'),
('钱七', '男', 22, '计算机应用技术');
```
现在我们来进行一些子查询的操作。
1. 查询图书表中价格最高的图书的信息
```mysql
SELECT * FROM books WHERE price = (SELECT MAX(price) FROM books);
```
2. 查询学生表中年龄最大的学生的姓名和专业
```mysql
SELECT name, major FROM students WHERE age = (SELECT MAX(age) FROM students);
```
3. 查询学生表中专业为“计算机科学与技术”的学生的平均年龄
```mysql
SELECT AVG(age) FROM students WHERE major = '计算机科学与技术';
```
4. 查询学生表中不在专业为“计算机科学与技术”和“软件工程”的学生的姓名和专业
```mysql
SELECT name, major FROM students WHERE major NOT IN ('计算机科学与技术', '软件工程');
```
阅读全文