ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

【SQL Server】查询总结--知识详解与回顾

2020-03-09 12:03:19  阅读:338  来源: 互联网

标签:join classinfo cid Server 详解 studentinfo SQL where select


文章目录

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有