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.pswp.cn/news/533382.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533382.shtml
英文地址,請注明出處:http://en.pswp.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 &…