最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySql中的連接查詢問題

 更新時間:2023年03月20日 09:42:21   作者:i知識搬運工  
這篇文章主要介紹了MySql中的連接查詢問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

連接查詢

當進行多表連接查詢時 需要指定字段所屬的表 , 可以提高查詢效率 , 如果不指定字段所屬的表 , 數(shù)據(jù)庫會從每個表中都找一下該字段

  • e . 字段名 : 表示取 emp 表的某個字段
  • emp as e : 表的別名機制 , 可以省略 as 直接寫成 emp e
  • 連接查詢:也可以叫跨表查詢,需要關聯(lián)多張表聯(lián)合起來查詢數(shù)據(jù)
  • emp表和dept表聯(lián)合起來查詢數(shù)據(jù),從emp表中取員工名字,從dept表中取部門名字

注意: 做連接查詢的時候一定要寫上關聯(lián)條件 避免笛卡爾積現(xiàn)象

連接查詢的分類

根據(jù)語法的年代分類

SQL92:1992年的時候出現(xiàn)的語法

  • sql92的缺點:結(jié)構(gòu)不清晰,表的連接條件,和后期進一步篩選的條件,都放到了where后面

SQL99:1999年的時候出現(xiàn)的語法(重點學習)

  • sql99優(yōu)點:表的連接條件和查詢條件分離,連接之后如果還需要進一步篩選,再往后繼續(xù)添加where , 多個表進行連接的時候更清晰

根據(jù)表連接的方式分類

內(nèi)連接:等值連接 , 非等值連接 , 自連接 , inner 可以省略 一般不加

  • 表 A inner join 表 B on 關聯(lián)條件

外連接:左外連接(左連接), 右外連接(右連接), outer 可以省略一般不加

  • 表 A left outer join 表 B on 關聯(lián)條件
  • 表 B right outer join 表 A on 關聯(lián)條件
  • 左連接以左面的表為準和右邊的表比較,和左表相等的不相等都會顯示出來,而右表符合條件的顯示,不符合條件的不顯示 (右連接恰恰相反)
  • 左連接能完成的功能右連接一定可以完成

全連接 , 連接的兩張表都是主表 , 都能查詢出來

笛卡爾積現(xiàn)象

當兩張表進行連接查詢,沒有指定連接條件的時候,最終查詢結(jié)果條數(shù)是兩張表條數(shù)的乘積,這種現(xiàn)象被稱為:笛卡爾積現(xiàn)象(笛卡爾發(fā)現(xiàn)的,這是一個數(shù)學現(xiàn)象)

避免笛卡爾積現(xiàn)象:連接多個表時加連接條件,將滿足這個條件的記錄被篩選出來

  • 匹配的過程中匹配的次數(shù)沒有減少 , 但是最終查詢的結(jié)果條數(shù)是變少了 , 因為根據(jù)連接條件進行了篩選
  • 通過笛卡爾積現(xiàn)象得出,表的連接次數(shù)越多效率越低,盡量避免表的連接次數(shù)

內(nèi)連接之等值連接

因為條件是等量關系,所以被稱為等值連接(連接條件相等的數(shù)據(jù))

查詢每個員工所在部門名稱,顯示員工名和部門

emp e和dept d表進行連接 , 連接條件是:e.deptno = d.deptno

	--sql92的缺點:結(jié)構(gòu)不清晰,表的連接條件,和后期進一步篩選的條件,都放到了where后面

	select 
		e.ename,d.dname
	from
		emp e, dept d
	where
		e.deptno = d.deptno;
		
	--sql99優(yōu)點:表連接的條件是獨立的,連接之后,如果還需要進一步篩選,再往后繼續(xù)添加where		
	select 
		e.ename,d.dname
	from
		emp e
	--inner可以省略(帶著inner可讀性更好)
	(inner) join
		dept d
	on
		e.deptno = d.deptno;

內(nèi)連接之自連接

因為只有一張表連接,具體的查詢方法是把一張表看作兩張表自己連接自己 , 所以成為自連接

