时尚领域
新浪微博
微信
当前位置:时尚领域网 » 历史

SQL Server -- 数据查询

数据查询

select 语句的作用是指定查询返回的列

select 字段列表 from 表名

字段名:指定在查询结果集中要包含的字段名。在字段名前可以加上all和distinct参数。 

all:指定在查询结果集中包含所在行,此参数为默认值 

distinct:指定在查询结果集中只能包含不重复的数据行 *:返回指定表中的所在列。 

top表示式:限制查询结果集中返回的数据行的数目。 

常量表达式:使用常量表达式在查询结果集中增加说明列。 

列表达式:使用列表达式在查询结果集中增加计算列。 

字段名as别名:在查询结果集中为列重新指定名称。 

使用聚合函数:在查询结果集中返回数据的统计信息。

查询表中所有列

select * from table

查询表中的某几列

select xx,xx,xx from table

查看最新记录

select top 3 * from table

查询增加计算列

select xx,xx,成绩,成绩*0.7 from table

改变查询结果中的列名

select xx,xx,成绩 as 原成绩,调整成绩 = 成绩*0.7 from table

查看不重复记录

select distinct xx from table

使用where子句选择行

比较运算符

><=>=<=<>或!=!>!<
大于小于等于大于等于小于等于不等于不大于不小于


and:组合两个条件,当两个条件都为真时取值为真 or: 当两个条件中有一个为真时其取值为真 not:对指定的条件取反

select * from table where 成绩>= 70 and 成绩<=90

范围条件查询

between ... and ...

select xx from table xx between 某条件 and 至某条件

模糊匹配条件查询

% 代表任意长度的字符串 [] 指定某个字符的取值范围 [^] 指定某个字符要排除的取值范围 _ 代表任意一个字符

①所有姓张的学生 ②电话号码尾数为三的学生 ③学号尾数不为 4,5,6的学生

select * from table where 姓名 like '张%'

select * from table where 联系电话 like '%3'

select * from table where 学号 like '%[^456]'
select * from table where 学号 not like '%[456]'

列表条件查询

查某区间的某些值,使用in

select * from table where 课程号 in ('105','103')

使用空值查询

select 字段列表 from table where 列名is [not] null

为数据源指定别名

select * from table alias

使用order by 子句排序查询

asc:表示按升序排列,为默认值 desc:表示按降序排列 按一个字段排序

select * from table order by 姓名 desc

select xx1,xx2,xx3 from table order by 3这里的3是指xx3

按多个字段排序

select 学号,课程号,成绩 from table order by 2,3 desc

使用into子句保存查询

select 字段列表 into 新表名 from 表名

汇总查询

聚合函数汇总

select sun(成绩) as 总分 from tableselect avg(成绩) as 平均分 from table

select max(成绩) as 最高分 from tableselect min(成绩) as 最低分 from tableselect count(学号) from table或 select count(*) from table

group by 分类汇总

语法:select 字段列表 from 表名group by 列名having 逻辑表达式

按一个字段分组

select 课程号,avg(成绩) as 平均分 from table group by 课程号

按多个字段分组

select 专业名,性别,count(性别) as 人数 from table 
group by 专业名,性别 group by 专业名

对分组汇总结果进行筛选

select 专业名,性别,count(性别) as 人数 from table
group by 专业名,性别 having count(性别)>2统计各专业男女生的人数超过2人的信息
  • 当group by子句、having子句和where 子句同时存在时,其执行顺序为先where,后group by,再having。

  • having和where的区别:having 子句中可以使用聚合函数,而where子句则不能。

连接查询

内连接

ANSI连接语法select 列表名 from 表名1 join 表名2on 连接条件 where 查询条件
SQL Server 连接语法
select 列名表 from 表名1 where
ANSI语法
select table.xx,xx 
from table inner join table1 on table.xx = table1.xx where 成绩<60SQL Server语法
select table.xx,xx from table,table1 
where table.xx = table1.xx and 成绩 < 60

外连接 左外连接

select table.xx,xx,xx 
from table left outer join table1 
on table.xx = table1.xx

右外连接

select table.xx,xx,xx 
from table right outer join table1 
on table.xx = table1.xx where ..

全外连接

select table.xx,xx,xx 
from table full outer join table1 
on table.xx = table1.xx

子查询语法

select xx,xx from table A 
where (select avg(成绩) from table1 B where A.xx = B.xx) < 60

all、any关键字进行子查询

any 表示在进行比较运算时,只要子查询中有一行数据能使结果为真,则where子句的条件为真。 表达式 <any(7,8,9) 与 <9 等价 表达式 >any(7,8,9) 与 >7 等价。

查询有不及格学生的课程的授课老师

select distinct 授课老师 from table 
where 课程号=any(select 课程号 from table where 成绩<60)

all 表示在进行比较运算时,要求子查询中的所有行数据都使结果为真,则where条件才为真。 表达式 <=all(7,8,9) 与 <=7 等价 表达式 >=all(7,8,9) 与 >=9 等价。

查询每门课程的最低分

select * from table A 
where 成绩<=all(select 成绩 from table B where A.xx=B.xx)

in 关键字进行子查询

如果子查询返回的是单列多个值,还可以使用in运算符进行比较,如果比较结果为真,则显示外部查询的结果,否则不显示。not in 作用刚好相反

select distinct 授课老师 from table 
where 课程号 in(select 课程号 from