MySQL內連接、外連接(左連接、右連接)查詢

MySQL多表查詢在實際應用中是非常重要的, 現在這裏用兩張表讓你徹底搞懂MySQL內連接和外連接查詢。其中comment表中的user_id爲user表中的id。

準備工作:

創建用戶信息user表

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(10),
  `sex` char(3),
  `age` int(11),
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

向user表插入數據

INSERT INTO `user`(`name`, `sex`, `age`) VALUES ('張三','男',18),('李四','男',22),('小玉','女',18),('靈兒','女',19);

user表數據
創建評論表commnet

CREATE TABLE `comment` (
  `id` int(11)  AUTO_INCREMENT,
  `user_id` int(11) ,
  `content` text,
  `time` timestamp,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

向commnet表插入數據

INSERT INTO `comment`(`user_id`, `content`) VALUES (1,'好久不見啊~'),(3,'是啊,好久不見了,你,還好嗎.....'),(1,'還好,,,吧,只是再也體會不到和那個“她”在一起時的快樂了,,,'),(3,'是啊,再也體會不到那種快樂了,,,'),(2,'我是誰,我在哪?');

在這裏插入圖片描述
內連接和外連接(左連接、右連接)查詢
要求查詢出評論表中記錄,且需包含評論人的暱稱(name)、性別(sex)、年齡(age) 。
分析:從comment表中並沒有暱稱、性別等字段,這就需要結合user表來查詢了。

where查詢:

select name,sex,age,content from comment,user where user.id=comment.user_id;

內連接查詢:
內連接是通過在查詢中設置連接條件的方式,來移除查詢結果集中某些數據行後的交叉連接。簡單來說,就是利用條件表達式來消除交叉連接的某些數據行 。
內連接:SELECT <列名1,列名2 …> FROM <表名1> INNER JOIN <表名2> [ ON子句]

select name,sex,age,content from comment inner join user on comment.user_id=user.id;

如果把join中的on換成where也是一樣的,這兩種查詢方法使用 WHERE 子句定義連接條件比較簡單明瞭,而 INNER JOIN 語法是 ANSI SQL 的標準規範,使用 INNER JOIN 連接語法能夠確保不會忘記連接條件,而且 WHERE 子句在某些時候會影響查詢的性能。
外連接查詢
MySQL 中內連接是在交叉連接的結果集上返回滿足條件的記錄;而外連接先將連接的表分爲基表和參考表,再以基表爲依據返回滿足和不滿足條件的記錄。

外連接更加註重兩張表之間的關係。按照連接表的順序,可以分爲左外連接和右外連接。

左連接:

select name,sex,age,content from comment left join user on user_id=user.id;

left join 是left outer join的簡寫,它的全稱是左外連接,是外連接中的一種。左(外)連接,左表(comment)的記錄將會全部表示出來,而右表(user)只會顯示符合搜索條件的記錄。右表記錄不足的地方均爲NULL。
右連接:

select name,sex,age,content from comment right join user on user_id=user.id;

right join 是right outer join的簡寫,它的全稱是右外連接,是外連接中的一種。右(外)連接,右表(user)的記錄將會全部表示出來,而右表(comment)只會顯示符合搜索條件的記錄。右表記錄不足的地方均爲NULL。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章