今天學習t-sql中的外聯接的時候,發現乙個預設的規則。
首先來說一下,外聯接的邏輯順序。
1.笛卡爾積:對兩張表進行笛卡爾積,生成所有列
2.on過濾:根據on中的表示式進行篩選,生成內部行。
3.新增外部行:要識別保留表中按照on條件在另乙個表中找不到與之匹配的那些行,然後將這些行新增到聯接的前兩個步驟生成的結果表中。對於來自聯接的非保留表的那些列,追加的外部行中的這些列則用null作為佔位符。
4.最終將外部行和內部行一起輸出。
問題就在這第三個步驟裡,如果在通過a.id=b.id進行聯接,並且在外部行中,有多個a.id=n的行,那麼這些行就會被刪除,只輸出乙個值。
還有一種情況,就是在外部行中a.id已存在於內部行,那麼,這些行也會在外部行中被全部刪除。
總之,外部行中的值具有唯一性。
SQL中內聯接與外聯接小結
內聯接與外聯接的區別通過例項來說明是最清楚的了,下面先準備好測試環境 create database test go create table t1 deptid int,uname char 10 create table t2 deptid int,memo char 50 insert int...
oracle 的外聯接 交叉連線
size medium oracle的聯接分如下幾種 內連線 inner join 外聯接 全連線 full join 左連線 left join 右連線 right join 交叉聯接 cross join 外聯接與內聯接不一樣,外連線返回到查詢結果中的不僅包含符合條件的行,還包括左表 左外連線 ...
SQL學習之高階聯結 自聯結 自然聯結 外聯接
這是講解所需要的sql指令碼 一 自聯結 如下 select from customers 現在有個需求,需要給tom同一公司的所有會員傳送一條郵件。分析下基本思路,首先根據tom找到其所在的公司名,在根據公司名找到其公司民下的所有會員。下面是解決 select from customers whe...