1. 程式人生 > >資料庫的查詢方式

資料庫的查詢方式

一、合併查詢 union

1.特別注意:合併查詢的欄位型別和數量要一致
2.單獨使用union會把兩張表的資料合併,並且過濾掉相同的資料,不想過濾使用 union all
寫法:
select 欄位名1,欄位名2 from1
union select 欄位名1,欄位名22

二、連線查詢

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;