当前位置:   article > 正文

SQL子查询、关联查询

关联查询

1、子查询(SubQuery)

        嵌套在一个SQL语言中的DQL语句,该DQL被称为子查询

        应用场景:

        DQL中使用子查询

                在SELECT字句中,将当前子查询结果作为一个字段展示

                WHERE字句中,将当前子查询结果作为过滤条件使用

        DML中使用:将一个查询结果集用于增删改操作

        子查询分类:

                单行单列子查询,该子查询的结果集只有一个值

                多行多列子查询,该子查询结果集是多个值

                        多行单列子查询是可以检索出若干个值。因为作为过滤条件使用,一般配合:IN,NOT IN使用。因为等于是不能同时等于好几个值的,只能同于其中之一

                多行多列子查询,将该子查询当做一张表使用

                        可以将一个查询结果集当做一张表创建出来

2、关联查询

        联合多张表查询数据,查询结果集中的字段来自与多张表;

        表与表中的记录会产生对应关系,用于我们联合查询。

        2.1 关联关系分类

                一对一:A表的一条记录仅唯一对应B表中的一条记录,反过来B表中的一条记录也仅唯一对应A表中的一条记录。

                一对多:A表中的一条记录对应B表中的多条记录,但是反过来B表中的一条记录仅能唯一对应A表中的一条记录

                多对多:A表中的一条记录能够对应B表中的多条记录;

                                同时B表中的一条就也能对应A表中的多条记录

        2.2连接条件

                在DQL中我们会指定连接条件,用来让数据库在查询中知道两张表中记录与记录的对应关系,从而查询出对应的记录。

                关联查询中连接条件通常不可以忽略或缺失,否则会产生笛卡尔积

语法:     SELECT 字段,...

                FROM 表A,表B[,表C,...]

                WHERE A表与B表的连接条件

                AND [其他表的连接条件]

                AND 过滤条件

注意:连接条件要同时满足,且如果还有过滤条件时,也要与过滤条件同时满足

        2.3N张表关联

                N张表关联查询,至少要有N-1个连接条件

        2.4关联查询与聚合函数

                将关联查询的结果集进行统计

实例:查看工资最高的老师班里的学生共多少人?

        SELECT COUNT(*)

        FROM teacher t,class c,student s

        WHERE t.id=c.teacher_id

        AND s.class_id=c.id

        AND t.salary=(SELECT MAX(salary) FROM teacher)

        2.5多对多关系

                多对多关系:A表与B表双向看待都是一对多,就是多对多关系

                多对多关系需要提供一张关联关系表来维持多对多关系,该表保存着两张产生关系标的外键字段。

查看学习语文的学生都有谁,列出学生姓名、科目名称、学生成绩?

        SELECT s.name,su.name,tss.score

        FROM subject su,student s,t_stu_subject_score tss

        WHERE su.id=tss.subject_id AND s.id=tss.stu_id AND su.name='语文';

2、连接查询

        2.1 内连接

                内连接是关联查询的另一种写法;

                内连接查询只会查询到符合条件得记录,结果和表关联查询是一样的。

           语法:SELECT 子句

                FROM 表A J

                OIN 表B ON A与B的连接条件

                [JOIN 表C ON A与C或B与C的连接条件

                ...

                ]

                WHERE 过滤条件     

         2.2 外连接

                外连接也用于关联查询,特点:可以将不满足连接条件的记录也查询出来

                左外连接(LEFT JOIN):

                        以JOIN左侧为驱动表,该表中所有记录都要体现在结果集中,右侧表不满足连接条件的记录对应的字段全部为NULL

                右外连接(RIGHT JOIN):

                        以JOIN右侧作为驱动表,该表中的记录都要体现在结果集中,左侧表不满足连接条件的字段都补NULL

        2.3 自连接

                自连接是指当前表中的一条记录可以对应自己的多条记录;

                具有相同属性的一组数据之间又存在上下级的树状结构数据。

示例:       

        查看'刘苍松'的下属都有谁?

        SELECT t.name,m.name

        FROM teacher t

        JOIN teacher m ON t.manager=m.id

        WHERE m.name='刘苍松';

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/168778
推荐阅读
相关标签
  

闽ICP备14008679号