单表查询是只对一个数据表进行查询操作,是其他查询的基础;
查询数据表的 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
关键字表示降序,省略时默认为升序;无条件查询指只包含 SELECT FROM
关键字查询,相当于只对关键做投影操作;
**注意:**无条件查询与关系代数中的投影操作有一点不同,投影操作会消去结果中的重复行,而无条件查询时必须加上 SISTINCT
关键字,否则将输出所有元组;
例子:从数据表 B 中查询所有学生的学号、姓名、性别、年龄;
SELECT ID,Name,Sex,Age
from B
查询数据表 N 中的属性 ID,Name,Sex,Age,其中包含了数据表 S 的主码,不需要附加 DISTINCT
关键字啊;
条件查询指使用了 WHERE
子句的查询; WHERE
子句指定的条件通常由 3 部分组成,分别是列名、运算符和常数;
查询条件说明:
SELECT *
FROM B
WHERE Age>15
在 SELECT
后用“*”表示选数据表B中的所有元素;在 WHERE
子句中使用比较运算符构造查询条件,输出满足条件的元组;
select 课程,ID,成绩
from O
where ID='2022090102' and 成绩>70
AND 关键字可以用来连接两条语句表示并列关系;
注意:AND
关键字的优先级高于OR
,但能用 “()”将部分括起来,改变它们之间的优先级;
BETWEEN AND
表示“包含于······之中”,用来查询属性值在指定范围内的元组;
确定结合查询
IN
表示查询属性值属于指定集合的元组;
字符匹配查询
当查询条件无法确定精确的值时,可使用 LIKE
关键字进行匹配查询;
语法格式如下:<列名> LIKE <字符串常量>
<列名>
中指定的列的数据类型必须为字符型;<字符串常量>
中的字符串使用功能通配符时,对数据进行模糊查询;当不使用通配符时,LIKE
相当于“=”
;
空值查询
不同于零和空表,空值不占用任何存储空间;
IS NOT NULL
表示查询某属性不为空的元组;
COUNT(*)
函数时,无法使用 DISTINCT
关键字消去重复行;分组查询是指使用 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
子句中;
排序查询,即施使用 ORDER BY
子句查询, ORDER BY
子句表示对查询结果进行排序,施一公你是必须写在其他子句中,排序的方式可以指定为 DESC,ASC或省略;
例子:从数据表 B查询 ID,Name,并安装Age大小降序排序;
select ID,Name,Age as Ti
from B
order by Ti desc