复杂的查询操作

Posted stakes-ds

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了复杂的查询操作相关的知识,希望对你有一定的参考价值。

查询格式:

select <目标列名序列>    ---需要哪些列
from <表名>        ---来自于哪些表
where <行选择条件>    ---根据什么条件
group by <分组依据列>
having <组选择条件>
order by <排序依据列>

连接查询:
关键字:内连接查询、外连接查询、交叉连接查询

1、内连接查询
关键字:from 表1 join 表2 on <连接条件>

SELECT s.sno,sname 姓名,AVG(grade) 平均分 FROM student s JOIN score sc ON s.sno = sc.sno GROUP BY 姓名
//内连接实现显示学生平均分和该同学的名字和学号

SELECT s2.`sdept`,COUNT(s1.`sno`) 男生人数,COUNT(s2.`sno`)女生人数 FROM student s1 JOIN student s2 ON s1.`sdept` = s2.`sdept` WHERE s1.`ssex` = ‘男‘ AND s2.`ssex` = ‘女‘ GROUP BY s2.`sdept`
//显示每个系的系别,男生人数,女生人数和总人数(再想想)

内连接(默认)
关键字:from 表1 [innner] join 表2 on <连接条件>
作用域:如果两个表的相关字段满足连接条件就从两个表中提取相关字段的数据组成新的记录。(满足条件的查询)

自连接:(两张同样的表,取了别名后进行相互的连接)


外连接:左连接,右连接
关键字:from 表1 [left|right] [outer] join 表2 on <连接条件>
作用域:不满足条件的也一并输出,
参考资料:https://www.cnblogs.com/yyjie/p/7788413.html

top 限定结果查询(仅限在SQL server中使用)
关键词:select top n X... from 表 ...

例:select top 3 s.sname,s.sdept,sc.grade from student s join score on s.sno = sc.sno order by sc.grade

子查询

可以运用在select,insert,update,delete.

关键字:
基于集合的子查询:
where 表达式 [not]in(子查询)
先执行子查询后执行主查询
SELECT * FROM student WHERE sno NOT IN (SELECT sno FROM student WHERE sdept = ‘计算机系‘)

以上是关于复杂的查询操作的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 searchkick 进行复杂的逻辑操作查询

Java操作elasticSearch复杂查询以及解析数据

复杂的查询操作

SpringBoot+Querydsl 框架,大大简化复杂查询操作

SpringBoot+Querydsl 框架,大大简化复杂查询操作

SQL编程第三章 复杂一点的查询