Chương 5.LỆNH TRUY VẤN DỮ LIỆU MỞ RỘNG 5.1.KẾT HỢP DỮ LIỆU TỪ NHIỀU BẢNG

Một phần của tài liệu Tài liệu Giáo trình Oracle SQL và PL/SQL cơ bản pdf (Trang 41 - 44)

5.1.KẾT HỢP DỮ LIỆU TỪ NHIỀU BẢNG

5.1.1. Mối liên kết tương đương

Mối liên kết tương đương được thể hiện trong mệnh để WHERE.

Để liên kết trong mệnh để WHERE phải chỉ rõ tên của các column và mệnh đề được đặt tương đương. Ví dụ:

emp.deptno =dept.deptno

Các column trùng tên phải được chỉ rõ column đó nằm ở bảng nảo thông qua tên hoặc qua alias. Tên trùng này có thể đặt trong các mệnh đề khác như SELECT, ORDER BY..

Ví dụ:

SELECT DEPT.DEPTNO, ENAME,JOB, DNAME FROM EMP, DEPT FROM EMP, DEPT

WHERE EMP.DEPTNO = DEPT.DEPTNO ORDER BY DEPT.DEPTNO; ORDER BY DEPT.DEPTNO;

SELECT A.DEPTNO, A.ENAME, A.JOB, B.DNAME FROM EMP A, DEPT B FROM EMP A, DEPT B

WHERE A.DEPTNO = B.DEPTNO ORDER BY A.DEPTNO; ORDER BY A.DEPTNO;

5.1.2. Mối liên kết không tương đương

Mối liên kết tương đương được thể hiện trong mệnh để WHERE.

Để liên kết trong mệnh để WHERE phải chỉ rõ tên của các column và mệnh đề được đặt không tương đương. Ví dụ:

WHERE E.SAL BETWEEN S. LOSAL AND S.HISAL

Các column trùng tên phải được chỉ rõ column đó nằm ở bảng nào thông qua tên hoặc qua alias. Tên trùng này có thể đặt trong các mệnh đề khác như SELECT, ORDER BY..

Ví dụ:

SELECT E.ENAME,E.JOB, S.GRADE FROM EMP E, SALGRADE S FROM EMP E, SALGRADE S

WHERE E.SAL BETWEEN S. LOSAL AND S.HISAL;

Chú ý: Điều kiện liên kết đúng là số các bảng - 1 = số các điều kiện liên kết

5.1.3. Mối liên kết cộng

Mối liên kết cộng trả về cả các giá trị NULL trong biểu thức điều kiện. Dấu (+) để ở vế nào tính thêm các giá trị NULL ở vế đó.

Một câu lệnh select chỉ đặt được 1 mối liên kết cộng, dấu (+) đặt ở bên phải column liên kết

Trong mệnh đề WHERE của mối liên kết cộng không được dùng toán tử IN hoặc OR để nối các điều kiện liên kết khác.

Ví dụ:

SELECT E.ENAME, D.DEPTNO, D.DNAME FROM EMP E, DEPT D FROM EMP E, DEPT D

WHERE E.DEPTNO (+)=D.DEPTNO AND D.DEPTNO IN (30, 40); AND D.DEPTNO IN (30, 40); ENAME DEPTNO DNAME

BLAKE 30 SALES MARTIN 30 SALES ALLEN 30 SALES TURNER 30 SALES JAMES 30 SALES WARD 30 SALES 40 OPERATIONS

5.1.4. Liên kết của bảng với chính nó (tự thân)

Có thể liên kết bảng với chính nó bằng cách đặt alias. Ví du:

Select e.ename emp_name, e.sal emp_sal, (adsbygoogle = window.adsbygoogle || []).push({});

m.ename mgr_name, m.sal mgr_sal from emp e, emp m

where e.mgr = m.empno and e.sal <m.sal;

EMP_NAME EMP_SAL MGR_NAME MGR_SAL

BLAKE 2850 KING 5000 CLARK 2450 KING 5000 JONES 2975 KING 5000 MARTIN 1250 BLAKE 2850 ALLEN 1600 BLAKE 2850 TURNER 1500 BLAKE 2850 JAMES 950 BLAKE 2850 WARD 1250 BLAKE 2850 SMITH 800 FORD 3000 ADAMS 1100 SCOTT 3000 MILLER 1300 CLARK 2450

5.1.5. Cách biểu diễn kết nối mới trong Oracle 9i Tích đề-các CROSS JOIN (Cartesian Product)

SELECT E.ENAME, D.DNAME

FROM EMP E CROSS JOIN DEPT D;

Kết nối tự nhiên NATURAL JOIN (Equijoin on All Identically Named Columns).

SELECT E.ENAME, D.DNAME

FROM EMP E NATURAL JOIN DEPT D;

Mệnh đề USING (Tương tự như Natural Join, nhưng cho phép chỉ rõ tên cột được sử dụng trong phép kết nối).

SELECT E.ENAME, D.DNAME

FROM EMP E JOIN DEPT D USING (DEPTNO);

Mệnh đề ON (Chỉ rõ tên cột tham gia trong phép kết nối) SELECT E.ENAME, D.DNAME

FROM EMP E JOIN DEPT D ON (E.DEPTNO = D.DEPTNO); Kết nối trái LEFT OUTER JOIN

SELECT E.ENAME, D.DNAME

FROM EMP E LEFT OUTER JOIN DEPT D ON (E.DEPTNO = D.DEPTNO);

Kết nối trái RIGHT OUTER JOIN SELECT E.ENAME, D.DNAME

FROM EMP E RIGHT OUTER JOIN DEPT D ON (E.DEPTNO= D.DEPTNO); Kết nối FULL OUTER JOIN (All records from both tables—Identical to a union of left outer join and right outer join)

SELECT E.ENAME, D.DNAME

FROM EMP E FULL OUTER JOIN DEPT D ON (E.DEPTNO = D.DEPTNO);

5.1.6. Các toán tử tập hợp

Tên toán tử

UNION

Diễn giải

Kết hợp kết quả của nhiều câu hỏi với nhau, chỉ giữ lại một đại diện cho các mẫu tin trùng nhau.

UNION ALL Kết hợp kết quả của nhiều câu hỏi với nhau, các mẫu tin trùng nhau cũng được lặp lại

INTERSET

MINUS

Ví dụ: (adsbygoogle = window.adsbygoogle || []).push({});

Lấy phần giao các kết quả của nhiều câu hỏi

Lấy kết quả có trong câu hỏi thứ nhất mà không có trong câu hỏi thứ hai (câu hỏi sau toán tử MINUS)

Select job from emp where deptno = 10 Union

Select job from emp where deptno = 30;

JOB

CLERK MANAGER MANAGER PRESIDENT SALESMAN

Một phần của tài liệu Tài liệu Giáo trình Oracle SQL và PL/SQL cơ bản pdf (Trang 41 - 44)