mysql多表連線查詢

2021-10-02 01:50:10 字數 4077 閱讀 8397

#查詢姓名 部門名 地點

select emp.ename ,dept.dname,dept.loc

from emp,dept

where emp.deptno=emp.deptno

#簡化select ename ,dname,loc,emp.deptno

from emp,dept

where emp.deptno=dept.deptno

#注意:多表查詢是不同列名可以省略表名,多個表的相同列必須指定 表名.列名

#優化:表別名:一旦起錶別名,就必須用別名來代替原來的表名

select ename ,dname,loc,e.deptno

from emp e,dept d

where e.deptno=d.deptno

#等值連線

查詢工作地點在new york的員工編號,姓名,部門編號,工作地點

select empno,ename,e.deptno,loc

from emp e,dept d

where e.deptno=d.deptno and loc=『new york』

#不等值連線

查詢每個員工的姓名,工資,工資等級

select ename,sal,grade

from emp e,salgrade s

where e.sal between s.losal and s.hisal

#練習1.查詢每個員工的編號,姓名,工資,工資等級,所在工作城市,

按照工資等級進行公升序排序。

select empno,ename,sal,grade,loc

from emp e,salgrade s,dept d

where e.deptno=d.deptno and e.sal between s.losal and s.hisal

order by s.grade

#自身連線

select worker.ename 員工名,manager.ename 直接領導名

from emp worker, emp manager

where worker.mgr = manager.empno;

#外連線:左外、右外

select worker.ename 員工名,manager.ename 直接領導名

from emp worker

left join emp manager

on worker.mgr = manager.empno;

#練習查詢所有工作在new york和chicago的員工姓名,員工編號,以及他們的經理姓名,

經理編號

select w.ename 『員工名』 ,w.empno 『員工編號』, m.ename 『經理名』, m.empno 『經理編號』

from emp w,emp m,dept

where w.mgr=m.empno and w.deptno=dept.deptno

and loc in(『new york』,『chicago』)

#查詢員工姓名 部門名

select ename ,dname

from emp,dept

where emp.deptno=dept.deptno

等價於select ename ,dname

from emp join dept

on emp.deptno=dept.deptno

#外連線:左右表記錄不匹配時,以左表還是右表資訊為準?

#左外連線(顯示左邊表的符合條件的記錄)

查詢所有雇員姓名,部門編號,部門名稱,包括沒有部門的員工也要顯示出來

select ename ,e.deptno,dname

from emp e left join dept

on e.deptno=dept.deptno

#右外連線(顯示右邊表的符合條件的記錄)

查詢所有雇員姓名,部門編號,部門名稱,包括沒有員工的部門也要顯示出來

select ename ,dept.deptno,dname

from dept left join emp e

on e.deptno=dept.deptno

等價於select ename ,dept.deptno,dname

from emp e right join dept

on e.deptno=dept.deptno

1.建立乙個員工表和部門表的交叉連線。

select e.,d.

from emp e cross join dept d

2.使用自然連線,顯示入職日期在80年5月1日之後的員工姓名,部門名稱,入職日期

select ename,dname,hiredate

from emp natural join dept

等價於select ename,dname,hiredate

from emp ,dept

where emp.deptno=dept.deptno

3.使用using子句,顯示工作在chicago的員工姓名,部門名稱,工作地點

select ename,dname,loc

from emp join dept using(deptno)

where loc=『chicago』

4.使用on子句,顯示工作在chicago的員工姓名,部門名稱,工作地點,薪資等級

select ename,dname,loc,grade

from emp join dept

on emp.deptno=dept.deptno

join salgrade

on emp.sal between losal and hisal

where loc=『chicago』

等價於select ename,dname,loc,grade

from emp , dept,salgrade

where emp.deptno=dept.deptno and

emp.sal between losal and hisal and

loc=『chicago』

5.使用左連線,查詢每個員工的姓名,經理姓名,沒有經理的king也要顯示出來。

select w.ename , m.ename

from emp w left join emp m

on w.mgr=m.empno

6.使用右連線,查詢每個員工的姓名,經理姓名,沒有經理的king也要顯示出來。

select w.ename , m.ename

from emp m right join emp w

on w.mgr=m.empno

1.顯示員工smith的姓名,部門名稱,直接上級名稱

select w.ename 『員工名』 ,dname 『部門名』,m.ename 『經理名』

from emp w,dept d,emp m

where w.deptno=d.deptno and w.mgr=m.empno and w.ename=『smith』

2.顯示員工姓名,部門名稱,工資,工資級別,要求工資級別大於4級。

select ename,dname,sal,grade

from emp e,dept d,salgrade s

where e.deptno=d.deptno and e.sal between s.losal and s.hisal

and s.grade>4

3.顯示員工king和ford管理的員工姓名及其經理姓名。

select w.ename 『員工名』 ,m.ename 『經理名』

from emp w,emp m

where w.mgr=m.empno and m.ename in(『king』,『ford』)

4.顯示員工姓名,參加工作時間,經理名,參加工作時間,要求參加時間比經理早。

select w.ename 『員工名』 ,w.hiredate 『員工入職時間』,

m.ename 『經理名』 ,m.hiredate 『經理入職時間』

from emp w, emp m

where w.mgr=m.empno and w.hiredate

MySQL 連線查詢(多表查詢)

mysql 連線查詢 多表查詢 連線就是指兩個或2個以上的表 資料來源 連線起來成為乙個資料來源 實際上,兩個表的完全的連線是這樣的乙個過程 左邊的表的每一行,跟右邊的表的每一行,兩兩互相 橫向對接 後所得到的所有資料行的結果。注意 連線之後,並非形成了乙個新的資料表,而只是一種 記憶體形態 fro...

mysql多表連線查詢過程 mysql多表連線查詢

二 內連線 join 或 inner join sql語句 select from student inner join course on student.id course.id 執行結果 inner join 是比較運算子,只返回符合條件的行。此時相當於 select from student...

mysql多表連線查詢舉例 mysql

join是關係型資料庫系統的重要操作之一,sql server中包含的常用join 內聯接 外聯接和交叉聯接等1.1.1 摘要 join是關係型資料庫系統的重要操作之一,sql server中包含的常用join 內聯接 外聯接和交叉聯.實際的專案,存在多張表的關聯關係。不可能在一張表裡面就能檢索出所...