考点频率 :★★★★★(下午题必考,选择题常考,SQL查询是数据库部分的绝对核心)
难度 :⭐⭐⭐
建议:重点掌握SELECT语句的基本结构和执行顺序,熟练使用WHERE子句的各类条件
1️⃣ SELECT语句在SQL中的地位
SQL语言中,查询操作 是最常用的操作,占日常数据库操作的80%以上。SELECT语句就是用来执行查询的------它从数据库中检索数据,返回一个结果集。
打个比方 :数据库就像一座图书馆 ,
SELECT语句就是检索系统------你要找书(数据),告诉系统你想要什么(查询条件),系统给你返回结果。
SELECT语句的完整执行顺序(软考常考):
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
这个顺序决定了SQL语句的执行逻辑:先确定数据来源(FROM),再筛选行(WHERE),然后分组(GROUP BY),接着筛选分组(HAVING),再选择列(SELECT),最后排序(ORDER BY)。
2️⃣ SELECT基本语法
2.1 最简单的查询
语法:
sql
SELECT 列名1, 列名2, ...
FROM 表名;
示例:
sql
-- 查询学生的姓名和年龄
SELECT 姓名, 年龄 FROM 学生表;
-- 查询所有列(* 表示所有列)
SELECT * FROM 学生表;
2.2 去除重复行(DISTINCT)
语法:
sql
SELECT DISTINCT 列名 FROM 表名;
示例:
sql
-- 查询所有班级编号(去除重复)
SELECT DISTINCT 班级号 FROM 学生表;
| 未加DISTINCT | 加DISTINCT |
|---|---|
| 101 | 101 |
| 101 | 102 |
| 102 | 103 |
| 102 | |
| 103 |
2.3 列的别名
语法:
sql
SELECT 列名 AS 别名 FROM 表名;
示例:
sql
SELECT 姓名 AS 学生姓名, 年龄 AS 学生年龄 FROM 学生表;
别名常用于:①列名太长需要简化;②计算结果需要命名;③多表连接时区分同名列。
3️⃣ WHERE子句------筛选行
WHERE子句用于筛选满足条件的行(元组)。
3.1 比较运算
| 运算符 | 含义 | 示例 |
|---|---|---|
= |
等于 | WHERE 年龄 = 20 |
<> 或 != |
不等于 | WHERE 年龄 <> 20 |
>、<、>=、<= |
大小比较 | WHERE 年龄 > 20 |
3.2 逻辑运算
| 运算符 | 含义 | 示例 |
|---|---|---|
AND |
与(同时满足) | WHERE 年龄 > 18 AND 性别 = '男' |
OR |
或(满足其一) | WHERE 班级号 = '101' OR 班级号 = '102' |
NOT |
非(取反) | WHERE NOT 班级号 = '101' |
等价写法 :WHERE 班级号 IN ('101', '102') 等价于 WHERE 班级号 = '101' OR 班级号 = '102'
3.3 范围查询
| 运算符 | 含义 | 示例 |
|---|---|---|
BETWEEN ... AND ... |
在某个范围内(包含边界) | WHERE 年龄 BETWEEN 18 AND 22 |
IN (值列表) |
在给定的集合中 | WHERE 班级号 IN ('101', '102', '103') |
LIKE |
模糊匹配(通配符) | WHERE 姓名 LIKE '张%' |
IS NULL |
空值判断 | WHERE 联系电话 IS NULL |
3.4 LIKE通配符
| 通配符 | 含义 | 示例 |
|---|---|---|
% |
匹配任意长度的字符串(包括0个) | '张%' 匹配"张"、"张三"、"张三丰" |
_ |
匹配单个字符 | '张_' 匹配"张三"、"张四",不匹配"张三丰" |
示例:
sql
-- 查询姓张的学生
SELECT * FROM 学生表 WHERE 姓名 LIKE '张%';
-- 查询姓名为两个字的学生
SELECT * FROM 学生表 WHERE 姓名 LIKE '__';
-- 查询电话号码以135开头的学生
SELECT * FROM 学生表 WHERE 电话 LIKE '135%';
4️⃣ ORDER BY------排序
语法:
sql
SELECT 列名 FROM 表名 ORDER BY 列名 [ASC|DESC];
| 关键字 | 含义 |
|---|---|
ASC |
升序(从小到大,默认) |
DESC |
降序(从大到小) |
示例:
sql
-- 按年龄升序排列
SELECT * FROM 学生表 ORDER BY 年龄;
-- 按年龄降序排列
SELECT * FROM 学生表 ORDER BY 年龄 DESC;
-- 多列排序:先按班级号升序,再按年龄降序
SELECT * FROM 学生表 ORDER BY 班级号 ASC, 年龄 DESC;
5️⃣ 聚合函数(常用)
聚合函数对一组值执行计算,返回单个值。
| 函数 | 作用 | 示例 |
|---|---|---|
COUNT(*) |
统计行数(包含NULL) | SELECT COUNT(*) FROM 学生表; |
COUNT(列名) |
统计该列非空值的个数 | SELECT COUNT(电话) FROM 学生表; |
SUM(列名) |
求和 | SELECT SUM(成绩) FROM 选课表; |
AVG(列名) |
求平均值 | SELECT AVG(年龄) FROM 学生表; |
MAX(列名) |
求最大值 | SELECT MAX(成绩) FROM 选课表; |
MIN(列名) |
求最小值 | SELECT MIN(年龄) FROM 学生表; |
6️⃣ SELECT语句执行顺序详解(软考高频考点)
SQL的书写顺序和执行顺序是不同的,这一点经常在选择题中出现。
| 执行顺序 | 关键字 | 作用 |
|---|---|---|
| 1 | FROM |
确定数据来源(表/视图) |
| 2 | WHERE |
筛选行(按条件过滤) |
| 3 | GROUP BY |
分组聚合 |
| 4 | HAVING |
筛选分组(在GROUP BY之后过滤) |
| 5 | SELECT |
选择列、计算表达式 |
| 6 | ORDER BY |
排序输出 |
重要 :
WHERE中不能使用聚合函数作为条件(如WHERE AVG(成绩) > 80是错误的),因为聚合函数要在GROUP BY之后计算。聚合函数只能在HAVING中使用。SELECT中可以使用聚合函数。
7️⃣ 经典例题
例题1:查询"学生"表中所有年龄大于20岁的学生的姓名和班级号,并按年龄降序排列。
解析:
sql
SELECT 姓名, 班级号
FROM 学生表
WHERE 年龄 > 20
ORDER BY 年龄 DESC;
答案:如上。
例题2:查询"选课"表中成绩在80到90分之间的学生学号(不去重),并按成绩降序排列。
解析:
sql
SELECT 学号, 成绩
FROM 选课表
WHERE 成绩 BETWEEN 80 AND 90
ORDER BY 成绩 DESC;
BETWEEN 80 AND 90等价于成绩 >= 80 AND 成绩 <= 90
答案:如上。
例题3 (判断):SQL语句 SELECT * FROM 学生表 WHERE 姓名 LIKE '张_' 会查询到姓名为"张三丰"的学生。( )
解析 :错误。'_' 只能匹配一个 字符,'张_' 匹配"张三"、"张四"等两个字的姓名,不能匹配三个字的"张三丰"。
8️⃣ 记忆口诀
SELECT 选列 FROM 表,WHERE 行条件要写好。
ORDER BY 排顺序,ASC 升 DESC 降。
DISTINCT 去重,LIKE 模糊配上
%和_。执行顺序要记牢:FROM 最先 WHERE 后,SELECT 排在 ORDER BY 前。
9️⃣ 小测验(评论区对答案)
SQL语句
SELECT * FROM 学生表 WHERE 姓名 LIKE '李_' AND 年龄 >= 20的含义是( )。A. 查询所有姓李且年龄大于等于20岁的学生
B. 查询所有姓名中带"李"且年龄大于20岁的学生
C. 查询所有姓李且名字为两个字、年龄大于等于20岁的学生
D. 查询所有名字中第二个字为"李"且年龄大于等于20岁的学生
🔔 本专栏日更,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容
#软考中级 #软件设计师 #SQL #SELECT #数据查询 #数据库技术基础 #软考备考