---關聯查詢
成都創新互聯是一家專業提供金安企業網站建設,專注與做網站、成都網站建設、H5響應式網站、小程序制作等業務。10年已為金安眾多企業、政府機構等服務。創新互聯專業的建站公司優惠進行中。
/**
等值連接:關聯表中存在相同列
非等值連接:表中沒有相同的列名,但是一個表中列,在另外表中存在某種關系,比如在范圍內
外連接:左外連接(左邊顯示全部記錄)和右外連接(右邊顯示全部記錄)
自連接:自己關聯自己查詢
*/
select * from emp;
select * from dept;
-- 笛卡爾積
select * from emp,dept;
-- 關聯查詢
select * from emp,dept where emp.deptno = dept.deptno;
-- 查詢雇員的名稱和部門的名稱
select ename,dname from emp,dept where emp.deptno = dept.deptno;
select * from salgrade;
--查詢雇員名稱和薪水等級
select e.ename,g.grade from emp e,salgrade g where e.sal between g.losal and g.hisal;
-- 需要將雇員表中的數據全部顯示,利用等值連接,只能把關聯到的數據顯示出來,這就需要外連接
select * from emp e,dept d where e.deptno = d.deptno; --等值連接
select * from emp e,dept d where e.deptno = d.deptno(+); --左外連接(左數據要顯示全,右表補空)
select * from emp e,dept d where e.deptno(+) = d.deptno; --右外連接(右數據要顯示全,左表補空)
-- 自連接,把一張表自己關聯自己
-- 將雇員和他的經理查出來 e表示雇員表,m也表示雇員表 匹配的e.mgr的經理是哪個雇員
select e.ename,m.ename from emp e,emp m where e.mgr = m.empno;
-- 不加任何連接條件 笛卡爾積
select * from emp e,dept d;
--以上是sql 92語法問題
-- 關聯查詢條件放到where子句中,而where語句還負責對結果集進行條件過濾,
-- 意味著將連接條件和過濾條件寫在一起,可讀性差,不符合單一職責
sql 99 語法
cross join 等價 92語法笛卡爾積
select * from emp cross join dept;
select * from emp cross join dept;
-- natural join 相當于等值連接,但是不需要等值條件,會做動找相同列左連接
-- 如果兩表中沒有相同列,相當于笛卡爾積
-- 有相同的列,會自動做等值連接
select * from emp e natural join dept d;
-- 沒有相同的列,相當于笛卡爾積
select * from emp e natural join salgrade;
--on 子句,添加連接條件
-- on子句等值連接,相連接當于92語法等值連接
select * from emp e join dept d on e.deptno = d.deptno;
--on 子句非等值連接,相當于92語法非等值連接
select * from emp e join salgrade sg on e.sal between sg.losal and sg.hisal;
-- left outer join ,其中outer可省略 99語法左外連接 會把左表記錄顯示全,右表無對應記錄,顯示空
select * from emp e left outer join dept d on e.deptno = d.deptno;
-- 92語法 左外連接
select * from emp e,dept d where e.deptno = d.deptno(+);
-- right outer join ,其中outer可省略 99語法右外連接
select * from emp e right outer join dept d on e.deptno = d.deptno;
-- 92語法 右外連接
select * from emp e,dept d where e.deptno = d.deptno;
-- full outer join 99語法獨有相當于同時滿足左外連接和右外連接
select * from emp e full outer join dept d on e.deptno = d.deptno;
-- inner join 就是表連接
select * from emp e inner join dept d on e.deptno = d.deptno;
-- 省略inner
select * from emp e join dept d on e.deptno = d.deptno;
--using,除了使用on作為連接條件,也可使用using作為連接條件
--此時查出的deptno不屬于任何一張表
select * from emp e join dept d using(deptno);
-- 發現會出現兩列deptno,分別屬于兩張表
select * from emp e join dept d on e.deptno = d.deptno;
99語法和92語法,實際開發中都可使用,建議使用99語法,可讀性更強
-- 檢索雇員名字、所在單位、薪水等級
select e.ename,d.loc,sg.grade from emp e join dept d on e.deptno = d.deptno join salgrade sg on e.sal between sg.losal and sg.hisal;
以oracle使用rownum偽列實現分頁為例:
三表連接分頁示例代碼如下:
select * from (select rownum r,k.kch,k.kcm,cj.cj,x.xh,x.xm from KCB k,CJB cj,XSB x where k.kch = cj.kch and cj.xh = x.xh and rownum=10) where r0
特別注意這樣外層查詢時由于內層查詢的字段有重復列名,所以內層查詢最后不要用*。取完每一個表字段,這樣很容易報錯(“無效字段”)
select e.empno, e.ename, d.deptno, d.dname
from emp e, dept d
where e.deptno = d.deptno;
在之前所使用的查詢操作之中,都是從一張表之中查詢出所需要的內容,那么如果現在一個查詢語句需要顯示多張表的數據,則就必須應用到多表查詢的操作,而多表查詢的語法如下:
SELECT [DISTINCT] * | 字段 [別名] [,字段 [別名] ,…] FROM 表名稱 [別名], [表名稱 [別名] ,…] [WHERE 條件(S)] [ORDER BY 排序字段 [ASC|DESC] [,排序字段 [ASC|DESC] ,…]]。
擴展資料:
Oracle 常用的關聯查詢:
Oracle外連接:
(1)左外連接 (左邊的表不加限制)。
(2)右外連接(右邊的表不加限制)。
(3)全外連接(左右兩表都不加限制)。
outer join則會返回每個滿足第一個(頂端)輸入與第二個(底端)輸入的聯接的行。它還返回任何在第二個輸入中沒有匹配行的第一個輸入中的行。
外連接分為三種: 左外連接,右外連接,全外連接。 對應SQL:LEFT/RIGHT/FULL OUTER JOIN。 通常我們省略outer 這個關鍵字。 寫成:LEFT/RIGHT/FULL JOIN。
在左外連接和右外連接時都會以一張表為基表,該表的內容會全部顯示,然后加上兩張表匹配的內容。 如果基表的數據在另一張表沒有記錄。 那么在相關聯的結果集行中列顯示為空值(NULL)。
跟my sql一樣的關聯,這些關聯查詢都是一樣的,例如內聯查詢,左聯查詢
內聯查詢:
想把用戶的積分信息, 等級,都列出來,一般會出現:
select * from emd_mteller t1,emd_mrole t2 where t1.teller_id = t2.teller_id
select * from emd_mteller t1 inner join emd_mrole t2 on t1.teller_id = t2.teller_id
左聯查詢:
left join 或者left outer join
返回左表中的所有行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列表列均為空值(null)。
Select * from t1 left outer join t3 on t1.userid = t2.userid
當前名稱:oracle聯查怎么查 oracle聯表查詢
轉載來源:http://vcdvsql.cn/article42/hpgoec.html
成都網站建設公司_創新互聯,為您提供網站制作、電子商務、網站維護、面包屑導航、Google、商城網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