以下均以oracle->scott賬號自帶的資料庫為例(方括號裡的東西表示有和沒有效果是一樣的)。
表內查詢->自連線
查詢所有經理所對應的雇員:
sql/86:
select manager.ename as manager,worker.ename as worker from emp manager,emp worker where manager.empno=worker.mgr;
sql/92:
select manager.ename as manager, worker.ename as worker where emp manager [inner] join emp worker on manager.empno=worker.mgr;
表間連線->內連線
查詢部門名對應的雇員名:
sql/86:
select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno;
sql/92:
select e.ename ,d.dname from emp e [inner] join dept d on e.deptno=d.deptno;
相同列名的關聯可以用自然連線達到同樣的效果:
select ename,dname from emp natural [inner] join dept;
->左外連線
查詢雇員名對應的部門名和沒有部門對應的雇員名:
sql/92:
select e.ename,d.dname from emp e left [outer] join dept d on e.deptno=d.deptno;
相同列名的關聯可以用自然連線達到同樣的效果:
select ename,dname from emp natural left [outer] join dept;
->右外連線
查詢雇員名對應的部門名和沒有雇員對應的部門名:
sql/92:
select e.ename,d.dname from emp e [right] outer join dept d on e.deptno=d.deptno;
相同列名的關聯可以用自然連線達到同樣的效果:
select ename,dname from emp natural right [outer] join dept;
->全連線
sql/92:
select e.ename,d.dname from emp e full [outer] join dept d on e.deptno=d.deptno;
相同列名的關聯可以用自然連線達到同樣的效果:
select ename,dname from emp natural full [outer] join dept;
---------以上都是相等連線,還有一種不等連線
例如,顯示每個雇員的名字和薪資等級:
sql/86:
select e.ename,s.grade from emp e,salgrade s where e.sal between s.losal and s.hisal;
sql/92:
select e.ename,s.grade from emp e [inner] join salgrade s on e.sal between s.losal and s.hisal;
*1、between...and...包括兩個端點值(僅限於oracle,其它資料庫的處理方式可能不同)。
2、從可以加inner中可以看出,不等連線也可以有內連線、左外/右外/全連線。
SQL語句的各種連線查詢
連線查詢,等值和非等值連線 若在等值連線中把重複的屬性列去掉,則為自然連線 自身連線,查詢每一門課的間接先修課 外連線,在通常的連線操作中,只有符合條件的元祖才能作為結果輸出。如上上表中沒有200215125學生的資訊,原因是他沒有選課。但有時我們需要以某個表為主題列出所有元祖的情況,比如說以stu...
SQL中的各種連線及查詢
sql中的各種連線及查詢 有如下兩張表 內連線 兩個表的內鏈結就是兩個表的並集。外連線 兩個表的內鏈結就是兩個表的交集。關鍵字 full outer join 或者full join 左外連線 a的全集 若b中不存在就null。select from test userone t left oute...
SQL各種連線
1.內連線 inner join 內連線使用比較運算子根據每個表共有的列的值匹配兩個表中的行。2.外連線 外連線可以是 左向外連線 右向外連線或完整外部連線。在from子句中指定外連線時,可以由下列幾組關鍵字中的一組指定 left join 或 left outer join。左向外連線的結果集包括...