sql鏈接查詢

簡述

    簡單回顧並總結下不一樣的錶鏈接語句有什麼異同之處以及一些概念。sql

    建庫語句以下函數

 1 DROP DATABASE IF EXISTS `demo`;
 2 CREATE DATABASE `demo`;
 3 USE `demo`;
 4 /*部門表*/
 5 CREATE TABLE department (
 6     `id` INT PRIMARY KEY AUTO_INCREMENT,
 7     `name` VARCHAR(50)
 8 );
 9 INSERT INTO department VALUES(DEFAULT, '財務'),(DEFAULT, '客服'),(DEFAULT, '技術');
10 /*僱員表*/
11 CREATE TABLE employee (
12     `id` INT PRIMARY KEY AUTO_INCREMENT,
13     `name` VARCHAR(50),
14     `department_id` INT,
15     CONSTRAINT fk_employee_department FOREIGN KEY (id) REFERENCES department(id)
16 );
17 INSERT INTO employee VALUES(DEFAULT, '張三', 1),(DEFAULT, '李四', 2),(DEFAULT, '王五', 2);

     由上代碼可知,分別建立了部門表和僱員表,僱員表和部門表是多對一的關係,技術部沒有僱員。spa


內鏈接

    語法:inner join ... on ... inner能夠省略。code

    概念:內鏈接查詢的結果是從兩個或兩個以上的表的組合中挑選出符合鏈接條件的數據,若是數據沒法知足鏈接條件則將其忽略。在內鏈接查詢中,參與鏈接的表的地位是平等的blog

    例:如今要查詢員工和其所在的部門,sql語句以下class

1 SELECT e.id, e.`name`, d.`name` '部門' FROM employee e JOIN department d ON e.`department_id`=d.`id`

 

    結果以下:sql語句

    

    能夠看出,部門一列只是將有員工的部門查詢了出來,而沒有員工的技術部則沒有查詢出來。語法

外鏈接

    概念:上文提到:在內鏈接查詢中,參與鏈接的表的地位是平等的。而在外鏈接中參與鏈接的表有主從之分。以主表的每行數據匹配從表的數據列,將符合鏈接條件的數據直接返回到結果集中;對那些不符合鏈接條件的列,將被填上空值後再返回到結果集中。im

左外鏈接

    語法:left  outer join ... on ... outer能夠省略。技術

    概念:左外鏈接查詢的結果集包括左表中的全部行,而不單單是鏈接匹配的行。若左表的某行在右表中沒有匹配行,則在相關聯的結果集中右表的全部選擇列均爲空值。

    例一:將上面內鏈接的語句改爲左外鏈接

SELECT e.id, e.`name`, d.`name` '部門' FROM department d LEFT JOIN employee e ON e.`department_id`=d.`id`

 

    查詢結果以下圖

    

    能夠看出,沒有員工的部門也被查詢了出來,而且員工的id和姓名列被填上了空值。

    例二:查詢全部部門包含的員工數,沒有員工的部門也要被查詢出來。sql語句以下

1 SELECT d.`name`,COUNT(e.`id`) '部門人數' FROM department d LEFT JOIN employee e ON e.`department_id`=d.`id` GROUP BY e.`department_id`

 

    結果以下

    

    能夠看出,沒有員工的技術部也被查詢了出來,統計人數爲0(ps:這個0和以前自動填充的null值不衝突,由於這裏使用了聚合函數count(),結果集先填充了null,再進行count統計的)。

右外鏈接 

    語法:right  outer join ... on ... outer能夠省略。

    概念:右外鏈接和左外鏈接相似,只是位置變了一下。結果集必須包含右表中的全部行,若右表中有的項在左表中沒有,則以null值填充。

    例一:將上面左外鏈接的語句改爲右外鏈接,sql語句以下

1 SELECT d.`name`,COUNT(e.`id`) '部門人數' FROM employee e RIGHT JOIN department d ON e.`department_id`=d.`id` GROUP BY e.`department_id`

    結果以下

    

相關文章
相關標籤/搜索