主頁 > 資料庫 > 選讀SQL經典實體筆記02_多表查詢

選讀SQL經典實體筆記02_多表查詢

2023-07-08 08:12:36 資料庫

1. 除非有必要,否則不要用UNION代替UNION ALL

2. 查找兩個表中相同的行

2.1. 當執行連接查詢時,為了得到正確的結果,必須慎重考慮要把哪些列作為連接項

2.2. 當參與連接的行集里的某些列可能有共同值,而其他列有不同值的時候,這一點尤為重要

2.3. 集合運算INTERSECT會回傳兩個行集的相同部分

2.3.1. 必須保證兩個表里參與比較的專案數目是相同的,并且資料型別也是相同的

2.3.2. 默認不會回傳重復項

2.4. 示例

2.4.1. sql

create view V
as
select ename,job,sal
  from emp
 where job = 'CLERK'
select * from V

ENAME      JOB              SAL

---------- --------- ----------

SMITH      CLERK            800
ADAMS      CLERK           1100
JAMES      CLERK            950
MILLER     CLERK           1300

2.4.2.   sql

select e.empno,e.ename,e.job,e.sal,e.deptno
    from emp e join V
      on (    e.ename = v.ename
          and e.job   = v.job
          and e.sal   = v.sal )

2.4.3.   sql

select empno,ename,job,sal,deptno
    from emp
   where (ename,job,sal) in (
    select ename,job,sal from emp
    intersect
    select ename,job,sal from V
   )

3. 查找只存在于一個表中的資料

3.1. MySQL

3.1.1.  sql

select deptno
   from dept
  where deptno not in (select deptno from emp)

3.1.2. sql

select distinct deptno
  from dept
where deptno not in (select deptno from emp)

3.1.2.1. 排除重復項

3.1.3. 在使用NOT IN時,要注意Null值

3.2. PostgreSQL

3.2.1.  sql

select deptno from dept
 except
select deptno from emp

3.3. Oracle

3.3.1.  sql

select deptno from dept
 minus
select deptno from emp

3.4. 要點

3.4.1. 參與運算的兩個SELECT串列要有相同的資料型別和值個數

3.4.2. 不回傳重復項

3.4.3. Null值不會產生問題

3.5. sql

select deptno
  from dept
 where deptno not in ( 10,50,null )
( no rows )
select deptno
  from dept
 where not (deptno=10 or deptno=50 or deptno=null)
( no rows )

3.5.1. 三值邏輯

3.6. 免受Null值影響的替代方案

3.6.1. sql

select d.deptno
  from dept d
 where not exists ( select null
                      from emp e
                     where d.deptno = e.deptno )

4. 從一個表檢索與另一個表不相關的行

4.1. 使用外連接并過濾掉Null值

4.2.  sql

select d.*
   from dept d left outer join emp e
     on (d.deptno = e.deptno)
  where e.deptno is null

4.2.1. 反連接(anti-join)

5. 新增連接查詢而不影響其他連接查詢

5.1. 外連接既能夠獲得額外資訊,又不會丟失原有的資訊

5.1.1.  sql

select e.ename, d.loc, eb.received
   from emp e join dept d
     on (e.deptno=d.deptno)
   left join emp_bonus eb
     on (e.empno=eb.empno)
  order by 2

5.2. 使用標量子查詢

5.2.1. 把子查詢放置在SELECT串列里

5.2.2. 在不破壞當前結果集的情況下,標量子查詢是為現有查詢陳述句添加額外資料的好辦法

5.2.3.  sql

select e.ename, d.loc,
        (select eb.received from emp_bonus eb
          where eb.empno=e.empno) as received
   from emp e, dept d
  where e.deptno=d.deptno
  order by 2

6. 識別并消除笛卡兒積

6.1. n-1法則

6.1.1. n代表FROM子句里表的個數

6.1.2. n-1則代表消除笛卡兒積所必需的連接查詢的最少次數

6.2. 笛卡兒積常用于變換或展開(以及合并)結果集,生成一系列的值,以及模擬loop回圈

7. 組合使用連接查詢與聚合函式

7.1. 如果連接查詢產生了重復行,兩種辦法來使用聚合函式可以避免得出錯誤的計算結果

7.1.1. 呼叫聚合函式時直接使用關鍵字DISTINCT,這樣每個值都會先去掉重復項再參與計算

7.1.2. 在進行連接查詢之前先執行聚合運算(以內嵌視圖的方式),這樣可以避免錯誤的結果,因為聚合運算發生在連接查詢之前

8. 從多個表中回傳缺失值

8.1. 使用全外連接(full outer join),基于一個共同值從兩個表中回傳缺失值

8.1.1.  sql

select d.deptno,d.dname,e.ename
   from dept d full outer join emp e
     on (d.deptno=e.deptno)B

8.2. 合并兩個外連接的查詢結果

8.2.1.  sql

select d.deptno,d.dname,e.ename
   from dept d right outer join emp e
     on (d.deptno=e.deptno)
  union
 select d.deptno,d.dname,e.ename
   from dept d left outer join emp e
     on (d.deptno=e.deptno)

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/556814.html

