資料庫的查詢方式
阿新 • • 發佈:2019-02-20
一、合併查詢 union
1.特別注意:合併查詢的欄位型別和數量要一致
2.單獨使用union會把兩張表的資料合併,並且過濾掉相同的資料,不想過濾使用 union all
寫法:
select 欄位名1,欄位名2 from 表1
union select 欄位名1,欄位名2 表2
二、連線查詢
1.99查詢法
select * from 表名1,表名2 where 表名1.共同欄位 = 表名2.共同欄位;
2.內連線查詢
a)使用inner join關鍵字,條件使用on,inner可以省略不寫
select * from 表名1 別名1 join 表名2 別名2
on 別名1. 共同欄位 = 別名2.共同欄位;
3.外連線
a)分為左外連線和右外連線
左外連線:以左邊的表為主,主表中的資料都會查詢出來--可能會產生無用的資料
右外連線一樣 right join
eg:
select s.sid,s.sanme ,c.score
from
score c left join student s
on s.sid = c.sid;
注:表中沒有外來鍵的關係,也可以使用連線查詢
因為,外來鍵是約束,約束資料的插入,查詢時查詢,跟約束無關
三、自然連線查詢(自然左連線,右連線)
1)會自動幫你匹配到表中相同的欄位,沒有外來鍵也就可以自然查詢
select * from student natural join scorre;
四、多表查詢
多表查詢(查詢時3張表2個條件,n張表有n-1個條件)
select s.sid,s.sanme,c.score,cm.cname
from
studnet s join score c on c.sid = s.sid
join course cm on c.cid = cm.cid;
五、子查詢
1)出現多次select關鍵字的查詢語句
eg:查詢工資高於30號部門所有人的員工資訊
select * from emp where sal>(select max(sal) from emp where deptno=30);
2)查詢單個數據使用等號,多個數據一般使用in
六、自連線查詢
1)當你的資料都在一張表中,但是一次不能查出來,可以使用自動連線
eg:7369員工編號、姓名、經理編號和經理姓名
select e1.empno,e1.ename,e1.mgr,e2.ename from emp e1,emp e2
where e1.mgr = e2.empno and e1.empno=7369;
2)查詢過程中出現的問題
eg:各個部門薪水最高的員工所有資訊,查詢過程中出現問題,查詢時,沒有把部門的條件帶進去,只是按最高工資處理的
第一種寫法:
SELECT * from emp where (sal,deptno) in (select max(sal),deptno from emp GROUP BY deptno );
第二種寫法:
select * from emp e1,
(select deptno,max(sal) msal from emp GROUP BY deptno)e2
where e1.sal = e2.msal and e1.deptno = e2.deptno;