SQL連線查詢

2022-06-08 13:54:10 字數 2238 閱讀 8961

簡單回顧並總結下不同的表連線語句有什麼異同之處以及一些概念。

建庫語句如下

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);

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

語法:inner join ... on ... inner可以省略。

概念:內連線查詢的結果是從兩個或兩個以上的表的組合中挑選出符合連線條件的資料,如果資料無法滿足連線條件則將其忽略。在內連線查詢中,參與連線的表的地位是平等的。

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

1 select e.id, e.`name`, d.`name` '部門' from employee e join department d on e.`department_id`=d.`id`
結果如下:

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

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

語法: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`
結果如下

歡迎提出意見或建議!!!

引用:

SQL 連線查詢

連線查詢是指乙個查詢同時涉及到兩個及以上的表。包括 等值連線,自然連線,非等值連線,自身連線,外連線,復合查詢.等.color red size large 1.等值連線 於非等值連線 size color 查詢每個學生及選課的情況 select student.sc.from student,sc...

sql連線查詢

sql連線查詢的連線查詢分為交叉連線 內連線 外連線。以下面兩張表為例演示連線查詢。a表 b表 分為左連線 右連線 完全外連線 左連線 left join 或left outer join select from a left outer join b on a.aid b.bid返回結果 返回a表...

SQL連線查詢

筆記區 多表連線查詢 1,等值連線 select from table1,table2 where table1.t1no table2.t2no 2,非等值 笛卡爾積 特點 查詢個數為乘積 作用 模擬大量資料 交叉連線 自連線內連線 把符合條件的查出來 以上都是內查詢 外連線 可以把不存在員工的部...