交叉連線
交叉連線(cross join),又稱笛卡爾連線(cartesian join)或叉乘(product),它是所有型別內連線的基礎。它把表看作是行記錄的集合,交叉連線即返回這兩個集合的笛卡爾積。這其實等價於內連線的連線條件始終為」真」,或連線條件不存在。
笛卡爾積引用自數學,在數學中,兩個集合x和y的笛卡爾積(cartesian product),又稱直積。假設集合x=,集合y=,則兩個集合的笛卡爾積為。可以擴充套件到多個集合的情況。1
2select * from user cross join orders
內連線inner join on
通過on後面的條件,將兩張表中的資料過濾。1
2--inner join on
select * from user inner join orders on user.uid=orders.uid
inner join using:
通過指定兩張表中比較的字段來進行等式消除迪卡爾積1
2--inner join using
select * from user inner join orders using(uid)
在inner join on和inner join using中,可以將inner省略,因為join預設就是內連線(inner join),省略inner後的查詢語句如下,效果與有inner是一樣的。1
3--省略inner
select * from user join orders on user.uid=orders.uid;
select * from user join orders using(uid);
隱式內連線
在實際開發中,使用最多的一種內連線叫做隱式內連線,其實就是將inner join省略,也不在使用on進行條件過濾,而是直接使用where進行過濾,查詢語句如下,結果與inner join on一樣。1
2--隱式內連線
select * from user,orders where user.uid=orders.uid;
小結cross join 只是將兩個表連線起來,產生笛卡爾積。
natural join 使用表中主外來鍵關聯來消除迪卡爾積。
inner join using 可省略inner,在using後直接書寫比較的欄位名稱,注意要加括號。
inner join on 可省略inner,在on後面直接書寫比較條件,通過條件來消除迪卡爾積。
隱式內連線,在開發應用比較多,可以省略inner join,表與表之間用逗號分開,通過where條件來消除迪卡爾積。
外鏈結內連線只是將兩個或多個表中有關聯的資料集查詢出來,而沒有關聯的資料(只有乙個表中有,而另外乙個表中沒有的資料)則無法查詢出來。如果在開發中需要將所有使用者及其訂單查詢出來,如果使用者沒有訂單,也要查詢出使用者資訊。那麼,使用內連線顯然是做不到的,這時就需要使用外連線。
外連線並不要求連線的兩表的每一條記錄在對方表中都一條匹配的記錄。連線表保留所有記錄,甚至某條記錄沒有匹配的記錄也要保留.,外連線可依據連線表保留左表、右表或全部表的行而進一步分為左外連線、右外連線和全連線。注意:mysql只支援左外連線與右外連線,而不支援全連線。左外連線:left outer join on 注意 outer 可以省略
右外連線:right outer join on 注意 outer可以省略
執行下面sql語句查詢結果如下:1select * from user left outer join orders on user.uid=orders.uid;
可以看出,即便mike和marry沒有訂單,其orders表中的資料以null顯示出來。
上述sql語句使用的是左外連線,也就是說以user表為準,保留user表中所有資料,右表orders中沒有關聯的資料,以null關聯顯示出來。右外連線也是同理,執行下面sql語句查詢結果如下:1select * from orders right outer join user on orders.uid=user.uid
MySQL多表操作
方式一 create table stu sid int primary key,sname varchar 20 age int 方式二 create table stu sid int,sname varchar 20 age int,primary key sid 方式三 create tab...
MySql多表操作
今日任務 教學目標 1.為什麼要拆表 1.1表的準備 建立一張分類表 類別id,類別名稱.備註 類別id為主鍵並且自動增長 建立一張明星表 明星id,明星名稱,明星身價,明星年齡,明星性別,明星類別.備註 明星id為主鍵並且自動增長 2.引用完整性 表和表之間存在一種關係,但是這個關係需要誰來維護和...
MySQL多表操作
1 笛卡爾積 兩個集合的所有組合 select from 表1,表2 2 內連線查詢 隱式內連線 select from 表1,表2 where 表1.欄位1 表2.id select 表1.欄位1,表1,欄位2,表2.欄位1 from 表1,表2 where 表1.欄位1 表2.id select...