数据库MySQL——基础篇四

四、多表查询
1、多表关系和查询概述

1.1、多表关系

概述:一对多(多对一),多对多,一对一

(1)一对多(多对一)

        案例:部门和员工关系

        关系:一个部门对应多个员工,一个员工对于一个部门

        实现:在多的一方建立外键,指向一的一方的主键

(2)多对多

        案例:学生和课程的关系

        关系:一个学生可以选修多门课程,一门课程也可以供多名学生选择

        实现:建立第三张中间表,中间表至少包含两个外键,反别关联两方主键

1.2、多表查询概述

        概述:指从多张表中查询数据

        笛卡尔积:笛卡尔乘积是指数学中,两个集合A和集合B的所有组合情况

        (多表查询时,需要消除无效的笛卡尔积)

        多表查询分类

                连接查询

                        内连接:相当于查询AB交集部分数据

                        外连接:

                                左外连接:查询左表所有数据,以及两张表交集部分数据。

                                右外连接:查询右表所有数据,以及两张表交集部分数据。

                                自连接:当前表与自身的连接查询,以及两张表交集部分数据。

                子查询

2、连接查询

2.1、内连接

        内连接查询语法

                隐式内连接:SELECT 字段列表 FROM 表1,表2 WHERE 条件...;

                显式内连接:SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件...;

                (内连接查询的是两张表交集的部分)

2.2、外连接

        外连接查询语法

                左外连接:SELECT 字段列表 FROM 表1 LEFT [OUTER] IN 表2 ON 条件...;

                相当于查询表1(左表)的所有数据包含表2和表1交集部分的数据

                右外连接: SELECT 字段列表 FORM 表1 RIGHT [OUTER] JOIN 表2 ON 条件...;

                相当于查询表2(右表)的所有数据包含表1和表2交集部分的数据

2.3、自查询

        自连接查询语法:SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件...;

                自连接查询,可以是内连接查询,也可以是外连接查询

3、联合查询-union,union all

        对于union查询,就是把多次查询的结果合起来,形成一个新的查询结果集。

        SELECT 字段列表 FROM 表A...

        UNION [ALL]

        SELSECT 字段列表 FROM 表B;

        对于联合查询的多张表的列数必须保存一致,字段类型也需要保持一致;

        union all会将全部的数据直接合并在一起,union会对合并之后的数据去重。

4、子查询

4.1、概述

        概念:SQL语句中嵌套SELECT语句,称为嵌套查询,又称为子查询

        SELECT * FROM t1 WHERE column 1 = (SELECT column 1 FROM t2);

        子查询外部的语句可以是INSERT/UPDATE/DELETE/SELECT的任何一个。

根据子查询结果不同,分为:

        标量子查询(子查询结果为单个值)

        列子查询(子查询结果为一列)

        行子查询(子查询结果为一行)

        表子查询(子查询结果为多行多列)

根据子查询位置可以分为:WHERE之后,FROM之后,SELECT之后。

4.2、标量子查询

        子查询返回的结果是单个值(数字,字符串,日期等),最简单的形式,这种子查询就是标量子查询。

        常用的操作符:=,<>,>,>=,<,<=

4.3、列子查询

        子查询返回的结构是一列(可以是多列),这种子查询称为列子查询。

        常见的操作符:IN,NOT IN,ANY,SOME,ALL

4.4、行子查询

        子查询的返回结果是一行(可以是多行),这种子查询称为行子查询。

        常用的操作符:=,<>,IN,NOT IN

4.5、表子查询

        子查询返结果是多行多列,这种子查询称为表子查询。

        常用的操作符:IN

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值