標籤:MySQL

上一篇:社區星力量 | 平等、包容、耐性,這對貢獻小白來說很重要

下一篇:返回列表

標籤雲
其他(162232) Python(38266) JavaScript(25528) Java(18291) C(15239) 區塊鏈(8275) C#(7972) AI(7469) 爪哇(7425) MySQL(7291) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5876) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4613) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2438) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) HtmlCss(1993) .NET技术(1986) 功能(1967) Web開發(1951) C++(1942) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1882) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • 選讀SQL經典實體筆記02_多表查詢

    ![](https://img2023.cnblogs.com/blog/3076680/202307/3076680-20230706135034978-826621908.png) # 1. 除非有必要,否則不要用UNION代替UNION ALL # 2. 查找兩個表中相同的行 ## 2.1.  ......

    uj5u.com 2023-07-08 08:12:36 more
  • 社區星力量 | 平等、包容、耐性,這對貢獻小白來說很重要

    ![file](https://img2023.cnblogs.com/other/2685289/202307/2685289-20230707145108418-723743542.png) 截至今天,Apache DolphinScheduler 專案在 GitHub 上的 Star 數已突破 ......

    uj5u.com 2023-07-08 08:12:13 more
  • clickhouse使用入門

    轉載請注明出處(~ ̄▽ ̄)~嚴禁用于商業目的的轉載~ 導語:同學,你也不想你根本不懂ClickHouse,卻趕鴨子上架使用的事情被其他人知道吧? 寫在前面:本文旨在讓原先有一定SQL基礎的人快速簡單了解ClickHouse的(關鍵)概念/特性,側重于使用方面的介紹比較而非原理/實作挖掘。文章算是個人 ......

    uj5u.com 2023-07-07 09:08:33 more
  • 研產供銷資料一體化,解碼汽車集團企業的資料治理之道

    OTA(Over-The-Air,空中下載技術),是汽車使用的一種遠程無線升級技術。車主只要保持聯網的狀態,汽車就可以像手機一樣進行系統升級。OTA升級最大的好處是,不管對車輛進行常規的升級還是大面積出現軟體問題需要修復,都可以通過OTA來解決。 資料顯示,2022年中國乘用車OTA裝配量達到765 ......

    uj5u.com 2023-07-07 09:08:16 more
  • mysql安裝zip包詳細教程

    ## 下載網址 1.MySQL官網下載壓縮版檔案,放至安裝路徑下載zip安裝包 [MySQL :: Download MySQL Community Server (Archived Versions)](https://downloads.mysql.com/archives/community/ ......

    uj5u.com 2023-07-07 09:02:52 more
  • 【技識訓累】Mysql中的SQL語言【技術篇】【二】

    博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ......

    uj5u.com 2023-07-07 09:02:41 more
  • Mybatis-SQL分析組件

    大促備戰,最大的隱患項之一就是慢sql,帶來的破壞性最大,也是日常作業中經常帶來整個應用抖動的最大隱患,而且對sql好壞的評估有一定的技術要求,有一些缺乏經驗或者因為不夠仔細造成一個壞的sql成功走到了線上,等發現的時候要么是造成了線上影響、報警、或者后置的慢sql采集發現,這時候一般無法快速止損,... ......

    uj5u.com 2023-07-07 09:02:36 more
  • Mybatis-SQL分析組件

    大促備戰,最大的隱患項之一就是慢sql,帶來的破壞性最大,也是日常作業中經常帶來整個應用抖動的最大隱患,而且對sql好壞的評估有一定的技術要求,有一些缺乏經驗或者因為不夠仔細造成一個壞的sql成功走到了線上,等發現的時候要么是造成了線上影響、報警、或者后置的慢sql采集發現,這時候一般無法快速止損,... ......

    uj5u.com 2023-07-07 08:59:55 more
  • clickhouse使用入門

    轉載請注明出處(~ ̄▽ ̄)~嚴禁用于商業目的的轉載~ 導語:同學,你也不想你根本不懂ClickHouse,卻趕鴨子上架使用的事情被其他人知道吧? 寫在前面:本文旨在讓原先有一定SQL基礎的人快速簡單了解ClickHouse的(關鍵)概念/特性,側重于使用方面的介紹比較而非原理/實作挖掘。文章算是個人 ......

    uj5u.com 2023-07-07 08:59:32 more
  • 華為云GaussDB亮相2023可信資料庫發展大會,榮獲三項評測證書!

    摘要:2023可信資料庫發展大會上,華為云資料庫服務產品部總經理蘇光牛圍繞華為云GaussDB的產品能力和實踐進行了分享 本文分享自華為云社區《華為云GaussDB亮相2023可信資料庫發展大會,榮獲三項評測證書!》,作者: GaussDB 資料庫。 近日,由中國資訊通信研究院、中國通信標準化協會指 ......

    uj5u.com 2023-07-07 08:54:03 more