个人博客网:https://wushaopei.github.io/    (你想要这里多有)

一、多表查询

【1】什么是多表查询?

  • 即,从多个表中获取数据。
  • 注意: 在多表查询是,如果列明在两个表中都有,那么列名前需要加上表名
  • sql优化:列名前最好加上表名,尤其在多表查询时

SELECT employees.`first_name`,employees.`department_id`
    departments.`department_id`,departments.`department_name`
FROM employees,departments  -- 错误,缺少连接条件
 -- 发生了笛卡尔集错误
 -- 愿因: 缺少多表之间的连接条件,或者连接条件错误

SELECT e.first_name,e.department_id,-- 可以使用表的别名
    d.department_id,d.department_name
FROM employees e, departments d -- 错误,缺少连接条件

【2】关于笛卡尔集 :

  • 笛卡尔集会在下面条件下产生:

省略连接条件
连接条件无效
所有表中的所有行互相连接

为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件。

【3】使用笛卡尔集与不使用的对比

①查出所有数据

SELECT  * FROM employees
SELECT * FROM departments

②不使用笛卡尔集的普通子查询(MySQL连接)

在 WHERE 子句中写入连接条件。
在表中有相同列时,在列名之前加上表名前缀

-- 需求: 查询每个员工所在部门的名称

SELECT employees.`first_name`,employees.`department_id`,
    departments.`department_id`,departments.`department_name`
FROM employees,departments
WHERE employees.`department_id`= departments.`department_id`

③使用JOIN ON 实现多表查询,解决笛卡尔集的问题

-- sq199规定了多表查询的规则
-- 使用 join on
-- 注意: 如果有n个表需要连表查询,那么至少得有n-12个连接条件

SELECT e.first_name,d.department_id,l.city
FROM employees e JOIN departments d
ON e.department_id = d.department_id
JOIN locations l
ON d.location_id = l.location_id

MySQL 连接

【1】自连接,非自链接

-- 自连接需求: 查找员工和员工的领导
SELECT e.first_name,m.first_name
FROM employees e JOIN employees m
ON e.`manager_id` = m.`employee_id`

-- 非自连接:两张不同的表进行连接查询

-- 等值连接,非等值连接
-- 等值连接案例
SELECT e.first_name,d.department_name
FROM employees e JOIN departments d
ON e.department_id = d.department_id

-- 非等值连接需求: 查看所有员工薪水的等级
SELECT e.first_name,e.`salary`,j.grade
FROM employees e JOIN job_grades j
ON e.`salary`>= j.lowest_sal AND e.`salary` <=j.highest_sal

【2】 内连接,外连接

-- 内连接:

合并具有同一列的两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行

-- 外连接: 左外连接 VS 右外连接

-- 左外连接: 两个表在连接过程中除了返回满足连接条件的行以外还返回左表中不满足条件的行
-- 这种连接成为左外连接

SELECT  e.`first_name`,e.`department_id`,d.department_name
FROM employees e LEFT OUTER JOIN departments d
ON e.`department_id` = d.department_id

-- 右外连接:两个表在连接过程中除了返回满足连接条件的行意外还返回右表中不满足条件的行
 -- 这种连接成为右外连接

SELECT e.`first_name`,e.`department_id`,d.department_id,d.department_name
FROM employees e RIGHT OUTER JOIN departments d
ON e.`department_id` = d.department_id

-- 满外连接 full join (mysql不支持)

