多表查询(上)

一. 多表关系

在实际应用中,根据需求,设计的表结构之间存在联系,联系一般分为以下三种

  1. 一对多(多对一)
  2. 多对多
  3. 一对一

1. 一对多(多对一)

案例:部门与员工的关系,一个部门对应多个员工,一个员工对应一个部门。

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

2. 多对多

案例:学生与课程的关系,一个学生可以选修多门课程,一门课程也可以供多个学生选择。

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

3. 一对一

案例:用户与用户信息的关系。

多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升效率。

  • 实现:在任意一方加入外键,管理另外一方的主键,并且设置外键为唯一的(UNIQUE)。

二. 多表查询

多表查询:从多张表中查询数据

  • 笛卡尔积:指两个集合的所有组合情况。而多表查询目的就是消除无效的笛卡尔积。

  • 多表查询的分类

    • 连接查询

      • 内连接:查询A、B交集部分数据
      • 外连接:左(右)外连接:查询左表(右表)所有数据,以及两张表交集部分数据
      • 自连接:当前表与自身的连接查询,自连接必须使用表别名
    • 子查询

1. 连接查询

1.1 内连接

内连接:查询A、B交集部分数据

# 隐式内连接
select {字段列表} from {表1},{表2} where {条件}; # 显式内连接
select {字段列表} from {表1} [inner] join {表2} on {连接条件};
  • 在编写条件时,有些情况下表名会很长,不方便,可以在表名后取一个别名,后面的条件就用别名代替表名。注意:取别名后,在写条件或字段列表时原名就不能用了,会报错。
select {字段列表} from {表1} {别名1},{表2} {别名2} where {条件};

1.2 外连接

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

# 左外连接
select {字段列表} from {表1} left [outer] join {表2} on {条件}; # 右外连接
select {字段列表} from {表1} right [outer] join {表2} on {条件};
  • 外连接和内连接的区别:比如说有一张员工表和一张部门表,如果其中有一条数据没有部门,如果使用内连接查询员工和对应的部门,没有部门的那个员工就查不到,但是使用外连接是可以查询到的。

1.3 自连接

自连接:当前表与自身的连接查询,自连接必须使用表别名

案例:在一张表里有员工信息,包括直属领导id(领导也在员工表内),查询员工与对应的领导,用自连接。

  • 自连接可以是内连接查询,也可以是外连接查询。
# 内连接语法,外连接类似
select {字段列表} from {表A} {别名A} join {表A} {别名B} on {条件};
  • 自连接可以看成两张一样的表连接查询。

