實驗18:表的串連查詢
該實驗的目的是掌握基本的聯集查詢.
表的串連
我們要從多張表中要得到資訊,就得以一定的條件將表串連在一起查詢。
相關閱讀:
Oracle 10g資料庫基礎之基本查詢語句-上
Oracle 10g資料庫基礎之基本查詢語句-中-函數
Oracle 10g資料庫基礎之基本查詢語句-下-串連&子查詢
Cartesian(笛卡兒)串連
當多張表在一起查詢時,沒有給定正確的串連條件,結果是第一張表的所有行和第二張表的所有行進行矩陣相乘,得到n*m行的結果集。
一般來說笛卡兒串連不是我們需要的結果。
但表如果有一行的情況下,結果有可能正確。
SQL> select ename,dname from emp,dept;
ENAME DNAME
---------- --------------
SMITH ACCOUNTING
ALLEN ACCOUNTING
……..
SMITH RESEARCH
ALLEN RESEARCH
……..
SMITH SALES
ALLEN SALES
……..
SMITH OPERATIONS
ALLEN OPERATIONS
……..
56 rows selected
SQL>
結果為每個員工在每個部門上了一次班,4*14=56,這並不是我們想得到的結果。
要避免笛卡兒串連一定要給定一個正確的串連條件。
等值串連
在串連中給定一個相等的串連條件。
SQL> select ename,dname from emp,dept where emp.deptno=dept.deptno;
當列的名稱在兩張表內重複的時候,要加表的首碼來區分,避免不明確的定義。
表的別名
1。便於書寫
2。將同名的表區分
3。一旦定義了別名,表的本名就無效
4。只在該語句內有效
5。定義方式為表名後緊跟別名,用空各間隔。
SQL> select ename,dname from emp e,dept d where e.deptno=d.deptno;
SQL99的書寫方式
select ename,dname from emp e join dept d on (e.deptno=d.deptno);
效率是相同的,SQL99是國標
列的別名,為了區分相同的列的名稱,這是別名的本質。
SQL> select ename,dname,e.deptno,d.deptno
from emp e,dept d
where e.deptno=d.deptno;
上述顯示有兩個列名稱都叫deptno,我們無法區分。
SQL> select ename,dname,e.deptno "員工表",d.deptno "部門表"
from emp e,dept d
where e.deptno=d.deptno;