1. 概述
单表查询是只对一个数据表进行查询操作,是其他查询的基础;
2. 单表查询命令
查询数据表的 SQL 命令为 SELECT ,语法格式如下:
SELECT [ALL|DISTINCT] <列名> [[AS] <列别名>] [, N]
FROM <表名> [[AS] <表别名>]
[WHERE <条件1>]
[GROUP BY <列名1> [HAVING <条件2>]]
[ORDER BY <列名2> [ASC|DESC]]
命令说明:
SELECT 语句的执行过程为:根据 WHERE 子句的条件从FROM 子句指定的数据表中选取满足“条件 1”的元组,再按照SELECT 指定的列,投影得到所查询的结果表;若有 GROUP BY 子句,则将查询结果按照“列名 1”进行分组,若后面有HAVING 子句,则只输出满足“条件 2”的元组;若有ORDER BY 子句,查询结果还要根据“列名 2”的值进行排序;DISTINCT 关键字表示去掉重复值,当不需要此项操作时可使用 ALL 关键字或省略;- 当查询数据表中全部列时,可在“<列名>”处使用“*”符号;
AS 关键字表示数据表或其中的属性以设置的别名显示,当不需要此项操作时可将其省略;ASC 关键字表示升序,DESC 关键字表示降序,省略时默认为升序;
2. 无条件查询与条件查询
2.1 无条件查询
无条件查询指只包含 SELECT FROM 关键字查询,相当于只对关键做投影操作; **注意:**无条件查询与关系代数中的投影操作有一点不同,投影操作会消去结果中的重复行,而无条件查询时必须加上 SISTINCT 关键字,否则将输出所有元组;
例子:从数据表 B 中查询所有学生的学号、姓名、性别、年龄;
SELECT ID,Name,Sex,Age
from B
查询数据表 N 中的属性 ID,Name,Sex,Age,其中包含了数据表 S 的主码,不需要附加 DISTINCT 关键字啊;
2.2 条件查询
条件查询指使用了 WHERE 子句的查询; WHERE 子句指定的条件通常由 3 部分组成,分别是列名、运算符和常数; 查询条件说明:
- 比较查询
例子:从数据表 B 中查询年龄大于 15 岁的学生
SELECT *
FROM B
WHERE Age>15
在 SELECT 后用“*”表示选数据表B中的所有元素;在 WHERE 子句中使用比较运算符构造查询条件,输出满足条件的元组;
- 多重条件查询
例子:从数据表 O中查询 ID 为 ‘2022090102’ 并成绩高于80分的学生的学号与成绩;
select 课程,ID,成绩
from O
where ID='2022090102' and 成绩>70
AND 关键字可以用来连接两条语句表示并列关系; 注意:AND 关键字的优先级高于OR ,但能用 “()”将部分括起来,改变它们之间的优先级;
- 确定范围查询
BETWEEN AND 表示“包含于······之中”,用来查询属性值在指定范围内的元组;
-
确定结合查询 IN 表示查询属性值属于指定集合的元组; -
字符匹配查询 当查询条件无法确定精确的值时,可使用 LIKE 关键字进行匹配查询; 语法格式如下:<列名> LIKE <字符串常量> <列名> 中指定的列的数据类型必须为字符型;<字符串常量> 中的字符串使用功能通配符时,对数据进行模糊查询;当不使用通配符时,LIKE 相当于“=” ; -
空值查询 不同于零和空表,空值不占用任何存储空间; IS NOT NULL 表示查询某属性不为空的元组;
3. 聚集函数
SQL 中提供的聚集函数增强了期数据查询能力; 注意:
- 使用
COUNT(*) 函数时,无法使用 DISTINCT 关键字消去重复行; - 使用函数查询数据时,若不设置列别名,输出结果的列名将显示为“(无列名)”
4. 分组查询
分组查询是指使用 GROUP BY 子句的查询, GROUP BY 子句表示将查询结果按相同的一个或多个列值进行分组; 以聚集函数为例,若没有使用 GROUP BY 子句,聚集函数将作用于整个数据表,而使用了 GROUP BY 子句中,聚集函数分别作用于每个组; 例子:从数据表 B 中查询 工商的学生人数;
select b,COUNT(ID) as Num
from B
group by b
使用 GROUP BY 子句将差选结果按照属性 b 进行了分组,使用 COUNT 函数可分别计算各组中列值的个数,并用 AS 关键字将它们以列别名为新列名输出查询结果; 提示: 分组查询时,SELECT 语句指定的每一列都应包含在 GROUP BY 子句中,除非对这一列使用聚集函数;因为在使用 GROUP BY 子句对 SELECT 后的多个列中的某一列进行分组时,可能会在其他列出现多个数据共同占用一个单元格的情况,这时 SQL Server 将会给出错误提示;聚集函数正是多个数据转换成单个数据输出的查询方式,所以聚集函数所调用的列可不包含在 GROUP BY 子句中;
5. 排序查询
排序查询,即施使用 ORDER BY 子句查询, ORDER BY 子句表示对查询结果进行排序,施一公你是必须写在其他子句中,排序的方式可以指定为 DESC,ASC或省略; 例子:从数据表 B查询 ID,Name,并安装Age大小降序排序;
select ID,Name,Age as Ti
from B
order by Ti desc
注意: 只有 ORDER BY 子句能调用列的别名;
|