mysql的多表查詢詳細講解

首先,為了方便說明問題,創建兩個表emp(雇員信息)和dept(雇員部門信息),其數據如下:

mysql的多表查詢詳細講解在之前的文章中,我們分享了單表查詢的方法,但是在實際應用中,我們要查的數據很可能不在同一個表中,而是來自于不同的表。多表查詢如果不加任何條件,得到的結果稱為笛卡爾積。?例如,查找雇員名、雇員工資以及部門所在的名字。?

mysql的多表查詢詳細講解

可以發現,結果是這樣的,從第一個表中選出第一條記錄,和第二個表中的所有所有記錄進行組合,然后再從第一個表中取出第二條記錄,和第二張表的所有記錄進行組合,這樣的結果是沒有實際意義的。我們需要的是emp.deptno = dept.deptno字段的記錄。?

mysql的多表查詢詳細講解

自連接

自連接是指在同一張表連接查詢

顯示員工FORD的上級領導的名字?

mysql的多表查詢詳細講解

子查詢

子查詢是指嵌入在其他sql語句中的select語句,也叫嵌套查詢。

單行子查詢:子查詢的查詢結果只有一行

顯示和SMITH同一部門的員工?

mysql的多表查詢詳細講解

多行子查詢(in ,all, any):返回多條記錄的子查詢

查詢和10好部門的工作相同的官員的名字、工作、工資、部門號,但是不包括10號自己的信息?

mysql的多表查詢詳細講解

顯示工資比部門編號為30的所有員工的工資高的員工的姓名、工資和部門號?

mysql的多表查詢詳細講解

顯示工資比部門編號為30的任意員工的工資高的員工的姓名、工資和部門號?

mysql的多表查詢詳細講解

多列子查詢:查詢返回多個列數據的子查詢語句

查詢和SMITH的部門和崗位完全相同的雇員,不含SMITH本人?

mysql的多表查詢詳細講解

from子句中使用子查詢

顯示高于自己部門的平均工資的員工信息?

mysql的多表查詢詳細講解查找每個部門工資最高的人的ename, job, sal?

mysql的多表查詢詳細講解顯示每個部門的信息(部門名、編號、地址)和人員數量

mysql的多表查詢詳細講解

這里有兩種方法可以使用,但是經驗證,當數據非常多的時候from子查詢的效率是高于多表查詢的。

刪除表中的重復記錄

已知一個表tt中有重復的數據

創建一張空表tmp_tt,空表的結構與表tt的結構相同;create table tmp_tt like tt;

將tt表進行distinct,將數據導入空表中;insert into tmp_tt select distinct * from tt;

刪除原表ttdrop table tt;

將tmp_tt改名為ttalter table tmp_tt rename tt;

合并查詢

在實際應用中,為了合并多個select的執行結果,可以使用union,union all集合操作符

1、union操作符用于取得兩個結果的并集,并再自動去掉重復行 ,查找工資大于2500和職位Manger的人?

mysql的多表查詢詳細講解

2. union all?與union類似,但是不會自動去重?
例如:與or類似

mysql的多表查詢詳細講解

外鍵

外鍵定義主表和從表的關系,外鍵約束主要是定義在從表上,主表必須是有主鍵或者唯一鍵。當定義外鍵后,要求外鍵列數據必須在主表列存在或者為NULL。?
例如:創建一個主表class,從表stu?

mysql的多表查詢詳細講解

mysql的多表查詢詳細講解

由上圖,我們可以知道主鍵不能為null,但是外鍵可以為null,同時不能存在外鍵有的數據而主表中不存在。

更多相關問題請訪問PHP中文網:mysql視頻教程

? 版權聲明
THE END
喜歡就支持一下吧
點贊9 分享