這篇文章將為大家詳細(xì)講解有關(guān)如何在MySQL中實現(xiàn)聯(lián)表查詢,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、網(wǎng)站建設(shè)、環(huán)縣網(wǎng)絡(luò)推廣、小程序制作、環(huán)縣網(wǎng)絡(luò)營銷、環(huán)縣企業(yè)策劃、環(huán)縣品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們大的嘉獎;成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供環(huán)縣建站搭建服務(wù),24小時服務(wù)熱線:18982081108,官方網(wǎng)址:muchs.cnMySQL 中 JOIN, CROSS JOIN 和 INNER JOIN 三者語法功能上相同,可互換,而 SQL 標(biāo)準(zhǔn)中,INNER JOIN 需要搭配 ON 語句。
多表聯(lián)合查詢時,可省略 JOIN 關(guān)鍵字,以逗號分隔多張表,此時默認(rèn)會當(dāng)作 INNER JOIN 來處理。比如,
SELECT table1.*, table2.* FROM table1, table2;
等效于:
SELECT table1.*, table2.* FROM table1 INNER JOIN table2;
但這種通過逗號隱式指定的聯(lián)表形式其優(yōu)先級要低于直接通過關(guān)鍵字(INNER JOIN, CROSS JOIN, LEFT JOIN)指定的形式。所以 t1, t2 JOIN t3 會被解析成 (t1, (t2 JOIN t3)) 而不是 ((t1, t2) JOIN t3)
需要注意的是,當(dāng)逗號形式與其他聯(lián)表關(guān)鍵詞結(jié)合時,在指定了聯(lián)表條件,比如通過 ON 條件時,會報錯。
ON 指定的聯(lián)表條件其語法同 WHERE,所有后者可接受的表達(dá)式都可用于 ON。兩者看起來功能上雷同,ON 一般用于指定聯(lián)表條件,即表之間怎么被聯(lián)合,而 WHERE 則用于過濾結(jié)果。
LEFT JOIN 時,右邊表中不滿足 ON 或 USING 指定的條件時,會在結(jié)果中以 NULL 呈現(xiàn)。
SELECT left_tbl.* FROM left_tbl LEFT JOIN right_tbl ON left_tbl.id = right_tbl.id WHERE right_tbl.id IS NULL;
通過此方法可方便地過濾出右邊表中不符合條件的記錄。
聯(lián)表查詢時可為每張參與進(jìn)來的表指定別名,方便在其他表達(dá)式中引用。兩種方式,一個是通過 AS 關(guān)鍵字 tbl_name AS alias_name,另一種是直接在表名后面跟上別名,tbl_name alias_name。
SELECT t1.name, t2.salary FROM employee AS t1 INNER JOIN info AS t2 ON t1.name = t2.name; SELECT t1.name, t2.salary FROM employee t1 INNER JOIN info t2 ON t1.name = t2.name;
一條查詢語句中的子查詢必需取一個別名,這樣才能在其他表達(dá)式中引用。
SELECT * FROM (SELECT 1, 2, 3) AS t1;
USING(join_column_list) 語句指定兩個表中均包含的列,查詢時只針對這里指定的列進(jìn)行比較。
a LEFT JOIN b USING (c1, c2, c3)
NATURAL [LEFT] JOIN 與 INNER JOIN 和 LEFT JOIN 配合使用了 USING 指定表中所有列的情況等效。
RIGHT JOIN 與 LEFT JOIN 類似,只是最終結(jié)果是依據(jù)右邊表,將左邊表中不符合的在結(jié)果中以 NULL 呈現(xiàn)。為了方便在不同數(shù)據(jù)庫間遷移,推薦始終使用 LEFT JOIN。
一些 JOIN 示例:
SELECT * FROM table1, table2; SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id; SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id; SELECT * FROM table1 LEFT JOIN table2 USING (id); SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id LEFT JOIN table3 ON table2.id = table3.id;
NATURAL JOIN 的結(jié)果中不會有重復(fù)的列。因為其與 USING 雷同,所以 USING 時也沒有復(fù)雜的列。
考察下面的示例:
CREATE TABLE t1 (i INT, j INT); CREATE TABLE t2 (k INT, j INT); INSERT INTO t1 VALUES(1, 1); INSERT INTO t2 VALUES(1, 1); SELECT * FROM t1 NATURAL JOIN t2; SELECT * FROM t1 JOIN t2 USING (j);
查詢結(jié)果:
+------+------+------+
| j | i | k |
+------+------+------+
| 1 | 1 | 1 |
+------+------+------+
+------+------+------+
| j | i | k |
+------+------+------+
| 1 | 1 | 1 |
+------+------+------+
結(jié)果中同名的列只出現(xiàn)一次,且都是值相同的那些記錄。
通過向兩表中插入一條新記錄,令它們的 j 不相同,再進(jìn)行測試。
mysql> INSERT INTO t1 VALUES(2, 2); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO t2 VALUES(2, 3); Query OK, 1 row affected (0.00 sec) mysql> select * from t1 natural join t2; +------+------+------+ | j | i | k | +------+------+------+ | 2 | 2 | 1 | +------+------+------+ 1 row in set (0.00 sec)
USING 和 ON 作為條件時其他限制的聯(lián)合條件是一樣的,可互相轉(zhuǎn)換。但在 SELECT * 返回結(jié)果時,還是有差異的。前者只在 USING 中指定的列中返回合并后的結(jié)果,后者則針對的是表中所有列。
a LEFT JOIN b USING (c1, c2, c3) a LEFT JOIN b ON a.c1 = b.c1 AND a.c2 = b.c2 AND a.c3 = b.c3
USING 情況下的返回:
COALESCE(a.c1, b.c1), COALESCE(a.c2, b.c2), COALESCE(a.c3, b.c3)
ON 的返回:
a.c1, a.c2, a.c3, b.c1, b.c2, b.c3
ON 語句中只能引用其操作表(operands)中的表。
CREATE TABLE t1 (i1 INT); CREATE TABLE t2 (i2 INT); CREATE TABLE t3 (i3 INT);
針對上面的表,以下查詢會報錯:
mysql> SELECT * FROM t1 JOIN t2 ON (i1 = i3) JOIN t3; ERROR 1054 (42S22): Unknown column 'i3' in 'on clause'
而以下查詢則可以:
mysql> SELECT * FROM t1 JOIN t2 JOIN t3 ON (i1 = i3); Empty set (0.00 sec)
關(guān)于如何在MySQL中實現(xiàn)聯(lián)表查詢就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
當(dāng)前標(biāo)題:如何在MySQL中實現(xiàn)聯(lián)表查詢-創(chuàng)新互聯(lián)
轉(zhuǎn)載注明:http://muchs.cn/article6/deicig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)站導(dǎo)航、定制開發(fā)、營銷型網(wǎng)站建設(shè)、網(wǎng)站排名、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容