MYSQL-图书表基础上进行子查询:(9)列出其他出版社中图书价格高于出版社为“陕西师范大学出版社”所有图书价格的图书编号
时间: 2024-03-10 11:50:38 浏览: 28
假设图书表的表名为books,其中包含字段publishing_house(出版社)和price(价格),可以使用以下SQL语句进行子查询,以获取价格高于“陕西师范大学出版社”所有图书价格的图书编号:
```
SELECT book_id
FROM books
WHERE publishing_house <> '陕西师范大学出版社'
AND price > ALL
(SELECT price
FROM books
WHERE publishing_house = '陕西师范大学出版社');
```
该查询语句中,首先在子查询中获取“陕西师范大学出版社”所有图书的价格,然后使用ALL关键字,查询价格高于这些价格的图书编号,并将结果返回。
相关问题
MYSQL-在图书表表基础上进行子查询:(8)列出其他出版社中图书价格高于任何出版社为“陕西师范大学出版社”的图书价格的图书编号、名称和价格
假设图书表的结构和数据如下:
```mysql
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,
publisher VARCHAR(50) NOT NULL
);
INSERT INTO books (title, author, price, publisher) VALUES
('MySQL入门与精通', '张三', 59.90, '清华大学出版社'),
('Java编程思想', 'Bruce Eckel', 108.00, '机械工业出版社'),
('Python数据分析与挖掘实战', '李四', 89.00, '人民邮电出版社'),
('深入浅出Node.js', '朱一凡', 59.00, '电子工业出版社'),
('算法图解', 'Aditya Bhargava', 49.90, '陕西师范大学出版社'),
('C程序设计语言', 'Brian W. Kernighan, Dennis M. Ritchie', 32.00, '电子工业出版社'),
('数据结构与算法分析', 'Mark Allen Weiss', 59.90, '清华大学出版社');
```
可以使用子查询来实现该问题。
```mysql
SELECT id, title, price FROM books
WHERE price > (SELECT MAX(price) FROM books WHERE publisher = '陕西师范大学出版社')
AND publisher != '陕西师范大学出版社';
```
该查询语句的含义是:先在子查询中查出“陕西师范大学出版社”中价格最高的图书,然后在主查询中查出价格高于该书价格、且出版社不是“陕西师范大学出版社”的图书编号、名称和价格。
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 ('计算机科学与技术', '软件工程');
```