目录
3. 左外联接(LEFT JOIN 或 LEFT OUTER JOIN)
4. 右外联接(RIGHT JOIN 或 RIGHT OUTER JOIN)
5. 全外联接(FULL JOIN 或 FULL OUTER JOIN)
数据查询的语句格式(先大概知道一下要学的整体内容)
SELECT [ALL|DISTINCT] <目标列表达式> [别名], -- 选择列,ALL 所有,DISTINCT 返回唯一记录
[, <目标列表达式> [别名]] … -- 可以选择多个列,并可为每列指定别名
FROM <表名或视图名> [别名], -- 指定数据来源的表或视图,给表/视图起别名
[, <表名或视图名> [别名]] … -- 可从多个表/视图中选择数据,使用逗号分隔
| (<SELECT语句>) [AS] <别名> -- 在 FROM 子句中嵌套其他 SELECT 查询,并为其指定别名
[WHERE <条件表达式>]
-- 可选,用于筛选符合特定条件的记录
[GROUP BY <列名1> [HAVING <条件表达式>]] -- 可选,按指定列进行分组,HAVING 用于对分组后的结果进行筛选
[ORDER BY <列名2> [ASC|DESC]] -- 可选,用于对结果进行排序,ASC 表示升序,DESC 表示降序
LIMIT <行数1> [OFFSET <行数2>]; -- 限制返回的记录数量,OFFSET 指定从哪条记录开始返回
SELECT语句:指定要显示的属性列
FROM子句:指定查询对象(基本表或视图)
WHERE子句:指定查询条件
GROUP BY子句:结果按照<列名1>的值进行分组,该属性列值相等的元组为一个组,通常在每组中作用聚集函数。
HAVING短语:只有满足指定条件的组才予以输出
ORDER BY子句:对查询结果表按<列名1>的值的升序或降序排序
LIMIT子句:限制SELECT语句查询结果的数量为<行数1>行,OFFSET <行数2>,表示在计算<行数1>行前忽略<行数2>行
上面内容会在后文详细讲解
一、单表查询
1. 简单的数据查询
(1)选择表中若干列
检索表中的指定列
SELECT 列名1, 列名2, 列名3 -- 选择指定的列
FROM 表名; -- 从指定的表中查询
检索表中的所有列
SELECT * FROM 表名;
星号(*
)表示选择所有字段
使用计算列
SELECT 列名, 计算表达式 AS 别名 FROM 表名;
在SELECT语句中进行计算并为结果指定一个别名
在
SELECT
子句中,目标列表达式不仅限于列名,还可以是:
算术表达式:比如
列名1 + 列名2
,可以用来进行简单的数学计算。字符串常量:例如,你可以使用字符串直接显示特定信息,如
SELECT 'Hello, World!' AS 问候;
。函数:例如聚合函数
COUNT()
,SUM()
,AVG()
等,可以用于数据汇总。
LOWER()
:字符串函数,接受一个字符串参数并返回该字符串的全部小写形式
GetDate()
获取当前日期和时间的函数
(2)选择表中若干行(元祖)
DISTINCT消除重复行
SELECT DISTINCT 列名1, 列名2, ...
FROM 表名;
如果指定了多个列,只有所有列的组合都是相同的,才会被视为重复。DISTINCT
确保查询结果的唯一性。
SELECT ALL
:这是SQL查询的默认行为,表示查询结果将包括所有行,不会去除重复的记录。
SELECT DISTINCT
:明确要求去除结果中的重复行
TOP n/ TOP n percent限制返回的行数
返回结果集中前 n
行数据
SELECT TOP n 列名1, 列名2, ...
FROM 表名;
返回结果集中前 n
百分比的行数据
SELECT TOP n PERCENT 列名1, 列名2, ...
FROM 表名;
TOP
关键字是能够快速限制结果集的大小,根据需要灵活地获取数据。
ORDER BY
对查询结果排序
SELECT 列名1, 列名2, ...
FROM 表名
ORDER BY 列名1 [ASC|DESC], 列名2 [ASC|DESC], ...;
-
ASC
:按升序排序(默认) -
DESC
:按降序排序
ORDER BY
子句必须在 SELECT
查询的最后部分
查询满足条件的行
WHERE
子句:用于指定条件,从而筛选出符合条件的行
SELECT 列名1, 列名2, ...
FROM 表名
WHERE 条件;
常用的查询条件
查询条件 |
谓词 |
比较 |
=,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比较运算符 |
确定范围 |
BETWEEN AND,NOT BETWEEN AND |
确定集合 |
IN,NOT IN |
字符匹配 |
LIKE,NOT LIKE |
空值 |
IS NULL,IS NOT NULL |
多重条件 (逻辑运算) |
AND,OR,NOT |
比较条件
示例:查询工资大于5000的员工
SELECT *
FROM Employee
WHERE Salary > 5000;
筛选数值范围【BETWEEN ... AND .../NOT BETWEEN ... AND ...】
SELECT 列名1, 列名2, ...
FROM 表名
WHERE 列名 (NOT) BETWEEN 值1 AND 值2;
选择在 (不在)指定范围内的记录,包括边界值
确定集合【IN
/NOT IN】
SELECT 列名1, 列名2, ...
FROM 表名
WHERE 列名 (NOT) IN (值1, 值2, ...);
模式匹配【LIKE/NOT LIKE】
SELECT 列名1, 列名2, ...
FROM 表名
WHERE 列名 (NOT) LIKE '匹配串';
匹配串:用于定义搜索模式的字符串,可以是固定字符串,也可以包含通配符
固定字符串:如
DB_Design
,表示完全匹配这个字符串。含通配符的字符串:如
DB%
或DB_
,表示匹配以DB
开头的任意字符串,或者是DB
后面有一个任意字符的字符串。
通配符
使用换码字符转义通配符
当匹配串中需要包含通配符(如 %
或 _
)作为普通字符时,可以使用换码字符(ESCAPE
)进行转义
示例 :查询以 DB_
开头,且倒数第三个