查詢員工的上級領導,要求顯示員工名和對應的領導名

一張表看成兩張表 , emp e 代表了員工表,emp m 也代表了領導表

連接條件: e.mgr = m.empno 員工的領導編號 = 領導的員工編號

--SQL92
select e.ename, m.ename from emp e, emp m where e.mgr=m.empno;

--SQL99
select 
	a.ename as '員工名', b.ename as '領導名'
from
	emp e
join
	emp m
on
	e.mgr = m.empno; 

內(nèi)連接之非等值連接

因為連接條件不是一個等量關系,所以稱為非等值連接

顯示薪水大于 2000 的員工信息,并顯示所屬的部門名稱

--采用 SQL92 語法
select 
	e.ename, e.sal, d.dname 
from 
	emp e, dept d 
where 
	e.deptno=d.deptno and e.sal > 2000;
	
--采用 SQL99 語法
select 
	e.ename, e.sal, d.dname 
from 
	emp e 
(inner) join 
	dept d 
on 
	e.deptno=d.deptno 
where 
	e.sal>2000;

找出每個員工的薪資等級,要求顯示員工名、薪資、薪資等級

select 
	e.ename, e.sal, s.grade
from
	emp e
(inner) join
	salgrade s
on
	e.sal between s.losal and s.hisal; 

外連接

外連接: 在外連接當中,兩張表連接產(chǎn)生了主次關系 , 主要查詢的是主表的數(shù)據(jù) , 捎帶著關聯(lián)查詢次表 , 即如果對方?jīng)]有記錄和我主表匹配 , 那么默認對方是null , outer關鍵字可以省略

  • 右外連接: 帶有 right 的是右外連接,表示將join關鍵字右邊的這張表看成主表,主要是為了將這張表的數(shù)據(jù)全部查詢出來,捎帶著關聯(lián)查詢左邊的表
  • 左外連接: 帶有 lef t的是左外連接 , 表示將join關鍵字左邊的這張表看成主表,主要是為了將這張表的數(shù)據(jù)全部查詢出來,捎帶著關聯(lián)查詢右邊的表

**注意: 任何一個右連接都有左連接的寫法 , 任何一個左連接都有右連接的寫法 **

查詢每個員工的上級領導,要求顯示所有員工的名字和領導名 , 如果某個員工沒有領導 , 那么該員工也必須顯示出來

--左連接
select 
	a.ename as '員工名', b.ename as '領導名'
from
	emp a
left (outer) join
	emp b
on
	a.mgr = b.empno; 

--右連接
select 
	a.ename as '員工名', b.ename as '領導名'
from
	emp b
right (outer) join
	emp a
on
	a.mgr = b.empno;

內(nèi)連接和外連接的特點

內(nèi)連接:A表和B表連接,A和B兩張表沒有主次關系是平等的 , 查詢時只是將能夠匹配上連接條件的數(shù)據(jù)查詢出來 , 即如果沒有匹配的就查詢不出來 , inner關鍵字可以省略

外連接: 在外連接當中,兩張表連接產(chǎn)生了主次關系 , 主要查詢的是主表的數(shù)據(jù) , 捎帶著關聯(lián)查詢次表 , 即如果對方?jīng)]有記錄和我主表匹配 , 那么默認對方是null , outer關鍵字可以省略

注意: 區(qū)分內(nèi)外連接的辦法是通過 right 和 left 關鍵字 , 不是通過 inner 和 outer 因為它們都可以省略 , 并且外連接的查詢結(jié)果條數(shù)一定是大于等于內(nèi)連接的查詢結(jié)果條數(shù)

顯示員工信息,并顯示所屬的部門名稱

select 
	e.ename,d.dname
from
	emp e
join
	dept d
on
	e.deptno = d.deptno; 

顯示員工信息,并顯示所屬的部門名稱,如果某一個部門沒有員工,那么該部門也必須顯示出來

--外連接(右外連接)
select 
	e.ename,d.dname
from
	emp e 