数据库之 MySQL --- 数据处理 之多表查询 (三)的更多相关文章

  1. 数据库相关--mysql中的单表查询

    一.完整的单表查询语句 select [distinct] *|字段1,字段2, .... from 表名 [where 条件1] [group by 字段名 [having 条件2] ] [orde ...

  2. mysql 基础入门 单表查询

    单表查询 select 表头,表头 as 别名 ,表头(+-*/的运算) from table_a 1.条件查询 where + 条件 <> , != 不等于 = 等于,也可以表示字符串值 ...

  3. mysql中的回表查询与索引覆盖

    了解一下MySQL中的回表查询与索引覆盖. 回表查询 要说回表查询,先要从InnoDB的索引实现说起.InnoDB有两大类索引,一类是聚集索引(Clustered Index),一类是普通索引(Sec ...

  4. mysql加强(4)~多表查询

    mysql加强(4)~多表查询:笛卡尔积.消除笛卡尔积操作(等值.非等值连接),内连接(隐式连接.显示连接).外连接.自连接 一.笛卡尔积 1.什么是笛卡尔积: 数学上,有两个集合A={a,b},B= ...

  5. mysql 数据操作 单表查询 目录

    mysql 数据操作 单表查询 mysql 数据操作 单表查询 简单查询 避免重复DISTINCT mysql 数据操作 单表查询 通过四则运算查询 mysql 数据操作 单表查询 concat()函 ...

  6. mysql 数据操作 多表查询 目录

    mysql 数据操作 多表查询 准备 多表连接查询介绍 mysql 数据操作 多表查询 多表连接查询 笛卡尔积 mysql 数据操作 多表查询 多表连接查询 内连接 mysql 数据操作 多表查询 多 ...

  7. mysql 数据操作 单表查询 where 约束 目录

    mysql 数据操作 单表查询 where约束 between and or mysql 数据操作 单表查询 where约束 is null in mysql 数据操作 单表查询 where约束 li ...

  8. mysql 数据操作 单表查询 group by 分组 目录

    mysql 数据操作 单表查询 group by 介绍 mysql 数据操作 单表查询 group by 聚合函数 mysql 数据操作 单表查询 group by 聚合函数 没有group by情况 ...

  9. 数据库开发-Django ORM的单表查询

    数据库开发-Django ORM的单表查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询集 1>.查询集相关概述 查询会返回结果的集,它是django.db.mod ...

随机推荐

  1. 某科学的PID算法学习笔记

    最近,在某社团的要求下,自学了PID算法.学完后,深切地感受到PID算法之强大.PID算法应用广泛,比如加热器.平衡车.无人机等等,是自动控制理论中比较容易理解但十分重要的算法. 下面是博主学习过程中 ...

  2. 给大家发个Python和Django的福利吧,不要钱的那种~~~

    前言一: 这篇是一个发放福利的文章,但是发放之前,我还是想跟大家聊聊我为什么要发这样的福利. 我第一份工作是做的IT桌面支持,日常工作就是给同事修修电脑.装装软件.开通账号.维护内部系统之类的基础工作 ...

  3. 【HBase】带你了解一哈HBase的各种预分区

    目录 简单了解 概述 设置预分区 一.手动指定预分区 二.使用16进制算法生成预分区 三.将分区规则写在文本文件中 四.使用JavaAPI进行预分区 简单了解 概述 由上图可以看出,每一个表都有属于自 ...

  4. IE浏览器下报错: strict 模式下不允许一个属性有多个定义

    vue项目,打包后在IE11和360浏览器(都是IE内核)上运行,控制台报了strict 模式下不允许一个属性有多个定义这个错误,导致流程不能正常走下去,查资料后知道应该是定义了重复的属性,于是就开始 ...

  5. 解决:idea中右键项目找不到subversion

    2019.02版IDEA,刚刚发现更新不了项目,但是我记得之前的项目是可以直接更新的.然后,我打开之前的项目找到相关项,对比了一下,找到了方法: file--settings--Version Con ...

  6. 一道题带你搞定Python函数中形参和实参问题

    昨天在Python学习群里有位路人甲问了个Python函数中关于形参和实参一个很基础的问题,虽然很基础,但是对于很多小白来说不一定简单,反而会被搞得稀里糊涂.人生苦短,我用Python. 为了解答大家 ...

  7. Mybatis 快速入门(XML方式)第一天

    导读 架构原理图 说明 mybatis配置文件 SqlMapConfig.xml,此文件为mybatis的全局配置文件,配置了mybatis的运行环境等信息 XXXMapper.xml,此文件作为my ...

  8. Codeforces 909E(Coprocessor,双队列维护)

    题意:给出n个待处理的事件(0 ~n-1),再给出了n个标(0表示只能在主处理器中处理这个事件,1表示只能在副处理器中处理这个事件),处理器每次能处理多个任务.每个事件有关联,如果一个任务要在副处理器 ...

  9. 使用gitHub和git进行团队合作开发

    1.创建仓库(项目)-----组织者(Leader)和团队成员 1)Leader在gitHub上创建一个新组织(New organization),然后邀请成员加入 2)Leader在该组织下创建一个 ...

  10. Django之ORM配置与单表操作

    ORM数据库操作流程: 1.    配置数据库(项目同名包中settings.py和__init__.py) 2.    定义类(app包中models.py),执行建表命令(Tools---> ...