显示来自多个表的数据——JOIN

news/2024/7/1 4:56:25

表关系简介



一、语法

SELECT 字段列表FROM TABLE1 
[CROSS JOIN TABLE2 ] | 
[NATURAL JOIN TABLE2 ] | [JOIN TABLE2 USING (字段名) ] | [JOIN TABLE2 ON (TABLE.COLUMN_NAME = TABLE2.COLUMN_NAME) ] |
[(LEFT | RIGHT | FULL OUT) JOIN TABLE2 ON (TABLE1.COLUMN_NAME = TABLE2.COLUMN_NAME) ];

二、自然连接

1、USING
  如果不希望参照被连接表的所有同名列进行等值连接,自然连接将无法满足要求,可以在连接时使用USING子句来设置用于等值连接的列(参照列)名。
不允许在参照列上使用表名或者别名作为前缀
--99语法
SELECT EMPNO, ENAME, SAL, EMP.DEPTNO, DNAMEFROM EMPJOIN DEPTUSING (DEPTNO);--92语法
SELECT EMPNO, ENAME, SAL, EMP.DEPTNO, DNAMEFROM EMP, DEPTWHERE EMP.DEPTNO = DEPT.DEPTNO;
2、ON
  如果要参照非同名的列进行等值连接,或想设置任意的连接条件,可以使用On子句
SELECT EMPNO, ENAME, SAL, EMP.DEPTNO, DNAMEFROM EMPJOIN DEPTON (EMP.DEPTNO = DEPT.DEPTNO);

三、自连接

  自己和自己做链接
--99语法
SELECT WORKER.LAST_NAME EMP, MANAGER.LAST_NAME MGRFROM EMPLOYEES WORKERJOIN EMPLOYEES MANAGERON (WORKER.MANAGER_ID = MANAGER.EMPLOYEE_ID);--92语法
SELECT WORKER.LAST_NAME EMP, MANAGER.LAST_NAME MGRFROM EMPLOYEES WORKER, EMPLOYEES MANAGERWHERE WORKER.MANAGER_ID = MANAGER.EMPLOYEE_ID;

四、非等值连接

--99语法
SELECT E.LAST_NAME, E.SALARY, J.GRADE_LEVELFROM EMPLOYEES EJOIN JOB_GRADES JON E.SALARY BETWEEN J.LOWEST_SAL AND J.HIGHEST_SAL;--92语法
SELECT E.LAST_NAME, E.SALARY, J.GRADE_LEVELFROM EMPLOYEES E, JOB_GRADES JWHERE E.SALARY BETWEEN J.LOWEST_SAL AND J.HIGHEST_SAL;

五、INNER|OUTER 连接

1、INNER 连接
  两个表连接,只返回匹配的行,被称为内连接。
--查询所有员工以及其部门名字
--99语法
SELECT LAST_NAME, DEPARTMENT_NAMEFROM EMPLOYEES EINNER JOIN DEPARTMENTS DON E.DEPARTMENT_ID = D.DEPARTMENT_ID;--92语法
SELECT LAST_NAME, DEPARTMENT_NAMEFROM EMPLOYEES E, DEPARTMENTS DWHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID;
2、LEFT OUTER | RIGHT OUTER 连接
  两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行,这种连接称为左(或右)外连接。
--哪些部门没有员工,看出部门名字
--99语法
SELECT DEPARTMENT_NAMEFROM EMPLOYEES ERIGHT JOIN DEPARTMENTS DON E.DEPARTMENT_ID = D.DEPARTMENT_IDWHERE LAST_NAME IS NULL;--92语法
SELECT DEPARTMENT_NAMEFROM EMPLOYEES E, DEPARTMENTS DWHERE E.DEPARTMENT_ID(+) = D.DEPARTMENT_IDAND LAST_NAME IS NULL;
3、FULL OUTER 连接
  两个表在连接过程中除了返回满足连接条件的行以外还返回两个表中不满足条件的行,这种连接称为全外联接。
--99
SELECT E.LAST_NAME, D.DEPARTMENT_ID, D.DEPARTMENT_NAMEFROM EMPLOYEES EFULL OUTER JOIN DEPARTMENTS DON E.DEPARTMENT_ID = D.DEPARTMENT_ID;--92
SELECT E.LAST_NAME, D.DEPARTMENT_ID, D.DEPARTMENT_NAMEFROM EMPLOYEES E, DEPARTMENTS DON E.DEPARTMENT_ID(+) = D.DEPARTMENT_ID(+);

六、笛卡尔积

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

1、连接条件被遗漏

2、连接条件不正确

3、所有表中的所有行互相连接

--99语法
SELECT E.LAST_NAME, D.DEPARTMENT_ID, D.DEPARTMENT_NAMEFROM EMPLOYEES ECROSS JOIN DEPARTMENTS D;--92语法
SELECT E.LAST_NAME, D.DEPARTMENT_ID, D.DEPARTMENT_NAMEFROM EMPLOYEES E, DEPARTMENTS D;


http://lihuaxi.xjx100.cn/news/240786.html

相关文章

JavaScript封装一个注册函数解决兼容问题

我们知道JavaScript注册(绑定)事件主要有两类方式,第一类传统方式具有注册事件的唯一性,即对于同一元素的同一事件,不会出现两个处理函数,如下 var btn document.querySelector(button);btn.onclick function(){document.body.s…

排序(一)归并、快排、优先队列等(图文具体解释)

排序(一) 0基础排序算法 选择排序 思想:首先,找到数组中最小的那个元素。其次,将它和数组的第一个元素交换位置。再次。在剩下的元素中找到最小的元素。将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。 【图例】 …

练习 MongoDB 操作 —— 备份篇(三)

2019独角兽企业重金招聘Python工程师标准>>> mongodb数据备份和还原主要分为二种, 一种是针对于库的mongodump和mongorestore, 一种是针对库中表的mongoexport和mongoimport。 mongodb 数据库操作--备份 还原 导出 导入 导入与导入 导入与导出…

RabbitMQ死信队列、延时队列

介绍: 消息被消费⽅否定确认,使⽤ channel.basicNack 或 channel.basicReject ,并且此时 requeue 属性被设置为 false 。消息在队列的存活时间超过设置的TTL时间。消息队列的消息数量已经超过最⼤队列⻓度。那么该消息将成为“死信”。“死信…

JavaScript实现智能搜索框

应用场景: 1. 搜索框在页面中占据的空间过小,希望无论浏览到什么位置,可以轻易地回到并聚焦搜索框。 2. 搜索框里面的文字大小过小,希望能够在上方开辟一块空间放大内容 解决思路: 1. 对整个页面添加键盘事件keyup…

phpstorm failed to create jvm:error code -6 解决办法 解决方法

phpStorm 软件打开运行提示 failed to create JVM的解决办法。 修改文件 D:\Program Files (x86)\JetBrains\PhpStorm 7.1.3\bin\PhpStorm.exe.vmoptions 把内存值改成标准值,文件全部内容如下: [plain] view plaincopy -server -Xms128m -Xmx512m -X…

CentOS 6.x中目录结构及用途

目录名称作用/根目录,一般根目录下只存放目录,不要存放文件/bin存放普通用户可执行的系统命令/sbin存放的是超级管理员执行的系统命令/etc系统管理和配置文件存放路径/etc/rc.d启动的配置文件和脚本存放目录/etc/passwd系统用户密码文件,包含…

JavaScript实时更新中国标准时间

用到Date对象和BOM中的setInterval()定时器。 效果如下&#xff08;每隔1s刷新一次&#xff09; 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content&q…