Oracle 10g資料庫基礎之基本查詢語句-下-串連&子查詢

來源:互聯網
上載者:User

實驗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;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 下一頁

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.