Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 28 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
28
Dung lượng
353,04 KB
Nội dung
Chương TRUY VẤN CON - Lý thuyết: tiết - Thực hành: tiết Chương Truy vấn 5-1 Truy vấn 5.1 Định nghĩa 5.2 Truy vấn hàng đơn 5.3 Truy vấn nhiều hàng 5.4 Truy vấn nhiều cột 5.5 Truy vấn tương quan 5.6 Truy vấn phân cấp Chương Truy vấn 5-2 Truy vấn 5.1 Định nghĩa câu lệnh SELECT lồng vào mệnh đề câu lệnh khác SELECT select_list FROM table WHERE expr operator (SELECT sel_list FROM table); Chương Truy vấn 5-3 Truy vấn 5.1 Định nghĩa Mục đích Cung cấp giá trị cho WHERE, HAVING và START WITH Định nghĩa tập hợp hàng để chèn vào bảng câu lệnh INSERT hay CREATE TABLE Định nghĩa hay nhiều giá trị để gán cho hàng đã tồn câu lệnh UPDATE Chương Truy vấn 5-4 Truy vấn 5.1 Định nghĩa Một số quy tắc cặp dấu ngoặc đơn () bên phải điều kiện so sánh Mệnh đề ORDER BY câu lệnh truy vấn không cần thiết trừ thực phân tích top-n Sử dụng phép toán Chương Truy vấn 5-5 Truy vấn 5.1 Định nghĩa Trong mệnh đề WHERE Ví dụ Tìm nhân viên làm cơng việc với BLAKE SELECT Fname, JobId FROM Emp WHERE JobId = (SELECT JobId FROM Emp WHERE Fname = ‘BLAKE’); Fname JobId BLAKE CLARK MANAGER MANAGER Chương Truy vấn 5-6 Truy vấn 5.1 Định nghĩa Trong mệnh đề HAVING Ví dụ Tìm phịng có mức lương tb > mức lương tb phòng 30 SELECT DeptId, AVG(Sal) DEPTNO AVG(SAL) 10 2916.66667 FROM Emp 20 2175 GROUP BY DeptId HAVING AVG(Sal) > (SELECT AVG(Sal) FROM Emp WHERE DeptId =30); Chương Truy vấn 5-7 Truy vấn 5.2 Truy vấn hàng đơn trả hàng từ câu lệnh SELECT Ví dụ Tìm nhân viên có mã công việc giống với nhân viên số 141 SELECT Ename, job_id FROM Emp WHERE job_id = (SELECT job_id FROM Emp WHERE emp_id = 141); Chương Truy vấn 5-8 Truy vấn 5.2 Truy vấn hàng đơn Chú ý: Một số lỗi thường gặp Câu lệnh trả nhiều hàng Câu lệnh khơng trả hàng Các phép tốn thường dùng Toán tử Diễn giải = Bằng > Lớn >= Lớn < Nhỏ (SELECT AVG(salary) FROM Emp WHERE deptid = outer.dept_id); Chương Truy vấn - 18 Truy vấn 5.5 Truy vấn tương quan Tương quan UPDATE cập nhật hàng bảng dựa sở hàng từ bảng khác UPDATE table1 alias1 SET col = (SELECT expression FROM table2 alias2 WHERE alias1.col = alias2.co); Chương Truy vấn - 19 Truy vấn 5.5 Truy vấn tương quan Tương quan UPDATE Ví dụ Cập nhật dữ liệu cột Deptid bang Emp dựa vào bảng Dept UPDATE Emp e SET deptid = (SELECT deptid FROM Dept d WHERE e.deptid = d.deptid); Chương Truy vấn - 20 Truy vấn 5.5 Truy vấn tương quan Tương quan DELETE xóa hàng bảng dựa sở hàng từ bảng khác DELETE FROM table1 alias1 WHERE col operator (SELECT expression FROM table2 alias2 WHERE alias1.col = alias2.col); Chương Truy vấn - 21 Truy vấn 5.5 Truy vấn tương quan Tương quan DELETE Ví dụ: Xóa hàng bảng EMP mà hàng tồn bảng EMP_HISTORY DELETE FROM Emp E WHERE emp_id = (SELECT emp_id FROM emp_history WHERE emp_id = E.emp_id); Chương Truy vấn - 22 Truy vấn 5.6 Truy vấn phân cấp bảng thể cấu trúc hình nhờ truy vấn phân cấp SELECT [LEVEL], column, expr FROM table [WHERE condition(s)] [START WITH condition(s)] [CONNECT BY PRIOR condition(s)]; Chương Truy vấn - 23 Truy vấn 5.6 Truy vấn phân cấp Trong đó: Cột giả LEVEL cho biết cấp mẫu tin hay cấp nút quan hệ thừa kế START WITH Xác định điểm đầu hình (bắt buộc) CONNECT BY PRIOR Chỉ định cột và định hướng mối liên hệ hình (bắt buộc) Chương Truy vấn - 24 Truy vấn 5.6 Truy vấn phân cấp Ví dụ: Hiển thị danh sách người quản lý bắt đầu với nhân viên tên ‘King’ (Thứ tự xuống) SELECT ename||' reports to '|| PRIOR ename "Walk Top Down“ FROM emp TART WITH ename = 'King’ CONNECT BY PRIOR emp_id = manager_id; Chương Truy vấn - 25 Truy vấn 5.6 Truy vấn phân cấp Ví dụ: Lập báo cáo hiển thị cấp quản lý công ty, cấp cao thụt đầu dòng theo cấp.(Định dạng phân cấp báo cáo sử dụng LEVEL LPAD) SELECT LPAD(ename, LENGTH(ename) + (LEVEL*2) 2,'_') AS org_chart FROM Emp START WITH ename='King' CONNECT BY PRIOR emp_id=manager_id Chương Truy vấn - 26 Truy vấn 5.6 Truy vấn phân cấp Chương Truy vấn - 27 Truy vấn Câu hỏi tập Trả lời câu hỏi phần 6.7 giáo trình Thực hành viết câu lệnh truy vấn phần tập Chuẩn bị nội dung chương Chương Truy vấn - 28 .. .Truy vấn 5.1 Định nghĩa 5.2 Truy vấn hàng đơn 5.3 Truy vấn nhiều hàng 5.4 Truy vấn nhiều cột 5.5 Truy vấn tương quan 5.6 Truy vấn phân cấp Chương Truy vấn 5-2 Truy vấn 5.1 Định nghĩa... ename=''King'' CONNECT BY PRIOR emp_id=manager_id Chương Truy vấn - 26 Truy vấn 5.6 Truy vấn phân cấp Chương Truy vấn - 27 Truy vấn Câu hỏi tập Trả lời câu hỏi phần 6.7 giáo trình Thực hành viết... sánh với giá trị NULL trả NULL (dùng IN) Chương Truy vấn - 13 Truy vấn 5.4 Truy vấn nhiều cột Mỗi hàng câu truy vấn so sánh với giá trị câu truy vấn nhiều hàng nhiều cột SELECT col1, col2, FROM