mysql与orancl_清晰讲解SQL语句中的外连接,通用于Mysql和Oracle,全是干货哦

清晰讲解SQL语句中的外连接,通用于Mysql和Oracle,全是干货哦

直入主题:

我们做一个操作,将员工SCOTT的部门去掉,再次通过内连接查看数据,看看会产生什么现象?

使用内连接,查询数据

问题:找不到SCOTT员工了,只有13条数据,这显然不合理;这就是内连接的缺点

-- 内连接:只显示匹配的数据

-- 外连接:显示匹配的数据,还显示(部分或者全部)不匹配的数据,那就是显示(全部)的数据

(1)左外连接:left join

特点:左表全部显示,包括不匹配的数据,右表进行匹配显示

(2)右外连接:right join

右表全部显示,包括不匹配的数据,左表进行匹配显示

(3)全外连接

左表和右表的数据都会显示,包括不匹配的数据

注意:在oracle中支持full join

在mysql中不支持全外连接,但是,可以通过union 连接左外连接和右外连接,达到全外连接的效果

(4)自连接

思路:将一张表看做两张表 下级表 上级表

举例:显示没有上级的员工(king)

知识扩展:

三表查询:

就是先查两张表,将查出的结果看成一张表,然后跟第三张表进行联合查询,本质还是两表查询

准备工作:先添加一张薪资等级表

第一步:连接emp和dept表

查询员工的编号、姓名、薪水、部门编号、部门名称

第二步:连接第三张表

-- 查询员工的编号、姓名、薪水、部门编号、部门名称、薪水等级

至此,全部的表连接讲解完毕!

欢迎留言,指出问题,有则改之无则加勉

下面,分享所有的SQL语句:

复制代码

create table DEPT

(

DEPTNO int(2) not null,

DNAME VARCHAR(14),

LOC VARCHAR(13)

);

alter table DEPT

add constraint PK_DEPT primary key (DEPTNO);

create table EMP

(

EMPNO int(4) primary key,

ENAME VARCHAR(10),

JOB VARCHAR(9),

MGR int(4),

HIREDATE DATE,

SAL double(7,2),

COMM double(7,2),

DEPTNO int(2)

);

alter table EMP

add constraint FK_DEPTNO foreign key (DEPTNO)

references DEPT (DEPTNO);

create table SALGRADE

(

GRADE int primary key,

LOSAL double(7,2),

HISAL double(7,2)

);

create table BONUS

(

ENAME VARCHAR(10),

JOB VARCHAR(9),

SAL double(7,2),

COMM double(7,2)

);

commit;

insert into DEPT (DEPTNO, DNAME, LOC)

values (10, 'ACCOUNTING', 'NEW YORK');

insert into DEPT (DEPTNO, DNAME, LOC)

values (20, 'RESEARCH', 'DALLAS');

insert into DEPT (DEPTNO, DNAME, LOC)

values (30, 'SALES', 'CHICAGO');

insert into DEPT (DEPTNO, DNAME, LOC)

values (40, 'OPERATIONS', 'BOSTON');

commit;

insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)

values (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, null, 20);

insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)

values (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30);

insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)

values (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30);

insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)

values (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, null, 20);

insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)

values (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30);

insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)

values (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850, null, 30);

insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)

values (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450, null, 10);

insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)

values (7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19', 3000, null, 20);

insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)

values (7839, 'KING', 'PRESIDENT', null, '1981-11-17', 5000, null, 10);

insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)

values (7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08', 1500, 0, 30);

insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)

values (7876, 'ADAMS', 'CLERK', 7788, '1987-05-23', 1100, null, 20);

insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)

values (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, null, 30);

insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)

values (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000, null, 20);

insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)

values (7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300, null, 10);

commit;

insert into SALGRADE (GRADE, LOSAL, HISAL)

values (1, 700, 1200);

insert into SALGRADE (GRADE, LOSAL, HISAL)

values (2, 1201, 1400);

insert into SALGRADE (GRADE, LOSAL, HISAL)

values (3, 1401, 2000);

insert into SALGRADE (GRADE, LOSAL, HISAL)

values (4, 2001, 3000);

insert into SALGRADE (GRADE, LOSAL, HISAL)

values (5, 3001, 9999);

commit;

复制代码

复制代码

-- 一、内连接

-- 交叉连接 cross JOIN

-- 笛卡尔积现象

SELECT *

FROM emp

CROSS JOIN dept;

-- 使用using,只显示指定的同名字段

SELECT *

FROM emp e

CROSS JOIN dept d

USING (deptno);

