首页 > 数据库 >SQL99语法实现多表查询

SQL99语法实现多表查询

时间:2023-03-04 23:31:47浏览次数:52  
标签:多表 name 语法 SQL99 department JOIN id SELECT last

3.SQL99语法实现多表查询

3.1 内连接(INNER JOIN)的实现

语法

SELECT 字段列表
FROM A表 INNER JOIN B表
ON 关联条件
WHERE 等其他子句;

SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM employees e JOIN departments d
ON (e.department_id = d.department_id);

3.2 外连接(OUTER JOIN)的实现
3.2.1.左外连接

语法

#实现查询结果是A
SELECT 字段列表
FROM A表 LEFT JOIN B表
ON 关联条件
WHERE 等其他子句;
例
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
LEFT OUTER JOIN departments d
ON (e.department_id = d.department_id) ;
3.2.2.右外连接
SELECT 字段列表
FROM A表 RIGHT JOIN B表
ON 关联条件
WHERE 等其他子句;

例
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
RIGHT OUTER JOIN departments d
ON (e.department_id = d.department_id) ;

3.2.3.满外连接
  • 满外连接的结果 = 左右表匹配的数据 + 左表没有匹配到的数据 + 右表没有匹配到的数据。
  • SQL99是支持满外连接的。使用FULL JOIN 或 FULL OUTER JOIN来实现。
  • 需要注意的是,MySQL不支持FULL JOIN,但是可以用 LEFT JOIN UNION RIGHT join代替。

4.UNION的使用

合并查询结果 利用UNION关键字,可以给出多条SELECT语句,并将它们的结果组合成单个结果集。合并 时,两个表对应的列数和数据类型必须相同,并且相互对应。各个SELECT语句之间使用UNION或UNION ALL关键字分隔

语法

SELECT column,... FROM table1
UNION [ALL]
SELECT column,... FROM table2

image.png image.png

注意:执行UNION ALL语句时所需要的资源比UNION语句少。如果明确知道合并数据后的结果数据不存在重复数据,或者不需要去除重复的数据,则尽量使用UNION ALL语句,以提高数据查询的效率

5种SQL JOINS的实现

image.png

代码实现

#中图:内连接 A∩B
SELECT employee_id,last_name,department_name
FROM employees e JOIN departments d
ON e.`department_id` = d.`department_id`;
#左上图:左外连接
SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`;
#右上图:右外连接
SELECT employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`;
#左中图:A - A∩B
SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE d.`department_id` IS NULL

#右中图:B-A∩B
SELECT employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE e.`department_id` IS NULL
#右下图
#左中图 + 右中图 A ∪B- A∩B 或者 (A - A∩B) ∪ (B - A∩B)
SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE d.`department_id` IS NULL
UNION ALL
SELECT employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE e.`department_id` IS NULL
左下图
SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE d.`department_id` IS NULL
UNION ALL #没有去重操作,效率高
SELECT employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`;

标签:多表,name,语法,SQL99,department,JOIN,id,SELECT,last
From: https://blog.51cto.com/u_15977171/6100479

相关文章

  • 2.熟练运用es5、es6提供的语法规范(推荐)
    ECMAScript(核心)DOM(文档对象模型)BOM(浏览器对象模型) ES5增加特性1.strict模式  usestrict2.Array增加方法every、forEach、filter、indexOf、lastIndexOf、isArr......
  • markdown语法汇总
    markdown语法汇总[TOC]1.标题['#'+空格前置]1.#一级标题2.##二级标题3.###三级标题4.####四级标题2.强调[用'**'把文本包围]或者[用'__'把文本包围]’**你......
  • SQL语法:join的用法总结
    一、LEFTJOIN(左连接)作用:左连接,表table_a左连接表table_b,表示以表table_a为主,关联上表table_b的数据,查出来的结果显示左边的所有数据,然后右边显示的是和左边有交......
  • java的基本语法—运算符
    运算符算术运算符:+,-,*,/,%,++,--赋值运算符:=关系运算符:>,<,>=,==,!=,instanceof逻辑运算符:&&与,||或,!非位运算符:&,|,~,>>,<<,>>>(了解!!!)条件运算符:?:扩展赋值运算符:+=,-=,*=,/=......
  • Kotlin相关语法
    1.Kotlin的匿名函数{val a=1valb=2a+b}就是一个不带名字的函数体2.Kotlin的函数类型函数类型:用来声明一个函数参数和返回值形式的特殊数据类型声明格式如......
  • 昇思MindSpore报错调试宝典(三):网络构建与训练类报错之语法问题
    欢迎前往MindSpore论坛进行该文章的浏览:https://www.hiascend.com/forum/thread-0232113194535560002-1-1.html上一期讲解了网络构建与训练类报错问题中context配置问题该......
  • Markdown语法
    标题“#+空格+一级标题”二级标题“##+空格+二级标题”更改字体字体选项粗体(两边双**)斜体(两边单*)斜体加粗(两边三*)删除线(两边双~)引用引用使用">"分割......
  • #yyds干货盘点#vue3 语法糖setup 兄弟组件传值
    使用mitt//全局引入npminstallmitt或者cnpminstallmitt在main文件中挂载import{createApp}from'vue'importAppfrom'./App.vue'importmittfrom'mitt'//导......
  • [Go语言tips03]数组与切片与...语法糖
    0.引言C中只有数组的概念,没有切片的概念;Python中只有切片的概念,没有数组的概念;Go语言同时拥有数组和切片的概念,这两者看起来没什么区别都直接通过[x]int来使用,但实际上有......
  • MySQL学习笔记-多表查询(下)
    多表查询(下)一.联合查询联合查询:将多次查询结果合并,形成新的查询结果集select{字段列表}from{表A}...union[all]select{字段列表}from{表B}...;unio......