多表查询(上)

一. 多表关系

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

  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. 老夫当年手写的js动画库

    前言 当年我学习js的时候,那时候学生时代不知道有jquery,所以手写了一些东西,留下的不多作为回忆. 正文 ``` javascript window.onload = function () { ...

  2. flask售后评分系统

    做软件行业的公司,一般都有专业的售前售后团队,还有客服团队,客服处理用户反馈的问题,会形成工单,然后工单会有一大堆工单流程,涉及工单的内部人员,可能会有赔付啥的,当然,这是有专业的售前.售后.客服团队 ...

  3. opensips使用drouting进行路由

    操作系统 :CentOS 7.6_x64 opensips版本:2.4.9 drouting是Dynamic Routing(动态路由)的缩写,该模块可为特定呼叫选择(基于多个条件)最佳网关.今天整理 ...

  4. 【笔记】问题控制与管理&故障、问题、已知错误、变更请求之间的逻辑关系&问题管理流程

    [笔记]问题控制与管理&故障.问题.已知错误.变更请求之间的逻辑关系 问题控制与管理 与故障管理的尽可能快地恢复服多的目标不同,问题管理是要防止再次发生故障 例如你制作了一个报表,用户填写了问 ...

  5. 【走进RDS】之SQL Server性能诊断案例分析

    简介: 数据库性能诊断不仅对其数据库技能要求较高,而且需要大量的前期准备工作,如收集各种性能基线.性能指标和慢SQL日志等,尤其是面对多数据库性能调优时,往往事倍功半. 客户的困扰 前几天某程序员小王 ...

  6. 102万行代码,1270 个问题,Flink 新版发布了什么?

    阿里妹导读: Apache Flink 是公认的新一代开源大数据计算引擎,可以支持流处理.批处理和机器学习等多种计算形态,也是Apache 软件基金会和 GitHub 社区最为活跃的项目之一. 201 ...

  7. 各位 PHPer,Serverless 正当时

    ​简介:PHP 作为一个开发群体的很大的语言其应用范围相当广泛,Serverless 的理念和 PHP 语言的理念都是让开发者最大精力集中在自己的业务价值.那么 PHP 遇见 Serverless 会 ...

  8. 【ClickHouse 技术系列】- 在 ClickHouse 中处理实时更新

    ​简介:本文翻译自 Altinity 针对 ClickHouse 的系列技术文章.面向联机分析处理(OLAP)的开源分析引擎 ClickHouse,因其优良的查询性能,PB级的数据规模,简单的架构,被 ...

  9. 通过WebRTC简单实现媒体共享

    通过WebRTC简单实现媒体共享 媒体协商 在设置本地描述符(offer/answer)前,我们总是需要将媒体添加到连接中,只有这样在描述符中才能包含需要共享的媒体信息,除非你不需要共享媒体. 在实际 ...

  10. WPF 切换主题使用 luna 复古版本

    本文告诉大家如何在 WPF 里面使用 luna 等复古主题 今天在 lsj 说他准备优化 WPF 的程序集时,准备删除 luna 等程序集时,找到了一段有趣的注释,发现在 WPF 里面可以通过一些有趣 ...