【数据库技术】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 #数据查询 #数据库技术基础 #软考备考

相关推荐
滕州市燕猫虎计算机科技工作室个体工商户1 小时前
《Rust程序设计》学习笔记八:结构体
笔记·学习·rust·rust程序设计
唠点键盘之外的2 小时前
26 向量数据库实战:从 0 搭一条能用的检索链路(pgvector + Spring AI)
数据库·人工智能·spring
云和恩墨2 小时前
数据库监控简史:监控不止于告警——从图表大爆发到健康管理闭环
数据库
ly76892 小时前
MongoDB 事务开销实测:快照隔离下的写冲突、重试与分片事务边界
数据库·mongodb·事务·分片集群·快照隔离·写冲突
豆角焖肉2 小时前
Spring AOP 自定义注解实现系统操作日志
数据库·自定义注解·springaop·操作日志·aop 切面
志尊宝2 小时前
Vue3 零基础每日笔记(082):文件上传实战——el-upload 校验、自定义上传、头像预览
前端·javascript·vue.js·笔记·#javascript·#vue.js
金伟API10243 小时前
不会写复杂SQL怎么办?
数据库·sql
后季暖3 小时前
电商问数笔记(2)
笔记
xier_ran4 小时前
【infra之路】AI 编译器学习笔记(二):重拾 C++——移动语义与 LLVM 风格的类型转换
人工智能·笔记·学习
执笔为剑4 小时前
2.1.2-1、V8R3迁移到V8R6-Oracle兼容特性
数据库