資料庫(4)多表聯合查詢
二、多表聯合查詢
1、合併結果集 : 把兩個select語句的查詢結果合併到一起
union 合併結果集並且去除重複資料。
union all合併結果集並且不去除重複資料
要求:被合併的兩個結果集,列數和列型別必須相同
2、連線查詢 : 就是求多個表的乘積
例如 a表連線b 表那麼查詢結果就是a表*b表
連線查詢產生 笛卡爾積(在sql 中實現方式,交叉連線 cross join)
所有的連線方式都會產生笛卡爾積,然後加上限制條件,才會有實際查詢意義
jion 就是把多個表連線成一個表的手段
多表查詢分為 內連線和外連線
select empt .ename,dept .dname,empt .job from empt as e,dept as d where empt .deptno=dept .deptno;
select e.ename,d.dname,e.job from empt as e,dept as d where e.deptno=d.deptno;
AS 關鍵字可以給表起別名 as 可以省略
內連線 【inner】join...on inner可省略
【隱式】 select e.ename,d.dname,e.job from empt as e,dept as d where e.deptno=d.deptno;
【顯式】select e.ename,d.dname,e.job from empt as e inner join dept d on e.deptno=d.deptno;
特點: 查詢結果必須是滿足條件的
外連線 【outer】join...on outer可省略
- 左連線 Left 【outer】join
- 右連線 right 【outer】join
- 全外連線 full join(mysql不支援)
左連線 :以左表為主,先查詢出左表,然後查詢右表,右表中滿足條件的顯示,不滿足條件的顯示為null
例如:SELECT * FROM emp e LEFT OUTER JOIN dept d ON e.deptno = d.deptno;
右連線:右表為主,先查出右表,在查詢左表,左表中滿足條件的顯示,不滿足條件的顯示為null
SELECT * FROM emp e RIGHT OUTER JOIN dept d ON e.deptno = d.deptno;
總結:
1、如果sql用的是Left join
- on後面條件對left 表沒作用,只是對right 表起過濾作用
- where 語句可以對生成臨時表後起到過濾,相當於過濾了left表
2、如果sql用的是right join
- on後面條件對right 表沒作用,只是對left 表起過濾作用
- where 語句可以對生成臨時表後起到過濾,相當於過濾了right 表
在使用left join時 on 和where區別如下:
1、on條件條件是否為真,是在 生成臨時表時使用的條件,不管on的為真,都會返回左邊表的資料
2、where條件在生成臨時表後,再對臨時表進行過濾,如果條件不為真,就會全部過濾。
自然連線 :natural join
自然連線 無需你去給出外來鍵關聯等式,它會自動找到這一等式。兩張連線表中,名稱和型別完全一致的列作為條件。
SELECT * FROM emp NATURAL JOIN dept;
SELECT * FROM emp NATURAL LEFT JOIN dept;
SELECT * FROM emp NATURAL RIGHT JOIN dept;
總結:
連線查詢時,sql查詢的核心,按照實際需求來選擇對應的型別。
如果選擇不當,非但不能提高效率,反而會帶來一系列的邏輯錯誤,甚至效能會下降。
選擇依據:
- 查兩張表關聯列 相等的資料,用內連線
- right表時left的子集,用左外連線
- left表是right的子集,用右外連線
- right和left 彼此之間的交集,但是互不為子集,使用全外連線
3、子查詢
一個select語句中 包含另一個完整的select語句,子查詢 就是 巢狀查詢
1)、單行單列 (用於條件)
例如 :員工表中 工資高於CLARK的員工都有誰
分析 :
1.查詢CLARK的工資 select sal from emp where ename="CLARK"2.查詢高於CLARK的員工 select * from emp where sal > 第一步的結果
3.結論 select * from emp where sal > (select sal from emp where ename="CLARK")
2)、單行多列 (用於條件)
例如 :查詢員工表中 工作 和 工資 與 MARTIN完全相同的員工資訊分析 :
1.查詢MARTIN的工作和工資 select job,sal from emp where ename="MARTIN"
2.查詢與MARTIN工作和工資相同的人 select * from emp where (job,sal) in 第一步的結果
3.結論 select * from emp where (job,sal) in (select job,sal from emp where ename="MARTIN")
3).多行單列 (用於條件)
多行子查詢 返回多行資料
在where 使用多行子查詢時 要用 all any in
例如 :查詢工資高於30號部門所有人的 員工
分析 :
1.查詢30號部門所有人的工資 select sal from emp where deptno=30;
2.查詢高於30號部門所有人工資的員工資訊 select * from emp where sal > all 第一步的結果
3.結論
SELECT * FROM emp WHERE sal > ALL (SELECT sal FROM emp WHERE deptno=30);SELECT * FROM emp WHERE sal > ANY (SELECT sal FROM emp WHERE deptno=30);
/*練習 部門編號為20的員工工資 並且 大於部門編號為30的所有人工資的 員工列表*/
SELECT * FROM emp WHERE deptno=20 AND sal> ALL(SELECT sal FROM emp WHERE deptno=30)
4).多行多列 (表)
例如 :查詢員工編號為7788的員工 姓名 工資 部門名稱 部門地址
分析 :涉及到 emp dept兩張表
1.查詢 姓名 和 工資
select ename,sal from emp where empno=7788
2.查詢 部門名稱 和 部門地址
select e.ename,e.sal,d.dname,d.loc
from emp e,dept d
where e.deptno = d.deptno and e.empno=7788
改版:
select e.ename,e.sal,d.dname,d.loc
from emp e,(select dname,loc,deptno from dept) d
where e.deptno = d.deptno and e.empno=7788
/*練習 求7369員工 姓名 經理姓名 經理編號 自己連線自己*/
SELECT e1.ename,e2.ename,e2.empno
FROM emp e1,(SELECT empno,ename FROM emp) e2
WHERE e1.mgr = e2.empno AND e1.empno = 7369
相關推薦
資料庫(4)多表聯合查詢
二、多表聯合查詢 1、合併結果集 : 把兩個select語句的查詢結果合併到一起 union 合併結果集並且去除重複資料。 union all合併結果集並且不去除重複資料 要求:被合併的兩個結果集,列數和列型別必須相同
(三十七)多表聯合查詢
包含 查詢語句 使用 mil pan 比較 ... style 嵌套 1.聯合查詢----INNER|LEFT|RIGHT JOIN SELECT 字段1,字段2,.....FROM 表1 INNER|LEFT|RIGHT JOIN 表2 ON 表1.字段 = 表2
MyBatis學習總結(三)——多表關聯查詢與動態SQL
一、多表關聯查詢 表與表之間有三種常見的關聯關係,分別是一對一,一對多與多對多關係,MyBatis直接提供一對一與一對多的關聯關係,可以通過間接的方式實現多對多關聯。 1.1、一對一關係 1.1.1、執行環境 假定一個員工(emp)擁有一個登入使用者(user),員工與使用者表之間是一對一關係:
Mysql筆記(四)多表連線查詢
版權宣告:本文為博主原創文章,轉載請附上博文連結! https://blog.csdn.net/csdnluolei/article/details/83410321 資料庫的建立參考我的另一篇部落格 https://blog.csdn.net/csdnluolei/article/d
MFC學習(12)Access資料庫多表聯合查詢
1、Access 資料庫多表聯合查詢,每次連線之前須將連線符前面的內容放在括號裡面,示例如下: select 表a.欄位1,表b.欄位1,表c.欄位1,表d.欄位1 from ((表a inner join 表b on 表a.欄位=表b.欄位) inner join 表c on 表c.欄位=表a.
SQL多表聯合查詢(LEFT JOIN)條件差異
logs 技術分享 .cn where 聯合查詢 uid exist 包含 into 查詢A: select a.*,b.* into Bus605115_ON_Where_And --(642 行受影響) from PositionN a left join szt
MyBatis-Plus多表聯合查詢並且分頁(3表)
這3張表的關係是 模型表Model ===> 訓練表Training ===》應用表Application(大概的邏輯是:選擇應用,然後訓練,然後成為模型)如有不理解的可加我微信:17625089935 白天問我一般晚上回 首先我們先建立實體Model(我使用的d
MyBatis學習總結(九)---基於XML多表聯合查詢(一對一、一對多、多對多)
1、一對一的關聯 使用association,association元素用於處理“has-one”(一對一)這種型別關係。 作用:針對pojo物件屬性的對映,它的兩個主要引數此時對應的值: javaType對應pojo類名, property對應pojo的
史上最簡單MySQL教程詳解(基礎篇)之多表聯合查詢
常用術語 內連線 外連線 左外連線 右外連線 注意事項: 自連線 子查詢 在上篇文章史上最簡單MySQL教程詳解(基礎篇)之資料庫設計正規化及應用舉例我們介紹過,在關係型資料庫中,我們通常為了減少資料的冗餘量將對資料表進行規範,將
mysql常用語句——多表聯合查詢(一)
學習筆記: 學生選課資料庫SCT 學生表(學號,姓名,性別,年齡,院系編號,班級) Student(S# char(8),Sname char(10),Ssex char(2),Sage integer,D# char(2),Sclass char(6) 院系表(院系編號
【MySQL】多表聯合查詢(新增查詢欄位、引數設定)
所羅門王說:沒有智慧解決不了的問題。SELECT * from tb_corporation_and_user 人員所在團隊 (`user_id`, `corporation_id` , `role_id` ) SELECT * from tb_corporati
資料庫學習總結(七)——多表查詢練習題(2)
這一篇的部落格是基於scott.sql資料庫操作的,備份檔案上傳在我的資源裡 下載後匯入資料庫方法同我的上篇部落格資料庫學習總結(六) scott.sql內包含emp dept salgrde 三個表 僱員表:記錄了一個僱員的基本資訊 EMP(僱員表) NO
MySQL優化系列(二)--查詢優化(2)(外連線、多表聯合查詢以及查詢注意點)
繼續這一系列,上篇的簡單查詢優化並沒講完,第二點還有查詢注意點以及多表查詢優化呢!! 文章結構:(1)多表查詢步步優化;(2)查詢編寫的注意點。 /* 補充說明(往後有博友反饋的話,會繼續補充。) */ 一、2017-7-19: 關於“超大
Oracle筆記(六) 多表查詢
針對 多人 筆記 padding 工資 cells 找到 mem 概念 Oracle筆記(六) 多表查詢 本次預計講解的知識點 1、 多表查詢的操作、限制、笛卡爾積的問題; 2、 統計函數及分組統計的操作; 3、 子查詢的操作,並且結合限定查詢、數據排序、多表查詢、統計
sql常用操作(三)多表查詢
1 連線查詢 1.1連線就是指兩個或2個以上的表(資料來源)“連線起來成為一個數據源”。 實際上,兩個表的完全的連線是這樣的一個過程: 左邊的表的每一行,跟右邊的表的每一行,兩兩互相“橫向對接”後所得到的所有資料行的結果。 注意:連線之後,並非形成了一個新的資料表,而只是一種“記憶體形態”。 &nb
oracle高階查詢(3)——多表查詢
1.多表查詢的基礎笛卡爾集 多張表查詢產生的表的列數等於所有表的列數之和,行數等於多張表之積 2.多表查詢分等值連線,不等值連線,外連線,自連線 等值連線 select e.empno,e.ename from emp e,dept d where e .deptno
MySQL資料庫操作(四)——多表之間的關係
主鍵與外來鍵 1、一張表可以有多個外來鍵 2、外來鍵是表的主鍵,可以是別的表,也可以是本身(少見) 3、外來鍵可以為null,可以重複,但是不能不存在,必須要查的到 建立語法 foreign key(
常用SQL命令彙總(二)-多表查詢
一、多表查詢 1.連線查詢: 連線查詢是將兩個或兩個以上的表按照某個條件連線起來,從中選取需要的資料; t_book表:
Oracle 查詢技巧與優化(二) 多表查詢
前言 上一篇blog介紹了Oracle中的單表查詢和排序的相關技巧(http://blog.csdn.net/wlwlwlwl015/article/details/52083588),本篇blog繼續介紹查詢中用的最多的——多表查詢的技巧與優化方式,下面依舊
python3.5+pymysql學習資料庫(4)查詢語句學習
資料準備好以後先學習查詢操作。直接開始做題還是太難了,畢竟太多年沒有用過SQL,還是腳踏實地從基礎開始學習比較靠譜。 學習資料地址:https://www.w3cschool.cn/sql/zk9swfor.html # 查詢學生資訊表全部資訊 sql = "SELECT * FROM