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,
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 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).
Oracle cơ bản - SQL và PL/SQL
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ụ:
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