SQL Server 数据库之单表查询

单表查询

  • 1. 概述
  • 2. 单表查询命令
  • 2. 无条件查询与条件查询
    • 2.1 无条件查询
    • 2.2 条件查询
  • 3. 聚集函数
  • 4. 分组查询
  • 5. 排序查询

1. 概述

单表查询是只对一个数据表进行查询操作,是其他查询的基础;

2. 单表查询命令

查询数据表的 SQL 命令为 SELECT,语法格式如下:

SELECT [ALL|DISTINCT] <列名> [[AS] <列别名>] [, N]
FROM <表名> [[AS] <表别名>]
[WHERE <条件1>]
[GROUP BY <列名1> [HAVING <条件2>]]
[ORDER BY <列名2> [ASC|DESC]]

命令说明:

  1. SELECT 语句的执行过程为:根据 WHERE子句的条件从FROM子句指定的数据表中选取满足“条件 1”的元组,再按照SELECT 指定的列,投影得到所查询的结果表;若有 GROUP BY 子句,则将查询结果按照“列名 1”进行分组,若后面有HAVING 子句,则只输出满足“条件 2”的元组;若有ORDER BY子句,查询结果还要根据“列名 2”的值进行排序;
  2. DISTINCT 关键字表示去掉重复值,当不需要此项操作时可使用 ALL关键字或省略;
  3. 当查询数据表中全部列时,可在“<列名>”处使用“*”符号;
  4. AS 关键字表示数据表或其中的属性以设置的别名显示,当不需要此项操作时可将其省略;
  5. ASC 关键字表示升序,DESC关键字表示降序,省略时默认为升序;

2. 无条件查询与条件查询

2.1 无条件查询

无条件查询指只包含 SELECT FROM关键字查询,相当于只对关键做投影操作;
**注意:**无条件查询与关系代数中的投影操作有一点不同,投影操作会消去结果中的重复行,而无条件查询时必须加上 SISTINCT 关键字,否则将输出所有元组;

例子:从数据表 B 中查询所有学生的学号、姓名、性别、年龄;

SELECT ID,Name,Sex,Age
from B

SQL Server 数据库之单表查询_第1张图片查询数据表 N 中的属性 ID,Name,Sex,Age,其中包含了数据表 S 的主码,不需要附加 DISTINCT
关键字啊;

2.2 条件查询

条件查询指使用了 WHERE子句的查询; WHERE子句指定的条件通常由 3 部分组成,分别是列名、运算符和常数;
SQL Server 数据库之单表查询_第2张图片
查询条件说明:

  1. 比较查询
    例子:从数据表 B 中查询年龄大于 15 岁的学生
SELECT *
FROM B
WHERE Age>15

SQL Server 数据库之单表查询_第3张图片
SELECT后用“*”表示选数据表B中的所有元素;在 WHERE子句中使用比较运算符构造查询条件,输出满足条件的元组;

  1. 多重条件查询
    例子:从数据表 O中查询 ID 为 ‘2022090102’ 并成绩高于80分的学生的学号与成绩;
select 课程,ID,成绩
from O
where ID='2022090102' and 成绩>70

SQL Server 数据库之单表查询_第4张图片

AND 关键字可以用来连接两条语句表示并列关系;
注意:AND关键字的优先级高于OR,但能用 “()”将部分括起来,改变它们之间的优先级;

  1. 确定范围查询

BETWEEN AND表示“包含于······之中”,用来查询属性值在指定范围内的元组;

  1. 确定结合查询
    IN表示查询属性值属于指定集合的元组;

  2. 字符匹配查询
    当查询条件无法确定精确的值时,可使用 LIKE关键字进行匹配查询;
    语法格式如下:<列名> LIKE <字符串常量>
    <列名> 中指定的列的数据类型必须为字符型;<字符串常量>中的字符串使用功能通配符时,对数据进行模糊查询;当不使用通配符时,LIKE相当于“=”SQL Server 数据库之单表查询_第5张图片

  3. 空值查询
    不同于零和空表,空值不占用任何存储空间;
    IS NOT NULL 表示查询某属性不为空的元组;

3. 聚集函数

SQL 中提供的聚集函数增强了期数据查询能力;
SQL Server 数据库之单表查询_第6张图片
注意:

  1. 使用 COUNT(*)函数时,无法使用 DISTINCT关键字消去重复行;
  2. 使用函数查询数据时,若不设置列别名,输出结果的列名将显示为“(无列名)”

4. 分组查询

分组查询是指使用 GROUP BY子句的查询, GROUP BY子句表示将查询结果按相同的一个或多个列值进行分组;
以聚集函数为例,若没有使用 GROUP BY子句,聚集函数将作用于整个数据表,而使用了 GROUP BY子句中,聚集函数分别作用于每个组;
例子:从数据表 B 中查询 工商的学生人数;

select b,COUNT(ID) as Num
from B
group by b 

SQL Server 数据库之单表查询_第7张图片
使用 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

SQL Server 数据库之单表查询_第8张图片
注意: 只有 ORDER BY子句能调用列的别名;

你可能感兴趣的:(SQL,server,数据库,sql,sqlserver)