【SQL Server】查询总结--知识详解与回顾
作者:互联网
文章目录
- 1、为表起别名as
- 2、查询前n部分数据:top n 列名:表示查看前n行
- 3、排序:order by 列名1 asc(升序)|desc(降序),列名1 asc|desc...
- 4、消除重复行:distinct
- 5、条件查询:写在where后面
- 6、模糊查询:用于处理字符串类型的值,运算符包括:like % _ [] ^
- 7、null的判断:使用is null或is not null,与其它值计算时返回null,排序时null被认为是最小
- 8、连接:join 表名 on 关联条件
- 9、聚合函数:对行数据进行合并
- 10、开窗函数: over()
- 11、分组:group by 列名1,列名2...
1、为表起别名as
select * from classinfo as ui
查询全部列、指定列
为列起别名as
select ui.cid from classinfo ui
2、查询前n部分数据:top n 列名:表示查看前n行
select top 3 * from classinfo--查询前三行所有列
top n percent 列名:表示查看前百分之几的数据
select top 5 percent *from classinfo--查询前百分之五的所有列数据
3、排序:order by 列名1 asc(升序)|desc(降序),列名1 asc|desc…
select * from Userinfo
order by cid desc ,cname desc--先根据cis降序排,再根据cname升序排
4、消除重复行:distinct
select distinct cname from classinfo--消除classinfo里的cname相同的(只是查询时消除,并不是删除数据库里的)
5、条件查询:写在where后面
对行进行筛选,返回bool类型的值,如果某行中的列数据满足条件,则加入结果集,否则不出现在结果集中
比较运算符:=,>,>=,<,<=,!=或<>
select * from classinfo
where cid>3
between … and …表示在一个连续的范围内
select * from classinfo
where cid between 2 and 4
in表示在一个非连续的范围内
select * from classinfo
where cid in(3,5)
逻辑运算符:and,or,not
select * from classinfo
where cid=3 or cid=5
select * from classinfo
where not cid>=2 and cid<=5
6、模糊查询:用于处理字符串类型的值,运算符包括:like % _ [] ^
%若干个
select * from studentinfo
where sphone like '%4%'--电话号中含4
_单个
select * from studentinfo
where sname like '虎_'--虎某某
[]范围
在[]表示一个连续的范围可以使用-
select * from studentinfo
where sphone like '1[3-5]%'--电话号1开头第二个数字时3到5范围内的电话号
%与_写在[]中表示本身的含义
^写在[]内部的开头,表示不使用内部的任何字符
select * from studentinfo
where sphone like '1[^553]%'--电话号1开头接着非553内的电话号
7、null的判断:使用is null或is not null,与其它值计算时返回null,排序时null被认为是最小
select * from studentinfo
where sphone is null--查询电话是空的
8、连接:join 表名 on 关联条件
内连接:inner join,两表中完全匹配的数据
左外连接:left outer join,两表中完全匹配的数据,左表中特有的数据
右外连接:right outer join,两表中完全匹配的数据,右表中特有的数据
完全外连接:full outer join,两表中完全匹配的数据,左表中特有的数据,右表中特有的数据
select *
from studentinfo
inner join classinfo on studentinfo.cid=classinfo.cid
select studentinfo.sname,classinfo.cname
from studentinfo
inner join classinfo on studentinfo.cid=classinfo.cid
select so.sname,co.cname--建议使用别名
from studentinfo as so
inner join classinfo as co on so.cid=co.cid
select so.sname,co.cname
from studentinfo as so
right join classinfo as co on so.cid=co.cid
select so.sname,co.cname
from studentinfo as so
left join classinfo as co on so.cid=co.cid
select *
from studentinfo as so
full join classinfo as co on so.cid=co.cid
多表查询:
select st.sname,cl.cname,sc.score,su.sucourse
from sc
inner join studentinfo as st on sc.cid=st.cid
inner join subjectinfo as su on sc.sid=su.suid
inner join classinfo as cl on st.cid=cl.cid
9、聚合函数:对行数据进行合并
sum,avg,count,max,min
一般是对数字类型的列进行操作
一条查询中可以同时写多个聚合函数,但是不能与普通列混写
聚合中的null问题:不参与计算
select count(*) from studentinfo
select sum(score)
from sc
inner join subjectinfo as su on sc.sid=su.suid
where su.sucourse='语文'
select avg(score)
from sc
inner join subjectinfo as su on sc.sid=su.suid
where su.sucourse='语文'
select max(score)
from sc
inner join subjectinfo as su on sc.sid=su.suid
where su.sucourse='语文'
select min(score)
from sc
inner join subjectinfo as su on sc.sid=su.suid
where su.sucourse='语文'
10、开窗函数: over()
将统计出来的数据分布到原表的每一行中
结合聚合函数、排名函数使用
select sc.*,avg(score) over()
from sc
where sid=1
11、分组:group by 列名1,列名2…
聚合函数一般结合分组使用,进行分组内的数据进行统计
根据指定列进行分组
select COUNT(*)
from studentinfo
group by sgender--计算男女分别总数是多少
select studentinfo.sgender ,studentinfo.cid ,classinfo.cname,COUNT(*)
from studentinfo
inner join classinfo on classinfo.cid=studentinfo.cid
group by studentinfo.sgender,studentinfo.cid,classinfo.cname
--求每班男女人数且显示班级(先分男女,再分班级)
注:select后面只能跟group by后面跟过的
--统计学生编号大于2各班级的各性别的学生人数
select sgender,cid,COUNT(*)
from studentinfo
where sid>2
group by sgender,cid
分组后条件筛选:having …
--统计学生编号大于2各班级的各性别的学生人数大于1的信息
select sgender,cid,COUNT(*)
from studentinfo
where sid>2
group by sgender,cid having count(*)>1
标签:join,classinfo,cid,Server,详解,studentinfo,SQL,where,select 来源: https://blog.csdn.net/qq_44162236/article/details/104749144