亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

補12.關于mysql的多表查詢

發布時間:2020-06-03 01:49:54 來源:網絡 閱讀:417 作者:蘇浩智 欄目:MySQL數據庫

首先先準備兩張表。

首先是員工信息表,表名為employee。

create table employee( emp_id int primary key auto_increment not null, emp_name varchar(50), age int, dept_id int );


然后在員工信息表中插入6條記錄:

insert into employee(emp_name,age,dept_id)values ('A',19,200), ('B',26,201), ('C',30,201), ('D',24,202), ('E',20,200), ('F',38,204);

#創建了6個員工。


然后是部門信息表。

create table department( dept_id int, dept_name varchar(100) );

#部門信息表中包含了部門ID以及部門名稱。

insert into department values(200,'人事部'),(201,'技術部'),(202,'銷售部'),(203,'財政部');

#在部門表中添加了4個部門。


employee表:

+--------+----------+------+---------+

| emp_id | emp_name | age  | dept_id |

+--------+----------+------+---------+

|      1 | A        |   19 |     200 |

|      2 | B        |   26 |     201 |

|      3 | C        |   30 |     201 |

|      4 | D        |   24 |     202 |

|      5 | E        |   20 |     200 |

|      6 | F        |   38 |     204 |

+--------+----------+------+---------+


department表:

+---------+-----------+

| dept_id | dept_name |

+---------+-----------+

|     200 | 人事部    |

|     201 | 技術部    |

|     202 | 銷售部    |

|     203 | 財政部    |

+---------+-----------+


一、笛卡爾積查詢:

select * from employee,department;

結果:

+--------+----------+------+---------+---------+-----------+

| emp_id | emp_name | age  | dept_id | dept_id | dept_name |

+--------+----------+------+---------+---------+-----------+

|      1 | A        |   19 |     200 |     200 | 人事部    |

|      1 | A        |   19 |     200 |     201 | 技術部    |

|      1 | A        |   19 |     200 |     202 | 銷售部    |

|      1 | A        |   19 |     200 |     203 | 財政部    |

|      2 | B        |   26 |     201 |     200 | 人事部    |

|      2 | B        |   26 |     201 |     201 | 技術部    |

|      2 | B        |   26 |     201 |     202 | 銷售部    |

|      2 | B        |   26 |     201 |     203 | 財政部    |

|      3 | C        |   30 |     201 |     200 | 人事部    |

|      3 | C        |   30 |     201 |     201 | 技術部    |

|      3 | C        |   30 |     201 |     202 | 銷售部    |

|      3 | C        |   30 |     201 |     203 | 財政部    |

|      4 | D        |   24 |     202 |     200 | 人事部    |

|      4 | D        |   24 |     202 |     201 | 技術部    |

|      4 | D        |   24 |     202 |     202 | 銷售部    |

|      4 | D        |   24 |     202 |     203 | 財政部    |

|      5 | E        |   20 |     200 |     200 | 人事部    |

|      5 | E        |   20 |     200 |     201 | 技術部    |

|      5 | E        |   20 |     200 |     202 | 銷售部    |

|      5 | E        |   20 |     200 |     203 | 財政部    |

|      6 | F        |   38 |     204 |     200 | 人事部    |

|      6 | F        |   38 |     204 |     201 | 技術部    |

|      6 | F        |   38 |     204 |     202 | 銷售部    |

|      6 | F        |   38 |     204 |     203 | 財政部    |

+--------+----------+------+---------+---------+-----------+

顯然這種結果沒有任何的意義。


二、內連接查詢。

查詢兩張表中都有的關聯數據,相當于利用條件從笛卡爾積結果中篩選出了正確的結果。

下面是一個內連接查詢的例子:

還拿前面的兩張表舉例,現在需要列出所有員工的姓名,以及職位名稱。

select emp_name,dept_name from employee,department where employee.dept_id = department.dept_id;

+----------+-----------+

| emp_name | dept_name |

+----------+-----------+

| A        | 人事部    |

| B        | 技術部    |

| C        | 技術部    |

| D        | 銷售部    |

| E        | 人事部    |

+----------+-----------+



三、外連接查詢。

  1. 左外鏈接:在內連接的基礎上增加左邊有右邊沒有的結果。

    select * from employee left join department on employee.dept_id = department.dept_id;

    #就是以左邊的表為基準

+--------+----------+------+---------+---------+-----------+

| emp_id | emp_name | age  | dept_id | dept_id | dept_name |

+--------+----------+------+---------+---------+-----------+

|      1 | A        |   19 |     200 |     200 | 人事部    |

