内容正文:
专题五 SELECT语句(一)
数据库原理与应用技术-MySQL
专题复习讲练测
河北科学技术出版社
掌握国家标准《机械制图》中有关图幅、比例、字体图线等基本规定。
考纲要求
一
(四)数据查询
1. 掌握基本查询语句SELECT的使用;
2. 掌握单表查询的相关操作:
a.查询所有字段:SELECT * FROM <表名>
b.查询部分字段:SELECT <字段名1>[,字段名2,… ] FROM <表名>
c.按条件查询:SELECT <字段名1>[,字段名2,… ] FROM <表名> WHERE <条件表达式>
3.掌握分组聚合查询:SELECT <字段名1>[,字段名2,… ] FROM <表名> GROUP BY <字段名1>[,<字段名2>…] ORDER BY <字段名1>[,<字段名2>…];
知识点梳理
二
基本语法与核心概念
SELECT 语句是 MySQL 中用于从数据库表中检索数据的核心语句。语法如下:
➽ 1. 基本结构
知识点梳理
二
基本语法与核心概念
select_list:指定要查询的列,可以是单个列、多个列,也可以使用通配符 * 表示查询所有列。
table_name:指定要查询的表名。
WHERE:可选子句,用于筛选满足特定条件的行。
GROUP BY:可选子句,用于对查询结果进行分组。
HAVING:可选子句,用于对分组后的结果进行筛选。
ORDER BY:可选子句,用于对查询结果进行排序。
LIMIT:可选子句,用于限制查询结果的行数。
➽ 1. 基本结构
知识点梳理
二
基本语法与核心概念
SELECT column1, column2
FROM table_name
WHERE column1 > 10
GROUP BY column2
HAVING COUNT(*) > 2
ORDER BY column1 ASC
LIMIT 5;
➽ 1. 基本结构实例
从 table_name 表中选择 column1 和 column2 列,筛选出 column1 大于 10 的行,按照 column2 进行分组,只保留分组后记录数大于 2 的组,然后按照 column1 升序排序,最后只取前 5 条记录。
知识点梳理
二
SELECT 子句
SELECT column1, column2 FROM table_name;
只返回指定列的数据
➽ 1. 选择特定列
从 employees 表中查询员工的姓名和工资
知识点梳理
二
SELECT 子句
使用通配符 * 可以选择表中的所有列:
➽ 2. 选择所有列
SELECT * FROM table_name;
知识点梳理
二
SELECT 子句
为了使查询结果的列名更具可读性,可以使用列别名:
SELECT column1 AS new_name1, column2 AS new_name2 FROM table_name;
➽ 3. 使用列别名
知识点梳理
二
SELECT 子句
可以在 SELECT 子句中进行数学计算或使用函数来生成新的列:
SELECT column1, column2, column1 + column2 AS sum FROM table_name;
➽ 4. 计算列
计算员工的年薪
知识点梳理
二
WHERE 子句
WHERE 子句用于筛选满足特定条件的行,支持各种比较运算符(如 =, >, <, >=, <=, <>)。
SELECT *
FROM table_name
WHERE column1 = 'value';
➽ 1. 基本条件筛选
从 employees 表中查询工资大于5000的员工
知识点梳理
二
WHERE 子句
可以使用逻辑运算符(如 AND, OR, NOT)组合多个条件。
SELECT *
FROM table_name
WHERE column1 > 10 AND column2 < 20;
➽ 2. 逻辑运算符
查询部门为 'Sales' 且工资大于 6000 的员工
知识点梳理
二
WHERE 子句
使用 BETWEEN 关键字进行范围查询。
SELECT *
FROM table_name
WHERE column1 BETWEEN value1 AND value2;
➽ 3. 范围查询
查询入职日期在 2020 - 01 - 01 到 2021 - 12 - 31 之间的员工。
知识点梳理
二
WHERE 子句
使用 IS NULL 和 IS NOT NULL 检查列是否为空。
SELECT *
FROM table_name
WHERE column1 IS NULL;
➽ 4. 空值检查
查询没有经理的员工
知识点梳理
二
WHERE 子句
使用 LIKE 关键字进行模糊查询,支持 %(匹配任意数量的任意字符)和 _(匹配单个任意字符)。
SELECT *
FROM table_name
WHERE column1 LIKE 'value%';
➽ 5. 模糊查询
查询姓氏以 'Smith' 开头的员工
知识点梳理
二
WHERE 子句
使用 IN 操作符检查列的值是否在指定的列表中。
SELECT *
FROM table_name
WHERE column1 IN (value1, value2, value3);
➽ 6. IN 操作符
查询部门为 'Sales'、'Marketing' 或 'Finance' 的员工
知识点梳理
二
GROUP BY 子句
GROUP BY 子句用于将查询结果按照指定的列进行分组,通常与聚合函数(如 COUNT, SUM, AVG, MAX, MIN)一起使用。
SELECT column1, COUNT(*)
FROM table_name
GROUP BY column1;
➽ 1. 分组的概念
统计每个部门的员工数量
知识点梳理
二
GROUP BY 子句
可以按照多个列进行分组。
SELECT column1, column2, COUNT(*)
FROM table_name
GROUP BY column1, column2;
➽ 2. 多列分组
统计每个部门中不同职位的员工数量
知识点梳理
二
HAVING 子句
HAVING 子句用于对分组后的结果进行筛选,而 WHERE 子句用于在分组之前筛选行。HAVING 子句通常与 GROUP BY 子句一起使用,并且可以使用聚合函数。
SELECT column1, COUNT(*)
FROM table_name
GROUP BY column1
HAVING COUNT(*) > 10;
查询员工数量超过 10 人的部门
知识点梳理
二
ORDER BY 子句
ORDER BY 子句用于对查询结果进行排序,可以按照升序(ASC,默认)或降序(DESC)排序。
SELECT *
FROM table_name
ORDER BY column1 ASC;
➽ 1. 排序的基本用法
按照工资降序排列员工信息
知识点梳理
二
ORDER BY 子句
可以按照多个列进行排序,排序优先级从左到右。
SELECT *
FROM table_name
ORDER BY column1 ASC, column2 DESC;
➽ 2. 多列排序
先按照部门升序排序,再按照工资降序排序
知识点梳理
二
LIMIT 子句
LIMIT 子句用于限制查询结果的行数,常用于分页查询。
SELECT *
FROM table_name
LIMIT 10;
➽ 1. 限制结果行数
这个查询只返回前 10 条记录。
知识点梳理
二
LIMIT 子句
可以使用 LIMIT offset, rows 进行分页查询,其中 offset 表示偏移量(即从第几条记录开始),rows 表示要返回的记录数。
SELECT *
FROM table_name
LIMIT 10, 20;
➽ 2. 分页查询
这个查询从第 11 条记录开始,返回 20 条记录。
限时练习
三
1.若要查询 employees 表中 salary 列的值在 3000 到 5000 之间的员工信息,最佳的 SQL 语句是( )
A. SELECT * FROM employees WHERE salary >= 3000 AND salary <= 5000;
B. SELECT * FROM employees WHERE salary BETWEEN 3000 AND 5000;
C. SELECT * FROM employees WHERE salary IN (3000, 5000);
D. SELECT * FROM employees WHERE salary > 3000 OR salary < 5000;
答案:B
限时练习
三
2.若要查询 students 表中 name 列值不重复的学生信息,正确的 SQL 语句是( )
A. SELECT * FROM students GROUP BY name;
B. SELECT DISTINCT name FROM students;
C. SELECT ALL name FROM students;
D. SELECT UNIQUE name FROM students;
答案:B
限时练习
三
3.在单表查询中,WHERE 子句可以放在 GROUP BY 子句之后。( )
答案:错误
解析:在 SQL 查询中,WHERE 子句用于筛选行,应在 GROUP BY 子句之前执行,GROUP BY 是对筛选后的结果进行分组。
限时练习
三
4.在单表查询中,SELECT 子句后面只能跟列名,不能进行计算。( )
答案:错误
解析:SELECT 子句后面可以进行计算,例如 SELECT column1 + column2 AS sum FROM table_name; 可以计算两列的和。
限时练习
三
5.从 products 表中查询价格最高的 5 种产品的名称(product_name)、价格(price)和库存数量(stock_quantity)。
答案
SELECT product_name, price, stock_quantity
FROM products
ORDER BY price DESC
LIMIT 5;
内容小结
四
谢谢
$$