切換語言為:簡體

MySQL中的連表查詢,內連線和外連線的使用及區別

  • 爱糖宝
  • 2024-08-27
  • 2057
  • 0
  • 0

sql查詢是業務開發中的基礎技術,在日常的開發中,單表的簡單查詢往往無法實現常規的業務需求,將所有的資訊都放在一張表裏儲存也是不現實的,也不符合保證表中的每一列都和主鍵列直接相關,而不是間接相關的要求。

假設現在有一個使用者表和一個訂單表,訂單表中可以存在關聯使用者表資訊的欄位,但是不能在訂單表中建立有關使用者的其他資訊。如果想要查詢訂單和使用者的資訊,就可以使用連表查詢來實現。

準備工作

建立一個使用者表,包含使用者名稱和密碼欄位

CREATE TABLE `user` (
  `id` int(11) NOT NULL,
  `username` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

建立一個訂單表,包含訂單的資訊和使用者的id

CREATE TABLE `order_info` (
  `id` int(11) NOT NULL COMMENT '唯一id',
  `order_no` varchar(255) DEFAULT NULL COMMENT '訂單編號',
  `order_time` datetime DEFAULT NULL COMMENT '訂單時間',
  `price` decimal(10,2) DEFAULT NULL COMMENT '訂單金額',
  `user_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `使用者id` (`user_id`),
  CONSTRAINT `使用者id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

將使用者表的id設為主鍵,並將其設定為訂單表的外來鍵,完成訂單表與使用者表的關聯,形成使用者表與訂單表一對多的關係

提示
之所以要設定主鍵,是爲了確保資料唯一和建立表的索引。因為索引使用一種樹結構,可以提高資料查詢、新增和刪除的效率。

內連線

這種連線查詢方式,只會返回多個表中符合連線條件的資料,如果有一個表不符合連線條件,就都不返回。

MySQL中的連表查詢,內連線和外連線的使用及區別

MySQL中的連表查詢,內連線和外連線的使用及區別

比如上面的兩張表資料,使用內連線查詢,會查詢出訂單表中的兩條資料及關聯的user_id == 1001的使用者資訊。

select * from order_info o inner join user u on u.id = o.user_id;

執行這條sql語句返回的資料如下

MySQL中的連表查詢,內連線和外連線的使用及區別

總結
內連線查詢,返回多個表的滿足連線條件的資料,上面的語句中on u.id = o.user_id就是兩張表的查詢條件

外連線

外連線又分為左外連線和右外連線,兩者的區別在於左外連線的主表在左,右外連線的主表在右,即使多張表的聯合查詢不符合連線條件,也會返回主表全部的資料。還是以上面的使用者表和訂單表為例,還是和上面相同的表資料。

左外連線

select * from order_info o left join user u on u.id = o.user_id;

inner關鍵字修改爲left即為左外連線

MySQL中的連表查詢,內連線和外連線的使用及區別

因為order_info表是左表(主表),所以所有的資料都可以查出來,又因為使用者表中id == 1001的資料是符合連線條件的,所以使用者id == 1001的資料也被成功返回。現在將left join修改爲right join再看下查詢結果

右外連線

select * from order_info o right join user u on u.id = o.user_id;

MySQL中的連表查詢,內連線和外連線的使用及區別

這次因為是以右表也就是user表為主表,所以使用者表的資料都返回,然後因為從表也就是訂單表中符合連線條件的只有user_id == 1001的資料,所以使用者id1002的訂單資料不會被查出來,相關的列直接顯示為NULL

總結

  • 內連線只會返回多個表中符合連線條件的資料,如果只需要查詢多張表中符合關聯關係的資料就選擇內連線

  • 左外連線會返回左表中所有的資料和從表中符合連表條件的資料,所以如果需要左表中所有的資料時,選擇使用左連線的查詢方式

  • 右外連線會返回右表中所有的資料和從表中符合連表條件的資料,所以如果需要右表中所有的資料時,選擇使用右連線的查詢方式

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.