MySQL多表查詢Left Join,Right Join學習筆記

http://my.oschina.net/adamboy/blog
php

MySQL多表鏈接查詢Left Join,Right Join php開源嘛數據庫

         在講MySQLJoin語法前仍是先回顧一下聯結的語法,呵呵,其實連我本身都忘得差很少了,那就你們一塊兒溫習吧(若是內容有錯誤或有疑問,國內關於 MySQL聯結查詢的資料十分少,相信你們在看了本文後會對MySQL聯結語法有至關清晰的瞭解,也不會被Oracle的外聯結的(號)弄得糊塗 了。spa

         SQL標準中規劃的(Join)聯結大體分爲下面四種:.net

個人數據庫中有兩張表,分別爲users和products以下:code

users表:
blog

products 表:圖片

users表:ci

CREATE TABLE `users` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(40) collate utf8_unicode_ci NOT NULL,
  `password` varchar(40) collate utf8_unicode_ci NOT NULL,
  `status` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=6 ;

--
-- Dumping data for table `users`
--

INSERT INTO `users` (`id`, `name`, `password`, `status`) VALUES
(1, 'adam', '0000', 1),
(2, 'lht', '0000', 0),
(3, 'lihantuan', '0000', 0),
(4, 'lhq', '0000', 0),
(5, 'admin', '0000', 1);
unicode

Pruducts表:rem

CREATE TABLE `products` (
  `id` int(10) NOT NULL auto_increment,
  `name` varchar(40) collate utf8_unicode_ci NOT NULL,
  `comefrom` varchar(40) collate utf8_unicode_ci NOT NULL,
  `maketime` timestamp NOT NULL default CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=6 ;

--
-- Dumping data for table `products`
--

INSERT INTO `products` (`id`, `name`, `comefrom`, `maketime`) VALUES
(1, 'adam', 'china', '2011-05-16 15:53:03'),
(2, 'lht', 'japan', '2011-05-16 15:53:18'),
(3, 'lihantuan', 'America', '2011-05-16 15:53:37'),
(4, 'lhq', 'China', '2011-05-17 15:16:00'),
(5, 'lhw', 'CN', '2011-05-18 16:33:15');

1 內聯結:select users.*,products.comefrom from users,products where users.name = products.name,查詢結果是(若是圖片不顯示,copy該語句到數據庫裏執行就能看到結果):

2 外聯結:分爲外左聯結和外右聯結。 php開源嘛

        左聯結AB表的意思就是將表A中的所有記錄和表B中聯結的字段與表A的聯結字段符合聯結條件的那些記錄造成的記錄集的聯結,這裏注意的是最後出來的記錄集會包括表A的所有記錄。

右聯結AB表的結果和左聯結BA的結果是同樣的,也就是說:

Select A.name B.name From A Left Join B On A.id=B.idSelect A.name B.name From B Right Join A on B.id=A.id執行後的結果是同樣的。

舉例:外左聯結(Select A.name B.name From A Left Join B On A.id=B.id

數據庫裏執行查詢:select users.*,products.comefrom from users left join products on users.name = products.name

將顯示以下:(若是圖片不顯示,copy該語句到數據庫裏執行就能看到結果)

執行:select products.*,users.password from products left join users on products.name = users.name

將顯示以下:

舉例外右聯結:Select A.name B.name From B Right Join A on B.id=A.id

執行語句:select users.*,products.name from users right join products on users.name = products.name,將顯示以下結果:(若是圖片不顯示,copy該語句到數據庫裏執行就能看到結果)

          3.全聯結:將兩個表中存在聯結關係的字段的全部記錄取出造成記錄集的聯結(這個不須要記憶,只要是查詢中提到了的表的字段都會取出,不管是否符合聯結條件,所以意義不大)。

         4.無聯結:不用解釋了吧,就是沒有使用聯結功能唄,也有自聯結的說法。

這裏我有個比較簡便的記憶方法,內外聯結的區別是內聯結將去除全部不符合條件的記錄,而外聯結則保留其中部分。外左聯結與外右聯結的區別在於若是用A左聯 BA中全部記錄都會保留在結果中,此時B中只有符合聯結條件的記錄,而右聯結相反,這樣也就不會混淆了。其實你們回憶高等教育出版社出版的《數據庫系 統概論》書中講到關係代數那章(就是將笛卡兒積和投影那章)的內容,相信不難理解這些聯結功能的內涵。

相關文章
相關標籤/搜索