-- 使用on,指定不同名的字段

SELECT *

FROM emp e

CROSS JOIN dept d

ON(e.deptno = d.deptno);

-- natural join 自然连接 所有同名列只显示一次

SELECT *

FROM emp

NATURAL JOIN dept;

-- 二、外连接

-- 左外连接 emp左表,dept 右表,左表全部显示,包括没有数据的列

SELECT *

FROM emp e -- 左表

LEFT JOIN dept d -- 右表

on(e.deptno = d.deptno);

-- 右外连接 emp左表, dept右表,右表全部显示,包括没有数据的列

SELECT *

FROM emp e -- 左表

RIGHT JOIN dept d -- 右表

on(e.deptno = d.deptno);

-- 全外连接 ,oracle支持,mysql不支持

-- 可以通过关键字union进行解决,左表和右表的无对应数据列都会显示

SELECT *

FROM emp e

LEFT JOIN dept d

on(e.deptno = d.deptno);

UNION

SELECT *

FROM emp e

RIGHT JOIN dept d

on(e.deptno = d.deptno);

-- 三、三表查询

SELECT * FROM emp;

SELECT * FROM dept;

SELECT * FROM salgrade;

-- 第一步,先查两张表

SELECT e.empno,e.ename,e.sal,d.deptno,d.dname

FROM emp e

JOIN dept d

ON e.deptno = d.deptno;

-- 第二步,连接第三张表

SELECT e.empno, e.ename,e.sal,d.deptno,d.dname,sg.grade

FROM emp e

JOIN dept d

ON e.deptno = d.deptno

JOIN salgrade sg

ON e.sal BETWEEN sg.losal AND sg.hisal;

-- 四、自连接

-- 不是所有表都可以进行自连接,只有表中的两列有关联关系,才可以进行自连接查询

-- 将自身分解成两张表

SELECT e.empno,e.ename,e.mgr,m.empno,m.ename

FROM emp e

LEFT JOIN emp m

ON e.mgr = m.empno;

复制代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533382.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.net mysql查询数据库连接_asp.net连接查询SQL数据库并把结果显示在网页上(2种方法)...

在ASP.NET中,使用C#连接SQL数据库,并使用SQL语句查询,以前从来没有接触过C#,最近用到了,摸索了两天终于运行起来了,Mark一下,不喜勿喷有两种方法:(说的是第一种方法不安全&#xff0…

mysql异常恢复工具_[MySQL异常恢复]mysql ibd文件恢复

在mysql中由于某种原因保存有ibd文件,但是表已经被删除或者frm文件损坏亦或者ibdata文件损坏/丢失等。本文模拟在这种情况下,通过mysql自身技术即可完成ibd文件恢复.测试环境mysql版本mysql> select version();-----------| version() |-----------| …

ddl是什么意思网络语_DDL(数据定义语言)

DDL,是对数据库内部的对象进行创建,删除,修改等的操作语言。它和DML语言最大的区别是DML只是对表内部数据的操作,而不涉及到表的定义,结构的修改,更不会涉及到其它对象。1.连接数据库:注:1.mysql代表客户端…

jsp mysql优点_asp、php、asp.net、jsp的介绍和各自的优缺点

现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台,它的语法和Visual BASIC类似,可以像SSI(Server Side Include)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但…

测试网络的带宽指令_单机千万级MQTT服务器测试报告

目标:测试创建1000万客户端连接到Coolpy7 MQTT服务器端,服务器操作系统 Linux(任意一款发行版服务器版本)。分别在两台硬件一样的服务器,其中一台用于服务器端运行,另一台用于创建千万客户端连接客户端机器。在硬件一致的情况下请…

python邮箱爆破_Python在线爆破邮箱账号密码测试代码(亲测可用)

dic 字典格式如下(mail.txt) :usernamegmail.com:passwordusernamegmail.com:passwordusernamegmail.com:password以此类推,切记保存成utf-8编码格式。放置在当前脚本目录,也可自己定义修改。支持ssl https /imap协议。# version 3.4.0# codingUTF-8# ti…

查看redis aof内存_Redis持久化问题定位与优化技巧

今天主要分享继Redis持久化方式RDB、AOF之后的一些常用的Redis问题定位于优化方式。这里主要CPU、内存、磁盘在三个维度去分析问题!Fork操作当Redis做RDB或AOF重写时,一个必不可少的操作就是执行fork操作创建子进程,对于大多数操作系统来说fo…

mysql新增阵列df_DF学Mysql(三)——索引操作

