大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说SQL 语句解析「建议收藏」,希望您对编程的造诣更进一步.
查询语句
1.基础查询:
SELECT * FROM 表
解析:此语句会将表中所有的字段查询出来,SQL执行的顺序:FROM 表 (找到表)=>SELECT * (查询所有字段*代表所有字段)
SELECT ID,NAME FROM 表
解析:此语句会将表中所有的字段查询出来,SQL执行的顺序:FROM 表 (找到表)=>SELECT ID,NAME (查询 ID和NAME字段)
2.带条件的查询
SELECT * FROM 表 WHERE ID=1
解析:此语句找到表中ID字段等于1的数据
SELECT * FROM 表 WHERE ID>1
解析:此语句找到表中ID字段大于1的数据
SELECT * FROM 表 WHERE ID<1
解析:此语句找到表中ID字段小于1的数据
SELECT * FROM 表 WHERE ID IN (1,2,3)
解析:此语句找到表中ID字段等于1或者2或者3的数据
SELECT * FROM 表 WHERE ID NOT IN (1,2,3)
解析:此语句找到表中ID字段不等于1或者2或者3的数据
SELECT * FROM 表 WHERE NAME LIKE "%内容%"
解析:此语句找到表中NAME字段出现内容数据,这个%代表任意内容,放在前面代表前面可以出现或者不出现任意内容,比如:
NAME LIKE “%内容%”,NAME中的数据是“这个内容是123” 他找到了内容就匹配了,
如果是NAME LIKE “内容%” 那就只能找内容开头的比如:NAME中的数据是“内容是123”,他就匹配了,
如果是NAME LIKE “%内容” 那就只能找内容结尾的比如:NAME中的数据是“这个内容”,他就匹配了
SELECT * FROM 表 WHERE ID BETWEEN 1 AND 10
解析:此语句找到表中ID字段1–10的内容,BETWEEN 是范围 1到10范围的数据 一般用于数据取范围
3.AND和OR
在我们查询的过程中有时候不仅仅只有一个调整 那么上述的条件都可以通过AND或者OR组合起来,如:
SELECT * FROM 表 WHERE NAME LIKE "%内容%" AND ID BETWEEN 1 AND 10
解析:AND 是且的意思 代表此查询既要满足NAME LIKE “%内容%” 又要满足ID BETWEEN 1 AND 10
SELECT * FROM 表 WHERE NAME LIKE "%内容%" OR ID BETWEEN 1 AND 10
解析:OR是或的意思 代表此查询只要满足NAME LIKE “%内容%” 或者ID BETWEEN 1 AND 10 其中一个就行
SELECT * FROM 表 WHERE (NAME LIKE "%内容%" OR NAME LIKE "%123%" ) AND ID BETWEEN 1 AND 10
解析:AND 和OR也可以搭配使用,此语句代表除了满足了ID BETWEEN 1 AND 10 还要满足 NAME LIKE “%内容%” 和 NAME LIKE “%123%” 其中一个
4.多表联查
多表联查分为三类:内连接(inner join )、左连接(left join)、右连接(right join )
4.1内连接(inner join 、join )
SELECT * FROM 表A as a inner join 表B as b ON a.连接字段=b.连接字段
解析:inner join 和ON 是内连接的关键词,内连接是取得表A和表B能通过连接字段关联起来的数据。
连接字段可以有多个,用and或者or 关联 如:ON a.连接字段1=b.连接字段1 and a.连接字段2=b.连接字段2 or a.连接字段3=b.连接字段3
PS: as 是给表A,表B取个别名的方便ON关键词后面指定那张表的连接字段,也可以不用as,直接表A.连接字段,如:
SELECT * FROM 表A inner join 表B ON 表A.连接字段=表B.连接字段
示例:学生表student
课程表Course
select* from Student s inner join Course c ON s.Id=c.StudentId
通过student表的id和Course表的StudentId 取到了能关联的张三李四王五的记录、赵六关联不上所以没有记录
4.2左连接(left join)
SELECT * FROM 表A as a left join 表B as b ON a.连接字段=b.连接字段
解析:left join和ON 是左连接的关键词,左连接是以左边表A为主表,表B为子表,先查询出表A中的数据,然后关联表B如果关联上了就将数据查询出来,如果表B中没有关联上数据则对应字段为null。
示例:学生表student
课程表Course
select* from Student s left join Course c ON s.Id=c.StudentId
通过student表的id和Course表的StudentId 取到了能关联的张三李四王五的记录、赵六关联不上所以Course表对应的记录为null
4.3右连接(right join)
SELECT * FROM 表A as a right join 表B as b ON a.连接字段=b.连接字段
解析:right join和ON 是右连接的关键词,右连接是以右边表B为主表,表A为子表,先查询出表B中的数据,然后关联表A如果关联上了就将数据查询出来,如果表A中没有关联上数据则对应字段为null。
示例:学生表student
课程表Course
select* from Student s right join Course c ON s.Id=c.StudentId
这里之所以数据和内连接(inner join )数据一致,是因为右边表B所有的数据都能关联到左边,如果将student表放置在右边(Course c right join Student s)则和左连接一致
4.4三个表以上连接查询
SELECT * FROM 表A as a right join 表B as b ON a.连接字段=b.连接字段 INNER JOIN 表C as c ON c.连接字段=a.连接字段
4.5连接查询如果待条件语句:
SELECT * FROM 表A as a right join 表B as b ON a.连接字段=b.连接字段 WHERE a.条件字段=条件
5.排序(order by)
5.1单字段排序
SELECT * FROM 表 order by id asc SELECT * FROM 表 order by id
解析:上述2个语法效果一致,order by 和asc 是排序的关键字,代表着以ID字段正序(数字从小到大,a-z)排序
PS:第二条是简写语法,默认排序是正序所以可以不写asc
SELECT * FROM 表 order by id asc
解析:order by 和desc 是排序的关键字,代表着以ID字段倒序(数字从大到小,z-a)排序
5.1多字段字段排序
SELECT * FROM 表 order by id asc,Name desc SELECT * FROM 表 order by id,Name desc
解析:上述2个语法效果一致,首先我们以ID 进行正序排列,如果出现ID 相同的情况如:三个ID 为1,那么这三条数据将以Name 倒叙排列:
示例:课程表Course
select * from Course order by StudentId desc,CourseName
先以studentId 字段倒叙排列,如果studentId相同,则以CourseName字段正序排列
6.分组(group by)
group_by的意思是根据by对数据按照对应字段进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。
select 查询字段 from 表名 group by 分组字段
解析:简单点来说就是以 “分组字段” 为依据进行聚合操作,比如:很多门课和很多个学生,你如果想取得每个学生上了多少门客,那么我就以每个学生分组 ,来求课程数
示例:课程表Course
select StudentId,Count(*)CourseNumber from Course GROUP BY StudentId
解析:首先我以学生ID 进行的分组,那么所有学生ID相同的数据都是一个组,然后我在组内进行取行数【count(*)】,然后的给个别名CourseNumber
这里要注意使用使用了group by 就不能用*,只能使用group by的字段,因为select的语句执行的先后顺序是先group by 再select ,这个时候其实数据已经分组了,所以你的“查询字段”里面只能出现【分组字段】和【分组聚合函数】
select 字段 from 表名 where 过滤条件 group by 字段 having 过滤条件
解析:having是分组之后再进行条件筛选的关键词,和where不同的是 where条件在分组之前执行和having条件在分组之后执行
7.常用聚合函数介绍
7.1求和 sum()
select sum(求和字段) from 表名 where 条件 select 分组字段,sum(求和字段) from 表名 where 条件 group by 分组字段
7.2平均值 avg()
select avg(求平均值字段) from 表名 where 条件 select 分组字段,avg(求平均值字段) from 表名 where 条件 group by 分组字段
7.3个数统计 count()
select count( ) from 表名 --包括空值 select count(*) from 表名 --不包括空值 select 分组字段,count(*) from 表名 where 条件 group by 分组字段
7.4最大值 max()
select max(取最大值字段) from 表名 select 分组字段,max(取最大值字段) from 表名 where 条件 group by 分组字段
7.5最小值min()
select min(取最小值字段) from 表名 select 分组字段,min(取最小值字段) from 表名 where 条件 group by 分组字段
8.查询去重
9.高级开窗函数row_number() over()和row_number() over(partition by)
10.临时表
新增
修改
删除
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6169.html