sqlserver查询语句SELECT

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;

 

 

posted @ 2022-11-03 09:54  link-零  阅读(1038)  评论(0编辑  收藏  举报