--outer是可以省略的,帶著可讀性強
--right代表什么:表示將join關鍵字右邊的這張表看成主表,主要是為了將這張表的數(shù)據(jù)全部查詢出來,捎帶著關聯(lián)查詢左邊的表
right (outer) join 
	dept d
on
	e.deptno = d.deptno;


--外連接(左外連接)
select 
	e.ename,d.dname
from
	dept d 
--outer是可以省略的,帶著可讀性強
left (outer) join 
	emp e
on
	e.deptno = d.deptno;

多表連接

一條SQL中內(nèi)連接和外連接可以混合 , 都可以出現(xiàn)

--表示一: a 和 b 進行內(nèi)連接 , a 和 c 進行內(nèi)連接 , a 和 d 進行右外連接(推薦)

--表示二: a 和 b 的內(nèi)連接結(jié)果去內(nèi)連接 c 的結(jié)果再去右外連接 d
select 
	...
from
	a
join
	b
on
	a和b的連接條件
join
	c
on
	a和c的連接條件
right join
	d
on
	a和d的連接條件

找出每個員工的部門名稱以及工資等級,要求顯示員工名、部門名、薪資、薪資等級

	select 
		e.ename,e.sal,d.dname,s.grade
	from
		emp e
	join
		dept d
	on 
		e.deptno = d.deptno
	join
		salgrade s
	on
		e.sal between s.losal and s.hisal;

查詢結(jié)果

	+--------+---------+------------+-------+
	| ename  | sal     | dname      | grade |
	+--------+---------+------------+-------+
	| SMITH  |  800.00 | RESEARCH   |     1 |
	| ALLEN  | 1600.00 | SALES      |     3 |
	| WARD   | 1250.00 | SALES      |     2 |
	| JONES  | 2975.00 | RESEARCH   |     4 |
	| MARTIN | 1250.00 | SALES      |     2 |
	| BLAKE  | 2850.00 | SALES      |     4 |
	| CLARK  | 2450.00 | ACCOUNTING |     4 |
	| SCOTT  | 3000.00 | RESEARCH   |     4 |
	| KING   | 5000.00 | ACCOUNTING |     5 |
	| TURNER | 1500.00 | SALES      |     3 |
	| ADAMS  | 1100.00 | RESEARCH   |     1 |
	| JAMES  |  950.00 | SALES      |     1 |
	| FORD   | 3000.00 | RESEARCH   |     4 |
	| MILLER | 1300.00 | ACCOUNTING |     2 |
	+--------+---------+------------+-------+

找出每個員工的部門名稱以及工資等級,還有上級領導,要求顯示員工名、領導名、部門名、薪資、薪資等級

	select 
		e.ename,e.sal,d.dname,s.grade,l.ename
	from
		emp e
	join
		dept d
	on 
		e.deptno = d.deptno
	join
		salgrade s
	on
		e.sal between s.losal and s.hisal
	left join
		emp l
	on
		e.mgr = l.empno;

