SQL学习笔记——Select查询语句
使⽤数据库和表的主要⽬的是存储数据以便在需要时进⾏检索、统计或组织输出。 SELECT 语句,它是 T-SQL 的核⼼。从数据库中检索⾏,并允许从⼀个或多个表中选择⼀个
或多个⾏或列。
虽然 SELECT 语句的完整语法较复杂,但其主要语法格式如下:
[ WITH <common_table_expression>]
SELECT [ ALL | DISTINCT ]
[TOP expression [PERCENT] [ WITH TIES ]
]
< select_list > /*指定要选择的列及其限定*/
[ INTO new_table ] /*INTO⼦句,指定结果存⼊新表*/
[ FROM { <table_source> } [ ,...n ]] /*FROM ⼦句,指定表或视图*/
[ WHERE <search_condition> ] /*WHERE ⼦句,指定查询条件*/
[ GROUP BY [ ALL ] group_by_expression [ ,...n ] ] /*GROUP BY ⼦句,指定分组表达式*/
[ HAVING <search_condition > ] /*HAVING ⼦句,指定分组统计条件*/
[ ORDER BY order_expression [ ASC | DESC ] ] /*ORDER ⼦句,指定排序*/ [;]
参数说明:
ALL:指定在结果集中可以包含重复⾏。ALL 是默认值。
DISTINCT:指定在结果集中只能包含唯⼀⾏。对于 DISTINCT关键字来说,NULL 值是相等的。
TOP expression [ PERCENT ] [ WITH TIES ]5:指⽰只能从查询结果集返回指定的第 ⼀组⾏或指定的百分⽐数⽬的⾏。
expression 可以是指定数⽬或百分⽐数⽬的⾏。
选择列通过 SELECT 语句的<select_list>项组成结果表的列。
语法格式:
<select_list> ::= {
* /*选择当前表或视图的所有列*/
| { table_name | view_name | table_alias}.* /*选择指定的表或视图的所有列*/
| { column_name | [ ] expression |$IDENTITY } /*选择指定的列*/
[ [ AS ] column_alias ] /*AS ⼦句,定义列别名*/
| column_alias = expression /*选择指定列并更改列标题*/ }
[ ,... n ]
参数说明:
:指定返回 FROM ⼦句中的所有表和视图中的所有列。这些列按 FROM⼦句中指定的表或视图顺序返回,并对应于它们在表或视图中的顺序。
table_ name | view_ name | table_alias.* :将*的作⽤域限制为指定的表或视图。
column_ name:要返回的列名。请限定column_name以避免引⽤不明确,例如,当 FROM ⼦句中的两个表包含同名的列时会出现这种情况。例如,AdventureWorks数据库SalesOrderHeader 和 SalesOrderDetail 表中均有名为ModifiedDate的列。如果将这两个表加⼊查询,则可以在选择列表中指定 SalesOrderDetail 项的修改⽇期,即SalesOrderDetail.ModifiedDate。
expression:列名、常量、函数以及由⼀个或多个运算符连接的列名、常量和函数的 任意组合,或者是⼦查询。
$IDENTITY:返回标识列。如果 FROM ⼦句中的多个表内都包含具有IDENTITY 属性的列,则必须使⽤特定的表名限定
IDENT IT Y(如T1.
IDENTITY)。
column_alias:查询结果集内替换列名的可选名。例如,可以为名为quantity 的列指定别名Qty。
代码⽰例`:
--查询学⽣信息表中的所有内容
use DB001
go
select * from Student
--查询表中指定列,如学⽣表中姓名、性别
use DB001
go
select Sname,sex
from student
--查询指定学⽣的信息;再查询所有学⽣信息
select * from student
where Sname ='周梅'
select * from student
定义列别名
当希望查询结果中的某些列在显⽰时使⽤⾃⼰选择的列标题时,可以在列名之后使⽤ AS ⼦句或者“=”来更改查询结果的列标题名。其中column_alias 是指定的列别名。
格式:
1、更改查询结果中的列标题使⽤ column_alias = expression 的形式
2、更改查询结果中的列标题使⽤ expressionas column_alias 的形式
代码⽰例:
--查询成绩名,并将SID⽤‘学号’作别名,Score⽤‘成绩’作别名
use DB001
go
select SID as '学号','成绩'=Score
from SC
替换查询结果中的数据
要替换查询结果中的数据,则要使⽤查询中的 CASE 表达式,
格式为:
CASE
WHEN 条件 1 THEN 表达式 1
WHEN 条件 2 THEN 表达式 2
…
ELSE 表达式
END
代码⽰例
/
*查询SC 表中各同学的学号成绩,并添加等级列对其总学分按以下规则进⾏替换:若学分低于60,替换为“不及格”;若学分在 60 与802之间,替换为“良好”;若学分⼤于 80,替换为“优秀”*/
use DB001
go
select SID as '学号',Score as '成绩',等级=
case
when score<60 then '不及格'
when score>=60 and score<80 then '良好'
else '优秀'
end
from sc
go
计算列值
使⽤ SELECT 对列进⾏查询时,在结果中可以输出对列值计算后的值,即 SELECT ⼦句可使⽤表达式作为结果,
格式为
SELECT expression [ , expression ]
代码⽰例:
--将学⽣的成绩转为学分制,满分为2个学分,输出学号,成绩和学分
use DB001
go
select SID as '学号',score as '成绩',学分=score*0.02
from SC
go
消除结果集中的重复⾏
对表只选择其某些列时,可能会出现重复⾏。可以使⽤ DISTINCT 关键字消除结果集中的重复⾏,
格式是:
SELECT DISTINCT | ALL column_name [ ,column_name…]
关键字 DISTINCT 的含义是对结果集中的重复⾏只选择⼀个,保证⾏的唯⼀性。
代码⽰例:
--查询成绩表中参加考试的学⽣学号(避免重复⾏)
use DB001
go
select distinct SID as '参加考试的学⽣学号'
from SC
限制结果集返回⾏数
如果 SELECT 语句返回的结果集的⾏数⾮常多,可以使⽤ TOP 选项限制其返回的⾏数。
TOP 选项的基本格式为:
[ TOP expression [ PERCENT ] [ WITH TIES ] ]
指⽰只能从查询结果集返回指定的第⼀组⾏或指定的百分⽐数⽬的⾏。expression 可以是指定数⽬或百分⽐数⽬的⾏。若带 PERCENT 关键字,则表⽰返回结果集的前 expression% ⾏。TOP ⼦句可以⽤于SELECT、INSERT、UPDATE 和 DELETE 语句中。
代码⽰例:
--输出成绩表前5个学⽣的学号和成绩
use DB001
go
select top 5 SID as '学号',score as '成绩'
from SC
--输出成绩表前10%个学⽣的学号和成绩
use DB001
go
select top 10 percent SID as '学号',score as '成绩'
from SC
聚合函数
SELECT ⼦句中的表达式中还可以包含所谓的聚合函数。聚合函数常常⽤于对⼀组值进⾏计算,然后返回单个值。聚合函数通常与 GROUP BY ⼦句⼀起使⽤。如果⼀个 SELECT 语句中有⼀个 GROUP BY ⼦句,则这个聚合函数对所有列起作⽤;如果没有,则 SELECT 语句只产⽣⼀⾏作为结果
函数操作
count求组中项数,返回 int 类型整数
sql查询语句实例大全avg求组中值的平均
max求⼤值
min求⼩值
sum返回表达式中所有值的和
stdev返回给定表达式中所有值的统计标准偏差
stdevp返回给定表达式中所有值的填充统计标准偏差
var返回给定表达式中所有值的统计⽅差
varp返回给定表达式中所有值的填充的统计⽅差
补充:
(1)SUM 和 AVG SUM 和 AVG 分别⽤于求表达式中值项的总和与平均值,语法格式为: SUM | AVG ( [ALL | DISTINCT] expression) SUM 和 AVG 忽略 NULL 值。
(2)MAX 和 MIN MAX 和 MIN 分别⽤于求表达式中值项的⼤值与⼩值,语法格式为: MAX | MIN ( [ ALL | DISTINCT ] expression ) MAX 和 MIN 忽略 NULL 值。
(3)COUNT COUNT ⽤于统计组中满⾜条件的⾏数或总⾏数,格式为: COUNT ( { [ ALL | DISTINCT ] expression } | * )
(4) COUNT(*) 不需要任何参数,返回总⾏数,且不论是否包含 NULL 值。
代码实例:
--查询并输出学号为学⽣的总成绩,平均成绩,最⾼成绩和最低成绩和选课的数⽬
use DB001
go
select SID as '学号',sum(score) as '总成绩',avg(score) as '平均成绩',
max(score) as '最⾼成绩',min(score) as 最低成绩,count(CID) as '选课数⽬'
from SC
group by SID
where条件查询⼦句
在 SQL Server 中,选择⾏是通过在 SELECT 语句中 WHERE ⼦句指定选择的条件来实现的。下⾯详细讨论 WHERE ⼦句中查询条件的构成。WHERE ⼦句必须紧跟 FROM ⼦句之后,
基本格式:
WHERE <search_condition>
其中 search_condition 为查询条件。
<search_condition>::=
{ [ NOT ] <precdicate> |
(<search_condition> ) }
[ { AND | OR } [ NOT ]
{ <predicate> | (<search_condition>) } ]
[ ,…n ]
补充: 其中,为判定运算,结果为 TRUE、FALSE 或 UNKNOWN。NOT 表⽰对判定的结果取反,AND⽤于组合两个条件,两个条件都为 TRUE 时值才为 TRUE。OR 也⽤于组合两个条件,两个条件有⼀个条件为 TRUE 时值就为 TRUE。
<predicate>::=
{
xpression { = | < | <= | > |>= | <> | != | !< | !> } expression /*⽐较运算*/
| match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ] /*字符串模式匹配*/
| expression [ NOT ] BETWEEN expression AND expression /*指定范围*/
| expression IS [ NOT ] NULL /*是否空值判断*/
| expression [ NOT ] IN ( subquery |expression [,…n] ) /*IN ⼦句*/
| expression { = | < | <= | > |>= | <> | != | !< | !> } { ALL | SOME | ANY } ( subquery) /*⽐较⼦查询*/
| EXIST ( subquery ) /*EXIST ⼦查询*/
}
补充:
表达式⽐较
⽐较运算符⽤于⽐较两个表达式值,共有 9 个,分别是:=(等于)、<(⼩于)、<=(⼩ 于等于) 、>(⼤于) 、>=(⼤于等于) 、<>(不等于)、!=(不等于) 、!<(不⼩于)、!>(不⼤于)。
⽐较运算的格式为:
expression { = | < | <= | > | >= | <> | != | !<| !> }
expression 其中 expression 是除 text、ntext 和 image 外类型的表达式。当两个表达式值均不为空值(NULL)时,⽐较运算返回逻辑值 TRUE(真)或 FALSE(假)。⽽当两个表达式值中有⼀个为空值或都为空值时,⽐较运算将返回 UNKNOWN
代码⽰例:
-
-查询学号为05的学⽣课程号和成绩
use DB001
go
select SID as '学号',CID as '课程号',Score as '成绩'
from SC
where SID='05'
--查询课程03且成绩不低于85分的学⽣学号,课程号和成绩
use DB001
go
select SID as '学号',CID as '课程号',Score as '成绩'
from SC
where CID='02' and score>=85
模式匹配 LIKE
⽤于指出⼀个字符串是否与指定的字符串相匹配,其运算对象可以是 char、 varchar、text、ntext、datetime 和 smalldatetime 类型的数据,返回逻辑值 TRUE 或 FALSE。
LIKE 谓词表达式的格式为:
match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]
说明:
match_expression:匹配表达式,⼀般为字符串表达式,在查询语句中可以是列名。
pattern:在match_expression 中的搜索模式串。在搜索模式串中可以使⽤通配符,表列出了 LIKE 谓词可以使⽤的通配符及其说明。
通配符列表通 配 符 说 明
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论