數據庫——自然連接、內連接、外連接(左外連接、右外連接,全連接)、交叉連接

1. 創建數據庫表

dep表

CREATE TABLE `dept` (
  `d_id` int(11) NOT NULL AUTO_INCREMENT,
  `d_name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`d_id`),
  KEY `d_name` (`d_name`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

  

emp表

CREATE TABLE `emp` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `dept_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `dept_id` (`dept_id`),
  CONSTRAINT `emp_ibfk_1` FOREIGN KEY (`dept_id`) REFERENCES `dept` (`d_id`)
) ENGINE=InnoDB AUTO_INCREMENT=32849 DEFAULT CHARSET=utf8;

  

 dept表                                                      emp表

  

 

 

1. 自然連接(natural join)

    自然連接是一種特殊的等值連接,他要求兩個關係表中進行比較的必須是相同的屬性列,無須添加連接條件,並且在結果中消除重複的屬性列。

    select * from emp  nature join dept;

 

2. 內連接分爲:隱式內連接、顯示內連接,其查詢效果相同。

       隱式和顯示的區別:僅僅是寫法不同,效果是一樣的;

-- 隱式的內連接
select * from emp,dept where emp.dept_id = dept.d_id;

-- 顯示的內連接,一般稱爲內連接
select * from emp INNER JOIN dept on emp.dept_id = dept.d_id;

 

3. 外連接

  -- .左外連接(left join):返回左表中的所有行,如果左表中行在右表中沒有匹配行,則結果中右表中的列返回空值;

    select * from emp left JOIN dept on emp.dept_id = dept.d_id;

  -- .右外連接(right join):返回右表中的所有行,如果右表中行在左表中沒有匹配行,則結果中左表中的列返回空值。

    select * from emp right JOIN dept on emp.dept_id = dept.d_id;

 

 

   全連接:返回左表和右表中的所有行。當某行在另一表中沒有匹配行,則另一表中的列返回空值。

  mysql不支持全連接。

 

4.-- 交叉連接(cross join):相當與笛卡爾積,左表和右表組合。

    select * from emp cross JOIN dept ;

    select * from emp , dept ;

 

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