内容正文:
专题六 SELECT语句(二)
数据库原理与应用技术-MySQL
专题复习讲练测
河北科学技术出版社
掌握国家标准《机械制图》中有关图幅、比例、字体图线等基本规定。
考纲要求
一
(四)数据查询
4.掌握连接查询:
SELECT <字段名1>[,字段名2,… ] ...FROM <表名1> INNER|LEFT|RIGHT JOIN <表名2> ON 表名1.字段名1 = 表名2.字段名2;
5.掌握子查询;
6.掌握合并查询结果。
知识点梳理
二
子查询
子查询是指在一个查询语句中嵌套另一个查询语句。子查询可以出现在 SELECT、FROM、WHERE 等子句中。
➽
SELECT *
FROM table_name
WHERE column1 IN (SELECT column1 FROM another_table);
查询与某个特定部门的员工工资相同的所有员工
知识点梳理
二
连接查询
连接查询用于从多个表中检索相关的数据,常见的连接类型有内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)。
➽内连接
SELECT table1.column1, table2.column2
FROM table1
INNER JOIN table2
ON table1.common_column = table2.common_column;
查询员工及其所在部门的信息
知识点梳理
二
连接查询
连接查询用于从多个表中检索相关的数据,常见的连接类型有内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)。
➽左连接
SELECT table1.column1, table2.column2
FROM table1
LEFT JOIN table2
ON table1.common_column = table2.common_column;
左连接会返回左表中的所有记录,以及右表中匹配的记录。如果右表中没有匹配的记录,则右表的列值为 NULL。
知识点梳理
二
连接查询
连接查询用于从多个表中检索相关的数据,常见的连接类型有内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)。
➽右连接
SELECT table1.column1, table2.column2
FROM table1
RIGHT JOIN table2
ON table1.common_column = table2.common_column;
右连接与左连接相反,会返回右表中的所有记录,以及左表中匹配的记录。
限时练习
三
1.有 students 表(student_id, class_id)和 classes 表(class_id, class_name),要查询每个班级的学生数量,应使用( )。
A. SELECT classes.class_name, COUNT(students.student_id) FROM students INNER JOIN classes ON students.class_id = classes.class_id GROUP BY classes.class_name;
B. SELECT classes.class_name, COUNT(students.student_id) FROM students LEFT JOIN classes ON students.class_id = classes.class_id GROUP BY classes.class_name;
C. SELECT classes.class_name, COUNT(students.student_id) FROM students RIGHT JOIN classes ON students.class_id = classes.class_id GROUP BY classes.class_name;
D. 以上都不对
答案:A
限时练习
三
2.有 orders 表(order_id, product_id)和 products 表(product_id, product_name),要查询订单数量最多的产品名称,应先进行( )。
A. 内连接,然后按产品名称分组,再统计订单数量
B. 左连接,然后按产品名称分组,再统计订单数量
C. 右连接,然后按产品名称分组,再统计订单数量
D. 全连接,然后按产品名称分组,再统计订单数量
答案:A
限时练习
三
3.内连接只返回两个表中匹配的记录。( )
答案:正确
解析:内连接的特点就是只返回两个表中满足连接条件的匹配记录。
限时练习
三
4.左连接会返回左表的所有记录,以及右表中匹配的记录。( )
答案:正确
解析:这是左连接的基本定义,若右表中没有匹配的记录,右表的列值会显示为 NULL。
限时练习
三
5.当使用左连接查询时,如果右表中没有匹配的记录,查询结果中右表的列值会显示为 NULL。( )
答案:正确
解析:这是左连接的特性,确保左表记录全部展示,右表无匹配时用 NULL 填充。
限时练习
三
6.右连接和左连接只是连接方向不同,本质上是可以相互转换的。( )
答案:正确
解析:交换表的顺序,右连接可以转换为左连接,反之亦然。
限时练习
三
8.有 orders 表(order_id, customer_id, order_date)和 customers 表(customer_id, customer_name),查询 2024 年下单的客户姓名及订单数量,结果按订单数量降序排列。
限时练习
三
答案
SELECT
c.customer_name,
COUNT(o.order_id) AS order_count
FROM orders o JOIN customers c ON o.customer_id = c.customer_id
WHERE
YEAR(o.order_date) = 2024
GROUP BY
c.customer_name
ORDER BY
order_count DESC;
限时练习
三
9.有 students 表(student_id, class_id, score)和 classes 表(class_id, class_name),查询每个班级成绩排名前三的学生姓名和成绩。
限时练习
三
答案
SELECT s1.student_name,s1.score,c.class_name FROM students s1
JOIN classes c ON s1.class_id = c.class_id
WHERE
(
SELECT COUNT(*) FROM students s2 WHERE
s1.class_id = s2.class_id AND s2.score > s1.score
) < 3
ORDER BY
c.class_name, s1.score DESC;
限时练习
三
10.有 customers 表(customer_id, country)和 orders 表(order_id, customer_id, order_amount),查询每个国家的客户总消费金额,只显示总消费金额超过 10000 的国家。
限时练习
三
答案
SELECT c.country,
SUM(o.order_amount) AS total_amount
FROM
customers c
JOIN
orders o ON c.customer_id = o.customer_id
GROUP BY
c.country
HAVING
SUM(o.order_amount) > 10000;
谢谢
$$