Các lệnh và các mệnh đề cơ bản trong SQL

22 119 0
  • Loading ...
1/22 trang

Thông tin tài liệu

Ngày đăng: 14/04/2018, 13:31

Các lệnh và các mệnh đề cơ bản trong SQL Tác giả: unknown Lệnh CREATE TABLE - Cú pháp: CREATE TABLE Tên_bảng Tên_cột Loại_dữ_ liệu [Not Null]), Primary Key( Tên khố ), Foreign Key( Tên khố ngồi), ); Trong đó: + Tên_ bảng: xâu kí tự khơng chứa ký tự trống khơng trùng với cáctừ khố + Tên _cột: xâu kí tự khơng chứa kí tự trống, tên cột bảng nhất, thứ tự cột không quan trọng + Loại_dữ_liệu: gồm số loại liệu sau:       integer: số nguyên từ -2147483648 đến 2147483647 smallinteger: số nguyên từ -32768 đến 32767 decimal(n, p): số thập phân với độ dài tối đa n kể p chữ số phần thập phân (khơng tính dấu chấm thập phân) Từ khoá Number SQL dùng dạng liệu Float: số dấu phẩy động Char(n): xâu kí tự độ dài cố định n, (n= quê = “Hà Nội” SELECT * FROM sinhvien WHERE (diem>=9) AND ( que = “Hà Nội”); - Ví dụ 2: Đưa danh sách sinh viên q = “Thái Bình” “Thái Ngun” SELECT * FROM sinhvien WHERE (que = “Thái Bình”) OR (que = “Thái Nguyên”); - Ví dụ 3: Đưa danh sách nhân viên kết 8,9,10 SELECT * FROM sv_dtai WHERE KetQua IN (8, 9, 10); - Ví dụ 4: Đưa danh sách sinh viên kết nằm khoảng [8,10] SELECT * FROM sv_dtai WHERE KetQua BETWEEN and 10; - Ví dụ 5: Đưa danh sách sinh viên quê “Hà Nội” SELECT * FROM sinhvien WHERE que NOT(SELECT que FROM sinhvien WHERE (que = “Hà Nội”)); - Ví dụ 6: Hiển thị tất kết sinh viên SELECT ALL KetQua FROM sv_detai; Truy vấn thay đổi tên cột, tên bảng và hiển thị các cột từ nhiều bảng khác nhau, - Muốn hiển thị cột từ nhiều bảng khác câu lệnh SELECT phải làm sau: SELECT < Danh sách Tên_bang.Tên_cột> FROM WHERE ; - thể đặt tên cột kết truy vấn cách đặt tên vào sau cột chọn ngăn cách từ khố AS, tương tự ta đặt tên cho bảng Ví dụ: Hiển thị danh sách sinh viên bao gồm họ đệm, tên, kết từ bảng sinhviên bảng sv_dt: SELECT sinhvien.HoDem AS Ho, sinhvien.Ten AS Ten, sv_dt.KetQua AS KQ FROM sinhvien AS sv, sv_dt AS sd WHERE (sv.MaSV = sd.MaSV); Truy vấn sử dụng lượng từ DISTINCT/ ALL * Để tránh tình trạng đưa (hàng/bản ghi) trùng lặp kết truy vấn SQL lượng từ DISTINCT Ví dụ: Hiển thị mã đề tài sinh viên đăng ký bảng đề tài SELECT DISTINCT MaDT FROM sinhvien; * Để hiển thị tất hàng (lấy hàng giá trị trùng ) ta dùng lượng từ ALL Ví dụ: Hiển thị tất MaDT mà bảng sv_dtai SELECT ALL MaDT FROM sv_dtai; Chú ý: Ngầm định (nếu khơng viết Distinct/All) thì máy hiểu là All Truy vấn sử dụng mệnh đề GROUP BY - Để hiển thị ghi theo nhóm ta dùng mệnh đề GROUP BY - Ví dụ: Hiển thị bảng đề tài theo nhóm mã đề tài SELECT MaDT FROM detai GROUP BY MaDT; Truy vấn có sử dụng mệnh đề HAVING - Mệnh đề HAVING thường sử dụng mệnh đề GROUP BY Sau HAVING biểu thức điều kiện Biểu thức điều kiện không tác động vào toàn bảng mệnh đề FROM mà tác động nhóm ghi mệnh đề GROUP BY - Ví dụ: Đếm xem đề tài sinh viên đăng ký tham gia SELECT MaDT FROM detai GROUP BY MaDT HAVING COUNT(*); Truy vấn có sử dụng mệnh đề ORDER BY - Mệnh đề ORDER BY dùng để xếp liệu bảng theo chiều tăng giảm (ASC DESC) cột - Mệnh đề ORDER BY đứng sau GROUP BY miền tác động xếp nhóm cột GROUP BY - Ví dụ: Sắp xếp bảng sinhvien theo chiều giảm dần cột học lực SELECT * FROM sinhvien ORDER BY hl DESC; Truy vấn lồng nhau - Trong lệnh SELECT lồng nhiều mức - Ví dụ1: Hiển thị sinh viên học lực cao SELECT * FROM sinhvien WHERE hl = (SELECT MAX(hl) FROM sinhvien); - Ví dụ 2: Hiển thị hođệm,tên sinh viên kết >= tên đề tài Access SELECT hodem,ten FROM sinhvien WHERE MaSV IN (SELECT MaSV FROM sv_dtai WHERE (kq >= 9) AND ( MaDT IN ( SELECT MaDT FROM detai WHERE tendt = “Access”))); Ngôn ngữ SQL Như Chương I mục 1.4, trình bày, hệ quản trị CSDL phải ngơn ngữ giao tiếp người sử dụng với CSDL (hoặc gọi ngơn ngữ truy nhập CSDL) Ngôn ngữ giao tiếp CSDL gồm phạm trù: Ngôn ngữ mô tả liệu (Data Definition Language - DDL) phép khai báo cấu trúc bảng CSDL, khai báo mối liên hệ liệu (Data RelationShip) quy tắc (Rules, Constraint) quản lý áp đặt lên liệu Ngơn ngữ thao tác liệu (Data Manipulation Language - DML) cho phép người sử dụng thên (Insert), xóa (Delete), sửa (Update) liệu CSDL Ngôn ngữ truy vấn liệu, hay ngơn ngữ hỏi đáp cấu trúc (Structured Query Language - SQL) cho phép người khai thác CSDL (chuyên nghiệp không chuyên) sử dụng để truy vấn thông tin cần thiết CSDL Ngôn ngữ quản lý liệu (Data Control Language - DCL) cho phép người quản trị hệ thống thay đổi cấu trúc bảng liệu, khai báo bảo mật thông tin cấp quyền hạn khai thác CSDL cho người sử dụng Những năm 1975-1976, IBM lần đưa hệ quản trị CSDL kiểu quan hệ mang tên SYSTEM-R với ngôn ngữ giao tiếp CSDL SEQUEL (Structured English QUEry Language), ngơn ngữ để thao tác với CSDL Năm 1976 ngôn ngữ SEQUEL cải tiến thành SEQUEL2 Khoảng năm 1978-1979 SEQUEL2 cải tiến đổi tên thành Ngôn Ngữ Truy Vấn Cấu Trúc (Structured Query Language - SQL) cuối năm 1979 hệ quản trị CSDL cải tiến thành SYSTEM-R* Năm 1986 Viện Tiêu Chuẩn Quốc Gia Mỹ (American National Standards Institute - ANSI) công nhận chuẩn hóa ngơn ngữ SQL, sau Tổ chức Tiêu chuẩn Thế giới (International Standards Organization - ISO) cơng nhận ngơn ngữ Đó chuẩn SQL-86 Tới SQL qua lần chuẩn hóa lại (1989, 1992, 1996) để mở rộng phép toán tăng cường khả bảo mật tính tồn vẹn liệu Tài liệu trình bày Ngơn ngữ truy vấn CSDL dựa chuẩn SQL-92 tham khảo với SQL, SQL*PLUS, PL/SQL Oracle Server Release 7.3 (1996) MicroSoft SQL Server 7.1 với phạm trù nêu Để việc trình bày cú pháp câu lệnh SQL gọn gàng dễ hiểu, tài liệu đưa số quy ước ký pháp (Typographic Conventions) sau: Các từ khóa (KeyWords), hàm (Functions), tên bảng (quan hệ - Table Names) câu lệnh viết chữ in hoa (UpperCase) Các tên thuộc tính (Column Names) bảng viết đậm Những tên thuộc tính dấu tiếng Việt hay khoảng trắng viết dấu ngoặc vuông ( [ ] ) theo ký pháp SQL-Server Ví dụ: SELECT Deptno, Deptname FROM DEPARTMENT; Các biến cú pháp (Syntax Variables), tức thành phần ngôn ngữ mà người sử dụng phải điền cụ thể vào viết lệnh, viết chữ thường (LowerCase), cặp dấu ( < > ) nghiêng Ví dụ:CREATE TABLE ( , , ); Các thành phần tùy chọn (Optional), tức khơng viết cặp dấu ngoặc vuông đậm nét ([ ]) Ví dụ: UPDATE SET = , = , [ WHERE ]; Việc lựa chọn khả thể dấu xổ đứng đậm (½ ) Thành phần bắt buộc phải chọn danh sách viết cặp dấu móc đậm nét ( { } ) Giá trị mặc định (Default Value) viết với dấu gạch chân (Underline) Ví dụ: SELECT { * ½ , , } FROM [ORDER BY ½ [ASC ½ DESC ], ] Lệnh SQL viết nhiều dòng kết thúc lệnh dấu chấm phảy ( ; ), nhiên từ khóa, tên hàm, tên thuộc tính, tên bảng, tên đối tượng (Objects) khơng phép viết tách xuống hàng Trong vận dụng thực tế, từ khóa, tên thuộc tính, tên bảng, tên đối tượng viết in hoa chữ thường Cho đến CSDL với đầy đủ liệu quản lý học viên - trình bày Chương III, (gồm quan hệ: KHOA, GIẢNG-VIÊN, LỚP-HỌC, MÔN-HỌC, HỌC-VIÊN, KQUẢ-THI), quản lý nhân công ty EMPLOYMENT – trình bày Chương V, mục 5.3, (gồm quan hệ: DEPARTMENT, EMPLOYEE, JOBS, EMPLHIST) CSDL quản lý cán - công chức CCVC – trình bày Chương V, mục 5.4, (gồm bảng: ĐƠN-VỊ, LOẠI-ĐVỊ, NGẠCH-CBVC, NGẠCH-BẬC-LƯƠNG CBVC) Các CSDL sử dụng làm mẫu cho việc trình bày câu lệnh SQL tồn chương Các lệnh hỏi ­ tìm kiếm dữ liệu: (Data Retrieval SQL) Câu lệnh SELECT - SQL tìm kiếm liệu số câu lệnh SQL cài đặt đầy đủ phép toán quan hệ dựa từ khóa SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING Đây câu lệnh sử dụng phổ biến với mục đích tìm kiếm thơng tin CSDL quan hệ Cú pháp tổng quát câu lệnh sau: SELECT [DISTINCT], , FROM , , [WHERE ] [GROUP BY , , ] [ORDER BY | [ASC | | DESC ], ] [HAVING ]; Chúng ta làm rõ phần cú pháp ngôn ngữ sở liệu sử dụng để minh họa ví dụ chương hệ quản lý nhân công ty EMPLOYMENT với bảng – quan hệ: DEPARTMENT, EMPLOYEE, JOBS, EMPLHIST nói Tìm thơng tin từ các cột của bảng SELECT [DISTINCT]{ * | [AS ], [AS ], } FROM ; Câu hỏi 6.1.1: Cho danh sách phòng ban (bao gồm tất thông tin Mã số ( Câu hỏi 6.1.1: Cho danh sách phòng ban (bao gồm tất thông tin Mã số (DeptNo), Tên (DeptName), Địa điểm (Loc), Mã số người lãnh đạo (Mgr), Kinh phí hoạt động (Exp_Budg) Doanh thu (Rev_Budg) phòng ban) Cơng ty: SELECT Deptno, Deptname, Loc, Mgr, Exp_budg, Rev_budg FROM DEPARTMENT; Khi cần lấy thông tin tất cột bảng sử dụng dấu ( * ) thay cho việc liệt kê tên cột bảng Câu lệnh tương đương với câu lệnh: SELECT * FROM DEPARTMENT; Kết câu lệnh bảng (nằm nhớ trong): DepTn DeptName Loc Mgr Exp_Budg Rev_Budg o 10 Accounting Dallas 200 10.000 30 Research San Fransisco 105 125.000 40 Sales Boston 109 280.000 50 Manufacturing Houston 210 130.000 60 Shipping Houston 215 90.000 800.000 Câu hỏi 6.1.2: Cho Mã số, Tên, Địa điểm, Kinh phí hoạt động phòng ban Cơng ty: SELECT DeptNo, DeptName, Loc, Exp_Budg FROM DEPARTMENT; Câu lệnh cài đặt phép chiếu thuộc tính DeptNo, DeptName, Loc Exp_Budg bảng DEPARTMENT Kết câu lệnh bảng (nằm nhớ trong): DepTn o DeptName Loc Exp_Budg 10 Accounting Dallas 10.000 30 Research San Fransisco 125.000 40 Sales Boston 280.000 50 Manufacturing Houston 130.000 60 Shipping Houston 90.000 Chúng ta giả thiết cần đặt tên khác (gọi bí danh - Alias) cho cột bảng kết tiếng Việt thay dùng tên thuộc tính bảng liệu nguồn Việc thực cách thêm từ khóa AS theo sau tên Nếu tên chứa ký tự đặc biệt và/hoặc khoảng trắng viết tên cặp dấu ngoặc vng ( [ ] ) Ví dụ sửa thành: SELECT DeptNo AS [Mã số], DeptName AS [Tên phòng], Loc AS [Địa diểm], Exp_Budg as [Kinh phí] FROM DEPARTMENT; Kết câu lệnh sau: Mã số Tên phòng Địa điểm Kinh phí 10 Accounting Dallas 10.000 30 Research San Fransisco 125.000 40 Sales Boston 280.000 50 Manufacturing Houston 130.000 60 Shipping Houston 90.000 Câu lệnh SELECT không thực việc trích thơng tin từ cột đơn lẻ bảng mà thực tính tốn theo cơng thức hay biểu thức dựa giá trị cột ghi bảng Trong đó: Biểu thức (expression) dãy toán hạng (Operand) nối với phép tốn (Operator) Ở đây: Tốn hạng là: -Trực (Literals): bao gồm số (Number - Ví dụ 1234.56 1234.56), văn (Text) cặp dấu nháy đơn (Ví dụ ‘Nguyễn Hồng Anh’ ) , ngày tháng (Date/Time) đặt cặp dấu hàng rào ( # - Ví dụ.#19/05/1890# ), lơgic (Truehay False) tên gọi trực -Tên thuộc tính (có thể kèm theo tên bảng dấu chấm đứng trước) Ví dụ DEPARTMENT.DeptNo - Tên hàm (function) Ví dụ SUM ( ), COUNT( ), SIN ( ), COS( ) - Tên biến (Variable) Các phép tốn là: - Các phép toán số học: ^ (lũy thừa); * (nhân), / (chia), % (chia nguyên), Mod (phần dư); + (cộng), - (trừ) Thứ tự ưu tiên cao theo cụm từ trái qua phải Các phép toán số học thường cho kết số - Các phép toán so sánh: =, =, Kết phép so sánh giá trị lơgíc (True False) - Các phép toán phạm vi: IN (), BETWEEN AND , LIKE - Các phép tốn lơgic: NOT (phủ định), AND (nối liền - conjunction), OR (nối rời - disjunction) Kết phép tốn lơgíc giá trị lơgíc Câu hỏi 6.1.3: Cho biết Mã số, Tên lương năm nhân viên công ty: SELECT EmpNo AS [Mã số], Name AS [Tên], Salary * 12 AS [Lương năm] FROM EMPLOYEE; Kết bảng: Mã số Tên Lương năm 100 Wilson 20.400 101 Smith 30.000 103 Reed 42.000 105 Watson 54.000 109 Allen 45.600 110 Turner 21.600 200 Chen 34.800 210 Ramirez 43.200 213 McDonnel 19.500 214 Simpson 9.900 215 Di Salvo 32.400 220 Schwartz 50.400 Khi thực phép chiếu tên quan hệ, giá trị giống chọn Từ khóa DISTINCT sử dụng muốn giữ lại giá trị giống tìm Câu hỏi 6.1.4: Cho biết nhân viên công ty đảm nhận cơng việc gì? Đây phép chiếu thuộc tính Job quan hệ EMPLOYEE SELECT DISTINCT Job FROM EMPLOYEE; Kết bảng với dòng cột sau: Job Clrk Anlt Mngr Drvr Spvr Slsm Chọn các dòng của bảng ­ Mệnh đề WHERE Trong nhiều trường hợp cần chọn giá trị bảng thỏa mãn điều kiện Mệnh đề WHERE (WHERE Clause) với cú pháp ) với cú pháp WHERE cho phép thực điều Ở biểu thức mà kết giá trị lôgic (True) sai (False) Đây cài đặt phép chọn (Selection) đại số quan hệ Câu hỏi 6.1.5: Cho danh sách nhân viên phòng số 40? SELECT * FROM EMPLOYEE WHERE Deptno = 40; Kết bảng dòng (trên tổng số 12 dòng bảng nguồn): EmpN o Name Job Salary Comm DeptNo Sex 101 Smith Slsm 2.500 1.300 40 F 109 Allen Mngr 3.800 8.000 40 F 220 Schwartz Slsm 4.200 5.300 40 F Câu hỏi 6.1.6: Cho danh sách nhân viên phòng số 10, 30 50 SELECT * FROM EMPLOYEE WHERE (DeptNo = 10) OR (DeptNo = 30) OR (DeptNo = 50); Hoặc viết cách khác: SELECT * FROM EMPLOYEE WHERE DeptNo IN (10, 30, 50); Kết bảng: EmpN o Name Job Salary 100 Wilson Clrk 103 Reed 105 Comm DeptNo Sex 1.700 10 M Anlt 3.500 30 M Watson Mngr 4.500 30 M 110 Turner Clrk 1.800 50 M 200 Chen Mngr 2.900 10 F 210 Ramirez Mngr 3.600 50 M Câu hỏi 6.1.7: Cho danh sách nhân viên lương tháng 1ừ 3500 đến 4500 USD: SELECT * FROM EMPLOYEE WHERE (Salary >= 3500) AND (Salary >= 4500); Hoặc viết cách khác: SELECT * FROM EMPLOYEE WHERE Salary BETWEEN 3500 AND 4500; EmpN o Name Job Salary 103 Reed Anlt 3.500 105 Watson Mngr 4.500 109 Allen Mngr 3.800 210 Ramirez Mngr 3.600 220 Schwartz Slsm 4.200 Comm DeptNo Sex 30 M 30 M 8.000 40 F 50 M 40 F 5.300 Mẫu so sánh phép tốn LIKE giá trị kiểu Text, dãy ký tự ký tự ý nghĩa đặc biệt sau đây: _ : Đại diện cho ký tự vị trí dấu ? % : Đại diện cho nhóm ký tự vị trí Ví dụ: Với tiếng Việt byte (VNI, VietWare, ABC, ) mẫu ‘Nguy_n’ đại diện cho dãy ký tự ký tự, ký tự đầu ‘Nguy ’, ký tự thứ ký tự thứ chữ ‘n’ Mẫu %tổ chức% đại diện cho giá trị văn chứa hai từ "tổ chức" Câu hỏi 6.1.8: Cho danh sách nhân viên tên bắt đầu chữ W: SELECT * FROM EMPLOYEE WHERE Name LIKE EmpN o Name Job Salary 100 Wilson Clrk 1.700 105 Watson Mngr 4.500 Comm DeptNo Sex 10 M 30 M ‘W%’; F Lưu ý: Trong MS Access, văn đặt cặp dấu nháy kép – ví dụ " F Lưu ý: Trong MS Access, văn đặt cặp dấu nháy kép – ví dụ "Nguyễn Hồng An" - ký tự đại diện mẫu so sánh với phép LIKE là: ? : Đại diện cho ký tự vị trí dấu ? * : Đại diện cho nhóm ký tự vị trí Thứ tự hiển thị các bản ghi ­ Mệnh đề ORDER BY Trong ví dụ 6.1.6 6.1.7 thấy nhân viên khơng xếp theo phòng ban hay không theo thư tự tăng hay giảm dần mức lương tháng Để thực điều trên, SQL hỗ trợ mệnh đề ORDER BY để xếp kết tìm Cú pháp mệnh đề là: ORDER BY |[ASC| DESC], , |[ASC| DESC], Biểu thức phải giá trị số; thể số thứ tự cột bảng kết định phải xếp thứ tự thay phải rõ tên cột, cột kết cột tính tốn chưa tên nên sử dụng biểu thức biện pháp thay hữu dụng thể xếp theo thứ tự tăng dần (với từ khóa ASC - Viết tắt ASCending mặc định ASC) giảm dần (DESCending) theo giá trị cột Trước hết ghi xếp theo thứ tự cột thứ nhất; ghi giá trị cột xếp theo thứ tự cột thứ 2, Các ghi giá trị cột xếp theo cột thứ v.v Câu hỏi 6.1.9: Cho danh sách nhân viên phòng 10, 30 50 Kết in theo thứ tự tăng dần mã phòng giảm dần theo mức lương , Biểu thức phải giá trị số; thể số thứ tự cột bảng kết định phải xếp thứ tự thay phải rõ tên cột, cột kết cột tính tốn chưa tên nên sử dụng biểu thức biện pháp thay hữu dụng thể xếp theo thứ tự tăng dần (với từ khóa ASC - Viết tắt ASCending mặc định ASC) giảm dần (DESCending) theo giá trị cột Trước hết ghi xếp theo thứ tự cột thứ nhất; ghi giá trị cột xếp theo thứ tự cột thứ 2, Các ghi giá trị cột xếp theo cột thứ v.v Câu hỏi 6.1.9: Cho danh sách nhân viên phòng 10, 30 50 Kết in theo thứ tự tăng dần mã phòng giảm dần theo mức lương SELECT * FROM EMPLOYEE WHERE Deptno IN (10, 30, 50) ORDER BY Deptno, Salary DESC; Hoặc cách viết khác: SELECT * FROM EMPLOYEE WHERE DeptNo IN (10, 30, 50) ORDER BY ASC, DESC; Kết bảng: EmpN o Name Job Salary 200 Chen Mngr 100 Wilson 105 Comm DeptNo Sex 2.900 10 F Clrk 1.700 10 M Watson Mngr 4.500 30 M 103 Reed Anlt 3.500 30 M 210 Ramirez Mngr 3.600 50 M 110 Turner Clrk 1.800 50 M Điều kiện hiển thị các bản ghi ­ Mệnh đề HAVING Mệnh đề WHERE cho phép chọn ghi bảng thỏa mãn điều kiện tìm kiếm Trong số trường hợp sau tìm ghi thỏa điều kiện tìm, muốn hiển thị ghi thỏa điều kiện khác SQL hỗ trợ yêu cầu mệnh đề HAVING Thông thường mệnh đề áp dụng câu lệnh tìm giá trị thơng qua q trình tính tốn nhóm Câu hỏi 6.1.10 đưa sau để làm ví dụ khơng "đắt giá" cho đủ để minh họa điều vừa nêu "Hãy cho danh sách nhân viên phòng 10, 30 50 Chỉ in người lãnh đạo phòng ban" SELECT * FROM EMPLOYEE WHERE Deptno IN (10, 30, 50) ORDER BY ASC, DESC HAVING Job = "Mngr"; Kết bảng: EmpN o Name Job Salary 200 Chen Mngr 2.900 105 Watson Mngr 4.500 210 Ramirez Mngr 3.600 Comm DeptNo Sex 10 F 30 M 50 M Câu hỏi 6.1.11: Cho Mã phòng mà người mức lương cao phòng lớn 4000 $US Rõ ràng phải thực công việc: Phân tổ nhân viên theo phòng ban Xác định mức lương cao phòng ban Chọn phòng mức lương cao 4000 $US Việc tiến hành sau tìm tất mức lương cao phòng ban Câu lệnh sau gợi mở mục 6.2 trình bày SELECT Deptno, MAX(Salary)FROM EMPLOYEE GROUP BY DeptNo HAVING MAX(Salary) Deptn o Max (Salary) 30 4.500 40 4.200 > 4000; Truy vấn thông tin từ nhiều bảng dữ liệu Việc thực câu truy vấn nhiều bảng, chất giống bảng, tức cần thông tin cần tìm lấy từ nguồn liệu Các bảng liệu nguồn cần mệnh đề FROM câu lệnh SELECT Nếu bảng liệu nguồn tên thuộc tính giống tên thuộc tính phải viết tường minh biểu thức tìm kiếm với tên bảng kèm phía trước Nói chung CSDL quan hệ, bảng thường mối liên hệ với Các bảng liên hệ với thông qua phép kết nối thường kết nối (EquiJoin) Mối liên hệ phải thể phép kết nối mệnh đề FROM thông qua điều kiện mệnh đề WHERE câu lệnh SELECT Nếu mối liên hệ này, kết bảng tích Đề-các bảng Câu hỏi 6.1.12: Cho Mã phòng, Tên phòng tên người lãnh đạo phòng tương ứng Trong câu hỏi này, Tên phòng lấy từ bảng DEPARTMENT, Mã phòng lấy từ DEPARTMENT từ bảng EMPLOYEE, tên nhân viên làm lãnh đạo phòng lấy từ bảng EMPLOYEE Hai bảng kết nối với thông qua giá trị thuộc tính Mgr DEPARTMENT EmpNo EMPLOYEE Một điểm cần lưu ý thuộc tính DeptNo bảng DEPARTMENT EMPLOYEE, viết lệnh phải rõDeptNo bảng (mặc dù chúng nhau) SELECT DEPARTMENT.DeptNo, DeptName FROM DEPARTMENT, EMPLOYEE WHERE DEPARTMENT.Mgr = EMPLOYEE.EmpNo; ; Hoặc viết cách khác nhờ sử dụng phép kết nối INNER JOIN (đã trình bày chương V, mục 5.1, điểm 5.1.1) sau: SELECT DEPARTMENT.DeptNo, DeptName FROM DEPARTMENT INNER JOIN EMPLOYEE ON (DEPARTMENT.Mgr = EMPLOYEE.EmpNo); ); Để giảm nhẹ công việc phải viết tên bảng nhiều lần lệnh, SQL hỗ trợ tên bí danh cho bảng cách đặt bí danh sau tên bảng nguồn Bí danh dùng trước đặt Dạng ví dụ viết lại tương đương sau: SELECT D.DeptNo, D.DeptName, E.Name FROM DEPARTMENT D, EMPLOYEE E WHERE D.Mgr = E.Empno; ; Kết cách thể câu hỏi là: D.Deptno D.Deptname E.Name 10 Accounting Chen 30 Research Watson 40 Sales Allen 50 Manufacturing Ramirez 60 Shipping Di Salvo Các câu truy vấn lồng nhau (Query with SubQuery) Trong nhiều trường hợp cần phải tìm kiếm thơng tin qua nhiều bước: kết bước trước sử dụng biểu thức câu truy vấn tiếp theo, kết câu truy vấn lại dùng biểu thức câu truy vấn v.v Bằng ngôn ngữ thủ tục, qua bước phải ghi nhớ lại kết trung gian Nếu cơng việc truy vấn liệu vất vả cho người thao tác trực tiếp với CSDL SQL SELECT cho phép lấy kết câu truy vấn để xây dựng biều thức điều kiện cho câu hỏi khác Câu hỏi trung gian gọi câu hỏi (SubQuery) Câu hỏi phải bao cặp dấu ngoặc tròn biểu thức câu hỏi Sự cho phép câu hỏi ưu điểm bật ngôn ngữ quản trị CSDL quan hệ Câu hỏi 6.1.13: Cho danh sách người làm việc phòng với ơng Watson: Phân tích câu hỏi ta bước: Bước 1: Tìm số hiệu phòng (mà) ơng Watson nhân viên (giả sử phòng tìm mã pp) Bước 2: Tìm người số hiệu phòng làm việc pp Câu hỏi bước câu hỏi cho câu hỏi bước Câu lệnh SQL sau: SELECT * FROM EMPLOYEE WHERE DeptNo = ANY ( SELECT DeptNo FROM EMPLOYEE WHERE Name = ‘Watson’ ); Kết bảng: EmpN o Name Job Salary 103 Reed Anlt 3.500 105 Watson Mngr 4.500 Comm DeptNo Sex 30 M 30 M Câu hỏi 6.1.14: Cho biết Mã số, Tên Mức lương người lãnh đạo ông Smith Câu hỏi phải thực qua bước: Bước 1: Tìm Mã số phòng (mà) ơng Smith làm nhân viên (phòng pp) Bước 2: Tìm Mã số người lãnh đạo phòng pp (nhân viên xx) Bước 3: Tìm Mà số, Tên, Mức lương nhân viên mã số xx Như phải viết câu hỏi lồng câu hỏi chính: SELECT EmpNo, Name, Salary FROM EMPLOYEE WHERE EmpNo = ANY ( SELECT Mgr FROM DEPARTMENT WHERE DeptNo = SOME ( SELECT DeptNo FROM EMPLOYEE WHERE Name = ‘Smith’ ) ); Câu trả lời là: Empn o Name Salary 109 Allen 3.800 Kết câu hỏi sử dụng phép so sánh với giá trị khác biểu thức điều kiện câu hỏi bao Các phép so sánh dạng: [] (SELECT - câu hỏi con) Ở : phép so sánh số học (>, >=,
- Xem thêm -

Xem thêm: Các lệnh và các mệnh đề cơ bản trong SQL, Các lệnh và các mệnh đề cơ bản trong SQL

Gợi ý tài liệu liên quan cho bạn

Nhận lời giải ngay chưa đến 10 phút Đăng bài tập ngay