【数据库技术】SQL数据查询(SELECT基本语法)

考点频率 :★★★★★(下午题必考,选择题常考,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 #数据查询 #数据库技术基础 #软考备考

相关推荐
Made in Haven71228 分钟前
HTML课程笔记补2
前端·笔记·html
程序员黎剑43 分钟前
Redis缓存击穿:热点Key过期打崩数据库的3种解决方案
数据库·redis·缓存
Carl_.Net软开1 小时前
NSSM后台启动influx时序数据库
数据库·时序数据库
IPdodo_1 小时前
静态 IP 访问异常排查:403/429 归因与迁移验收
服务器·网络·数据库·python·网络协议·php·性能测试
DevOpenClub1 小时前
PDF 多格式解析如何避免混用输出:TEXT、HTML、XML 与 TAG 数据契约
xml·前端·数据库·pdf·html
夕除1 小时前
redis--010
笔记·分布式·学习
meilindehuzi_a1 小时前
从域名到数据库:React + Node.js 项目部署全流程与用户访问链路
数据库·react.js·node.js
ouynagda1 小时前
HTTP协议与Socket网络编程笔记
网络·笔记·http
摇滚侠1 小时前
《SpringBoot 3:入门与应用实战》第 10 章 REST 服务请求与调用 Reactor 与 WebFlux 笔记 28
spring boot·笔记·后端