MySQL学习笔记-多表查询(上)的更多相关文章

  1. mysql学习笔记-- 多表查询之外键、表连接、子查询、索引

    本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...

  2. MySQL学习9 - 单表查询

    一.单表查询的语法 二.关键字的执行优先级(重点) 三.单表查询示例 1.where约束 2.group by分组查询 3.聚合函数 4.HAVING过滤 5.order by查询排序 6.limit ...

  3. MySQL学习笔记——多表连接和子查询

    多表连接查询 # 返回的是两张表的乘积 SELECT * FROM tb_emp,tb_dept SELECT COUNT(*) FROM tb_emp,tb_dept # 标准写法,每个数据库都能这 ...

  4. MySQL学习10 - 多表查询

    一.多表连接查询 1.交叉连接 2.内连接 3.外连接之左连接 4.外连接之右连接 5.全外连接 二.符合条件连接查询 三.子查询 1.带in关键字的子查询 2.带比较运算符的子查询 3.带EXIST ...

  5. mysql学习笔记11_12(查询)

    1.建表和插入值 创建company数据库 创建 department表 create table department(d_id int(10) primary key not null uniqu ...

  6. MySQL学习笔记 -- 数据表的基本操作

    数据库是一个可以存放数据库对象的容器,数据库对象包括:表.视图.存储过程.函数.触发器.事件.其中,表是数据库最基本的元素,是其他数据库对象的前提条件. 表中的一列称为一个字段,一行称为一条记录. 1 ...

  7. MySql 学习笔记 (派生表)

    派生表也是一种子查询那么它出现在 select * from ( select * from b <--这个就是派生表啦 )派生表其实不是个好东西,在生产的时候他是可以通过索引来过滤的,但是一但 ...

  8. mysql学习笔记02 表的操作

    创建数据表create  table table_name(//定义表的列的结构)创建表 先分析需要保存的实体数据,荣有哪些属性,这些属性应该有哪些属性列的定义 列名 列的数据类型 {} 进行表操作时 ...

  9. MySql学习笔记(一)之DQL常用查询

    MySql学习笔记(一)之DQL常用查询 前言:mysql是中小型的数据库软件,SQL语言分为DDL,DCL,DML,DQL四种,在这里重点讲解DQL的单表查询. 正文:在学习mysql单表查询之前, ...

  10. Mysql学习笔记(三)对表数据的增删改查。

    正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...

随机推荐

  1. 这些Git事故灾难, 你经历过几个?

    前言 关于Git, 相信大家最常用的就是pull和push. 但随着协作规模的提升, 遇到的问题也会越来越多. 本篇文章并不科普一些命令的详细用法, 更多的是分享在工作中遇到的Git场景问题以及踩过的 ...

  2. 力扣121(java&python)-买卖股票的最佳时机(简单)

    题目: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格. 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票.设计一 ...

  3. 「开源人说」|AI普惠,阿里灵杰开源历程与思考

    简介: 施兴 阿里巴巴资深技术专家 阿里巴巴开源项目EasyRec负责人 以下为开发者社区「开源人说」第四期--大数据&AI专场的主题分享,点击链接了解更多精彩详情 https://devel ...

  4. DTCC 2020 | 阿里云程实:云原生时代的数据库管理

    简介: 随着云原生技术的不断发展,数据库也逐渐进入了云原生时代.在云原生时代,如何高效.安全且稳定地管理云上与云下的数据库成为摆在企业面前的一大难题.在第十一届中国数据库技术大会(DTCC2020)上 ...

  5. 无缝融入 Kubernetes 生态 | 云原生网关支持 Ingress 资源

    ​简介:Kubernetes 一贯的作风是通过定义标准来解决同一类问题,在解决集群对外流量管理的问题也不例外.Kubernetes 对集群入口点进行了进一步的统一抽象,提出了 3 种解决方案:Node ...

  6. 智能数据构建与管理平台Dataphin的前世今生:缘起

    简介: 阿里巴巴提出的OneData方法论帮助企业捋清了数据全生命周期的管理思路,更将其植入到产品Dataphin(智能数据构建与管理)中,通过阿里云为企业提供服务. Dataphin 智能数据构建与 ...

  7. IIncrementalGenerator 解析 ValueTuple 的定义

    本文将告诉大家如何在分析器里面解析代码里面对于 ValueTuple 的定义,包括如何获取 ValueTuple 里面的 Item 的类型和命名 开始之前先创建一个用来被分析的项目,在这个项目里面定义 ...

  8. VSCode 中安装 esp-idf

    一.准备工具 首先需要安装好 VSCode 软件和 esp-idf 环境. 安装 VSCode VSCode 安装比较简单,我就不赘述了,进入官网下载一键安装即可 VSCode官网:https://c ...

  9. ADV7123驱动VGA显示色条

    VGA显示色条-基于ADV7123 用ADV7123代替权电阻网络,执行数模转换,差别在于rgb都变成8位,显示的色彩更多.控制端口多了3个:像素时钟,复合同步信号(不用就置0),消隐信号. 相对权电 ...

  10. ubuntu下安装php pdo扩展和导入数据库

    默认安装的php不存在pdo扩展,因此在使用到的时候会报错,直接使用这个命令 apt-get install php-mysql 就可以成功安装pdo扩展 安装完数据库后需要导入sql语句,先进入数据 ...