日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql带账号联查表_MySQL联表查询的简单示例

發布時間:2023/12/19 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql带账号联查表_MySQL联表查询的简单示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySql會用到聯表查詢,對于剛學習的新手來說,可能會理解起來有難度。下面這篇文章就來給大家詳細介紹MySQL聯表查詢的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧

關系型數據庫,免不了表之間存在各種引用與關聯。這些關聯是通過主鍵與外鍵搭配來形成的。所以,取數據時,很大情況下單張表無法滿足需求,額外的數據則需要將其他表加入到查詢中來,這便是 JOIN 關鍵字完成的操作。 MySQL 中 JOIN, CROSS JOIN 和 INNER JOIN 三者語法功能上相同,可互換,而 SQL 標準中,INNER JOIN 需要搭配 ON 語句。

多表聯合查詢時,可省略 JOIN 關鍵字,以逗號分隔多張表,此時默認會當作 INNER JOIN 來處理。比如, SELECT table1.*,

table2.*

FROM table1,

table2;

等效于: SELECT table1.*,

table2.*

FROM table1

INNER JOIN table2; 但這種通過逗號隱式指定的聯表形式其優先級要低于直接通過關鍵字(INNER JOIN, CROSS JOIN, LEFT JOIN)指定的形式。所以 t1, t2 JOIN t3 會被解析成 (t1, (t2 JOIN t3)) 而不是 ((t1, t2) JOIN t3)

需要注意的是,當逗號形式與其他聯表關鍵詞結合時,在指定了聯表條件,比如通過 ON 條件時,會報錯。 ON 指定的聯表條件其語法同 WHERE,所有后者可接受的表達式都可用于 ON。兩者看起來功能上雷同,ON 一般用于指定聯表條件,即表之間怎么被聯合,而 WHERE 則用于過濾結果。 LEFT JOIN 時,右邊表中不滿足 ON 或 USING 指定的條件時,會在結果中以 NULL 呈現。 SELECT left_tbl.*

FROM left_tbl LEFT JOIN right_tbl ON left_tbl.id = right_tbl.id

WHERE right_tbl.id IS NULL;

通過此方法可方便地過濾出右邊表中不符合條件的記錄。 聯表查詢時可為每張參與進來的表指定別名,方便在其他表達式中引用。兩種方式,一個是通過 AS 關鍵字 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; 一條查詢語句中的子查詢必需取一個別名,這樣才能在其他表達式中引用。 SELECT * FROM (SELECT 1, 2, 3) AS t1; USING(join_column_list) 語句指定兩個表中均包含的列,查詢時只針對這里指定的列進行比較。 a LEFT JOIN b USING (c1, c2, c3) NATURAL [LEFT] JOIN 與 INNER JOIN 和 LEFT JOIN 配合使用了 USING 指定表中所有列的情況等效。 RIGHT JOIN 與 LEFT JOIN 類似,只是最終結果是依據右邊表,將左邊表中不符合的在結果中以 NULL 呈現。為了方便在不同數據庫間遷移,推薦始終使用 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 的結果中不會有重復的列。因為其與 USING 雷同,所以 USING 時也沒有復雜的列。

考察下面的示例: 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);

查詢結果:

+------+------+------+

| j | i | k |

+------+------+------+

| 1 | 1 | 1 |

+------+------+------+

+------+------+------+

| j | i | k |

+------+------+------+

| 1 | 1 | 1 |

+------+------+------+

結果中同名的列只出現一次,且都是值相同的那些記錄。

通過向兩表中插入一條新記錄,令它們的 j 不相同,再進行測試。 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 作為條件時其他限制的聯合條件是一樣的,可互相轉換。但在 SELECT * 返回結果時,還是有差異的。前者只在 USING 中指定的列中返回合并后的結果,后者則針對的是表中所有列。 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)

因為此時 t3 在 ON 語句的操作范圍內了。

相關資源 MySQL 8.0 Reference Manual - 13.2.10.2 JOIN Syntax MySQL 8.0 Reference Manual - 13.2.10.3 UNION Syntax

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對聚米學院的支持。

總結

以上是生活随笔為你收集整理的mysql带账号联查表_MySQL联表查询的简单示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。