查詢結(jié)果

	+--------+---------+------------+-------+-------+
	| ename  | sal     | dname      | grade | ename |
	+--------+---------+------------+-------+-------+
	| SMITH  |  800.00 | RESEARCH   |     1 | FORD  |
	| ALLEN  | 1600.00 | SALES      |     3 | BLAKE |
	| WARD   | 1250.00 | SALES      |     2 | BLAKE |
	| JONES  | 2975.00 | RESEARCH   |     4 | KING  |
	| MARTIN | 1250.00 | SALES      |     2 | BLAKE |
	| BLAKE  | 2850.00 | SALES      |     4 | KING  |
	| CLARK  | 2450.00 | ACCOUNTING |     4 | KING  |
	| SCOTT  | 3000.00 | RESEARCH   |     4 | JONES |
	| KING   | 5000.00 | ACCOUNTING |     5 | NULL  |
	| TURNER | 1500.00 | SALES      |     3 | BLAKE |
	| ADAMS  | 1100.00 | RESEARCH   |     1 | SCOTT |
	| JAMES  |  950.00 | SALES      |     1 | BLAKE |
	| FORD   | 3000.00 | RESEARCH   |     4 | JONES |
	| MILLER | 1300.00 | ACCOUNTING |     2 | CLARK |
	+--------+---------+------------+-------+-------+

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • MySQL單表千萬級數(shù)據(jù)處理的思路分享

    MySQL單表千萬級數(shù)據(jù)處理的思路分享

    日前筆者需要處理MySQL單表千萬級的電子元器件數(shù)據(jù),進行數(shù)據(jù)歸類, 數(shù)據(jù)清洗以及器件參數(shù)處理,進而得出國產(chǎn)器件與國外器件的替換兼容性數(shù)據(jù),為電子工程師尋找國產(chǎn)替換件提供參考。
    2021-06-06
  • MySQL UPDATE更新語句精解

    MySQL UPDATE更新語句精解

    mysql update命令的一些詳細用法分析,真是不錯的好東西,建議大家看看。
    2009-03-03
  • macOS安裝Solr并索引MySQL

    macOS安裝Solr并索引MySQL

    這篇文章主要介紹了macOS安裝Solr并索引MySQL的相關資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-11-11
  • MySQL?字符串轉(zhuǎn)換為數(shù)字的方法小結(jié)

    MySQL?字符串轉(zhuǎn)換為數(shù)字的方法小結(jié)

    這篇文章主要介紹了MySQL字符串轉(zhuǎn)換為數(shù)字的幾種方法,本文給大家列列舉了三種方法,每種方法通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-01-01
  • MySQL?8.0.29?安裝配置方法圖文教程

    MySQL?8.0.29?安裝配置方法圖文教程

    這篇文章主要為大家詳細介紹了MySQL?8.0.29?安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Linux系統(tǒng)下自行編譯安裝MySQL及基礎配置全過程解析

    Linux系統(tǒng)下自行編譯安裝MySQL及基礎配置全過程解析

    這篇文章主要介紹了Linux系統(tǒng)下自行編譯安裝MySQL及基礎配置全過程解析,配置方面主要針對InnoDB引擎來講,需要的朋友可以參考下
    2016-02-02
  • MySQL單表查詢實例詳解

    MySQL單表查詢實例詳解

    這篇文章主要給大家介紹了關于MySQL單表查詢的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • 淺談MySQL 億級數(shù)據(jù)分頁的優(yōu)化

    淺談MySQL 億級數(shù)據(jù)分頁的優(yōu)化

    mysql大數(shù)據(jù)量使用limit分頁,隨著頁碼的增大,查詢效率越低下。本文就來介紹一下MySQL 億級數(shù)據(jù)分頁的優(yōu)化,感興趣的小伙伴們可以參考一下
    2021-06-06
  • mysql中文顯示為問號?的問題及解決

    mysql中文顯示為問號?的問題及解決

    這篇文章主要介紹了mysql中文顯示為問號?的問題及解決方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 在MySQL中使用GTIDs復制協(xié)議和中斷協(xié)議的教程

    在MySQL中使用GTIDs復制協(xié)議和中斷協(xié)議的教程

    這篇文章主要介紹了在MySQL中使用GTIDs復制協(xié)議和中斷協(xié)議的教程,主要用于多個服務器之間的通信,需要的朋友可以參考下
    2015-04-04

最新評論

成都市| 收藏| 毕节市| 鄂伦春自治旗| 噶尔县| 稻城县| 福鼎市| 霸州市| 上虞市| 延边| 拜城县| 新疆| 工布江达县| 彩票| 娄底市| 柳林县| 武鸣县| 大新县| 泰安市| 鸡泽县| 喀什市| 诸暨市| 崇州市| 本溪| 桂东县| 合水县| 怀仁县| 安丘市| 上饶市| 和平区| 土默特右旗| 南昌县| 松溪县| 泰宁县| 民县| 万盛区| 独山县| 桦甸市| 紫金县| 霸州市| 临潭县|