SELECT查询语句
数据查询是数据库的核心操作,其功能是指根据用户的需要从数据库中提取所需数据,通过SQL的数据操纵语言的SELECT语句可以实现数据库数据的查询。
SELECT语句是SQL中用途最广泛的一条语句,具有灵活的使用方式和丰富的功能。
从指定的基本表或视图中,选择满足条件的元组数据,并对它们进行分组、统计、排序和投影,形成查询结果集。
说明:
SELECT和FROM语句为必选子句,而其他子句为可选子句。INTO <新表>用于指定使用结果集来创建新表,<新表>指定新表的名称。
SELECT语法格式:
一个完整的SELECT语句包括SELECT、FROM、WHERE、GROUP BY和ORDER BY子句,SELECT语句具有数据查询、统计、分组和排序的功能。它的语法及各子句的功能如下。
SELECT [ALL︱DISTINCT][TOP n][<目标字段表达式>[,…n]]
[INTO <新表>]
FROM <表名或视图名>[,<表名或视图名>[…n]]
WHERE <条件表达式>]
GROUP BY <字段名l>[HAVING <条件表达式>]]
ORDER BY <字段名2>[ASC︱DESC]];
功能:
从指定的基本表或视图中,选择满足条件的元组数据,并对它们进行分组、统计、排序和投影,形成查询结果集。
说明:
SELECT和FROM语句为必选子句,而其他子句为可选子句,根据要求选用。
INTO <新表>用于指定使用结果集来创建新表,也即重新创建一张新表,新表的内容从SELECT语句结果组,<新表>指定新表的名称。
SELECT语句的执行
在SQL Server2016中,通过使用SSMS提供的查询编辑器,可以编辑和运行查询代码。
SELECT基本子句用于指定返回数据表中的简单列值,
其语法格式如下:
SELECT [ALL︱DISTINCT][TOP n][<目标字段表达式>[,…n]]
作用:
该子句用于指明查询结果集的目标字段,<目标字段表达式>是指查询结果集中包含的字段名,可以是直接从基本表或视图中投影得到的字段,也可以是与字段相关的表达式或数据统计的函数表达式,目标字段还可以是常量。其中:
-
DISTINCT说明要去掉重复的元组
-
ALL表示所有满足条件的元组
-
TOP 表示只显示结果集的前多少行,n是对行数的说明。
-
省略<目标字段表达式>表示结果集中包含<表名或视图名>中的所有字段,此时<目标字段表达式>使用“*”代替。
如果目标字段中使用了两个基本表或与视图中相同的字段名,要在字段名前加上表名限定,即使用“<表名>.<字段名>”表示。
消除取值重复的行
在上图结果中,我们看到一个学生有几门功课的成绩,如果我们仅仅想看到某个学生是否参加考试,只需要查看学号信息,就可以使用消除重复行的功能。
【例】查询“成绩”表中的学号信息。
USE Students;
SELECT DISTINCT 学号FROM 成绩;
GO
限制返回行数
如果一个表中有大量的数据,而用户仅仅需要前面部分数据,这时可以通过top n关键字查询起那面n条记录,或使用n percent查询前面n%条记录。
【例】查询系部表前4条记录
USE Students;
SELECT TOP 4 * FROM 系部;
GO
在SELECT语法中,只要SELECT子句需要查询列,就必须使用FROM子句指定将要查询的单个或多个表,指定数据来源。
SELECT语句要查询的数据源还可以是视图,视图相当于临时的表
FROM子句语法:
FROM {表名|视图名} [……n]
注意:
1、 当有多个数据源(表或视图),使用“ , ”分隔
2、 数据源可以使用别名,即数据源名 AS 别名
如果需要获得满足一定条件的特定记录时,可以通过where子句设定条件值,限制返回结果。Where子句语法格式如下:
Where 条件
其中条件的设置比较灵活,可以使用的条件包括比较运算、逻辑运算、范围、模糊匹配以及未知值。下表是条件表达式类型。
关系运算
【例】查询成绩表中学号为2012180264的学生的成绩。
执行结果如下:
注意:引用数值类型是CHAR、VARCHAR、TEXT、DATATIME、SMALLDATATIME列的值时,需要使用单引号括住。因为他们是字符(字符串)
【例】在学生表中查询姓名为‘朱德豪’的学生。
use Student
SELECT * FROM 学生 WHERE 姓名 = "朱德豪"
执行结果如下:
使用逻辑表达式
多重条件查询时,可以使用逻辑运算符AND、OR、NOT连接多个查询条件
【例】在成绩表中查询期末成绩和平时成绩都大于80的学生。
执行结果如下。
字符串比较(模糊匹配)
在进行数据查询时,有时候需要使用模糊查询,也就是查找数据库中与用户输入关键字相近或部分匹配的记录。语法格式是:
表达式 [NOT]LIKE <模糊字符串>
其中<模糊字符串>可以包含表所示的通配符
【例】在课程表中查询以基础结尾的课程名称。
执行结果如下:
搜索范围[NOT]BETWEEN …….AND
使用关键字[NOT]BETWEEN AND表示查询结果条件介于两个值之间。
【例】查询成绩表中期末成绩在90与100 之间的学生。
执行代码结果如下。
使用[NOT]IN关键字
IN的引入是为了更方便的限制检索数据的检索范围,通BETWEEN关键字类似。使用IN 可以通过跟简洁的语句实现复杂的查询。IN关键字语法如下:
表达式 [NOT] IN(值1、值2、……..值n),表示表达式的值在(或不在)列出的值范围内。
【例】在成绩表中查询期末成绩在60、70、80、90、100取值的学生。
聚合函数
SQL Serer2016提供了许多聚合函数运算,运算的结果可以作为新列出现在结果集中。聚合函数可以增强数据检索功能。
在聚合运算的表达式中,可以包括列名、常量以及算数运算符连接的函数。主要的函数有如表所示:
函数名 |
函数功能 |
SUM (DISTINCT | ALL) <列名> |
返回选取结果集所有值的和 |
MAX(DISTINCT | ALL) <列名> |
返回选取结果集中所有值的最大值 |
MIN(DISTINCT | ALL) <列名> |
返回选取结果集中所有值的最小值 |
AVG(DISTINCT | ALL) <列名> |
返回选取结果集中所有值的平均值 |
COUNT(DISTINCT | ALL| *) |
返回选取结果集中行的数目 ,*代表计算所有行的数量,空行也需要计算。 |
其中:DISTINCT表示在计算时不要重复计算,默认是计算所有的(ALL)值。
【例】查询系部的总数。
USE Students;
SELECT count(*) AS 系部总数 FROM 系部;
GO
【例】查询成绩表中期末成绩的最高分和最低分。
USE Students;
SELECT MAX(期末成绩) AS 最高,MIN(期末成绩) AS 最低 FROM 成绩;
GO
GROUP BY子句
GROUP BY 子句用来对查询的结果进行分组,在使用聚合函数查询的时候,结果集是所有行数据的计算结果,如果需要对某一列或多个列的值进行分组,每一组生成一条结果集记录,需要使用GROUP BY子句。
其语法格式如下:
GROUP BY [ALL]列名列表
[WITH{CUBE | ROLLUP}]
[HAVING 分组后的筛选条件表达式]
说明:
-
“GROUP BY 列名”按指定的字段进行分组,字段值相同的记录放在一组,每组经汇总后只生产一条记录;
-
HAVING的筛选是对经过分组后的结果集进行筛选,而不是对原始表筛选;
-
SELECT后的字段列表必须是聚合函数或GROUP BY子句中的列名。
-
WITH CUBE/ROLLUP表示除了GROUP BY分组的行以外,还包含汇总行。在查询结果内返回每个组和组合的汇总行。
【例】统计学生表中每个班级的学生人数。
USE Students;
SELECT 班级代码,count(*) AS 人数 FROM 学生 GROUP BY 班级代码;
GO
【例】查询成绩表中期末成绩大于70的学生人数超过50人的课程。
USE Students;
SELECT 课程号,COUNT(*) AS 人数 FROM 成绩 WHERE 期末成绩>=70 GROUP BY 课程号 HAVING COUNT(*)>=50 ;
GO
ORDER BY 字句
数据查询过程中,有时需要把查询结果按照一定的顺序排列。使用ORDER BY 子句能够使查询结果的某些列按照一定的方式进行排序(升序或降序)输出。其子句的语法格式是:
ORDER BY 列名称表 [ASC |DESC]
其中:
1)、列名称表指定需要排序的列,可以是一列,也可以是多列。排序顺序是按照第一列开始排序,如果该列有重复值得时候,按照第二列的顺序排列,一次类推。
2)、ASC: 指定查询结果按照升序方式排列。如果没有指定排序方式,默认就是升序。
3)、DESC:排序结果按照降序方式排列。
【例】查询成绩表中的期末成绩,按照降序排列结果。
执行结果如下。
注意:在上面排序语句中第一排序是学号,默认是升序,第二排序是期末层级,排序顺序是降序。
INTO子句保存查询
在实际应用中,需要将查询的结果保存到一个新表中。新表的列由SELECT子句中指定的列构成。通过INTO子句实现新表的生成。INTO子句的语法格式如下:
INTO 新表名
【例】把学生表中把班级为rj1201的学生选择出来,生成rj1201表。
执行完代码后,在结果栏中会出现受影响的行数信息,新表rj1201随之产生,使用SELECT语句可以查询rj1201新表的内容。
执行select语句查询新表内容
select * from rj1201;
标签:语句,结果,sqlserver,查询,表达式,子句,SELECT From: https://www.cnblogs.com/e-link/p/16853461.html