国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

MySQL中基本的多表連接查詢教程

2024-07-24 12:45:25
字體:
供稿:網(wǎng)友

一、多表連接類型
1. 笛卡爾積(交叉連接) 在MySQL中可以為CROSS JOIN或者省略CROSS即JOIN,或者使用','  如:

        由于其返回的結(jié)果為被連接的兩個數(shù)據(jù)表的乘積,因此當有WHERE, ON或USING條件的時候一般不建議使用,因為當數(shù)據(jù)表項目太多的時候,會非常慢。一般使用LEFT [OUTER] JOIN或者RIGHT [OUTER] JOIN

 2.   內(nèi)連接INNER JOIN 在MySQL中把I

SELECT * FROM table1 CROSS JOIN table2 SELECT * FROM table1 JOIN table2 SELECT * FROM table1,table2

NNER JOIN叫做等值連接,即需要指定等值連接條件在MySQL中CROSS和INNER JOIN被劃分在一起。 join_table: table_reference [INNER | CROSS] JOIN table_factor [join_condition]

3. MySQL中的外連接,分為左外連接和右連接,即除了返回符合連接條件的結(jié)果之外,還要返回左表(左連接)或者右表(右連接)中不符合連接條件的結(jié)果,相對應(yīng)的使用NULL對應(yīng)。

例子:

user表:

id | name———1 | libk2 | zyfon3 | daodao

user_action表:

user_id | action—————1 | jump1 | kick1 | jump2 | run4 | swim

sql:

select id, name, action from user as u left join user_action a on u.id = a.user_id

result:

id | name | action——————————–1 | libk | jump ①1 | libk | kick ②1 | libk | jump ③2 | zyfon | run ④3 | daodao | null ⑤

分析:
注意到user_action中還有一個user_id=4, action=swim的紀錄,但是沒有在結(jié)果中出現(xiàn),
而user表中的id=3, name=daodao的用戶在user_action中沒有相應(yīng)的紀錄,但是卻出現(xiàn)在了結(jié)果集中
因為現(xiàn)在是left join,所有的工作以left為準.
結(jié)果1,2,3,4都是既在左表又在右表的紀錄,5是只在左表,不在右表的紀錄

 

工作原理:

從左表讀出一條,選出所有與on匹配的右表紀錄(n條)進行連接,形成n條紀錄(包括重復(fù)的行,如:結(jié)果1和結(jié)果3),如果右邊沒有與on條件匹配的表,那連接的字段都是null.然后繼續(xù)讀下一條。

引申:
我們可以用右表沒有on匹配則顯示null的規(guī)律, 來找出所有在左表,不在右表的紀錄, 注意用來判斷的那列必須聲明為not null的。
如:
sql:

select id, name, action from user as u left join user_action a on u.id = a.user_id where a.user_id is NULL

(注意:

        1.列值為null應(yīng)該用is null 而不能用=NULL
         2.這里a.user_id 列必須聲明為 NOT NULL 的.


上面sql的result:

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 普兰店市| 石棉县| 新沂市| 临漳县| 克山县| 莱阳市| 揭东县| 电白县| 高台县| 永修县| 汕尾市| 塘沽区| 秦皇岛市| 岳阳市| 沙雅县| 井冈山市| 祁门县| 长宁区| 闸北区| 明星| 昂仁县| 三门县| 平塘县| 阆中市| 莲花县| 上思县| 谢通门县| 修文县| 柯坪县| 星座| 互助| 余姚市| 科技| 仁寿县| 页游| 镇宁| 同江市| 常宁市| 神木县| 乌拉特后旗| 古浪县|