当前位置: 首页 > news >正文

MySQL 多表查询

 employees 表

departments 表

locations 表

job_grades 表 


两表连接,将 employees 表的 department_id 与 departments 表的 department_id 相关联

SELECT employee_id, department_name
FROM employees, departments
WHERE employees.department_id = departments.department_id;
# 或
SELECT employee_id, department_name
FROM employees JOIN departments
on employees.department_id = departments.department_id;

若查询字段在多个表中都出现,则需指明该字段所在的表,如 department_id SELECT 中需写为 employees. department_id  departments.department_id,或者用表的别名代替表名(若给表起了别名,在 SELECTWHERE 中必须使用别名,相当于别名覆盖了原表名) 

SELECT e.employee_id, e.last_name, d.department_name, l.city
FROM employees e, departments d, locations l
WHERE e.department_id = d.department_id
AND d.location_id = l.location_id;
# 或
SELECT e.employee_id, e.last_name, d.department_name, 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;


等值连接和非等值连接

上述为等值连接

非等值连接

SELECT last_name, salary, garde_level
FROM employees e, job_grades j
WHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal;


自连接和非自连接

上述为非自连接

自连接,表中自我引用,如 employees 表manager_id 相当于对 employee_id 的引用

SELECT e.employee_id, e.last_name, m.employee_id, m.last_name
FROM employees e, employees m
WHERE e.manager_id = m.employee_id;


内连接和外连接

上述均为内连接:合并具有同一列的两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行

外连接:合并具有同一列的两个以上的表的行,结果集中除了包含一个表与另一个表不匹配的行以外,还查询到左表或右表中不匹配的行

外连接的分类:左外连接(还查询左表不匹配的行)、右外连接、满外连接

左外连接

SQL92语法(MySQL不支持)

SELECT e.employee_id, e.last_name, d.department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id(+);

SQL99语法,可以查询到 emplees 表department_id 为NULL的数据,即查询到所有员工的 department_name

SELECT e.employee_id, e.last_name, d.department_name
FROM employees e LEFT OUTER JOIN departments d
ON e.department_id = d.department_id;
右外连接
SELECT e.employee_id, e.last_name, d.department_name
FROM employees e RIGHT OUTER JOIN departments d
ON e.department_id = d.department_id;
满外连接

MySQL不支持 FULL OUTER JOIN 

SELECT e.employee_id, e.last_name, d.department_name
FROM employees e FULL OUTER JOIN departments d
ON e.department_id = d.department_id;

UNION 操作符

UNION 操作符返回两个查询的结果的并集,去除重复记录

UNION ALL 返回两个查询的结果的并集,不去除重复记录

在实际使用中能用 UNION ALL 就不使用 UNION,因此满外连接使用上图①④进行 UNION ALL 

SELECT e.employee_id, e.last_name, d.department_name
FROM employees e LEFT OUTER JOIN departments d
ON e.department_id = d.department_id
UNION ALL
SELECT e.employee_id, e.last_name, d.department_name
FROM employees e RIGHT OUTER JOIN departments d
ON e.department_id = d.department_id
WHERE e.department_id IS NULL;

SQL99新特性

自然连接 NATURAL JOIN

可以理解为SQL92中的等值连接,会自动查询两张连接表中所有相同的字段,然后进行等值连接

SELECT employee_id, last_name, department_name
FROM employees e JOIN departments d
ON e.department_id = d.department_id
AND e.manager_id = d.manager_id;
# 等同于
SELECT employee_id, last_name, department_name
FROM employees e NATURAL JOIN departments d;
 USING

替换等值连接的 =,如上述查询可以写为

SELECT employee_id, last_name, department_name
FROM employees e JOIN departments d
USING (department_id, manager_id);

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 二叉树的遍历的递归与非递归算法
  • 【C语言】结构体、枚举、联合(自定义类型)
  • 如何使用vscode启动Flask并实现无公网IP远程访问内网服务
  • 解锁金融数据中心场景,实现国产化AD替代,宁盾身份域管为信创电脑、应用提供统一管理
  • Maven POM元素解析
  • Rust 实战练习 - 9. 文本编码,URL编码,加密解密
  • 汽车EDI:如何与奔驰建立EDI连接?
  • pta L-007 念数字
  • LeetCode热题Hot100 - 有效的括号
  • Golang | Leetcode Golang题解之第17题电话号码的字母组合
  • SQL SERVER 备份
  • jenv实现mac下多版本jdk管理以及切换
  • 【AcWing】蓝桥杯集训每日一题Day14|Flood Fill|洪水灌溉算法|DFS|并查集|687.扫雷(C++)
  • Python读取Excel根据每行信息生成一个PDF——并自定义添加文本,可用于制作准考证
  • 一篇文章了解php7和php8新特性
  • 【译】JS基础算法脚本:字符串结尾
  • 分享的文章《人生如棋》
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • [NodeJS] 关于Buffer
  • 【知识碎片】第三方登录弹窗效果
  • laravel with 查询列表限制条数
  • Magento 1.x 中文订单打印乱码
  • Next.js之基础概念(二)
  • Redis 懒删除(lazy free)简史
  • STAR法则
  • sublime配置文件
  • Vim Clutch | 面向脚踏板编程……
  • vue总结
  • 阿里云应用高可用服务公测发布
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 线性表及其算法(java实现)
  • 小程序开发之路(一)
  • 一份游戏开发学习路线
  • 再次简单明了总结flex布局,一看就懂...
  • 正则表达式
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • Spring Batch JSON 支持
  • 进程与线程(三)——进程/线程间通信
  • ​插件化DPI在商用WIFI中的价值
  • (4) PIVOT 和 UPIVOT 的使用
  • (70min)字节暑假实习二面(已挂)
  • (Python) SOAP Web Service (HTTP POST)
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (六)软件测试分工
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (三)uboot源码分析
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (译)2019年前端性能优化清单 — 下篇
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .FileZilla的使用和主动模式被动模式介绍