mysql 資料庫快速入門 多表查詢

2021-09-07 04:50:03 字數 3293 閱讀 2534

目錄

多表查詢

多表查詢有如下幾種:

合併結果集

連線查詢

巢狀查詢

合併結果集

連線查詢(非常重要)

內連線外連線(左連線、右連線)

自然連線

巢狀(子)查詢(非常重要)

子查詢出現的位置

當子查詢出現在where後作為條件時,還可以使用如下關鍵字

子查詢結果集的形式

自連線:自己連線自己,起別名

內連線  [inner] join  on

外連線  outer join on

左外連線 left [outer] join

右外連線 right [outer] join

全外連線(mysql不支援)full join

自然連線  natural join

作用:合併結果集就是把兩個select語句的查詢結果合併到一起

要求:被合併的兩個結果:列數、列型別必須相同。

union :去除重覆記錄

select * from t1 union select * from t2;

union all :不去除重覆記錄

select * from t1 union all select * from t2;
連線查詢就是求出多個表的乘積,例如t1連線t2,那麼查詢出的結果就是t1*t2。

連線查詢會產生笛卡爾積,假設集合a=,集合b=,則兩個集合的笛卡爾積為。

多表查詢產生這樣的結果並不是我們想要的,那麼怎麼去除重複的,不想要的記錄呢,當然是通過條件過濾。通常要查詢的多個表之間都存在關聯關係,那麼就通過關聯關係去除笛卡爾積。

// 使用主外來鍵關係做為條件來去除無用資訊

select * from emp,dept where emp.deptno=dept.deptno[在多表查詢中,在使用列時必須指定列所從屬的表,例如emp.deptno表示emp表的deptno列。];

// 還可以為表指定別名,然後在引用列時使用別名即可。

select e.ename,e.sal,e.comm,d.dname

from emp as e,dept as d

where e.deptno=d.deptno;[其中as是可以省略的]

上面的連線語句就是內連線,但它不是sql標準中的查詢方式,可以理解為方言!sql標準的內連線為。

內連線的特點:查詢結果必須滿足條件。例如我們向emp表中插入一條記錄。

select * 

from emp e

inner[inner可以省略,mysql預設的連線方式就是內連線] join dept d

on[不使用where,而是使用on] e.deptno=d.deptno;

左連線:左連線是先查詢出左表(即以左表為主),然後查詢右表,右表中滿足條件的顯示出來,不滿足條件的顯示null

select * from emp e 

left outer[outer可以省略] join dept d

on e.deptno=d.deptno;

右連線:右連線就是先把右表中所有記錄都查詢出來,然後左表滿足條件的顯示,不滿足顯示null

select * from emp e 

right outer join dept d

on e.deptno=d.deptno;

連線查詢心得

連線不限與兩張表,連線查詢也可以是三張、四張,甚至n張表的連線查詢。通常連線查詢不可能需要整個笛卡爾積,而只是需要其中一部分,那麼這時就需要使用條件來去除不需要的記錄。這個條件大多數情況下都是使用主外來鍵關係去除。

大家也都知道,連線查詢會產生無用笛卡爾積,我們通常使用主外來鍵關係等式來去除它。而自然連線無需你去給出主外來鍵等式,它會自動找到這一等式。

兩張連線的表中名稱和型別完全一致的列作為條件,例如emp和dept表都存在deptno列,並且型別一致,所以會被自然連線找到!

當然自然連線還有其他的查詢條件的方式,但其他方式都可能存在問題!

select * from emp natural join dept;[內連線]

select * from emp natural left join dept;[左連線]

select * from emp natural right join dept;[右連線]

乙個select語句中包含另乙個完整的select語句。子查詢就是巢狀查詢,即select中包含select,如果一條語句中存在兩個,或兩個以上select,那麼就是子查詢語句了。

// 子查詢作為條件 子查詢形式為單行單列

// 工資高於jones的員工

select * from emp where sal > (select sal from emp where ename='jones')

// 子查詢作為條件 子查詢形式為多行單列(當子查詢結果集形式為多行單列時可以使用all或any關鍵字)

// 工資高於30號部門所有人的員工資訊

select * from emp where sal > all [大於所有](select sal from emp where deptno=30)

// 子查詢作為條件 子查詢形式為單行多列

// 查詢工作和工資與martin(馬丁)完全相同的員工資訊

select * from emp where (job,sal) in (select job,sal from emp where ename='martin')

// 子查詢作為表 子查詢形式為多行多列

// 查詢員工編號為7788的員工名稱、員工工資、部門名稱、部門位址

select e.ename, e.sal, d.dname, d.loc

from emp e, (select dname,loc,deptno from dept) d

where e.deptno=d.deptno and e.empno=7788

// 求7369員工編號、姓名、經理編號和經理姓名

select e1.empno , e1.ename,e2.mgr,e2.ename

from emp e1, emp e2

where e1.mgr = e2.empno and e1.empno = 7369;

MySQL資料庫基礎快速入門

如果你還不會安裝mysql和連線mysql資料庫,你應該選擇上面部分內容學習之後,再看以下內容 1.登入資料庫 mysql uroot p 引數說明 u 在上面示例中 u引數後面緊跟的是 root 關鍵字,意思就是使用root賬號登入 p 此引數代表使用密碼登入,加上此引數之後,命令行會提示使用者輸...

mysql 資料庫快速入門 MySQL的資料型別

目錄 mysql 資料型別 數值型別 字串 字元 型別 日期 時間型別 mysql支援所有標準sql數值資料型別。資料字段的型別對資料庫的優化是非常重要的,合理的使用資料型別,對資料庫的真來說都是有益的。mysql支援多種型別,大致可以分為三類 型別大小 範圍 有符號 範圍 無符號 用途tinyin...

資料庫快速入門

sqlite 新建乙個資料庫之後需要建立乙個表,否則退出之後,可能找不到這個資料庫檔案。sqlite dev 是乙個exe檔案,預設路徑安裝,自動在桌面生成快捷方式。對於初學者,先把這個工具放一邊,掌握好最基礎的sql語言再去使用它 資料庫管理系統dbms 1.資料定義語言ddl 供使用者定義資料庫...