|      5 | E        |   20 |     200 |     200 | 人事部    |

|      2 | B        |   26 |     201 |     201 | 技術部    |

|      3 | C        |   30 |     201 |     201 | 技術部    |

|      4 | D        |   24 |     202 |     202 | 銷售部    |

|      6 | F        |   38 |     204 |    NULL | NULL      |

+--------+----------+------+---------+---------+-----------+


    2.右外鏈接:在內連接的基礎上增加右邊有左邊沒有的結果。

 select * from employee right join department on employee.dept_id = department.dept_id;


+--------+----------+------+---------+---------+-----------+

| emp_id | emp_name | age  | dept_id | dept_id | dept_name |

+--------+----------+------+---------+---------+-----------+

|      1 | A        |   19 |     200 |     200 | 人事部    |

|      2 | B        |   26 |     201 |     201 | 技術部    |

|      3 | C        |   30 |     201 |     201 | 技術部    |

|      4 | D        |   24 |     202 |     202 | 銷售部    |

|      5 | E        |   20 |     200 |     200 | 人事部    |

|   NULL | NULL     | NULL |    NULL |     203 | 財政部    |

+--------+----------+------+---------+---------+-----------+


 3.全外鏈接:

全外連接是將左外鏈接和右外鏈接做一個結合。

select * from employee RIGHT JOIN department on employee.dept_id = department.dept_id UNION select * from employee LEFT JOIN department on employee.dept_id = department.dept_id;

使用union關鍵字將左鏈接和有鏈接的結果做個一個拼接。

union :去除所有重復的結果。

union all : 沒有去重功能。



4.多表復合條件查詢。

比如說現在想要查詢,公司年齡大于25歲的員工都在哪個部門中。

select distinct department.dept_name from employee,department where employee.dept_id = department.dept_id and age > 25;

+-----------+

| dept_name |

+-----------+

| 技術部    |

+-----------+



以公司所有員工的年齡以從小到大的方式排序。

select employee.emp_id,employee.emp_name,employee.age,department.dept_name from employee,department where employee.dept_id = department.dept_id order by age asc;




5.多表子查詢。

子查詢,就是將一個查詢的sql語句,嵌套在另一個查詢的sql語句中。

內層查詢語句的查詢結果,可以為外層查詢語句提供查詢條件。

子查詢中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等關鍵字。


IN關鍵字:這個關鍵字大概是包含的意思。

比如說,查詢employee表,但dept_id必須在department表中出現過。

包含在department表中dept_id字段中,才會顯示。

select * from employee where dept_id in (select dept_id from department);

+--------+----------+------+---------+

| emp_id | emp_name | age  | dept_id |

+--------+----------+------+---------+

|      1 | A        |   19 |     200 |

|      2 | B        |   26 |     201 |

|      3 | C        |   30 |     201 |

|      4 | D        |   24 |     202 |

|      5 | E        |   20 |     200 |

+--------+----------+------+---------+


使用比較運算符:

=、!=、>、>=、<、<=、<>

查詢包含年齡大于等于25歲的員工,都在哪些部門:

select dept_id,dept_name from department where dept_id in ( select distinct dept_id from employee where age >= 25);

+---------+-----------+

| dept_id | dept_name |

+---------+-----------+

|     201 | 技術部    |

+---------+-----------+


exists關鍵字:

EXISTS關字鍵字表示存在。在使用EXISTS關鍵字時,內層查詢語句不返回查詢的記錄,而是返回一個真假值。Ture或False,當返回Ture時,外層查詢語句將進行查詢;當返回值為False時,外層查詢語句不進行查詢。

例:

select * from employeeWHERE EXISTS(SELECT dept_name from department where dept_id=203);


#department表中存在dept_id=203,Ture,返回了True后select * from employeeWHERE EXISTS這條語句就可以執行了,主要就是做一個條件判斷。


select * from employee WHERE EXISTS(SELECT dept_name from department where dept_id=205)


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

蒙山县| 托克逊县| 万州区| 双柏县| 胶州市| 凉山| 成都市| 江都市| 肥乡县| 洪湖市| 平利县| 大同市| 灌南县| 绵竹市| 麻江县| 浪卡子县| 永嘉县| 潍坊市| 潼南县| 醴陵市| 开平市| 龙岩市| 赤壁市| 铅山县| 上虞市| 科尔| 普格县| 漳州市| 通辽市| 张北县| 电白县| 闻喜县| 定边县| 墨江| 阿鲁科尔沁旗| 阿拉善左旗| 宁陕县| 镇赉县| 芜湖县| 瑞丽市| 西乌|