Academia.eduAcademia.edu
CHƯ Ơ NG 5 NGÔN NGỮ SQL KNOWLEDGE FOR SHARE Tài liệ u tham khả o [ 1] Đỗ Phúc, Nguyễ n Đăng Tỵ . Giáo trình cơ sở dữ liệ u. Đạ i họ c Quố c gia Tp.HCM. [ 2] Đồ ng Thị Bích Thủ y. Giáo trình cơ sở dữ liệ u. Đạ i họ c Quố c gia Tp.HCM. [ 3] Trầ n Ngọ c Bả o. Slide bài giả ng CSDL Đạ i họ c Sư Phạ m TP.HCM [ 4] Lê Minh Triế t. Slide bài giả ng CSDL Đạ i họ c Sư Phạ m TP.HCM 3/ 22/ 2013 2 KNOWLEDGE FOR SHARE Nộ i dung 1. Giớ i thiệ u về SQL 2. Kiể u dữ liệ u 3. Đị nh nghĩa dữ liệ u 4. Truy vấ n dữ liệ u 5. Cậ p nhậ t dữ liệ u 6. Mộ t số vấ n đề khác 3/ 22/ 2013 3 KNOWLEDGE FOR SHARE 1. Giớ i thiệ u Ngôn ngữ ĐSQH – Cách thứ c truy vấ n dữ liệ u – Khó khăn cho ngư ờ i sử dụ ng SQL ( Structured Query Language) – Ngôn ngữ cấ p cao – Ngư ờ i sử dụ ng chỉ cầ n đư a ra nộ i dung cầ n truy vấ n – Đư ợ c phát triể n bở i I BM ( 1970s) – Đư ợ c gọ i là SEQUEL – Đư ợ c ANSI công nhậ n và phát triể n thành chuẩ n • SQL-86 • SQL-92 • SQL-99 3/ 22/ 2013 4 KNOWLEDGE FOR SHARE 1. Giớ i thiệ u SQL gồ m – Đị nh nghĩa dữ liệ u ( DDL) – Thao tác dữ liệ u ( DML) – Đị nh nghĩa khung nhìn – Ràng buộ c toàn vẹ n – Phân quyề n và bả o mậ t – Điề u khiể n giao tác SQL sử dụ ng thuậ t ngữ – Bả ng ~ quan hệ – Cộ t ~ thuộ c tính – Dòng ~ bộ 3/ 22/ 2013 Lý thuyế t Chuẩ n SQL-92, SQL Server 2000 Minh họ a SQL Server 2000 5 KNOWLEDGE FOR SHARE 1. Giớ i thiệ u về SQL Ngôn ngữ đị nh nghĩa dữ liệ u DDL - Data Definition Language Các lệ nh dùng để đị nh nghĩa CSDL: tạ o lậ p (create), thay đổ i (alter) và hủ y bỏ (drop) các đố i tư ợ ng dữ liệ u, thiế t lậ p các ràng buộ c. Ngôn ngữ thao tác dữ liệ u DML - Data Manipulation Language Các lệ nh dùng để bả o trì và truy vấ n CSDL: thêm (insert), sử a (update), xóa (delete) dữ liệ u củ a bả ng, truy vấ n (select). Ngôn ngữ điề u khiể n dữ liệ u DCL - Data Control Language Các lệ nh dùng để điề u khiể n CSDL: quả n trị các quyề n (grant, revoke). 3/ 22/ 2013 6 KNOWLEDGE FOR SHARE 1. Giớ i thiệ u về SQL 3/ 22/ 2013 7 KNOWLEDGE FOR SHARE 2. Kiể u dữ liệ u Kiể u dữ liệ u trong SQL Server 3/ 22/ 2013 8 KNOWLEDGE FOR SHARE 2. Kiể u dữ liệ u Kiể u dữ liệ u trong SQL Server 3/ 22/ 2013 9 KNOWLEDGE FOR SHARE 2. Kiể u dữ liệ u Kiể u dữ liệ u trong SQL Server 3/ 22/ 2013 10 KNOWLEDGE FOR SHARE 3. Đị nh nghĩa dữ liệ u Là ngôn ngữ – – – – mô tả Lư ợ c đồ cho mỗ i quan hệ Miề n giá trị tư ơ ng ứ ng củ a từ ng thuộ c tính Ràng buộ c toàn vẹ n Chỉ mụ c trên mỗ i quan hệ Các lệ nh thông dụ ng – – – – – – CREATE TABLE ( tạ o bả ng) ALTER TABLE ( sử a bả ng) DROP TABLE ( xóa bả ng) CREATE DOMAI N ( tạ o miề n giá trị ) CREATE DATABASE … 3/ 22/ 2013 11 KNOWLEDGE FOR SHARE 3. Đị nh nghĩa dữ liệ u Để đị nh nghĩa mộ t bả ng – Tên bả ng – Các thuộ c tính Tạ o bả ng • Tên thuộ c tính • Kiể u dữ liệ u • Các RBTV trên thuộ c tính Cú pháp CREATE TABLE < Tên_bả ng> ( < Tên_cộ t> < Kiể u_dữ _liệ u> [ < RBTV> ] , < Tên_cộ t> < Kiể u_dữ _liệ u> [ < RBTV> ] , … [ < RBTV> ] ) 3/ 22/ 2013 12 KNOWLEDGE FOR SHARE 3. Đị nh nghĩa dữ liệ u CREATE TABLE NHANVI EN ( MANV CHAR( 9) , HONV NVARCHAR( 10) , TENLOT NVARCHAR( 20) , TENNV NVARCHAR( 10) , NGSI NH DATETI ME, DCHI NVARCHAR( 50) , PHAI CHAR( 3) , LUONG I NT, MA_NQL CHAR( 9) , PHG I NT Tạ o bả ng ) 3/ 22/ 2013 13 KNOWLEDGE FOR SHARE 3. Đị nh nghĩa dữ liệ u <RBTV> NOT NULL NULL UNIQUE (khóa chỉ đị nh) DEFAULT PRIMARY KEY FOREIGN KEY / REFERENCES CHECK (đk ràng buộ c) Tạ o bả ng Đặ t tên cho RBTV CONSTRAINT <Ten_RBTV> <RBTV> 3/ 22/ 2013 14 KNOWLEDGE FOR SHARE 3. Đị nh nghĩa dữ liệ u Tạ o bả ng CREATE TABLE NHANVIEN ( NVARCHAR(10) NOT NULL, HONV TENLOT NVARCHAR(20) NOT NULL, TENNV NVARCHAR(10) NOT NULL, MANV CHAR(9) PRIMARY KEY, NGSINH DATETIME, DCHI NVARCHAR(50), PHAI NCHAR(4) CHECK (PHAI IN (N‘Nam’, N‘Nữ ’)), LUONG INT DEFAULT (10000), MA_NQL CHAR(9), INT PHG ) 3/ 22/ 2013 15 KNOWLEDGE FOR SHARE 3. Đị nh nghĩa dữ liệ u CREATE TABLE PHONGBAN ( Tạ o bả ng TENPB NVARCHAR( 20) UNI QUE, MAPHG I NT NOT NULL, TRPHG CHAR( 9) , NG_NHANCHUC DATETI ME DEFAULT ( GETDATE( ) ) ) CREATE TABLE PHANCONG ( MANV CHAR( 9) FOREI GN KEY ( MANV) REFERENCES NHANVI EN( MANV) , MADA I NT REFERENCES DEAN( MADA) , THOI GI AN DECI MAL( 3,1) , PRI MARY KEY( MANV,MADA) ) 3/ 22/ 2013 16 KNOWLEDGE FOR SHARE 3. Đị nh nghĩa dữ liệ u CREATE TABLE NHANVI EN ( Tạ o bả ng HONV NVARCHAR( 10) CONSTRAI NT NV_HONV_NN NOT NULL, TENLOT NVARCHAR( 20) NOT NULL, TENNV NVARCHAR( 10) NOT NULL, MANV CHAR( 9) CONSTRAI NT NV_MANV_PK PRI MARY KEY, NGSI NH DATETI ME, DCHI NVARCHAR( 50) , PHAI NCHAR( 3) CONSTRAI NT NV_PHAI _CHK CHECK ( PHAI I N ( N‘ Nam’, N ‘ Nữ )’ ) , LUONG I NT CONSTRAI NT NV_LUONG_DF DEFAULT ( 10000) , MA_NQL CHAR( 9) , PHG I NT ) 3/ 22/ 2013 17 KNOWLEDGE FOR SHARE 3. Đị nh nghĩa dữ liệ u CREATE TABLE PHANCONG ( Tạ o bả ng MANV CHAR( 9) , MADA I NT, THOI GI AN DECI MAL( 3,1) , CONSTRAI NT PC_MANV_MADA_PK PRI MARY KEY ( MANV, MADA) , CONSTRAI NT PC_MANV_FK FOREI GN KEY ( MANV) REFERENCES NHANVI EN( MANV) , CONSTRAI NT PC_MADA_FK FOREI GN KEY ( MADA) REFERENCES DEAN( MADA) ) 3/ 22/ 2013 18 KNOWLEDGE FOR SHARE 3. Đị nh nghĩa dữ liệ u Thay đổ i cấ u trúc bả ng Sử a bả ng – Thêm cộ t – Xóa cộ t – Mở rộ ng cộ t Thay đổ i ràng buộ c toàn vẹ n ( RBTV) – Thêm RBTV – Xóa RBTV 3/ 22/ 2013 19 KNOWLEDGE FOR SHARE 3. Đị nh nghĩa dữ liệ u ALTER TABLE < Tên_bả ng> ADD COLUMN < Tên_cộ t> < Kiể u_dữ _liệ u> [ < RBTV> ] ALTER TABLE < Tên_bả ng> DROP COLUMN < Tên_cộ t> ALTER TABLE < Tên_bả ng> ADD CONSTRAI NT < Ten_RBTV> < RBTV> , CONSTRAI NT < Ten_RBTV> < RBTV> , Sử a bả ng ALTER TABLE < Tên_bả ng> ALTER COLUMN < Tên_cộ t> < Kiể u_dữ _liệ u_mớ i> … ALTER TABLE < Tên_bả ng> DROP < Tên_RBTV> 3/ 22/ 2013 20 KNOWLEDGE FOR SHARE 3. Đị nh nghĩa dữ liệ u Sử a bả ng ALTER TABLE NHANVIEN ADD NGHENGHIEP CHAR(20) ALTER TABLE NHANVIEN DROP COLUMN NGHENGHIEP ALTER TABLE NHANVIEN ALTER COLUMN NGHENGHIEP CHAR(50) 3/ 22/ 2013 21 KNOWLEDGE FOR SHARE 3. Đị nh nghĩa dữ liệ u CREATE TABLE PHONGBAN ( TENPB VARCHAR(20), MAPHG INT NOT NULL, TRPHG CHAR(9), Sử a bả ng NG_NHANCHUC DATETIME ) ALTER TABLE PHONGBAN ADD CONSTRAINT PB_MAPHG_PK PRIMARY KEY (MAPHG), CONSTRAINT PB_TRPHG FOREIGN KEY (TRPHG) REFERENCES NHANVIEN(MANV), CONSTRAINT PB_NGNHANCHUC_DF DEFAULT (GETDATE()) FOR (NG_NHANCHUC), CONSTRAINT PB_TENPB_UNI UNIQUE (TENPB) 3/ 22/ 2013 22 KNOWLEDGE FOR SHARE 3. Đị nh nghĩa dữ liệ u Xóa bả ng Đư ợ c dùng để xóa cấ u trúc bả ng – Tấ t cả dữ liệ u củ a bả ng cũng bị xóa Cú pháp DROP TABLE < Tên_bả ng> Ví dụ DROP TABLE NHANVI EN DROP TABLE PHONGBAN DROP TABLE PHANCONG 3/ 22/ 2013 23 KNOWLEDGE FOR SHARE 3. Đị nh nghĩa dữ liệ u Xóa bả ng NHANVI EN HONV TENLOT TENNV MANV NGSINH DCHI PHAI LUONG MA_NQL PHG PHONGBAN TENPHG 3/ 22/ 2013 MAPHG TRPHG NG_NHANCHUC 24 KNOWLEDGE FOR SHARE 3. Đị nh nghĩa dữ liệ u Tạ o ra mộ t kiể u dữ liệ u mớ i kế nhữ ng kiể u dữ liệ u có sẳ n Cú pháp thừ a CREATE DOMAI N < Tên_kdl_mớ i> AS < Kiể u_dữ _liệ u> Ví dụ Tạ o miề n GT CREATE DOMAIN kieu_MANV AS CHAR(9) 3/ 22/ 2013 25 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u 1. Truy vấ n cơ bả n 2. Tậ p hợ p, so sánh tậ p hợ p 3. Truy vấ n lồ ng 4. Hàm kế t hợ p, gom nhóm 5. Mộ t số kiể u truy vấ n khác 3/ 22/ 2013 26 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Là ngôn ngữ rút trích dữ điề u kiệ n nào đó Dự a trên Phép toán ĐSQH liệ u thỏ a mộ t số Mộ t số bổ sung Lệ nh cơ bả n để rút trích thông tin: SELECT Cho phép 1 bả ng có nhiề u dòng trùng nhau Bả ng là bag ( đa bộ ) quan hệ là set ( tậ p hợ p) 3/ 22/ 2013 27 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n cơ bả n SELECT < danh sách các cộ t> FROM < danh sách các bả ng> WHERE < điề u kiệ n> < danh sách các cộ t> – Tên các cộ t cầ n đư ợ c hiể n thị trong kế t quả truy vấ n < danh sách các bả ng> – Tên các bả ng liên quan đế n câu truy vấ n < điề u kiệ n> – Biể u thứ c boolean xác đị nh dòng nào sẽ đư ợ c rút trích – Nố i các biể u thứ c: AND, OR, và NOT – Phép toán: < , > , ≤ , ≥ , ≠( < > ) , =, LI KE và BETWEEN 3/ 22/ 2013 28 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n cơ bả n SELECT < danh sách các cộ t> × FROM < danh sách các bả ng> WHERE < điề u kiệ n> SELECT L FROM R,S L( C (RxS)) WHERE C 3/ 22/ 2013 29 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n cơ bả n Lấ y tấ t cả các cộ t củ a quan hệ kế t quả SELECT * FROM NHANVIEN WHERE PHG= 5 MANV HONV TENLOT TENNV NGSINH DCHI PHAI LUONG MA_NQL PHG 333445555 Nguyen Thanh Tung 12/ 08/ 1955 638 NVC Q5 Nam 40000 888665555 5 987987987 Nguyen Manh Hung 09/ 15/ 1962 Ba Ria VT Nam 38000 333445555 5 PHG= 5 3/ 22/ 2013 (NHANVIEN) 30 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n cơ bả n SELECT MANV, HONV, TENLOT, TENNV FROM NHANVIEN WHERE PHG= 5 AND PHAI= ‘ Nam’ MANV HONV TENLOT TENNV 333445555 Nguyen Thanh Tung 987987987 Nguyen Manh Hung MANV,HONV,TENLOT,TENNV( 3/ 22/ 2013 PHG= 5 ∧ PHAI= ‘ Nam’ (NHANVIEN)) 31 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n cơ bả n Tên bí danh SELECT MANV, HONV AS [ HỌ ] , TENLOT AS [ TÊN LÓT] , TENNV AS [ TÊN] FROM NHANVIEN WHERE PHG= 5 AND PHAI= ‘ Nam’ ( MANV,HỌ ,TÊN LÓT,TÊN 3/ 22/ 2013 MANV HỌ TÊN LÓT TÊN 333445555 Nguyen Thanh Tung 987987987 Nguyen Manh Hung MANV,HONV,TENLOT,TENNV( PHG= 5∧PHAI= ‘ Nam’(NHANVIEN))) 32 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n cơ bả n Mở rộ ng SELECT MANV, HONV + ‘ ’+ TENLOT + ‘ ’+ TENNV AS [ HỌ TÊN] FROM NHANVIEN WHERE PHG= 5 AND PHAI= ‘ Nam’ MANV 3/ 22/ 2013 HỌ TÊN 333445555 Nguyen Thanh Tung 987987987 Nguyen Manh Hung 33 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n cơ bả n Mở rộ ng SELECT MANV, LUONG* 1.1 AS [ LUONG10%] FROM NHANVIEN WHERE PHG= 5 AND PHAI= ‘ Nam’ MANV LUONG10% 333445555 33000 987987987 27500 MANV,LUONG10% ( 3/ 22/ 2013 MANV,LUONG* 1.1( PHG= 5∧PHAI= ‘ Nam’(NHANVIEN))) 34 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n cơ bả n Loạ i bỏ các dòng trùng nhau SELECT DISTINCT LUONG FROM NHANVIEN WHERE PHG= 5 AND PHAI= ‘ Nam’ LUONG 30000 - Tố n chi phí 25000 - Ngư ờ i dùng muố n thấ y 25000 38000 38000 3/ 22/ 2013 35 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n cơ bả n Cho biế t MANV và TENNV làm việ c ở phòng ‘ Nghien cuu’ R1 KQ NHANVIEN MANV, TENNV ( PHG= MAPHG PHONGBAN TENPHG= ‘ Nghien cuu’(R1)) SELECT MANV, TENNV Biể u thứ c luậ n lý FROM NHANVIEN, PHONGBAN WHERE TENPHG= ‘ Nghien cuu’AND PHG= MAPHG TRUE 3/ 22/ 2013 TRUE 36 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n cơ bả n Độ ư u tiên SELECT MANV, TENNV FROM NHANVIEN, PHONGBAN WHERE (TENPHG= ‘ Nghien cuu’OR TENPHG= ‘ Quan ly’) AND PHG= MAPHG 3/ 22/ 2013 37 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n cơ bả n BETWEEN SELECT MANV, TENNV SELECT MANV, TENNV FROM NHANVIEN FROM NHANVIEN WHERE LUONG> = 20000 AND WHERE LUONG BETWEEN 20000 AND 30000 LUONG< = 30000 NOT BETWEEN SELECT MANV, TENNV FROM NHANVIEN WHERE LUONG NOT BETWEEN 20000 AND 30000 3/ 22/ 2013 38 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n cơ bả n LI KE SELECT MANV, TENNV SELECT MANV, TENNV FROM NHANVIEN FROM NHANVIEN WHERE DCHI LIKE ‘ Nguyen _ _ _ _’ WHERE HONV NOT NOT LIKE ‘ Nguyen’ Ký tự bấ t kỳ SELECT MANV, TENNV FROM NHANVIEN WHERE DCHI LIKE ‘ Nguyen %’ Chuỗ i bấ t kỳ 3/ 22/ 2013 39 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n cơ bả n ESCAPE SELECT MANV, TENNV FROM NHANVIEN WHERE DCHI LIKE ‘ % Nguyens_%’ ESCAPE ‘ s’ ‘ Nguyen_’ 3/ 22/ 2013 40 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n cơ bả n SELECT MANV, TENNV Ngày giờ FROM NHANVIEN WHERE NGSINH = ‘ 1955-12-08’ SELECT MANV, TENNV FROM NHANVIEN WHERE NGSINH BETWEEN ‘ 1955-12-08’AND ‘ 1966-07-19’ ‘ 1955-12-08’ YYYY-MM-DD ’17:30:00’ ’12/ 08/ 1955’ MM/ DD/ YYYY ’05:30 PM’ HH:MI:SS ‘ December 8, 1955’ ‘ 1955-12-08 17:30:00’ 3/ 22/ 2013 41 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n cơ bả n Hàm CONVERT Convert( kiể u_dữ _liệ u, biể u_thứ c [ ,kiể u_chuyể n_đổ i] ) Hàm có chứ c năng chuyể n đổ i giá trị củ a biể u thứ c sang kiể u_dữ _liệ u. Tham số kiể u_chuyể n_đổ i là mộ t giá trị số thư ờ ng đư ợ c sử dụ ng khi chuyể n đổ i giá trị kiể u ngày sang kiể u chuỗ i nhằ m quy đị nh khuôn dạ ng dữ liệ u đư ợ c hiể n thị . 3/ 22/ 2013 42 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n cơ bả n HOADON(SoHD, MaKH, ngaylap, trigia) Ví dụ : đị nh dạ ng ngày theo dạ ng dd/mm/yyyy SELECT SoHD, MaKH, CONVERT( varchar( 10) ,ngaylap,103) as ngaylap FROM HOADON 3/ 22/ 2013 43 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u 3/ 22/ 2013 44 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n cơ bả n Sử dụ ng trong trư ờ ng hợ p – Không biế t ( value unknow n) – Không thể áp dụ ng ( value inapplicable) – Không tồ n tạ i ( value w ithheld) NULL Nhữ ng biể u thứ c tính toán có liên quan đế n giá trị NULL sẽ cho ra kế t quả là NULL – x có giá trị là NULL – x + 3 cho ra kế t quả là NULL – x + 3 là mộ t biể u thứ c không hợ p lệ trong SQL Nhữ ng biể u thứ c so sánh có liên quan đế n giá trị NULL sẽ cho ra kế t quả là UNKNOWN – x = 3 cho ra kế t quả là UNKNOWN – x = 3 là mộ t so sánh không hợ p lệ trong SQL 3/ 22/ 2013 45 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n cơ bả n SELECT MANV, TENNV NULL FROM NHANVIEN WHERE MA_NQL IS NULL SELECT MANV, TENNV FROM NHANVIEN WHERE MA_NQL IS NOT NULL 3/ 22/ 2013 46 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n cơ bả n Không sử dụ ng mệ nh đề WHERE ( Tích chéo RxS) MANV 3/ 22/ 2013 SELECT MANV, MAPHG FROM NHANVIEN, PHONGBAN WHERE TRUE MAPHG 333445555 1 333445555 4 333445555 5 987987987 1 987987987 4 987987987 5 … … 47 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n cơ bả n Tên bí danh SELECT TENPHG, DIADIEM SELECT TENPHG, DIADIEM FROM PHONGBAN, DDIEM_PHG FROM PHONGBAN PB, DDIEM_PHG DD WHERE MAPHG= MAPHG WHERE PB.MAPHG= DD.MAPHG SELECT TENNV, NGSINH, TENTN, NGSINH FROM NHANVIEN, THANNHAN WHERE MANV= MA_NVIEN SELECT TENNV, NV.NGSINH, TENTN, TN.NGSINH FROM NHANVIEN NV, THANNHAN TN WHERE MANV= MA_NVIEN 3/ 22/ 2013 48 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n cơ bả n – Bài tậ p 1. Vớ i nhữ ng đề án ở ‘ Ha Noi’, cho biế t mã đề án, mã phòng ban chủ trì đề án, họ tên trư ở ng phòng cùng vớ i ngày sinh và đị a chỉ củ a ngư ờ i ấ y 2. Tìm họ tên củ a nhân viên phòng số 5 có tham gia vào đề án “Sả n phẩ m X” vớ i số giờ làm việ c trên 10 giờ 3. Tìm họ tên củ a từ ng nhân viên và ngư ờ i phụ trách trự c tiế p nhân viên đó 4. Tìm họ tên củ a nhữ ng nhân viên đư ợ c “Nguyen Thanh Tung” phụ trách trự c tiế p 3/ 22/ 2013 49 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n cơ bả n – Sắ p xế p Dùng để hiể n thị kế t quả câu truy vấ n theo mộ t thứ tự nào đó ORDER BY Cú pháp SELECT < danh sách các cộ t> FROM < danh sách các bả ng> WHERE < điề u kiệ n> ORDER BY < danh sách các cộ t> – ASC: tăng ( mặ c đị nh) – DESC: giả m 3/ 22/ 2013 50 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n cơ bả n – Sắ p xế p SELECT MA_NVIEN, SODA ORDER BY FROM PHANCONG ORDER BY MA_NVIEN DESC, SODA MA_NVIEN 3/ 22/ 2013 SODA 999887777 10 999887777 30 987987987 10 987987987 30 987654321 10 987654321 20 987654321 30 51 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n cơ bả n – Tổ ng kế t DI STI NCT BETWEEN LI KE ESCAPE NGÀY GI Ờ CONVERT NULL TÍ CH CHÉO ĐẶ T TÊN ORDER BY 3/ 22/ 2013 52 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Phép toán tậ p hợ p trong SQL SQL có cài đặ t các phép toán – Hộ i ( UNI ON) – Giao ( I NTERSECT) – Trừ ( EXCEPT) Kế t quả trả về là tậ p hợ p – Loạ i bỏ các bộ trùng nhau – Để giữ lạ i các bộ trùng nhau • UNI ON ALL • I NTERSECT ALL • EXCEPT ALL 3/ 22/ 2013 53 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Phép toán tậ p hợ p trong SQL SELECT < ds cộ t> FROM < ds bả ng> WHERE < điề u kiệ n> UNI ON [ ALL] SELECT < ds cộ t> FROM < ds bả ng> WHERE < điề u kiệ n> SELECT < ds cộ t> FROM < ds bả ng> WHERE < điề u kiệ n> I NTERSECT [ ALL] SELECT < ds cộ t> FROM < ds bả ng> WHERE < điề u kiệ n> SELECT < ds cộ t> FROM < ds bả ng> WHERE < điề u kiệ n> EXCEPT [ ALL] SELECT < ds cộ t> FROM < ds bả ng> WHERE < điề u kiệ n> 3/ 22/ 2013 54 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Phép toán tậ p hợ p trong SQL Cho biế t các mã đề án có – Nhân viên vớ i họ là ‘ Nguyen’ tham gia đề án hoặ c – Trư ở ng phòng chủ trì đề án vớ i họ là ‘ Nguyen’ SELECT MADA FROM NHANVIEN, PHANCONG Phép hợ p WHERE MANV= MA_NVIEN AND HONV= ‘ Nguyen’ UNI ON SELECT MADA FROM NHANVIEN, PHONGBAN, DEAN WHERE MANV= TRPHG AND MAPHG= PHONG AND HONV= ‘ Nguyen’ 3/ 22/ 2013 55 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Phép toán tậ p hợ p trong SQL Tìm nhân viên có ngư ờ i thân cùng tên và cùng giớ i tính Phép giao SELECT TENNV, PHAI, MANV FROM NHANVIEN INTERSECT SELECT TENTN, PHAI, MA_NVIEN FROM THANNHAN SELECT NV.* FROM NHANVIEN NV, THANNHAN TN WHERE NV.MANV= TN.MA_NVIEN AND NV.TENNV= TN.TENTN AND NV.PHAI= TN.PHAI 3/ 22/ 2013 56 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Phép toán tậ p hợ p trong SQL Tìm nhữ ng nhân viên không có thân nhân nào Phép trừ SELECT MANV FROM NHANVIEN EXCEPT SELECT MA_NVIEN AS MANV FROM THANNHAN SELECT MANV FROM NHANVIEN WHERE MANV NOT IN (SELECT MANV FROM THANNHAN) 3/ 22/ 2013 57 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n lồ ng Tìm nhân viên có ngư ờ i thân SELECT DISTINCT NV.MANV,HONV + ‘ ’ + TENNV [HỌ TÊN] FROM NHANVIEN NV, THANNHAN TN WHERE NV.MANV= TN.MANV SELECT MANV FROM NHANVIEN WHERE MANV IN (SELECT MANV FROM THANNHAN) 3/ 22/ 2013 58 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n lồ ng Câu truy vấ n cha (Outer query) SELECT < danh sách các cộ t> FROM < danh sách các bả ng> WHERE < so sánh tậ p hợ p> ( SELECT < danh sách các cộ t> FROM < danh sách các bả ng> Câu truy vấ n con (Subquery) WHERE < điề u kiệ n> ) 3/ 22/ 2013 59 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Các lệ nh SELECT có thể lồ ng nhau ở nhiề u mứ c Các câu truy vấ n con trong cùng mộ t mệ nh đề WHERE đư ợ c kế t hợ p bằ ng phép nố i logic Câu truy vấ n con thư ờ ng trả về mộ t tậ p các giá trị Mệ nh đề WHERE củ a câu truy vấ n cha – < biể u thứ c> < so sánh tậ p hợ p> < truy vấ n con> – So sánh tậ p hợ p thư ờ ng đi cùng vớ i mộ t số toán tử • I N, NOT I N • ALL • ANY hoặ c SOME – Kiể m tra sự tồ n tạ i • EXI STS • NOT EXI STS Truy vấ n lồ ng 3/ 22/ 2013 60 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n lồ ng SELECT * FROM NHANVIEN WHERE MLUONG > = ALL (SELECT MLUONG FROM NHANVIEN) SELECT * FROM NHANVIEN WHERE MLUONG > = ANY/ SOME (SELECT MLUONG FROM NHANVIEN) 3/ 22/ 2013 61 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u 1. Lồ ng phân cấ p Truy vấ n lồ ng – Mệ nh đề WHERE củ a truy vấ n con không tham chiế u đế n thuộ c tính củ a các quan hệ trong mệ nh đề FROM ở truy vấ n cha – Khi thự c hiệ n, câu truy vấ n con sẽ trư ớ c đư ợ c thự c hiệ n 2. Lồ ng tư ơ ng quan – Mệ nh đề WHERE củ a truy vấ n con tham chiế u ít nhấ t mộ t thuộ c tính củ a các quan hệ trong mệ nh đề FROM ở truy vấ n cha – Khi thự c hiệ n, câu truy vấ n con sẽ đư ợ c thự c hiệ n nhiề u lầ n, mỗ i lầ n tư ơ ng ứ ng vớ i mộ t bộ củ a truy vấ n cha 3/ 22/ 2013 62 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n lồ ng – Phân cấ p SELECT MADA FROM NHANVIEN NV, PHANCONG PC WHERE NV.MANV= PC.MA_NVIEN AND NV.HONV= ‘ Nguyen’ UNION SELECT MADA FROM NHANVIEN NV, PHONGBAN PB, DEAN DA WHERE NV.MANV= PB.TRPHG AND PB.MAPHG= DA.PHONG AND NV.HONV= ‘ Nguyen’ Hãy tìm Đề án mà nhân viên tham gia đề án có họ ‘Nguyen’ HOẶ C Đề án có trư ở ng phòng chủ trì đề án có họ ‘Nguyen’ 3/ 22/ 2013 63 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n lồ ng – Phân cấ p SELECT DISTINCT TENDA FROM DEAN WHERE MADA IN ( SELECT MADA FROM NHANVIEN, PHANCONG WHERE MANV= MA_NVIEN AND HONV= ‘ Nguyen’) OR MADA IN ( SELECT MADA FROM NHANVIEN, PHONGBAN PB, DEAN DA WHERE MANV= TRPHG AND PB.MAPHG= DA.PHONG AND HONV= ‘ Nguyen’) 3/ 22/ 2013 64 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n lồ ng – Phân cấ p SELECT * Hãy tìm nhữ ng nhân viên không có thân nhân FROM NHANVIEN WHERE MANV NOT IN ( SELECT MA_NVIEN FROM THANNHAN ) SELECT * FROM NHANVIEN WHERE MANV < > ALL ( SELECT MA_NVIEN FROM THANNHAN ) 3/ 22/ 2013 65 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n lồ ng – Phân cấ p 1. Tìm nhữ ng nhân viên có lư ơ ng lớ n hơ n lư ơ ng củ a ít nhấ t mộ t nhân viên phòng 4 2. Tìm nhữ ng nhân viên có lư ơ ng lớ n hơ n lư ơ ng củ a tấ t cả nhân viên phòng 4 3. Tìm nhữ ng trư ở ng phòng có tố i thiể u mộ t thân nhân 3/ 22/ 2013 66 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n lồ ng – Phân cấ p SELECT * SELECT NV1.* FROM NHANVI EN FROM NHANVI EN NV1, NHANVI EN NV2 WHERE LUONG > ANY ( WHERE NV1.LUONG > NV2.LUONG AND NV2.PHG= 4 SELECT LUONG FROM NHANVI EN WHERE PHG= 4 ) SELECT * FROM NHANVIEN WHERE LUONG > ALL ( SELECT * SELECT LUONG FROM NHANVIEN FROM NHANVIEN WHERE MANV IN (SELECT MA_NVIEN FROM THANNHAN) WHERE PHG= 4 ) AND MANV IN (SELECT TRPHG FROM PHONGBAN) 3/ 22/ 2013 67 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n lồ ng – Tư ơ ng quan SELECT MANV, TENNV FROM NHANVIEN, PHONGBAN WHERE TENPHG= ‘ Nghien cuu’AND PHONG= MAPHG SELECT MANV, TENNV FROM NHANVIEN Tìm nhân viên Phòng nghiên cứ u WHERE EXISTS ( SELECT * FROM PHONGBAN WHERE TENPHG= ‘ Nghien cuu’AND PHONG= MAPHG ) 3/ 22/ 2013 68 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n lồ ng – Tư ơ ng quan Tìm nhân viên có thân nhân cùng tên, cùng phái SELECT * FROM NHANVIEN NV WHERE EXISTS ( SELECT * FROM THANNHAN TN WHERE NV.MANV= TN.MA_NVIEN AND NV.TENNV= TN.TENTN AND NV.PHAI= TN.PHAI ) 3/ 22/ 2013 69 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n lồ ng – Tư ơ ng quan 1. Tìm nhữ ng nhân viên không có thân nhân nào 2. Tìm nhữ ng nhân viên có lư ơ ng lớ n hơ n lư ơ ng củ a ít nhấ t mộ t nhân viên phòng 4 3. Tìm nhữ ng trư ở ng phòng có tố i thiể u mộ t thân nhân 3/ 22/ 2013 70 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Truy vấ n lồ ng – Tư ơ ng quan IN – < tên cộ t> I N < câu truy vấ n con> – Thuộ c tính ở mệ nh đề SELECT củ a truy vấ n con phả i có cùng kiể u dữ liệ u vớ i thuộ c tính ở mệ nh đề WHERE củ a truy vấ n cha EXI STS – Không cầ n có thuộ c tính, hằ ng số hay biể u thứ c nào khác đứ ng trư ớ c – Không nhấ t thiế t liệ t kê tên thuộ c tính ở mệ nh đề SELECT củ a truy vấ n con – Nhữ ng câu truy vấ n có = ANY hay I N đề u có thể chuyể n thành câu truy vấ n có EXI STS 3/ 22/ 2013 71 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Phép chia trong SQL R A B C D E a a 1 a a 1 a b 1 a a 1 a b 3 a a 1 a b 1 a b 1 S bi D E R÷S a 1 ai b 1 A B C a a R÷S là tậ p các giá trị ai trong R sao cho không có giá trị bi nào trong S làm cho bộ ( ai, bi) không tồ n tạ i trong R 3/ 22/ 2013 72 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u SELECT R1.A, R1.B, R1.C FROM R R1 Phép chia trong SQL WHERE NOT EXISTS ( SELECT * FROM S WHERE NOT EXISTS ( Sử dụ ng NOT EXISTS để biể u diễ n SELECT * FROM R R2 WHERE R2.D= S.D AND R2.E= S.E AND R1.A= R2.A AND R1.B= R2.B AND R1.C= R2.C ) ) 3/ 22/ 2013 73 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Phép chia trong SQL Sử dụ ng truy vấ n lồ ng để biể u diễ n phép chia SELECT R.A,R.B,R.C FROM R WHERE R.A+R.B+R.C NOT IN ( SELECT Q2.A+Q2.B+Q2.C FROM (SELECT R.A,R.B,R.C,S.* FROM R,S) Q2 WHERE Q2.A+Q2.B+Q2.C+Q2.D+Q2.E NOT IN (SELECT R.A+R.B+R.C+R.D+R.E FROM R) ) -- Q3 LÀ A,B,C KHÔNG THAM GIA ĐẦ Y ĐỦ VÀO S 3/ 22/ 2013 74 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Phép chia trong SQL Sử dụ ng hàm count SELECT MANV,COUNT(MADA) FROM PHANCONG GROUP BY MANV HAVING COUNT(MADA)=(SELECT COUNT(MADA) FROM DEAN) 3/ 22/ 2013 75 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Phép chia trong SQL Tìm tên các nhân viên đư ợ c phân công làm tấ t cả các đề án – Tìm tên các nhân viên mà không có đề không đư ợ c phân công làm án nào là – Tậ p bị chia: PHANCONG( MA_NVI EN, MADA) – Tậ p chia: DEAN( MADA) – Tậ p kế t quả : KQ( MA_NVI EN) – Kế t KQ vớ i NHANVI EN để lấ y ra TENNV 3/ 22/ 2013 76 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Phép chia trong SQL SELECT NV.TENNV FROM NHANVIEN NV, PHANCONG PC1 WHERE NV.MANV= PC1.MANV AND NOT EXISTS ( SELECT * FROM DEAN DA WHERE NOT EXISTS ( SELECT * FROM PHANCONG PC2 WHERE PC2.MADA= DA.MADA AND PC1.MANV= PC2.MANV )) 3/ 22/ 2013 77 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Hàm kế t hợ p COUNT 1. COUNT( * ) đế m số dòng 2. COUNT( < tên thuộ c tính> ) đế m số giá trị khác NULL củ a thuộ c tính 3. COUNT( DI STI NCT < tên thuộ c tính> ) đế m số giá trị khác nhau và khác NULL củ a thuộ c tính MI N MAX SUM AVG Các hàm kế t hợ p đư ợ c đặ t ở mệ nh đề SELECT 3/ 22/ 2013 78 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Hàm kế t hợ p SELECT SUM(LUONG), MAX(LUONG), MIN(LUONG), AVG(LUONG) FROM NHANVIEN SELECT COUNT(* ) AS SL_NV FROM NHANVIEN, PHONGBAN WHERE PHG= MAPHG AND TENPHG= ‘ Nghien cuu’ 3/ 22/ 2013 79 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Gom nhóm Cú pháp SELECT < danh sách các cộ t> FROM < danh sách các bả ng> WHERE < điề u kiệ n> GROUP BY < danh sách các cộ t gom nhóm> Sau khi gom nhóm: mỗ i nhóm các bộ sẽ có cùng giá trị tạ i các thuộ c tính gom nhóm 3/ 22/ 2013 80 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Gom nhóm SELECT PHG, COUNT(* ) AS SL_NV FROM NHANVIEN GROUP BY PHG SELECT TENPHG, COUNT(* ) AS SL_NV FROM NHANVIEN, PHONGBAN WHERE PHG= MAPHG SELECT cộ t nào GROUP BY cộ t đó (ngoạ i trừ hàm kế t hợ p ) GROUP BY TENPHG 3/ 22/ 2013 81 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Gom nhóm 1. Vớ i mỗ i nhân viên cho biế t mã số , họ tên, số lư ợ ng đề án và tổ ng thờ i gian mà họ tham gia 2. Cho biế t nhữ ng nhân viên tham gia từ 2 đề án trở lên 3/ 22/ 2013 MA_NVIEN SODA THOIGIAN 123456789 1 32.5 123456789 2 7.5 333445555 2 10.0 333445555 3 10.0 333445555 10 10.0 888665555 20 20.0 987987987 10 35.0 987987987 30 5.0 987654321 30 20.0 987654321 20 15.0 453453453 1 20.0 453453453 2 20.0 82 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Gom nhóm SELECT < danh sách các cộ t> FROM < danh sách các bả ng> WHERE < điề u kiệ n> GROUP BY < danh sách các cộ t gom nhóm> HAVI NG < điề u kiệ n trên nhóm> SELECT MANV FROM PHANCONG GROUP BY MANV HAVI NG COUNT( * ) > = 2 3/ 22/ 2013 83 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Gom nhóm Cho biế t nhữ ng phòng ban (TENPHG) có lư ơ ng trung bình củ a các nhân viên lớ n lơ n 20000 SELECT PHONG, AVG(LUONG) AS LUONG_TB FROM NHANVIEN GROUP BY PHONG SELECT TENPHG, AVG(LUONG) AS LUONG_TB HAVING AVG(LUONG) > 20000 FROM NHANVIEN, PHONGBAN WHERE PHG= MAPHG GROUP BY TENPHG HAVING AVG(LUONG) > 20000 3/ 22/ 2013 84 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Gom nhóm Mệ nh đề GROUP BY – Các thuộ c tính trong mệ nh đề SELECT ( trừ nhữ ng thuộ c tính trong các hàm kế t hợ p) phả i xuấ t hiệ n trong mệ nh đề GROUP BY Mệ nh đề HAVI NG – Sử dụ ng các hàm kế t hợ p trong mệ nh đề SELECT để kiể m tra mộ t số điề u kiệ n nào đó – Chỉ kiể m tra điề u kiệ n trên nhóm, không là điề u kiệ n lọ c trên từ ng bộ – Sau khi gom nhóm điề u kiệ n trên nhóm mớ i đư ợ c thự c hiệ n 3/ 22/ 2013 85 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Gom nhóm – Thứ tự câu lệ nh Chọ n ra nhữ ng dòng thỏ a điề u kiệ n trong mệ nh đề WHERE Nhữ ng dòng này sẽ đư ợ c gom thành nhiề u nhóm tư ơ ng ứ ng vớ i mệ nh đề GROUP BY Áp dụ ng các hàm kế t hợ p cho mỗ i nhóm Bỏ qua nhữ ng nhóm không thỏ a điề u kiệ n trong mệ nh đề HAVI NG Rút trích các giá trị củ a các cộ t và hàm kế t hợ p trong mệ nh đề SELECT 3/ 22/ 2013 86 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Mộ t số dạ ng truy vấ n khác 3/ 22/ 2013 87 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Mộ t số dạ ng truy vấ n khác Kế t quả trả về củ a mộ t câu truy vấ n phụ là mộ t bả ng – Bả ng trung gian trong quá trình truy vấ n – Không có lư u trữ thậ t sự Cú pháp SELECT < danh sách các cộ t> FROM R1, R2, ( < truy vấ n con> ) AS tên_bả ng WHERE < điề u kiệ n> 3/ 22/ 2013 88 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Mộ t số dạ ng truy vấ n khác Kế t bằ ng SELECT < danh sách các cộ t> FROM R1 [ I NNER] JOI N R2 ON < biể u thứ c> WHERE < điề u kiệ n> Kế t ngoài FULL JOIN SELECT < danh sách các cộ t> FROM R1 LEFT| RI GHT [ OUTER] JOI N R2 ON < biể u thứ c> FULL WHERE < điề u kiệ n> 3/ 22/ 2013 89 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Cấ u trúc CASE Cho phép kiể m tra điề u kiệ n và xuấ t thông tin theo từ ng trư ờ ng hợ p Cú pháp CASE < tên cộ t> WHEN < giá trị > THEN < biể u thứ c> WHEN < giá trị > THEN < biể u thứ c> … [ ELSE < biể u thứ c> ] END 3/ 22/ 2013 90 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u SELECT HONV, TENNV FROM NHANVIEN WHERE YEAR(GETDATE()) – YEAR(NGSINH) > = (CASE PHAI WHEN ’Nam’ THEN 60 WHEN ’Nu’ THEN 55 END ) SELECT HONV, TENNV, ( CASE PHAI CASE WHEN ’Nam’ THEN YEAR(NGSINH) + 60 WHEN ’Nu‘ THEN YEAR(NGSINH) + 55 END ) AS NAMVEHUU FROM NHANVIEN 3/ 22/ 2013 91 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u QUY TRÌNH XỬ 3/ 22/ 2013 LÝ CÂU TRUY VẤ N 92 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u 3/ 22/ 2013 93 KNOWLEDGE FOR SHARE 4. Truy vấ n dữ liệ u Cross-Tab SELECT Year, SUM(CASE Quarter WHEN 1 THEN Amount ELSE 0 END) AS Q1, SUM(CASE Quarter WHEN 2 THEN Amount ELSE 0 END) AS Q2, SUM(CASE Quarter WHEN 3 THEN Amount ELSE 0 END) AS Q3, SUM(CASE Quarter WHEN 4 THEN Amount ELSE 0 END) AS Q4 FROM Pivot GROUP BY Year 3/ 22/ 2013 94 KNOWLEDGE FOR SHARE 5. Cậ p nhậ t dữ liệ u THÊM DỮ LIỆ U VÀO BẢ NG Sử dụ ng để thêm 1 hay nhiề u dòng vào bả ng Cú pháp: I NSERT I NTO < tên bả ng> (< danh sách các thuộ c tính> ) VALUES (< danh sách các giá trị > ) Ví dụ : 3/ 22/ 2013 95 KNOWLEDGE FOR SHARE 5. Cậ p nhậ t dữ liệ u THÊM DỮ LIỆ U VÀO BẢ NG INSERT INTO NHANVIEN(HONV, TENLOT, TENNV, MANV) VALUES (N‘ Lê’, N‘ Văn’, N‘ Tuyể n’, ‘ 635635635’) INSERT INTO NHANVIEN(HONV, TENLOT, TENNV, MANV, DCHI) VALUES (‘ Le’, ‘ Van’, ‘ Tuyen’, ‘ 635635635’, NULL) INSERT INTO NHANVIEN VALUES (‘ Le’, ‘ Van’, ‘ Tuyen’, ‘ 635635635’, ’12/ 30/ 1952’, ’98 HV’, ‘ Nam’, ‘ 37000’, 4) 3/ 22/ 2013 96 KNOWLEDGE FOR SHARE 5. Cậ p nhậ t dữ liệ u THÊM DỮ LIỆ U VÀO BẢ NG Thứ tự các giá trị phả i trùng vớ i thứ tự các cộ t Có thể thêm giá trị NULL ở nhữ ng thuộ c tính không là khóa chính và NOT NULL Câu lệ nh I NSERT sẽ gặ p lỗ i nế u vi phạ m RBTV – Khóa chính – Tham chiế u – NOT NULL - các thuộ c tính có ràng buộ c NOT NULL bắ t buộ c phả i có giá trị 3/ 22/ 2013 97 KNOWLEDGE FOR SHARE 5. Cậ p nhậ t dữ liệ u THÊM NHIỀ U DÒNG DL VÀO BẢ NG I NSERT I NTO < tên bả ng> (< danh sách các thuộ c tính> ) < câu truy vấ n con> CREATE TABLE THONGKE_PB ( TENPHG VARCHAR(20), SL_NV INT, LUONG_TC INT ) INSERT INTO THONGKE_PB(TENPHG, SL_NV, LUONG_TC) SELECT TENPHG, COUNT(MANV), SUM(LUONG) FROM NHANVIEN, PHONGBAN WHERE PHG= MAPHG GROUP BY TENPHG 3/ 22/ 2013 98 KNOWLEDGE FOR SHARE 5. Cậ p nhậ t dữ liệ u XÓA DỮ LIỆ U TRONG BẢ NG DELETE FROM < tên bả ng> [ WHERE < điề u kiệ n> ] DELETE FROM NHANVIEN DELETE FROM NHANVIEN DELETE FROM NHANVIEN WHERE MANV= ‘ 345345345’ WHERE HONV= ‘ Tran’ 3/ 22/ 2013 99 KNOWLEDGE FOR SHARE 5. Cậ p nhậ t dữ liệ u XÓA DỮ LIỆ U TRONG BẢ NG Xóa nhân viên ở phòng nghiên cứ u DELETE FROM NHANVIEN WHERE PHG IN ( SELECT MAPHG FROM PHONGBAN WHERE TENPHG= ‘ Nghien cuu’) 3/ 22/ 2013 100 KNOWLEDGE FOR SHARE 5. Cậ p nhậ t dữ liệ u XÓA DỮ LIỆ U TRONG BẢ NG Số lư ợ ng số dòng bị xóa phụ mệ nh đề WHERE thuộ c vào điề u kiệ n ở Nế u không chỉ đị nh điề u kiệ n ở mệ nh đề WHERE, tấ t cả các dòng trong bả ng sẽ bị xóa Lệ nh DELETE có thể gây ra vi phạ m RB tham chiế u – Không cho xóa – Xóa luôn nhữ ng dòng có giá trị đang tham chiế u đế n • CASCADE – Đặ t NULL cho nhữ ng giá trị tham chiế u 3/ 22/ 2013 101 KNOWLEDGE FOR SHARE 5. Cậ p nhậ t dữ liệ u XÓA DỮ MANV HONV LIỆ U TRONG BẢ NG TENLOT TENNV NGSINH DCHI PHAI LUONG MA_NQL PHG 333445555 Nguyen Thanh Tung 12/ 08/ 1955 638 NVC Q5 Nam 40000 888665555 5 987987987 Nguyen Manh Hung 09/ 15/ 1962 Ba Ria VT Nam 38000 333445555 5 453453453 Tran Thanh Tam 07/ 31/ 1972 543 MTL Q1 Nu 25000 333445555 5 999887777 Bui Ngoc Hang 07/ 19/ 1968 33 NTH Q1 Nu 38000 987654321 4 987654321 Le Quynh Nhu 07620/ 1951 219 TD Q3 Nu 43000 888665555 4 987987987 Tran Hong Quang 04/ 08/ 1969 980 LHP Q5 Nam 25000 987654321 4 888665555 Pham Van Vinh 11/ 10/ 1945 450 TV HN Nam 55000 NULL 1 MA_NVIEN SODA 333445555 10 10.0 888665555 20 20.0 987987987 10 35.0 987987987 30 5.0 987654321 30 20.0 453453453 1 20.0 3/ 22/ 2013 THOIGIAN 102 KNOWLEDGE FOR SHARE 5. Cậ p nhậ t dữ liệ u CẬ P NHẬ T DỮ LIỆ U TRONG BẢ NG UPDATE < tên bả ng> UPDATE NHANVIEN SET < tên thuộ c tính> = < giá trị mớ i> , SET NGSINH= ’08/ 12/ 1965’ < tên thuộ c tính> = < giá trị mớ i> , … [ WHERE < điề u kiệ n> ] WHERE MANV= ‘ 333445555’ UPDATE NHANVIEN SET LUONG= LUONG* 1.1 Vớ i đề án có mã số 10, hãy thay đổ i nơ i thự c hiệ n đề án thành ‘Vung Tau’ và phòng ban phụ trách là phòng 5 3/ 22/ 2013 103 KNOWLEDGE FOR SHARE 5. Cậ p nhậ t dữ liệ u CẬ P NHẬ T DỮ LIỆ U TRONG BẢ NG Nhữ ng dòng thỏ a điề u kiệ n tạ i mệ nh đề WHERE sẽ đư ợ c cậ p nhậ t giá trị mớ i Nế u không chỉ đị nh điề u kiệ n ở mệ nh đề WHERE, tấ t cả các dòng trong bả ng sẽ bị cậ p nhậ t Lệ nh UPDATE có thể gây ra vi phạ m RB tham chiế u – Không cho sử a – Sử a luôn nhữ ng dòng có giá trị đang tham chiế u đế n • CASCADE 3/ 22/ 2013 104 KNOWLEDGE FOR SHARE 6. Mộ t số vấ n đề khác KHUNG NHÌN - VIEW Bả ng là mộ t quan hệ đư ợ c tổ chứ c lư u trữ vậ t lý trong CSDL Khung nhìn cũng là mộ t quan hệ – Không đư ợ c lư u trữ vậ t lý ( bả ng ả o) – Không chứ a dữ liệ u – Đư ợ c đị nh nghĩa từ nhữ ng bả ng khác – Có thể truy vấ n hay cậ p nhậ t thông qua khung nhìn 3/ 22/ 2013 105 KNOWLEDGE FOR SHARE 6. Mộ t số vấ n đề khác KHUNG NHÌN - VIEW Tạ i sao phả i sử dụ ng khung nhìn? – Che dấ u tính phứ c tạ p củ a dữ liệ u – Đơ n giả n hóa các câu truy vấ n – Hiể n thị dữ liệ u dư ớ i dạ ng tiệ n dụ ng nhấ t – An toàn dữ liệ u 3/ 22/ 2013 106 KNOWLEDGE FOR SHARE 6. Mộ t số vấ n đề khác KHUNG NHÌN - VIEW Cú pháp CREATE VI EW < tên khung nhìn> AS < câu truy vấ n> DROP VI EW < tên khung nhìn> Bả ng ả o này có – Danh sách thuộ c tính trùng vớ i các thuộ c tính trong mệ nh đề SELECT – Số dòng phụ thuộ c vào điề u kiệ n ở mệ nh đề WHERE – Dữ liệ u đư ợ c lấ y từ các bả ng ở mệ nh đề FROM 3/ 22/ 2013 107 KNOWLEDGE FOR SHARE 6. Mộ t số vấ n đề khác KHUNG NHÌN - VIEW CREATE VIEW NV_P5 AS SELECT MANV, HONV, TENLOT, TENVN FROM NHANVIEN WHERE PHG= 5 CREATE VIEW TONGLNG_SLNV_PB AS SELECT MAPHG, TENPHG, COUNT(* ) AS SLNV, SUM(LUONG) AS TONGLNG FROM NHANVIEN, PHONGBAN WHERE PHG= MAPHG GROUP BY TENPHG, MAPHG 3/ 22/ 2013 108 KNOWLEDGE FOR SHARE 6. Mộ t số vấ n đề khác TRUY VẤ N TRÊN KHUNG NHÌN SELECT TENNV SELECT HONV, TENVN, TENDA, THOIGIAN FROM NV_P5 FROM NV_P5, PHANCONG, DEAN WHERE HONV LIKE ‘ Nguyen’ WHERE MANV= MA_NVIEN AND SODA= MADA Tuy không chứ a dữ liệ u như ng có thể thự c hiệ n các câu truy vấ n trên khung nhìn Có thể viế t câu truy vấ n dữ từ khung nhìn và bả ng 3/ 22/ 2013 liệ u 109 KNOWLEDGE FOR SHARE 6. Mộ t số vấ n đề khác CẬ P NHẬ T TRÊN KHUNG NHÌN Có thể dùng các câu lệ nh I NSERT, DELETE và UPDATE cho các khung nhìn đơ n giả n – Khung nhìn đư ợ c xây dự ng trên 1 bả ng và có khóa chính củ a bả ng Không thể cậ p nhậ t dữ – – – – Khung Khung Khung Khung cộ t – Khung 3/ 22/ 2013 nhìn có nhìn có nhìn có nhìn đư liệ u nế u dùng từ khóa DI STI NCT sử dụ ng các hàm kế t hợ p mệ nh đề SELECT mở rộ ng ợ c xây dự ng từ bả ng có RB trên nhìn đư ợ c xây dự ng từ nhiề u bả ng 110 KNOWLEDGE FOR SHARE 6. Mộ t số vấ n đề khác CẬ P NHẬ T TRÊN KHUNG NHÌN Sử a lạ i họ cho nhân viên mã ‘ 123456789’ ở phòng 5 là ‘ Pham’ UPDATE NV_P5 SET HONV= ‘ Pham’ WHERE MANV= ‘ 123456789’ 3/ 22/ 2013 111 KNOWLEDGE FOR SHARE 6. Mộ t số vấ n đề khác INDEX – CHỈ MỤ C Chỉ mụ c trên thuộ c tính A là mộ t cấ u trúc dữ liệ u làm cho việ c tìm kiế m mẫ u tin có chứ a A hiệ u quả hơ n SELECT * FROM NHANVI EN WHERE PHG= 5 AND PHAI = ‘ Nu’ 3/ 22/ 2013 112 KNOWLEDGE FOR SHARE 6. Mộ t số vấ n đề khác INDEX – CHỈ MỤ C Cú pháp CREATE I NDEX < tên chỉ mụ c> ON < tên bả ng> (< tên cộ t> ) DROP I NDEX < tên chỉ mụ c> Ví dụ CREATE INDEX PHG_IND ON NHANVIEN(PHG) CREATE INDEX PHG_PHAI_IND ON NHANVIEN(PHG, PHAI) 3/ 22/ 2013 113 KNOWLEDGE FOR SHARE 6. Mộ t số vấ n đề khác INDEX – CHỈ MỤ C Nhậ n xét – Tìm kiế m nhanh trong trư ờ ng hợ p so sánh vớ i hằ ng số và phép kế t – Làm chậ m đi các thao tác thêm, xóa và sử a – Tố n chi phí • Lư u trữ chỉ mụ c • Truy xuấ t đĩa nhiề u Chọ n lự a cài đặ t chỉ mụ c hợ p lý??? 3/ 22/ 2013 114 HẾ T