概要:数据库对象索引其实与书的目录非常相似,主要是为了提高从表中检索数据的速度。由于数据存储在数据库表中,所以索引是创建在数据库表对象上的,由表中的一个字段或多个字段生成的键组成,这些键存储在数据结构(B-树或…

python本地浏览器注入js_PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例...

概要应同学邀请,演示如何使用 PyQt5 内嵌浏览器浏览网页,并注入 Javascript 脚本实现自动化操作。下面测试的是一个廉价机票预订网站(http://www.flyscoot.com/),关键点如下使用 QWebEngineView 加载网页,并显示进度。在默认配置(…

python装好了怎么启动车_【填空题】Python安装好后,可以直接在CMD命令行下输入( )命令, 可启动交互式编程,提示窗口如下:...

倾斜岩层的产状要素是用岩层层面的()。A.倾角B.走向C.范围D.倾向E.表面积采用深层搅拌法进行地基加固处理,其适用条件为()。A.砂砾石松软地基B.松散砂地基C.黏土软弱地基根据《建筑工程建筑面积计算规则》,下列关于建筑物雨篷结构的建筑面积计算&#xf…

windows设置mysql使用率_Windows下配置Mysql

这里说的配置Mysql,是在安装时进行的,请先查看:Windows平台下安装Mysql紧接上文,安装完成后将配置选项打上对勾,按下“Finish”,出现下面的界面,这里有一个很好的功能,mysql配置向导…

mysql 云无忧ps教程_华为云数据库MySQL一键开通读写分离,无忧应对企业业务高峰情景...

业务大促,订单暴增,网站流量暴涨几倍,数据库服务器容量又要扛不住了,眼睁睁看着生意白白溜走,再苦逼也无法解决,“肿”么办?别担心,一键开通读写分离,而且只需一个连接地…

mysql实体监听器_GitHub - langjiangit/spring-boot-starter-mysql-binlog: mysql的binlog监听器

mysql binlog监听器前置操作1.查看mysql是否开启binlogshow variables like log_bin;2.查看是否使用row格式的binlogshow variables like binlog_format;3.如果以上都不是请修改mysql的配置文件添加或者修改如下内容#配置binlog存放路径log-binE://mysql//binlog//mysql-bin#bi…

python 基因序列提取_科学网—简单的Python脚本提取对应位置基因序列(fasta文件) - 王彬忠的博文...

最近,用Python脚本提取,在基因号已知,位置已知条件下,相对应位置的基因序列时发现,这样很简单但是很实用的脚本,在网上却比较难找。而且,能被找到的脚本,相对于具有初级编程能力的人…

python不能安装在中文_无法在Python上安装表

我一直收到错误Command "python setup.py egg_info" failed with error code 1 in C:\Users\HP\AppData\Local\Temp\pip-install-sv33cp8y\tables\当尝试使用^{pr2}$我试过了pip install --upgrade setuptools还有很多其他的东西,但还是不能让它发挥作用。…

python是强定义语言吗_python是强类型语言吗

强弱是对类型而言的。强类型,你有一个值之后这个值是什么类型是确定,比如n1,n的类型是确定的(字符串),因此你不能在Python做n3 mn1运算。而弱类型就不是这样的,值的类型可以在需要的时候再去确定,比如PHP里…

mysql给字段添加描述_用sql 语句给字段添加描述

用sql 语句给字段添加描述IF not exists(SELECT * FROM ::fn_listextendedproperty (NULL, user, dbo, table, strTableName, column, strColumnName))BEGINexec sp_addextendedpropertyMS_Description, strColumnDesc , user, dbo, table,strTableName, column, strColumnName…

深入java核心_Java核心(五)深入理解BIO、NIO、AIO

导读:本文你将获取到:同/异步 阻/非阻塞的性能区别;BIO、NIO、AIO 的区别;理解和实现 NIO 操作 Socket 时的多路复用;同时掌握 IO 最底层最核心的操作技巧。BIO、NIO、AIO 的区别是什么?同/异步、阻/非阻塞…

java反射 获取参数类型_Java反射带参构造创建对象时如何自动转换参数类型

需求是这样的:有一个类,类的路径知道,例如是com.xx.xx.xx其中有不同类型的成员变量(个数未知),有对应的setter和getter方法,有一个无参构造和一个全参构造。现在需要用反射机制...需求是这样的:有一个类&am…

java的乐趣_分享java带来的快乐

2013年9月17日#2011年7月18日#function reportError(sMessage, sUrl, sLine) {var str "";str " 错误信息:" sMessage "\n";str " 错误地址:" sUrl "\n";str " 错误行数:" sLine "\n";str &…