Slide bài giảng môn Cơ sở dữ liệu nội dung "Ngôn ngữ truy vấn SQL"

Slide bài giảng môn Cơ sở dữ liệu nội dung "Ngôn ngữ truy vấn SQL" của Học viện Công nghệ Bưu chính Viễn thông với những kiến thức và thông tin bổ ích giúp sinh viên tham khảo, ôn luyện và phục vụ nhu cầu học tập của mình cụ thể là có định hướng ôn tập, nắm vững kiến thức môn học và làm bài tốt trong những bài kiểm tra, bài tiểu luận, bài tập kết thúc học phần, từ đó học tập tốt và có kết quả cao cũng như có thể vận dụng tốt những kiến thức mình đã học vào thực tiễn cuộc sống. Mời bạn đọc đón xem!

lOMoARcPSD|36991220
Ngôn ng truy vn SQL
lOMoARcPSD|36991220
Ni dung
1. Khái quát v ngôn ng truy vn d liu
2. Câu lnh SELECT
3. Các hàm thao tác d liu
4. Truy vn thông tin t nhiu bng
5. Các lnh cp nht d liu
6. Các lnh liên quan ti cu trúc
7. Các lnh giao quyn truy cp CSDL
8. Bài tp
3.1. Gii thiu SQL
SQL ược xem yếu t chính óng góp vào s thành công ca CSDL
quan h khi áp dng trong thc tế.
lOMoARcPSD|36991220
ngôn ng mức cao, người dùng ch cn xác nh kết qu ca truy
vn gì, phn còn li tính toán tối ưu hoá câu lệnh ược
DBMS m nhim.
1970: SQL (Structured Query Language) bt ngun t ngôn ng
SEQUEL (Structured English QUEry Language), ngôn ng ược
thiết kế ti tp oàn IBM nhằm khi ưa ra hệ qun tr CSDL tên
là SYSTEM-R
3.1. Gii thiu SQL (tt)
Năm 1976: SEQUEL ược ci tiến thành SEQUEL2
Năm 1978-1979: SEQUEL2 ược nâng cp và i tên thành
SQL (nhưng vẫn c là SEQUEL)
lOMoARcPSD|36991220
Chun SQL u tiên có tên gi SQL-86 (SQL1) ưc công nhn
và chun hóa bi ANSI và ISO.
Năm 1992: SQL1 ược m rng vi nhiều tính năng mới và
ược gi là SQL-92 (SQL2).
Năm 1999: Chuẩn SQL-99 (SQL3) ra i
Phiên bn mi nht hin nay là SQL-2011
3.1. Gii thiu SQL (tt)
Ngôn ng giao thiết CSLD gm:
DDL Data Definition Language
DML Data Manipulation Language
SQL Structured Query Language
lOMoARcPSD|36991220
DCL Data Control Language
SQL gm 2 nhóm lnh
DDL: To cu trúc CSDL
DML: Thao tác trên CDSDL
CREATE
SELECT
INSERT, UPDATE, DELETE…
Cho các lược quan h
NHANVIEN (MANV,HONV, TENLOT, TENNV, PHAI,
LUONG, DIACHI, NGAYSINH, MA_NQL, PHG)
lOMoARcPSD|36991220
PHONGBAN (MAPB, TENPB, TRPHG, NGAYBĐ)
DIADIEM_PHG (MAPB, DIADIEM)
DEAN (MADA, TENDA, NGAYBD, PHONG, DIADIEM_DA)
PHANCONG (MANV, MADA, THOIGIAN)
THANNHAN (MANV,TENTN,PHAI,NGAYSINH,QUANHE)
3.2. lnh SELECT Truy vn d liu
Gm 3 mnh cơ bản
SELECT <danh sách các ct>
FROM <danh sách các bng> WHERE <
iu kin>
lOMoARcPSD|36991220
<danh sách các ct>
Tên các ct cn hin th kết qu truy vn
<danh sách các bng>
Tên các bng (ngun) d liu khi truy vn
< iu kin>
Xác nh biu thc boolean xác nh dòng (bộ) nào ược trích ra
Ni các biu thc: AND, OR, NOT
Phép toán: >, <, <=, >=, =, <>, LIKE, BETWEEN
2. lnh SELECT (tt)
SQL và Đi s quan h
lOMoARcPSD|36991220
x
SELECT L
FROM
R
L
(
C
(R ))
WHERE C
SELECT <danh sách các ct>
FROM <danh sách các bng>
WHERE < iu kin>
lOMoARcPSD|36991220
Ví d
SELECT * Ly tt c các ct
ca quan h
FROM NHANVIEN
WHERE PHG=5
PHG=5
(NHANVIEN)
lOMoARcPSD|36991220
Mnh SELECT
lOMoARcPSD|36991220
Mnh SELECT (tt)
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,HO,TEN LOT,TEN
(
MaNV,HONV,TENLOT,TENNV PHG=5 PHAI=‘Nam’(NHANVIEN)))
lOMoARcPSD|36991220
Mnh SELECT (tt)
M rng:
SELECT MANV, HONV +’ ‘+ TENLOT+’ ‘ TENNV AS ‘HO TEN’
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam
lOMoARcPSD|36991220
Mnh SELECT (tt)
M rng:
SELECT MANV, LUONG*1.1 AS ‘LUONG10%’
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam
lOMoARcPSD|36991220
Mnh SELECT (tt)
Loi b các dòng trùng nhau
SELECT LUONG FROM NHANVIEN SELECT DISTINCT LUONG
WHERE PHG=5 AND PHAI=‘Nam FROM NHANVIEN
lOMoARcPSD|36991220
Mnh SELECT (tt)
WHERE PHG=5 AND PHAI=‘Nam
lOMoARcPSD|36991220
Mnh WHERE (tt)
Ví d
Cho biết MANV và TENNV làm vic phòng ‘Nghien cuu’
SELECT MANV, TENNV
lOMoARcPSD|36991220
Mnh WHERE (tt)
FROM NHANVIEN, PHONGBAN
WHERE PHG=MAPHG AND TENPGH=‘Nghiencuu
Mnh WHERE
SELECT MANV, TENNV
FROM NHANVIEN, PHONGBAN
lOMoARcPSD|36991220
Mnh WHERE (tt)
WHERE PHG=MAPHG AND TENPHG=‘Nghien cuu
TRUE TRUE
Độ ưu tiên
Viết trước thc hiện trước
Trong ngoc thc hiện trước
SELECT MANV, TENNV
lOMoARcPSD|36991220
Mnh WHERE (tt)
FROM NHANVIEN, PHONGBAN
WHERE (TENPHG=Nghien cuuOR TENPHG=‘Quan ly’) ANDPHG=MAPHG
lOMoARcPSD|36991220
Mnh WHERE (tt)
BETWEEN
SELECT MANV, TENNV
FROM NHANVIEN
WHERE LUONG>=2000000 ANDLUONG<=3000000
SELECT MANV, TENNV
FROM NHANVIEN
WHERE LUONG BETWEEN 2000000 AND3000000
NOT BETWEEN
SELECT MANV, TENNV
FROM NHANVIEN
lOMoARcPSD|36991220
Mnh WHERE (tt)
WHERE LUONG NOT BETWEEN 2000000 AND3000000
IN NOT IN
SELECT MANV, TENNV
FROM NHANVIEN
WHERE PHG IN (4,5)
SELECT MANV, TENNV
FROM NHANVIEN
WHERE PHG = 4 ORPHG=5
SELECT MANV, TENNV
FROM NHANVIEN
WHERE PHG NOT IN(4,5)
lOMoARcPSD|36991220
Mnh WHERE (tt)
LIKE
Ly tt c chui ging vimu
SELECT MANV,TENNV
FROM NHANVIEN
WHERE HONV LIKE Nguyen_ _ _ _’
1 Ký t bt k
SELECT MANV,TENNV
FROM NHANVIEN
WHERE HONV LIKE ‘Nguyen%’
lOMoARcPSD|36991220
Mnh WHERE (tt)
Nhiu ký t btk
NOT LIKE
Ly tt c nhng chui khôngging
NULL
S dụng trong trường hp:
Không biết (value unknown)
Không th áp dng (value inapplicable)
Không tn ti (value un witheld)
SELECT MANV, TENNV FROM NHANVIEN
WHERE MA_NQL ISNULL
lOMoARcPSD|36991220
Mnh WHERE (tt)
SELECT MANV, TENNV FROM NHANVIEN
WHERE MA_NQL IS NOTNULL
Không s dng WHERE
Kết qu là phép tích “ ề-các”
lOMoARcPSD|36991220
Mnh WHERE (tt)
lOMoARcPSD|36991220
Mnh FROM
Tên, Bí danh
SELECT TENPHG, DIADIEM SELECT TENPHG,DIADIEM FROM PHONGBAN, DDIEM_PHG FROM
PHONGBAN, DDIEM_PHG
WHERE MAPHG=MAPHG
WHERE PhongBan.MAPHG=DDiem_PHG.MAPHG
Bí danh
lOMoARcPSD|36991220
Mnh ORDER BY
Dùng hin th kết qu truy vn theo th t
Cú pháp:
SELECT <danh sáchct>
FROM <danh sách các bng>
WHERE < iukin>
ORDER BY <danh sách ct spxếp>
ASC: Sp xếp tăng (mc nh) DESC:
Sp xếp gim
Mnh ORDER BY (tt)
Ví d:
SELECT MANV, MADA
FROM PHANCONG
lOMoARcPSD|36991220
ORDER BY MANV DESC, MADA
MANV MADA
999888777 10
999888777 30
888777666 10
888777666 30
333222111 10
333222111 20
333222111 30
Gom nhóm - GROUP
BY
Cú pháp:
SELECT <danh sáchct>
FROM <danh sách các bng>
WHERE < iukin>
GROUP BY <danh sách ct gom nhóm>
lOMoARcPSD|36991220
Mi b trong nhóm s có cùng giá tr ti các thuc tính gom
nhóm. Mt s hàm s dng cho GROUP BY:
- AVG(): Tính bình quân
- SUM(): Tính tng
- COUNT(): Đếm Chú ý:
Mi thuc tính lit kê sau SELECT s có 1 giá tr ng vi mi nhóm.
Tt c các thuc tính sau SELECT phi xut hin sau mnh
GROUP BY (Tr thuc tính có giá tr làhàm)
Có ththuc tính xut hin GROUP BY nhưng không xuất hin
SELECT
Mnh GROUP BY (tt)
Ví d: Cho biết s ng nhân viên mi phòng ban
SELECT PHG, COUNT(*) AS ‘So NV’
FROM NHANVIEN
lOMoARcPSD|36991220
GROUP BY PHG
Hoc
SELECT T ENPHG, COUNT(*) AS ‘So NV’
FROM NHANVIEN, PHONGBAN WHERE
PHG=MAPHG
GROUP BY TENPHG
Mnh GROUP BY (tt)
Ví d: y cho biết mã nhân viên, s ng án và tng thi
gian mà h tham gia
SELECT MaNV, COUNT(*) AS So DA’,
SUM(THOIGIAN) AS ‘TongTG’
FROM PHANCONG
GROUP BY MaNV
SELECT NV.MaNV,TENV, COUNT(*) AS SoDA’,
SUM(THOIGIAN) AS ‘TongTG’
lOMoARcPSD|36991220
FROM PHANCONG PC, NHANVIENNV WHERE
PC.MaNV = NV.MaNV GROUP BY
PC.MaNV,TenNV
MaNV So DA Tong TG
MaNV So DA Tong TG
999888777
999888777
10
30
32.5
10
888777666
888777666
10
30
10
10
333222111
10
35.7
333222111
20
25
333222111
30
5
999888777
2
42.5
888777666
2
20
333222111
3
65.7
lOMoARcPSD|36991220
Mnh HAVING
Ví d: y tìm nhng nhân viên tham gia t 2 án tr
lên.
lOMoARcPSD|36991220
Mnh HAVING (tt)
Đưc s dng khi cn lc ra nhng nhóm tha mãn iu
kin nào ó Cú pháp:
Ví d:
Tìm mã nhng nhân viên
tham gia nhiều hơn 2 Đề án
SELECT MaNV, COUNT(*) AS SoDA’, FROM PHANCONG
GROUP BY MaNV
HAVING COUNT (*) > 2
SELECT <danh sáchct>
FROM <danh sách các bng>
WHERE < iukin>
GROUP BY <danh sách ct gom nhóm>
HAVING < iu kin chn nhóm>
lOMoARcPSD|36991220
Mnh HAVING (tt)
Cho biết những phòng ban có lương trung bình của nhân
viên lớn hơn 3 triệu
SELECT PHG, AVG(LUONG) AS ‘Luong TB’
FROM NHANVIEN
GROUP BY PHG
HAVING AVG(LUONG) > 3000000
Hoc
SELECT NV.PHG, PB.TenPB, Avg(NV.Luong) AS "TBLuong"
FROM NhanVien AS NV, PhongBan ASPB
WHERE NV.Phg = PB.MaPB
GROUP BY NV.PHG, PB.TenPB
lOMoARcPSD|36991220
HAVING AVG(LUONG) > 3000000;
X. Các hàm thao tác d liu (tt)
Các hàm tính toán trên bn ghi
ABS: tính tr tuyt i
POWER(x, y): tr v xy
SQRT: Tính căn bậc 2
LOG: Tính Log t nhiên
EXP: Tính ex
SIGN (x): Kim tra du ca x (tr v -1 | 0 | 1)
ROUND (x, n): làm tròn x ti n s l (Access là RND)
Các hàm lượng giác: SIN, COS, TAN, ASIN,ACOS,…
lOMoARcPSD|36991220
3.3. Các hàm thao tác d liu (tt)
Các hàm x lý chui
LEN (str) : Cho chiu dài chui ký t
LEFT (str, n): Ly n ký t phía trái ca chui str
RIGHT (str, n): Ly n ký t phía phi ca chui str
MID (str, p, n): Ly n t ca chui str k t v trí p trong
dãy
3.3. Các hàm thao tác d liu (tt)
Các hàm x lý thi gian
DATE(): Cho ngày tháng năm hiện ti
DAY (dd): Cho s th t ngày trong tháng ca biu thc
ngày dd
lOMoARcPSD|36991220
MONTH (dd) Cho s th t tháng trong năm của biu thc
ngày dd
YEAR (dd) Cho năm của biu thc ngày dd
HOUR (tt) Cho gi trong ngày (0- 23)
MINUTE (tt) Cho s phút ca thi gian tt
SECONDS (tt) Cho s giây ca biu thc gi tt.
3.4. Truy vn t nhiu bng
Truy vn trên nhiu bng v bn cht giống như truy vấn
trên 1 bng (ã kết nhiu bng li).
S dng các phép kết (join)
Kết bng (phép kết ni inner join)
Kết ngoài (outter join)
lOMoARcPSD|36991220
Truy vn lng nhau
lOMoARcPSD|36991220
3.4. Truy vn t nhiu bng (tt)
Phép kết t nhiên
SELECT <danh sách ct>
FROM <danh sách các bng> WHERE < iu kin kếtni>
Hoc
SELECT <danh sáchct>
FROM <bng 1> INNER JOIN <bng 2> ON < iu kin kết ni> WHERE < iu
kin chndòng>
Ví dụ: Đưa ra danh sách nhân viên và tên phòng làm việc
SELECT HoNV, Tenlot, TenNV, TenPB
FROM Nhanvien, PhongBan
WHERE PHG = MaPB
lOMoARcPSD|36991220
3.4. Truy vn t nhiu bng (tt)
Ví d: Tìm mã và h tên các nhân viên làm vic phòng
‘Kinh doanh’
SELECT MaNV, HoNV +’ ‘ + Tenlot + ‘ ‘ + TenNV AS ‘Ho ten’,TenPB
FROM Nhanvien INNER JOIN PhongBan ON PHG = MaPB
WHERE TenPB LIKE ‘%Kinh doanh’
Hoc:
SELECT MaNV, HoNV +’ ‘ + Tenlot + ‘ ‘ + TenNV AS ‘Ho ten’,TenPB
FROM Nhanvien, PhongBan
WHERE PHG = MaPB AND TenPB LIKE ‘%Kinh doanh’
Phép kết ngoài
lOMoARcPSD|36991220
3.4. Truy vn t nhiu bng (tt)
SELECT <danh sách ct>
FROM <bng 1> LEFT | RIGHT | [OUTTER] JOIN <bng 2>
ON < iu kin kết>
WHERE < iu kin chn dòng>
Ví d: Cho biết nhân viên và tên ca phòng ban mà h
trưởng phòng (nếu có)
SELECT HoNV, Tenlot, TenNV, TenPB
FROM NhanVien NV LEFT JOIN PhongBan PB
lOMoARcPSD|36991220
3.4. Truy vn t nhiu bng (tt)
ON NV.MaNV=PhongBan.TrgPhg
Ví d: Tìm h tên nhân viên và tên thân nhân ca h
(nếu có)
SELECT NV.MaNV, HoNV, TenLot, TenNV, TenTN, Quanhe
FROM ThanNhan TN RIGHT JOIN NhanVien NV
lOMoARcPSD|36991220
3.4. Truy vn t nhiu bng (tt)
ON TN.MaNV = NV.MaNV
Truy vn lng nhau
Mt câu truy vn (SELECT) lng vào câu truy vn khác gi
truy vn lng nhau hay Subquery
lOMoARcPSD|36991220
3.4. Truy vn t nhiu bng (tt)
Subquery ược bao bi cp du ngoc (.......) và có th lng
nhau nhiu mc.
Subquery ược lng vào sau t khóa WHERE hoc HAVING
Câu truy vn con thưng tr v 1 tp các giá tr
Nếu có nhiu truy vn con sau WHERE thì thường ược kết
hp vi nhau bi các phép toán logic
lOMoARcPSD|36991220
Truy vn lng nhau (tt)
SELECT <danh sách ct>
FROM <danh sách bng>
Truy vn cha WHERE <so sánh tp hp> (
SELECT <danh sách ct>
FROM <danh sách bng>
WHERE < iu kin>
)
Truy vn con
Các phép toán tp hp
IN
lOMoARcPSD|36991220
Truy vn lng nhau (tt)
NOT IN
ALL
ANY / SOME
EXISTS
NOT EXISTS
Có 2 loi truy vn lng
Lng phân cp:
Mnh WHERE ca Subquery không tham chiếu ến các thuc
tính ca các bng trong mnh FROM ca truy vn cha
Khi thc hin truy vấn con ược thc hiện trước
lOMoARcPSD|36991220
Truy vn lng nhau (tt)
Lồng tương quan:
Mnh WHERE ca Subquery tham chiếu ến ít nht 1 thuc tính
ca bng trong mnh FROM ca truy vn cha
Khi thc hin, câu truy vấn con ược thc nhiu ln mi ln ng
vi 1 b ca câu truy vn cha
lOMoARcPSD|36991220
Ví d - Truy vn lng phân cp (tt)
Ví d - Truy vn lng phân cp
Đưa ra mã nhân viên, họ tên nhân viên thuộc phòng ‘Tài
chính’ hoặc phòng ‘Kế hoch’
SELECT MaNV, HoNV, TenLot, TenNV
FROM NHANVIEN
WHERE Phg IN (
SELECT MaPHG
FROM PHONGBAN
lOMoARcPSD|36991220
Ví d - Truy vn lng phân cp (tt)
WHERE TenPB LIKE ‘%Tài chính’ OR TenPB LIKE ‘%Kế hoch’
)
Hãy tìm nhng án có nhân viên h ‘Nguyễn’ tham gia
SELECT MaDA, TenDA
FROM DEAN
WHERE MaDA IN (
SELECT MaDA
FROM PHANCONG PC, NHANVIEN NV
WHERE PC.MaNV = NV.MaNV AND
lOMoARcPSD|36991220
Ví d - Truy vn lng phân cp (tt)
NV.HoNV LIKE ‘%Nguyễn%’
)
Hãy tìm nhng nhân viên không có thân nhân nào
SELECT *
FROM NHANVIEN
WHERE MaNV NOT IN (
SELECT MaNV
FROM THANNHAN
)
SELECT *
FROM NHANVIEN
WHERE MaNV <> ALL(
SELECT MaNV
FROM THANNHAN
)
lOMoARcPSD|36991220
Ví d - Truy vn lng phân cp (tt)
Tìm những nhân viên có lương lớn hơn lương của ít nht
mt nhân viên phòng 4
SELECT *
FROM NHANVIEN
WHERE LUONG > ANY (
SELECT LUONG FROM NHANVIEN WHERE PhG = 4
)
Tìm những trưng phòng có ti thiu 1 thân nhân
SELECT *
FROM NHANVIEN
lOMoARcPSD|36991220
Ví d - Truy vn lng phân cp (tt)
WHERE MANV IN (SELECT MaNV FROM THANNHAN) AND MANV IN
(SELECT TRPHG FROM PHONGBAN)
Tìm những Nhân viên có lương cao hơn lương của mi
nhân viên phòng 4
lOMoARcPSD|36991220
Truy vn lồng tương quan
Mnh WHERE ca Subquery tham chiếu ến ít nht 1 thuc tính
ca bng trong mnh FROM ca truy vn cha
Khi thc hin, câu truy vấn con ược thc nhiu ln mi ln ng
vi 1 b ca câu truy vn cha Ví d:
Tìm những trưởng phòng có ít nht 1 thân nhân
SELECT *
FROM NHANVIEN NV
WHERE EXISTS ( SELECT * FROM THANNHAN TN
WHERE TN.MaNV = NV.MaNV)AND
EXISTS (SELECT TrgPHG FROM PHONGBAN
WHERE TrgPHG = NV.MaNV)
lOMoARcPSD|36991220
Ví d - Truy vn lng lương quan (tt)
Tìm nhng nhân viên không có thân nhân nào
SELECT *
FROM NHANVIEN NV
WHERE NOT EXISTS (
SELECT *
FROM THANNHAN TN
WHERE TN.MaNV = NV.MaNV
)
Ví d - Truy vn lng lương quan (tt)
Tìm những nhân viên có lương cao hơn lương trung bình
ca phòng
lOMoARcPSD|36991220
SELECT *
FROM NHANVIEN NV1
WHERE NV1.Luong > (
SELECT AVG(NV2.Luong)
FROM NHANVIEN NV2
WHERE NV2.Phg = NV1.Phg
)
Ví d - Truy vn lng lương quan (tt)
Tìm những nhân viên có lương bằng lương cao hơn lương
ca ít nht 1 nhân viên thuộc phòng ‘Tài chính’
SELECT *
FROM NHANVIEN NV1
lOMoARcPSD|36991220
WHERE EXISTS (
SELECT *
FROM NHANVIEN NV2, PHONGBAN PB
WHERE NV2.Phg = PB.MaPB AND
PB.TenPB LIKE ‘%Tài chính%’AND
NV1.Luong > NV2.Luong
)
Nhn xét IN và EXISTS
IN
<tên ct> IN <câu truy vn con>
Thuc tính mnh SELECT câu truy vn con phi cùng
kiu d liu vi thuc tính mnh WHERE trong câu truy
vn cha
lOMoARcPSD|36991220
EXISTS
Không cn thuc tính, hăng số hay biu thc nàoứng trước
Không cn lit thuc tính bnh SELECT trong câu truy
vn con
Nhng câu truy vn = ANY hoc IN u th chuyn thành
câu truy vn dùng EXISTS
Các phép toán tp hp trong SQL
Phép hp: UNION
lOMoARcPSD|36991220
Phép giao: INTERSECT Phép tr: EXCEPT pháp:
lOMoARcPSD|36991220
Phép toán tp hp trong SQL (tt)
Ví d: Tìm các mã án có nhân viên h ‘Nguyễn’ tham gia
hoặc trưởng phòng ch trì án có h ‘Nguyễn’
SELECT MaDA
FROM PHANCONG PC, NHANVIEN NV
WHERE (PC.MaNV = NV.MaNV) AND (HoNV = ‘Nguyễn’)
UNION (
SELECT MaDA
FROM NHANVIEN NV, PHONGBAN PB, DEAN DA
WHERE (NV.MaNV=PB.TrgPhg) AND (DA.Phong= PB.MaPB)
AND (NV.HoNV = ‘Nguyễn’)
)
lOMoARcPSD|36991220
3.5. Các lnh cp nht d liu
Thêm 1 b (dòng) mi
Sa 1 b (dòng)
Xóa 1 b (dòng)
To mi 1 quan h (bng) vi ni dung t CSDL
lOMoARcPSD|36991220
3.5.1. Thêm dòng vào bng
Cú pháp
INSERT INTO <tên bng> ( <danh sách các thuc tính>) VALUES
(<danh sách các giá tr>)
Ví d:
lOMoARcPSD|36991220
3.5.1. Thêm dòng vào bng (tt)
Nhn xét lnh INSERT INTO
Th t giá tr sau VALUES phi trùng vi th t ctsau INSERT
INTO
Có th thêm giá tr NULL thuc tính không là khóa chính
lOMoARcPSD|36991220
Lnh INSERT INTO th không thc hiện ược (li) nếu vi
phm ràng buc toàn vn (RBTV)
Khóa chính
Tham chiếu
Thuc tính NOT NULL
3.5.1. Thêm dòng vào bng (tt) Thêm nhiu
dòng
INSERT INTO <tên bng> ( <danh sách các thuc tính>)
<câu truy vn con>
Ví d:
lOMoARcPSD|36991220
3.5.2. Sa dòng trong bng
Cú pháp
UPDATE <tên bng>
SET <tên thuc tính> = <giá tr mi>,
<tên thuc tính> = <giá tr mi>,
……
[ WHERE < iu kin> ]
lOMoARcPSD|36991220
Ví d: ng lương 30% cho những ngưi là ‘nữ’
UPDATE NHANVIEN
SET Luong = Luong*1.3,
WHERE phai = ‘Nữ’
3.5.2. Sa dòng trong bng (tt)
Nhn xét
Lnh UPDATE cp nht nhng dòng tha iu kinsau WHERE
Nếu không ch nh iu kin sau WHERE thì mi dòngtrong
bng s ược cp nht giá tr mi
Lnh UPDATE có th gây ra vi phm RBTV
lOMoARcPSD|36991220
Không cho chnh sa
Sa luôn dòng có giá tr tham chiếu ến (CASCADE)
3.5.3. Xóa dòng trong bng
Cú pháp
DELETE FROM <tên bng> WHERE <
iu kin>
Ví d:
lOMoARcPSD|36991220
lOMoARcPSD|36991220
3.5.3. Xóa dòng trong bng (tt)
Ví d: Xóa i nhng nhân viên làm phòng ‘D án’
DELETE FROM NHANVIEN
WHERE PHG IN (
SELECT MaPB
FROM PHONGBAN
WHERE TenPB = ‘Phòng Dự án’ )
Nhn xét
lOMoARcPSD|36991220
3.5.3. Xóa dòng trong bng (tt)
S dòng b xóa ph thuc vào iu kin sau WHERE
Nếu không ch iu kin sau WHERE tt c các dòng trong
bng s b xóa
Lnh DELETE FROM có th gây ra vi phm RBTV
Không cho xóa
Xóa luôn nhng dòng có giá tr ang tham chiếu ến
Đặt Null cho nhng giá tr tham chiếu
lOMoARcPSD|36991220
3.5.3. Xóa dòng trong bng (tt)
lOMoARcPSD|36991220
3.5.4. To bng t CSDL Cú pháp:
SELECT <danh sách ct/biu thc>
FROM <tên bng ngun>
INTO <tên bng ích>
WHERE <Điều kin>
GROUP BY <ct gom nhóm>
HAVING < iu kin chn nhóm>
ORDER BY <ct sp xếp>
3.5.4. To bng t CSDL (tt)
Ví d
lOMoARcPSD|36991220
SELECT PB.TenPB, AVG(NV.Luong) ASTBLuong
FROM NHANVIEN NV, PHONGBAN PB
INTO TABLE TBLUONG_PHONGBAN
WHERE NV.PHG = PB.MaPB
GROUP BY PHG, TenPB
3.6. Các lnh liên quan cu trúc CSDL
Các kiu d liu trong SQL
Tên kiu
Ý nghĩa
Char (w)
Kiu ký t rng c nh (w)
Varchar(w)
Kiu ký t rng thay i 0 w
Integer
Kiu s nguyên
lOMoARcPSD|36991220
Byte
Kiu s nguyên nh (0 255)
Numberic (w,s)
S thc rng w v trí (c du chm) có s ch s thp phân
Real, Double
S thc du phy ng
Float (n)
S thc du phy ng có ít nht n ch s
Date
Kiu ngày tháng
Time
Kiu thi gian (gi/phút/giây)
Logical
Kiu logic (True/False)
3.6.1. Lnh to bng CREATE TABLE
Để ịnh nghĩa 1 bảng cn ch ra:
Tên bng
Các thuc tính
Tên thuc tính
lOMoARcPSD|36991220
Kiu d liu
RBTV trên thuc tính
Cú pháp
lOMoARcPSD|36991220
3.6.1. CREATE TABLE (tt)
Ví d:
lOMoARcPSD|36991220
3.6.1. CREATE TABLE (tt)
RBTV
NOT NULL
NULL
UNIQUE DEFAUL
PRIMARY KEY
FOREIGN KEY / REFERENCES
CHECK
Đặt tên cho RBTV
Ví d RBTV
lOMoARcPSD|36991220
3.6.1. CREATE TABLE (tt)
lOMoARcPSD|36991220
3.6.1. CREATE TABLE (tt)
Ví d:
lOMoARcPSD|36991220
3.6.1. CREATE TABLE (tt)
lOMoARcPSD|36991220
3.6.1. CREATE TABLE (tt)
Ví d - t tên cho RBTV
lOMoARcPSD|36991220
3.6.1. CREATE TABLE (tt)
Ví d - t tên cho RBTV
lOMoARcPSD|36991220
3.6.2. Lnh sa bng (tt)
3.6.2. Lnh sa bng
Thay i cu trúc bng
Thêm ct mi
a ct
lOMoARcPSD|36991220
3.6.2. Lnh sa bng (tt)
M rng ct
Thay i RBTV
Thêm RBTV
a RBTV
Ví d - thay i cu trúc
lOMoARcPSD|36991220
3.6.2. Lnh sa bng (tt)
Ví d - thay i RBTV
lOMoARcPSD|36991220
3.6.2. Lnh sa bng (tt)
lOMoARcPSD|36991220
3.6.3. Xóa bng
pháp:
Ví d:
lOMoARcPSD|36991220
PHANCONG (MANV, MADA, THOIGIAN)
THANNHAN (MANV,TENTN,PHAI,NGAYSINH,QUANHE)
87
3.6.3. Xóa bng (tt)
3.8. Bài tp
1. Tìm nhng nhân viên làm vic phòng s 4
2. Tìm nhng nhân viên có mức lương trên 30000
lOMoARcPSD|36991220
PHANCONG (MANV, MADA, THOIGIAN)
THANNHAN (MANV,TENTN,PHAI,NGAYSINH,QUANHE)
88
3. Tìm các nhân viên có mức lương trên 25,000 phòng 4 hoc các nhân
viên có mức lương trên 30,000 phòng 5
4. Cho biết h tên đầy đủ ca các nhân viên có h bắt đầu bng ký t ‘N’
5. Cho biết các nhân viên sinh trước năm 1975
NHANVIEN (MANV,HONV, TENLOT, TENNV, PHAI, LUONG, DIACHI, NGAYSINH,
MA_NQL, PHG) PHONGBAN (MAPB, TENPB, TRPHG, NGAYBĐ, DIA_DIEM)
DIADIEM_PHG (MAPB, DIADIEM)
DEAN (MADA, TENDA, NGAYBD, PHONG, DIADIEM_DA)
1. Tìm nhng nhân viên làm vic phòng s 4
SELECT * FROM NHANVIEN WHERE PHG = 4
2. Tìm nhng nhân viên có mức lương trên 30000
lOMoARcPSD|36991220
PHANCONG (MANV, MADA, THOIGIAN)
THANNHAN (MANV,TENTN,PHAI,NGAYSINH,QUANHE)
89
SELECT * FROM NHANVIEN WHERE LUONG > 30000
3. Tìm các nhân viên có mức lương trên 25,000 phòng 4 hoc các nhân viên có
mức lương trên 30,000 ở phòng 5
SELECT * FROM NHANVIEN WHERE (LUONG > 25000 AND PHG = 4) OR (LUONG >
30000 AND PHG = 5)
4. Cho biết h tên đầy đủ ca các nhân viên có h bắt đu bng ký t ‘N
SELECT HONV, TENLOT, TENNV FROM NHANVIEN WHERE HONV LIKE N'N%'
5. Cho biết các nhân viên sinh trước năm 1975
SELECT * FROM NHANVIEN WHERE YEAR(NGSINH) < 1975
6. Cho biết các nhân viên sinh trước ngày 30/4/1975 hoc TP HCM hoc làm
vic ti phòng s 4
7. Vi mi phòng ban, cho biết tên phòng ban và địa điểm phòng
8. Tìm tên những người trưng phòng ca tng phòng ban
9. Tìm tên và địa ch ca tt c các nhân viên ca phòng "Nghiên cu".
lOMoARcPSD|36991220
PHANCONG (MANV, MADA, THOIGIAN)
THANNHAN (MANV,TENTN,PHAI,NGAYSINH,QUANHE)
90
10. Vi mọi đề án "Ha Noi", lit kê các mã s đề án (MADA), mã s phòng ban
ch trì đề án (PHONG), h tên trưởng phòng (HONV, TENLOT, TENNV) cũng như
địa ch (DCHI) và ngày sinh (NGSINH) của người y.
NHANVIEN (MANV,HONV, TENLOT, TENNV, PHAI, LUONG, DIACHI, NGAYSINH,
MA_NQL, PHG) PHONGBAN (MAPB, TENPB, TRPHG, NGAYBĐ)
DIADIEM_PHG (MAPB, DIADIEM)
DEAN (MADA, TENDA, NGAYBD, PHONG, DIADIEM_DA)
6. Cho biết các nhân viên sinh trước ngày 30/4/1975 hoc TP HCM hoc làm
vic ti phòng s 4
SELECT * FROM NHANVIEN WHERE (YEAR(NGSINH) < 1975) OR (DCHI LIKE N'%Tp
hcm') OR (PHG = 4)
7. Vi mi phòng ban, cho biết tên phòng ban và địa đim phòng
SELECT P.TENPHG, D.DIADIEM FROM PHONGBAN P, DIADIEM_PHG D WHERE
P.MAPHG = D.MAPHG
8. Tìm tên những người trưng phòng ca tng phòng ban
lOMoARcPSD|36991220
PHANCONG (MANV, MADA, THOIGIAN)
THANNHAN (MANV,TENTN,PHAI,NGAYSINH,QUANHE)
91
SELECT TENNV FROM NHANVIEN N, PHONGBAN P WHERE N.MANV = P.TRPHG
9. Tìm tên và địa ch ca tt c các nhân viên ca phòng "Nghiên cu".
SELECT TENNV, DCHI FROM NHANVIEN N, PHONGBAN P WHERE N.PHG =
P.MAPHG AND P.TENPHG LIKE N'Nghiên cu'
10. Vi mọi đề án "Ha Noi", lit kê các mã s đề án (MADA), mã s phòng
ban ch trì đề án (PHONG), h tên trưởng phòng (HONV, TENLOT, TENNV)
cũng như địa ch (DCHI) và ngày sinh (NGSINH) của ngưi y.
SELECT D.MADA, D.PHONG, N.HONV, N.TENLOT, N.TENNV, N.DCHI, N.NGSINH
FROM NHANVIEN N, PHONGBAN P, DEAN D WHERE N.MANV = P.TRPHG AND
P.MAPHG = D.PHONG AND DDIEM_DA LIKE N'Hà Ni'
11. Cho biết tên các đề án mà nhân viên Đinh Bá Tiến đã tham gia
12. Cho biết s ợng đề án ca công ty
13. Cho biết s ợng đề án do phòng 'Nghiên Cu' ch trì
14. Cho biết lương trung bình của các n nhân viên
15. Vi mi nhân viên, cho biết s ợng nhân viên mà nhân viên đó quản lý trc tiếp.
lOMoARcPSD|36991220
PHANCONG (MANV, MADA, THOIGIAN)
THANNHAN (MANV,TENTN,PHAI,NGAYSINH,QUANHE)
92
NHANVIEN (MANV,HONV, TENLOT, TENNV, PHAI, LUONG, DIACHI, NGAYSINH,
MA_NQL, PHG) PHONGBAN (MAPB, TENPB, TRPHG, NGAYBĐ)
DIADIEM_PHG (MAPB, DIADIEM)
DEAN (MADA, TENDA, NGAYBD, PHONG, DIADIEM_DA)
11. Cho biết tên các đề án mà nhân viên Đinh Bá Tiến đã tham gia
SELECT D.TENDA FROM NHANVIEN N, PHANCONG P, DEAN D WHERE N.MANV =
P.MA_NVIEN AND P.MADA = D.MADA AND (HONV + ' ' + TENLOT + ' ' + TENNV) =
N'Đinh Bá Tiên'
12. Cho biết s ợng đề án ca công ty
SELECT COUNT(MADA) AS SODEAN FROM DEAN
13. Cho biết s ợng đề án do phòng 'Nghiên Cu' ch trì
SELECT COUNT(D.MADA) AS SODEAN FROM DEAN D, PHONGBAN P WHERE D.PHONG
= P.MAPHG AND P.TENPHG LIKE N'Nghiên cu'
14. Cho biết lương trung bình của các n nhân viên
lOMoARcPSD|36991220
PHANCONG (MANV, MADA, THOIGIAN)
THANNHAN (MANV,TENTN,PHAI,NGAYSINH,QUANHE)
93
SELECT AVG(LUONG) AS LUONGTB FROM NHANVIEN WHERE PHAI LIKE N'N'
15. Vi mi nhân viên, cho biết s ợng nhân viên mà nhân viên đó quản lý trc tiếp.
SELECT Q.TENNV, COUNT(N.MANV) AS SONV FROM NHANVIEN N, NHANVIEN Q
WHERE N.MA_NQL = Q.MANV GROUP BY Q.TENNV
lOMoARcPSD|36991220
16. Vi mi phòng ban, liệt kê tên phòng ban (TENPHG) và lương trung bình của
nhng nhân viên làm việc cho phòng ban đó.
17. Vi mi phòng ban, cho biết tên phòng ban và s ợng đề án mà phòng ban đó
ch trì
18. Vi mi phòng ban, cho biết tên phòng ban, h tên người trưởng phòng và s
ợng đề án mà phòng ban đó chủ trì
19. Vi mi phòng ban có mc lương trung bình lớn hơn 40,000, cho biết tên phòng
ban và s ợng đề án mà phòng ban đó chủ trì.
20. Cho biết s đề án din ra ti tng địa điểm
NHANVIEN (MANV,HONV, TENLOT, TENNV, PHAI, LUONG, DIACHI, NGAYSINH,
MA_NQL, PHG) PHONGBAN (MAPB, TENPB, TRPHG, NGAYBĐ)
DIADIEM_PHG (MAPB, DIADIEM)
DEAN (MADA, TENDA, NGAYBD, PHONG, DIADIEM_DA) PHANCONG (MANV,
MADA, THOIGIAN) THANNHAN (MANV,TENTN,PHAI,NGAYSINH,QUANHE)
16. Vi mi phòng ban, liệt kê tên phòng ban (TENPHG) và lương trung bình ca
nhng nhân viên làm việc cho phòng ban đó.
lOMoARcPSD|36991220
SELECT P.TENPHG, AVG(N.LUONG) AS LUONGTB FROM NHANVIEN N, PHONGBAN P
WHERE N.PHG = P.MAPHG GROUP BY P.TENPHG
17. Vi mi phòng ban, cho biết tên phòng ban và s ợng đề án mà phòng ban đó
ch trì
SELECT P.TENPHG, COUNT(D.MADA) AS SODEAN FROM PHONGBAN P, DEAN D
WHERE P.MAPHG = D.PHONG GROUP BY P.TENPHG
18. Vi mi phòng ban, cho biết tên phòng ban, h tên người trưởng phòng và s
ợng đề án mà phòng ban đó chủ trì
SELECT P.TENPHG, N.HONV, N.TENLOT, N.TENNV, COUNT(D.MADA) AS SODEAN
FROM PHONGBAN P, DEAN D, NHANVIEN N WHERE P.MAPHG = D.PHONG AND
P.TRPHG = N.MANV GROUP BY P.TENPHG, N.HONV, N.TENLOT, N.TENNV
19. Vi mi phòng ban có mc lương trung bình lớn hơn 40,000, cho biết tên phòng
ban và s ợng đề án mà phòng ban đó chủ trì.
SELECT P.TENPHG, COUNT(D.MADA) AS SODEAN FROM NHANVIEN N, PHONGBAN P,
DEAN D WHERE P.MAPHG = N.PHG AND P.MAPHG = D.PHONG GROUP BY P.TENPHG
HAVING AVG(N.LUONG) > 40000
20. Cho biết s đề án din ra ti tng địa điểm
SELECT DDIEM_DA, COUNT(DDIEM_DA) AS SODEAN FROM DEAN GROUP BY
DDIEM_DA
21. Cho biết danh sách các đề án (MADA) có: nhân công vi h (HONV) là ‘Dinh’ hoặc ,
có người trưởng phòng ch trì đề án vi h (HONV) là ‘Dinh’.
lOMoARcPSD|36991220
22. Danh sách nhng nhân viên (HONV, TENLOT, TENNV) có trên 2 thân nhân.
23. Danh sách nhng nhân viên (HONV, TENLOT, TENNV) không có thân nhân nào.
24. Danh sách những trưởng phòng (HONV, TENLOT, TENNV) có ti thiu mt thân
nhân.
25. m h (HONV) ca những trưởng phòng chưa có gia đình.
NHANVIEN (MANV,HONV, TENLOT, TENNV, PHAI, LUONG, DIACHI, NGAYSINH,
MA_NQL, PHG) PHONGBAN (MAPB, TENPB, TRPHG, NGAYBĐ)
DIADIEM_PHG (MAPB, DIADIEM)
DEAN (MADA, TENDA, NGAYBD, PHONG, DIADIEM_DA) PHANCONG (MANV,
MADA, THOIGIAN) THANNHAN (MANV,TENTN,PHAI,NGAYSINH,QUANHE)
21. Cho biết danh sách các đề án (MADA) có: nhân công vi h (HONV) là ‘Dinh’ hoặc ,
có người trưởng phòng ch trì đề án vi h (HONV) là ‘Dinh’.
SELECT TENDA FROM DEAN WHERE MADA IN (SELECT D.MADA FROM DEAN D,
PHANCONG P, NHANVIEN N WHERE D.MADA = P.MADA AND P.MA_NVIEN = N.MANV
AND N.HONV = N'Đinh’) OR MADA IN (SELECT D.MADA FROM DEAN D, PHONGBAN B,
NHANVIEN N WHERE D.PHONG = B.MAPHG AND B.TRPHG = N.MANV AND N.HONV =
N'Đinh')
22. Danh sách nhng nhân viên (HONV, TENLOT, TENNV) có trên 2 thân nhân.
lOMoARcPSD|36991220
SELECT N.HONV, N.TENLOT, N.TENNV FROM NHANVIEN N, THANNHAN T WHERE
N.MANV = T.MA_NVIEN GROUP BY N.HONV, N.TENLOT, N.TENNV HAVING
COUNT(T.MA_NVIEN) > 2
23. Danh sách nhng nhân viên (HONV, TENLOT, TENNV) không có thân nhân nào.
SELECT HONV, TENLOT, TENNV FROM NHANVIEN WHERE MANV NOT IN (SELECT
N.MANV FROM NHANVIEN N, THANNHAN T WHERE N.MANV = T.MA_NVIEN GROUP
BY N.MANV)
24. Danh sách những trưởng phòng (HONV, TENLOT, TENNV) có ti thiu mt thân
nhân.
SELECT N.HONV, N.TENLOT, N.TENNV FROM NHANVIEN N, PHONGBAN P, THANNHAN
T WHERE P.TRPHG = N.MANV AND N.MANV = T.MA_NVIEN GROUP BY N.HONV,
N.TENLOT, N.TENNV
25. m h (HONV) ca những trưởng phòng chưa có gia đình.
SELECT N.HONV FROM NHANVIEN N, PHONGBAN P WHERE P.TRPHG = N.MANV AND
N.MANV NOT IN (SELECT N.MANV FROM NHANVIEN N, THANNHAN T WHERE N.MANV
= T.MA_NVIEN GROUP BY N.MANV)
26. Danh sách nhng nhân viên (HONV, TENLOT, TENNV) làm vic trong mọi đề án ca
công ty
27. Danh sách những nhân viên (HONV, TENLOT, TENNV) được phân công tt c đề án
do phòng s 4 ch trì.
lOMoARcPSD|36991220
28. Tìm những nhân viên (HONV, TENLOT, TENNV) được phân công tt c đề án mà
nhân viên Đinh Bá Tiến làm vic
NHANVIEN (MANV,HONV, TENLOT, TENNV, PHAI, LUONG, DIACHI, NGAYSINH,
MA_NQL, PHG) PHONGBAN (MAPB, TENPB, TRPHG, NGAYBĐ)
DIADIEM_PHG (MAPB, DIADIEM)
DEAN (MADA, TENDA, NGAYBD, PHONG, DIADIEM_DA) PHANCONG (MANV,
MADA, THOIGIAN) THANNHAN (MANV,TENTN,PHAI,NGAYSINH,QUANHE)
26. Danh sách nhng nhân viên (HONV, TENLOT, TENNV) làm vic trong mọi đ án ca
công ty
SELECT N.HONV, N.TENLOT, N.TENNV FROM NHANVIEN N, PHANCONG P WHERE
N.MANV = P.MA_NVIEN GROUP BY N.HONV, N.TENLOT, N.TENNV HAVING
COUNT(DISTINCT P.MADA) = (SELECT COUNT(D.MADA) FROM DEAN D)
27. Danh sách những nhân viên (HONV, TENLOT, TENNV) được phân công tt c đề án
do phòng s 4 ch trì.
lOMoARcPSD|36991220
SELECT N.HONV, N.TENLOT, N.TENNV FROM DEAN D, CONGVIEC C, PHANCONG P,
NHANVIEN N WHERE D.MADA = C.MADA AND C.MADA = P.MADA AND C.STT = P.STT
AND P.MA_NVIEN = N.MANV AND D.PHONG = 4 GROUP BY N.HONV, N.TENLOT,
N.TENNV HAVING COUNT(DISTINCT P.MADA) = (SELECT COUNT(MADA) FROM DEAN
WHERE PHONG = 4)
28. Tìm nhng nhân viên (HONV, TENLOT, TENNV) được phân công tt c đề án
nhân viên Đinh Bá Tiến làm vic
SELECT N.HONV, N.TENLOT, N.TENNV FROM NHANVIEN N, PHANCONG P WHERE
N.MANV = P.MA_NVIEN GROUP BY N.MANV, N.HONV, N.TENLOT, N.TENNV HAVING
COUNT(DISTINCT P.MADA) = (SELECT COUNT(DISTINCT PC.MADA) FROM NHANVIEN
NV, PHANCONG PC WHERE NV.MANV = PC.MA_NVIEN AND (NV.HONV + ' ' +
NV.TENLOT + ' ' + NV.TENNV) = N'Đinh Bá Tiên')
| 1/99

Preview text:

lOMoARcPSD| 36991220 Ngôn ngữ truy vấn SQL lOMoARcPSD| 36991220 Nội dung
1. Khái quát về ngôn ngữ truy vấn dữ liệu 2. Câu lệnh SELECT
3. Các hàm thao tác dữ liệu
4. Truy vấn thông tin từ nhiều bảng
5. Các lệnh cập nhật dữ liệu
6. Các lệnh liên quan tới cấu trúc
7. Các lệnh giao quyền truy cập CSDL 8. Bài tập 3.1. Giới thiệu SQL
SQL ược xem là yếu tố chính óng góp vào sự thành công của CSDL
quan hệ khi áp dụng trong thực tế. lOMoARcPSD| 36991220
Là ngôn ngữ mức cao, người dùng chỉ cần xác ịnh kết quả của truy
vấn là gì, phần còn lại là tính toán và tối ưu hoá câu lệnh ược DBMS ảm nhiệm.
1970: SQL (Structured Query Language) bắt nguồn từ ngôn ngữ
SEQUEL (Structured English QUEry Language), ngôn ngữ ược
thiết kế tại tập oàn IBM nhằm khi ưa ra hệ quản trị CSDL có tên là SYSTEM-R 3.1. Giới thiệu SQL (tt)
Năm 1976: SEQUEL ược cải tiến thành SEQUEL2
Năm 1978-1979: SEQUEL2 ược nâng cấp và ổi tên thành
SQL (nhưng vẫn ọc là SEQUEL) lOMoARcPSD| 36991220
Chuẩn SQL ầu tiên có tên gọi SQL-86 (SQL1) ược công nhận
và chuẩn hóa bởi ANSI và ISO.
Năm 1992: SQL1 ược mở rộng với nhiều tính năng mới và
ược gọi là SQL-92 (SQL2).
Năm 1999: Chuẩn SQL-99 (SQL3) ra ời
Phiên bản mới nhất hiện nay là SQL-2011 3.1. Giới thiệu SQL (tt)
Ngôn ngữ giao thiết CSLD gồm:
– DDL – Data Definition Language
– DML – Data Manipulation Language
– SQL – Structured Query Language lOMoARcPSD| 36991220
– DCL – Data Control Language SQL gồm 2 nhóm lệnh
– DDL: Tạo cấu trúc CSDL
– DML: Thao tác trên CDSDL • CREATE • SELECT • INSERT, UPDATE, DELETE…
Cho các lược ồ quan hệ
NHANVIEN (MANV,HONV, TENLOT, TENNV, PHAI,
LUONG, DIACHI, NGAYSINH, MA_NQL, PHG) lOMoARcPSD| 36991220
PHONGBAN (MAPB, TENPB, TRPHG, NGAYBĐ) DIADIEM_PHG (MAPB, DIADIEM)
DEAN (MADA, TENDA, NGAYBD, PHONG, DIADIEM_DA)
PHANCONG (MANV, MADA, THOIGIAN)
THANNHAN (MANV,TENTN,PHAI,NGAYSINH,QUANHE)
3.2. lệnh SELECT – Truy vấn dữ liệu Gồm 3 mệnh ề cơ bản SELECT FROM WHERE < iều kiện> lOMoARcPSD| 36991220 –
• Tên các cột cần hiển thị ở kết quả truy vấn –
• Tên các bảng (nguồn) dữ liệu khi truy vấn – < iều kiện>
• Xác ịnh biểu thức boolean xác ịnh dòng (bộ) nào ược trích ra
• Nối các biểu thức: AND, OR, NOT
• Phép toán: >, <, <=, >=, =, <>, LIKE, BETWEEN 2. lệnh SELECT (tt) SQL và Đại số quan hệ lOMoARcPSD| 36991220 SELECT x FROM WHERE < iều kiện> SELECT L ( FROM R L C(R )) WHERE C lOMoARcPSD| 36991220 Ví dụ SELECT *
Lấy tất cả các cột của quan hệ FROM NHANVIEN WHERE PHG=5 PHG=5(NHANVIEN) lOMoARcPSD| 36991220 Mệnh ề SELECT lOMoARcPSD| 36991220 Mệnh ề SELECT (tt) 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,HO,TEN LOT,TEN MaNV,HONV,TENLOT,TENNV
PHG=5 PHAI=‘Nam’(NHANVIEN))) lOMoARcPSD| 36991220 Mệnh ề SELECT (tt) Mở rộng:
SELECT MANV, HONV +’ ‘+ TENLOT+’ ‘ TENNV AS ‘HO TEN’ FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’ lOMoARcPSD| 36991220 Mệnh ề SELECT (tt) Mở rộng:
SELECT MANV, LUONG*1.1 AS ‘LUONG10%’ FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’ lOMoARcPSD| 36991220 Mệnh ề SELECT (tt)
Loại bỏ các dòng trùng nhau SELECT LUONG FROM NHANVIEN SELECT DISTINCT LUONG
WHERE PHG=5 AND PHAI=‘Nam’ FROM NHANVIEN lOMoARcPSD| 36991220 Mệnh ề SELECT (tt)
WHERE PHG=5 AND PHAI=‘Nam’ lOMoARcPSD| 36991220 Mệnh ề WHERE (tt) Ví dụ
Cho biết MANV và TENNV làm việc ở phòng ‘Nghien cuu’ SELECT MANV, TENNV lOMoARcPSD| 36991220 Mệnh ề WHERE (tt) FROM NHANVIEN, PHONGBAN
WHERE PHG=MAPHG AND TENPGH=‘Nghiencuu’ Mệnh ề WHERE SELECT MANV, TENNV FROM NHANVIEN, PHONGBAN lOMoARcPSD| 36991220 Mệnh ề WHERE (tt)
WHERE PHG=MAPHG AND TENPHG=‘Nghien cuu’ TRUE TRUE Độ ưu tiên
– Viết trước thực hiện trước
– Trong ngoặc thực hiện trước SELECT MANV, TENNV lOMoARcPSD| 36991220 Mệnh ề WHERE (tt) FROM NHANVIEN, PHONGBAN
WHERE (TENPHG=‘Nghien cuu’ OR TENPHG=‘Quan ly’) ANDPHG=MAPHG lOMoARcPSD| 36991220 Mệnh ề WHERE (tt) BETWEEN SELECT MANV, TENNV FROM NHANVIEN
WHERE LUONG>=2000000 ANDLUONG<=3000000 SELECT MANV, TENNV FROM NHANVIEN
WHERE LUONG BETWEEN 2000000 AND3000000 NOT BETWEEN SELECT MANV, TENNV FROM NHANVIEN lOMoARcPSD| 36991220 Mệnh ề WHERE (tt)
WHERE LUONG NOT BETWEEN 2000000 AND3000000 IN NOT IN SELECT MANV, TENNV WHERE PHG = 4 ORPHG=5 FROM NHANVIEN SELECT MANV, TENNV WHERE PHG IN (4,5) FROM NHANVIEN WHERE PHG NOT IN(4,5) SELECT MANV, TENNV FROM NHANVIEN lOMoARcPSD| 36991220 Mệnh ề WHERE (tt) LIKE
– Lấy tất cả chuỗi giống vớimẫu SELECT MANV,TENNV FROM NHANVIEN
WHERE HONV LIKE ‘Nguyen_ _ _ _’ 1 Ký tự bất kỳ SELECT MANV,TENNV FROM NHANVIEN WHERE HONV LIKE ‘Nguyen%’ lOMoARcPSD| 36991220 Mệnh ề WHERE (tt) Nhiều ký tự bấtkỳ NOT LIKE
– Lấy tất cả những chuỗi khônggiống NULL
– Sử dụng trong trường hợp:
• Không biết (value unknown)
• Không thể áp dụng (value inapplicable)
• Không tồn tại (value un witheld)
SELECT MANV, TENNV FROM NHANVIEN WHERE MA_NQL ISNULL lOMoARcPSD| 36991220 Mệnh ề WHERE (tt)
SELECT MANV, TENNV FROM NHANVIEN WHERE MA_NQL IS NOTNULL Không sử dụng WHERE
– Kết quả là phép tích “ ề-các” lOMoARcPSD| 36991220 Mệnh ề WHERE (tt) lOMoARcPSD| 36991220 Mệnh ề FROM Tên, Bí danh
SELECT TENPHG, DIADIEM SELECT TENPHG,DIADIEM FROM PHONGBAN, DDIEM_PHG FROM PHONGBAN, DDIEM_PHG WHERE MAPHG=MAPHG
WHERE PhongBan.MAPHG=DDiem_PHG.MAPHG Bí danh lOMoARcPSD| 36991220 Mệnh ề ORDER BY
Dùng ể hiển thị kết quả truy vấn theo thứ tự Cú pháp: SELECT FROM WHERE < iềukiện> ORDER BY
– ASC: Sắp xếp tăng (mặc ịnh) – DESC: Sắp xếp giảm Mệnh ề ORDER BY (tt) Ví dụ: SELECT MANV, MADA FROM PHANCONG lOMoARcPSD| 36991220 ORDER BY MANV DESC, MADA MANV MADA 999888777 10 999888777 30 888777666 10 888777666 30 333222111 10 333222111 20 333222111 30 Gom nhóm - GROUP SELECT BY FROM Cú pháp: WHERE < iềukiện> GROUP BY lOMoARcPSD| 36991220
Mỗi bộ trong nhóm sẽ có cùng giá trị tại các thuộc tính gom
nhóm. Một số hàm sử dụng cho GROUP BY: - AVG(): Tính bình quân - SUM(): Tính tổng - COUNT(): Đếm Chú ý:
– Mỗi thuộc tính liệt kê sau SELECT sẽ có 1 giá trị ứng với mỗi nhóm.
– Tất cả các thuộc tính sau SELECT phải xuất hiện ở sau mệnh ề
GROUP BY (Trừ thuộc tính có giá trị làhàm)
– Có thể có thuộc tính xuất hiện ở GROUP BY nhưng không xuất hiện ở SELECT Mệnh ề GROUP BY (tt)
Ví dụ: Cho biết số lượng nhân viên ở mỗi phòng ban
SELECT PHG, COUNT(*) AS ‘So NV’ FROM NHANVIEN lOMoARcPSD| 36991220 GROUP BY PHG Hoặc
SELECT T ENPHG, COUNT(*) AS ‘So NV’ FROM NHANVIEN, PHONGBAN WHERE PHG=MAPHG GROUP BY TENPHG Mệnh ề GROUP BY (tt)
Ví dụ: Hãy cho biết mã nhân viên, số lượng ề án và tổng thời gian mà họ tham gia
SELECT MaNV, COUNT(*) AS ‘So DA’,
SELECT NV.MaNV,TENV, COUNT(*) AS ‘SoDA’, SUM(THOIGIAN) AS ‘TongTG’ SUM(THOIGIAN) AS ‘TongTG’ FROM PHANCONG GROUP BY MaNV lOMoARcPSD| 36991220
FROM PHANCONG PC, NHANVIENNV WHERE PC.MaNV = NV.MaNV GROUP BY 999888777 PC.MaNV,TenNV 2 42.5 888777666 2 20 333222111 3 65.7 999888777 10 32.5 MaNV So DA Tong TG 999888777 30 10 888777666 10 10 888777666 10 30 333222111 10 35.7 333222111 20 25 333222111 30 5 MaNV So DA Tong TG lOMoARcPSD| 36991220 Mệnh ề HAVING
Ví dụ: Hãy tìm những nhân viên tham gia từ 2 ề án trở lên. lOMoARcPSD| 36991220 Mệnh ề HAVING (tt)
Được sử dụng khi cần lọc ra những nhóm thỏa mãn iều kiện nào ó Cú pháp: SELECT FROM WHERE < iềukiện> GROUP BY Ví dụ:
HAVING < iều kiện chọn nhóm> – Tìm mã những nhân viên
tham gia nhiều hơn 2 Đề án
SELECT MaNV, COUNT(*) AS ‘SoDA’, FROM PHANCONG GROUP BY MaNV HAVING COUNT (*) > 2 lOMoARcPSD| 36991220 Mệnh ề HAVING (tt)
Cho biết những phòng ban có lương trung bình của nhân viên lớn hơn 3 triệu
SELECT PHG, AVG(LUONG) AS ‘Luong TB’ FROM NHANVIEN GROUP BY PHG
HAVING AVG(LUONG) > 3000000 Hoặc
SELECT NV.PHG, PB.TenPB, Avg(NV.Luong) AS "TBLuong"
FROM NhanVien AS NV, PhongBan ASPB WHERE NV.Phg = PB.MaPB GROUP BY NV.PHG, PB.TenPB lOMoARcPSD| 36991220
HAVING AVG(LUONG) > 3000000;
X. Các hàm thao tác dữ liệu (tt)
Các hàm tính toán trên bản ghi
– ABS: tính trị tuyệt ối
– POWER(x, y): trả về xy – SQRT: Tính căn bậc 2
– LOG: Tính Log tự nhiên – EXP: Tính ex
– SIGN (x): Kiểm tra dấu của x (trả về -1 | 0 | 1)
– ROUND (x, n): làm tròn x tới n số lẻ (Access là RND)
– Các hàm lượng giác: SIN, COS, TAN, ASIN,ACOS,… lOMoARcPSD| 36991220
3.3. Các hàm thao tác dữ liệu (tt) Các hàm xử lý chuỗi
– LEN (str) : Cho chiều dài chuỗi ký tự
– LEFT (str, n): Lấy n ký tự phía trái của chuỗi str
– RIGHT (str, n): Lấy n ký tự phía phải của chuỗi str
– MID (str, p, n): Lấy n ký tự của chuỗi str kể từ vị trí p trong dãy
3.3. Các hàm thao tác dữ liệu (tt)
Các hàm xử lý thời gian
– DATE(): Cho ngày tháng năm hiện tại
– DAY (dd): Cho số thứ tự ngày trong tháng của biểu thức ngày dd lOMoARcPSD| 36991220
– MONTH (dd) Cho số thứ tự tháng trong năm của biểu thức ngày dd
– YEAR (dd) Cho năm của biểu thức ngày dd
– HOUR (tt) Cho giờ trong ngày (0- 23)
– MINUTE (tt) Cho số phút của thời gian tt
– SECONDS (tt) Cho số giây của biểu thức giờ tt.
3.4. Truy vấn từ nhiều bảng
Truy vấn trên nhiều bảng về bản chất giống như truy vấn
trên 1 bảng (ã kết nhiều bảng lại).
Sử dụng các phép kết (join)
– Kết bằng (phép kết nội – inner join)
– Kết ngoài (outter join) lOMoARcPSD| 36991220 – Truy vấn lồng nhau lOMoARcPSD| 36991220
3.4. Truy vấn từ nhiều bảng (tt) Phép kết tự nhiên SELECT
FROM WHERE < iều kiện kếtnối> Hoặc SELECT
FROM INNER JOIN ON < iều kiện kết nối> WHERE < iều kiện chọndòng>
Ví dụ: Đưa ra danh sách nhân viên và tên phòng làm việc
SELECT HoNV, Tenlot, TenNV, TenPB FROM Nhanvien, PhongBan WHERE PHG = MaPB lOMoARcPSD| 36991220
3.4. Truy vấn từ nhiều bảng (tt)
Ví dụ: Tìm mã và họ tên các nhân viên làm việc ở phòng ‘Kinh doanh’
SELECT MaNV, HoNV +’ ‘ + Tenlot + ‘ ‘ + TenNV AS ‘Ho ten’,TenPB
FROM Nhanvien INNER JOIN PhongBan ON PHG = MaPB
WHERE TenPB LIKE ‘%Kinh doanh’ Hoặc:
SELECT MaNV, HoNV +’ ‘ + Tenlot + ‘ ‘ + TenNV AS ‘Ho ten’,TenPB FROM Nhanvien, PhongBan
WHERE PHG = MaPB AND TenPB LIKE ‘%Kinh doanh’ Phép kết ngoài lOMoARcPSD| 36991220
3.4. Truy vấn từ nhiều bảng (tt) SELECT
FROM LEFT | RIGHT | [OUTTER] JOIN
ON < iều kiện kết>
WHERE < iều kiện chọn dòng>
Ví dụ: Cho biết nhân viên và tên của phòng ban mà họ là trưởng phòng (nếu có)
SELECT HoNV, Tenlot, TenNV, TenPB
FROM NhanVien NV LEFT JOIN PhongBan PB lOMoARcPSD| 36991220
3.4. Truy vấn từ nhiều bảng (tt) ON NV.MaNV=PhongBan.TrgPhg
Ví dụ: Tìm họ tên nhân viên và tên thân nhân của họ (nếu có)
SELECT NV.MaNV, HoNV, TenLot, TenNV, TenTN, Quanhe
FROM ThanNhan TN RIGHT JOIN NhanVien NV lOMoARcPSD| 36991220
3.4. Truy vấn từ nhiều bảng (tt) ON TN.MaNV = NV.MaNV Truy vấn lồng nhau
– Một câu truy vấn (SELECT) lồng vào câu truy vấn khác gọi là
truy vấn lồng nhau hay Subquery lOMoARcPSD| 36991220
3.4. Truy vấn từ nhiều bảng (tt)
– Subquery ược bao bởi cặp dấu ngoặc (.......) và có thể lồng nhau nhiều mức.
– Subquery ược lồng vào sau từ khóa WHERE hoặc HAVING
– Câu truy vấn con thường trả về 1 tập các giá trị
– Nếu có nhiều truy vấn con sau WHERE thì thường ược kết
hợp với nhau bởi các phép toán logic lOMoARcPSD| 36991220 Truy vấn lồng nhau (tt) SELECT FROM Truy vấn cha WHERE ( SELECT FROM WHERE < iều kiện> ) Truy vấn con Các phép toán tập hợp – IN lOMoARcPSD| 36991220 Truy vấn lồng nhau (tt) – NOT IN – ALL – ANY / SOME – EXISTS – NOT EXISTS
Có 2 loại truy vấn lồng – Lồng phân cấp:
• Mệnh ề WHERE của Subquery không tham chiếu ến các thuộc
tính của các bảng trong mệnh ề FROM của truy vấn cha
• Khi thực hiện truy vấn con ược thực hiện trước lOMoARcPSD| 36991220 Truy vấn lồng nhau (tt) – Lồng tương quan:
• Mệnh ề WHERE của Subquery tham chiếu ến ít nhất 1 thuộc tính
của bảng trong mệnh ề FROM của truy vấn cha
• Khi thực hiện, câu truy vấn con ược thực nhiều lần – mỗi lần ứng
với 1 bộ của câu truy vấn cha lOMoARcPSD| 36991220
Ví dụ - Truy vấn lồng phân cấp (tt)
Ví dụ - Truy vấn lồng phân cấp
Đưa ra mã nhân viên, họ tên nhân viên thuộc phòng ‘Tài
chính’ hoặc phòng ‘Kế hoạch’
SELECT MaNV, HoNV, TenLot, TenNV FROM NHANVIEN WHERE Phg IN ( SELECT MaPHG FROM PHONGBAN lOMoARcPSD| 36991220
Ví dụ - Truy vấn lồng phân cấp (tt)
WHERE TenPB LIKE ‘%Tài chính’ OR TenPB LIKE ‘%Kế hoạch’ )
Hãy tìm những ề án có nhân viên họ ‘Nguyễn’ tham gia SELECT MaDA, TenDA FROM DEAN WHERE MaDA IN ( SELECT MaDA FROM PHANCONG PC, NHANVIEN NV WHERE PC.MaNV = NV.MaNV AND lOMoARcPSD| 36991220
Ví dụ - Truy vấn lồng phân cấp (tt) NV.HoNV LIKE ‘%Nguyễn%’ )
Hãy tìm những nhân viên không có thân nhân nào SELECT * SELECT * FROM NHANVIEN FROM NHANVIEN WHERE MaNV NOT IN ( WHERE MaNV <> ALL( SELECT MaNV SELECT MaNV FROM THANNHAN FROM THANNHAN ) ) lOMoARcPSD| 36991220
Ví dụ - Truy vấn lồng phân cấp (tt)
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 SELECT * FROM NHANVIEN WHERE LUONG > ANY (
SELECT LUONG FROM NHANVIEN WHERE PhG = 4 )
Tìm những trưởng phòng có tối thiểu 1 thân nhân SELECT * FROM NHANVIEN lOMoARcPSD| 36991220
Ví dụ - Truy vấn lồng phân cấp (tt)
WHERE MANV IN (SELECT MaNV FROM THANNHAN) AND MANV IN (SELECT TRPHG FROM PHONGBAN)
Tìm những Nhân viên có lương cao hơn lương của mọi nhân viên phòng 4 lOMoARcPSD| 36991220
Truy vấn lồng tương quan
– Mệnh ề WHERE của Subquery tham chiếu ến ít nhất 1 thuộc tính
của bảng trong mệnh ề FROM của truy vấn cha
– Khi thực hiện, câu truy vấn con ược thực nhiều lần – mỗi lần ứng
với 1 bộ của câu truy vấn cha Ví dụ:
– Tìm những trưởng phòng có ít nhất 1 thân nhân SELECT * FROM NHANVIEN NV
WHERE EXISTS ( SELECT * FROM THANNHAN TN WHERE TN.MaNV = NV.MaNV)AND
EXISTS (SELECT TrgPHG FROM PHONGBAN WHERE TrgPHG = NV.MaNV) lOMoARcPSD| 36991220
Ví dụ - Truy vấn lồng lương quan (tt)
Tìm những nhân viên không có thân nhân nào SELECT * FROM NHANVIEN NV WHERE NOT EXISTS ( SELECT * FROM THANNHAN TN WHERE TN.MaNV = NV.MaNV )
Ví dụ - Truy vấn lồng lương quan (tt)
Tìm những nhân viên có lương cao hơn lương trung bình của phòng lOMoARcPSD| 36991220 SELECT * FROM NHANVIEN NV1 WHERE NV1.Luong > ( SELECT AVG(NV2.Luong) FROM NHANVIEN NV2 WHERE NV2.Phg = NV1.Phg )
Ví dụ - Truy vấn lồng lương quan (tt)
Tìm những nhân viên có lương bằng lương cao hơn lương
của ít nhất 1 nhân viên thuộc phòng ‘Tài chính’ SELECT * FROM NHANVIEN NV1 lOMoARcPSD| 36991220 WHERE EXISTS ( SELECT *
FROM NHANVIEN NV2, PHONGBAN PB WHERE NV2.Phg = PB.MaPB AND
PB.TenPB LIKE ‘%Tài chính%’AND NV1.Luong > NV2.Luong ) Nhận xét IN và EXISTS IN – IN
– Thuộc tính ở mệnh ề SELECT câu truy vấn con phải có cùng
kiểu dữ liệu với thuộc tính ở mệnh ề WHERE trong câu truy vấn cha lOMoARcPSD| 36991220 EXISTS
– Không cần có thuộc tính, hăng số hay biểu thức nàoứng trước
– Không cần liệt kê thuộc tính ở bệnh ề SELECT trong câu truy vấn con
– Những câu truy vấn có = ANY hoặc IN ều có thể chuyển thành câu truy vấn dùng EXISTS
Các phép toán tập hợp trong SQL Phép hợp: UNION lOMoARcPSD| 36991220
Phép giao: INTERSECT Phép trừ: EXCEPT Cú pháp: lOMoARcPSD| 36991220
Phép toán tập hợp trong SQL (tt)
Ví dụ: Tìm các mã ề án có nhân viên họ ‘Nguyễn’ tham gia
hoặc trưởng phòng chủ trì ề án có họ ‘Nguyễn’ SELECT MaDA FROM PHANCONG PC, NHANVIEN NV
WHERE (PC.MaNV = NV.MaNV) AND (HoNV = ‘Nguyễn’) UNION ( SELECT MaDA
FROM NHANVIEN NV, PHONGBAN PB, DEAN DA
WHERE (NV.MaNV=PB.TrgPhg) AND (DA.Phong= PB.MaPB)
AND (NV.HoNV = ‘Nguyễn’) ) lOMoARcPSD| 36991220
3.5. Các lệnh cập nhật dữ liệu Thêm 1 bộ (dòng) mới Sửa 1 bộ (dòng) Xóa 1 bộ (dòng)
Tạo mới 1 quan hệ (bảng) với nội dung từ CSDL lOMoARcPSD| 36991220
3.5.1. Thêm dòng vào bảng Cú pháp INSERT INTO ( ) VALUES () Ví dụ: lOMoARcPSD| 36991220
3.5.1. Thêm dòng vào bảng (tt)
Nhận xét lệnh INSERT INTO
– Thứ tự giá trị sau VALUES phải trùng với thứ tự cộtsau INSERT INTO
– Có thể thêm giá trị NULL ở thuộc tính không là khóa chính lOMoARcPSD| 36991220
– Lệnh INSERT INTO có thể không thực hiện ược (lỗi) nếu vi
phạm ràng buộc toàn vẹn (RBTV) • Khóa chính • Tham chiếu • Thuộc tính NOT NULL
3.5.1. Thêm dòng vào bảng (tt) Thêm nhiều dòng INSERT INTO ( ) Ví dụ: lOMoARcPSD| 36991220
3.5.2. Sửa dòng trong bảng Cú pháp UPDATE SET = , = , ……
[ WHERE < iều kiện> ] lOMoARcPSD| 36991220
Ví dụ: Tăng lương 30% cho những người là ‘nữ’ UPDATE NHANVIEN SET Luong = Luong*1.3, WHERE phai = ‘Nữ’
3.5.2. Sửa dòng trong bảng (tt) Nhận xét
– Lệnh UPDATE cập nhật những dòng thỏa iều kiệnsau WHERE
– Nếu không chỉ ịnh iều kiện sau WHERE thì mọi dòngtrong
bảng sẽ ược cập nhật giá trị mới
– Lệnh UPDATE có thể gây ra vi phạm RBTV lOMoARcPSD| 36991220 • Không cho chỉnh sửa
• Sửa luôn dòng có giá trị tham chiếu ến (CASCADE)
3.5.3. Xóa dòng trong bảng Cú pháp DELETE FROM WHERE < iều kiện> Ví dụ: lOMoARcPSD| 36991220 lOMoARcPSD| 36991220
3.5.3. Xóa dòng trong bảng (tt)
Ví dụ: Xóa i những nhân viên làm ở phòng ‘Dự án’ DELETE FROM NHANVIEN WHERE PHG IN ( SELECT MaPB FROM PHONGBAN
WHERE TenPB = ‘Phòng Dự án’ ) Nhận xét lOMoARcPSD| 36991220
3.5.3. Xóa dòng trong bảng (tt)
– Số dòng bị xóa phụ thuộc vào iều kiện sau WHERE
– Nếu không chỉ rõ iều kiện sau WHERE tất cả các dòng trong bảng sẽ bị xóa
– Lệnh DELETE FROM có thể gây ra vi phạm RBTV • Không cho xóa
• Xóa luôn những dòng có giá trị ang tham chiếu ến
• Đặt Null cho những giá trị tham chiếu lOMoARcPSD| 36991220
3.5.3. Xóa dòng trong bảng (tt) lOMoARcPSD| 36991220
3.5.4. Tạo bảng từ CSDL Cú pháp: SELECT FROM INTO WHERE <Điều kiện> GROUP BY
HAVING < iều kiện chọn nhóm> ORDER BY
3.5.4. Tạo bảng từ CSDL (tt) Ví dụ lOMoARcPSD| 36991220
SELECT PB.TenPB, AVG(NV.Luong) ASTBLuong FROM NHANVIEN NV, PHONGBAN PB INTO TABLE TBLUONG_PHONGBAN WHERE NV.PHG = PB.MaPB GROUP BY PHG, TenPB
3.6. Các lệnh liên quan cấu trúc CSDL
Các kiểu dữ liệu trong SQL Tên kiểu Ý nghĩa Char (w)
Kiểu ký tự ộ rộng cố ịnh (w) Varchar(w)
Kiểu ký tự có ộ rộng thay ổi 0 w Integer Kiểu số nguyên lOMoARcPSD| 36991220 Byte
Kiểu số nguyên nhỏ (0 255)
Số thực rộng w vị trí (cả dấu chấm) có s chữ số thập phân Numberic (w,s) Real, Double Số thực dấu phẩy ộng Float (n)
Số thực dấu phẩy ộng có ít nhất n chữ số Date Kiểu ngày tháng Time
Kiểu thời gian (giờ/phút/giây) Logical Kiểu logic (True/False)
3.6.1. Lệnh tạo bảng CREATE TABLE
Để ịnh nghĩa 1 bảng cần chỉ ra: – Tên bảng – Các thuộc tính • Tên thuộc tính lOMoARcPSD| 36991220 • Kiểu dữ liệu • RBTV trên thuộc tính Cú pháp lOMoARcPSD| 36991220 3.6.1. CREATE TABLE (tt) Ví dụ: lOMoARcPSD| 36991220 3.6.1. CREATE TABLE (tt) RBTV – NOT NULL – NULL – UNIQUE– DEFAUL – PRIMARY KEY – FOREIGN KEY / REFERENCES – CHECK Đặt tên cho RBTV Ví dụ RBTV lOMoARcPSD| 36991220 3.6.1. CREATE TABLE (tt) lOMoARcPSD| 36991220 3.6.1. CREATE TABLE (tt) Ví dụ: lOMoARcPSD| 36991220 3.6.1. CREATE TABLE (tt) lOMoARcPSD| 36991220 3.6.1. CREATE TABLE (tt) Ví dụ - ặt tên cho RBTV lOMoARcPSD| 36991220 3.6.1. CREATE TABLE (tt) Ví dụ - ặt tên cho RBTV lOMoARcPSD| 36991220
3.6.2. Lệnh sửa bảng (tt) 3.6.2. Lệnh sửa bảng Thay ổi cấu trúc bảng – Thêm cột mới – Xóa cột lOMoARcPSD| 36991220
3.6.2. Lệnh sửa bảng (tt) – Mở rộng cột Thay ổi RBTV – Thêm RBTV – Xóa RBTV
Ví dụ - thay ổi cấu trúc lOMoARcPSD| 36991220
3.6.2. Lệnh sửa bảng (tt) Ví dụ - thay ổi RBTV lOMoARcPSD| 36991220
3.6.2. Lệnh sửa bảng (tt) lOMoARcPSD| 36991220 3.6.3. Xóa bảng Cú pháp: Ví dụ: lOMoARcPSD| 36991220 3.6.3. Xóa bảng (tt) 3.8. Bài tập
1. Tìm những nhân viên làm việc ở phòng số 4
2. Tìm những nhân viên có mức lương trên 30000
PHANCONG (MANV, MADA, THOIGIAN)
THANNHAN (MANV,TENTN,PHAI,NGAYSINH,QUANHE) 87 lOMoARcPSD| 36991220
3. Tìm các nhân viên có mức lương trên 25,000 ở phòng 4 hoặc các nhân
viên có mức lương trên 30,000 ở phòng 5
4. Cho biết họ tên đầy đủ của các nhân viên có họ bắt đầu bằng ký tự ‘N’
5. Cho biết các nhân viên sinh trước năm 1975
NHANVIEN (MANV,HONV, TENLOT, TENNV, PHAI, LUONG, DIACHI, NGAYSINH,
MA_NQL, PHG) PHONGBAN (MAPB, TENPB, TRPHG, NGAYBĐ, DIA_DIEM) DIADIEM_PHG (MAPB, DIADIEM)
DEAN (MADA, TENDA, NGAYBD, PHONG, DIADIEM_DA)
1. Tìm những nhân viên làm việc ở phòng số 4
SELECT * FROM NHANVIEN WHERE PHG = 4
2. Tìm những nhân viên có mức lương trên 30000
PHANCONG (MANV, MADA, THOIGIAN)
THANNHAN (MANV,TENTN,PHAI,NGAYSINH,QUANHE) 88 lOMoARcPSD| 36991220
SELECT * FROM NHANVIEN WHERE LUONG > 30000
3. Tìm các nhân viên có mức lương trên 25,000 ở phòng 4 hoặc các nhân viên có
mức lương trên 30,000 ở phòng 5
SELECT * FROM NHANVIEN WHERE (LUONG > 25000 AND PHG = 4) OR (LUONG > 30000 AND PHG = 5)
4. Cho biết họ tên đầy đủ của các nhân viên có họ bắt đầu bằng ký tự ‘N’
SELECT HONV, TENLOT, TENNV FROM NHANVIEN WHERE HONV LIKE N'N%'
5. Cho biết các nhân viên sinh trước năm 1975
SELECT * FROM NHANVIEN WHERE YEAR(NGSINH) < 1975
6. Cho biết các nhân viên sinh trước ngày 30/4/1975 hoặc ở TP HCM hoặc làm việc tại phòng số 4
7. Với mỗi phòng ban, cho biết tên phòng ban và địa điểm phòng
8. Tìm tên những người trưởng phòng của từng phòng ban
9. Tìm tên và địa chỉ của tất cả các nhân viên của phòng "Nghiên cứu".
PHANCONG (MANV, MADA, THOIGIAN)
THANNHAN (MANV,TENTN,PHAI,NGAYSINH,QUANHE) 89 lOMoARcPSD| 36991220
10. Với mọi đề án ở "Ha Noi", liệt kê các mã số đề án (MADA), mã số phòng ban
chủ trì đề án (PHONG), họ tên trưởng phòng (HONV, TENLOT, TENNV) cũng như
địa chỉ (DCHI) và ngày sinh (NGSINH) của người ấy.
NHANVIEN (MANV,HONV, TENLOT, TENNV, PHAI, LUONG, DIACHI, NGAYSINH,
MA_NQL, PHG) PHONGBAN (MAPB, TENPB, TRPHG, NGAYBĐ) DIADIEM_PHG (MAPB, DIADIEM)
DEAN (MADA, TENDA, NGAYBD, PHONG, DIADIEM_DA)
6. Cho biết các nhân viên sinh trước ngày 30/4/1975 hoặc ở TP HCM hoặc làm việc tại phòng số 4
SELECT * FROM NHANVIEN WHERE (YEAR(NGSINH) < 1975) OR (DCHI LIKE N'%Tp hcm') OR (PHG = 4)
7. Với mỗi phòng ban, cho biết tên phòng ban và địa điểm phòng
SELECT P.TENPHG, D.DIADIEM FROM PHONGBAN P, DIADIEM_PHG D WHERE P.MAPHG = D.MAPHG
8. Tìm tên những người trưởng phòng của từng phòng ban
PHANCONG (MANV, MADA, THOIGIAN)
THANNHAN (MANV,TENTN,PHAI,NGAYSINH,QUANHE) 90 lOMoARcPSD| 36991220
SELECT TENNV FROM NHANVIEN N, PHONGBAN P WHERE N.MANV = P.TRPHG
9. Tìm tên và địa chỉ của tất cả các nhân viên của phòng "Nghiên cứu".
SELECT TENNV, DCHI FROM NHANVIEN N, PHONGBAN P WHERE N.PHG =
P.MAPHG AND P.TENPHG LIKE N'Nghiên cứu'
10. Với mọi đề án ở "Ha Noi", liệt kê các mã số đề án (MADA), mã số phòng
ban chủ trì đề án (PHONG), họ tên trưởng phòng (HONV, TENLOT, TENNV)
cũng như địa chỉ (DCHI) và ngày sinh (NGSINH) của người ấy.
SELECT D.MADA, D.PHONG, N.HONV, N.TENLOT, N.TENNV, N.DCHI, N.NGSINH
FROM NHANVIEN N, PHONGBAN P, DEAN D WHERE N.MANV = P.TRPHG AND
P.MAPHG = D.PHONG AND DDIEM_DA LIKE N'Hà Nội'
11. Cho biết tên các đề án mà nhân viên Đinh Bá Tiến đã tham gia
12. Cho biết số lượng đề án của công ty
13. Cho biết số lượng đề án do phòng 'Nghiên Cứu' chủ trì
14. Cho biết lương trung bình của các nữ nhân viên
15. Với mỗi nhân viên, cho biết số lượng nhân viên mà nhân viên đó quản lý trực tiếp.
PHANCONG (MANV, MADA, THOIGIAN)
THANNHAN (MANV,TENTN,PHAI,NGAYSINH,QUANHE) 91 lOMoARcPSD| 36991220
NHANVIEN (MANV,HONV, TENLOT, TENNV, PHAI, LUONG, DIACHI, NGAYSINH,
MA_NQL, PHG) PHONGBAN (MAPB, TENPB, TRPHG, NGAYBĐ) DIADIEM_PHG (MAPB, DIADIEM)
DEAN (MADA, TENDA, NGAYBD, PHONG, DIADIEM_DA)
11. Cho biết tên các đề án mà nhân viên Đinh Bá Tiến đã tham gia
SELECT D.TENDA FROM NHANVIEN N, PHANCONG P, DEAN D WHERE N.MANV =
P.MA_NVIEN AND P.MADA = D.MADA AND (HONV + ' ' + TENLOT + ' ' + TENNV) = N'Đinh Bá Tiên'
12. Cho biết số lượng đề án của công ty
SELECT COUNT(MADA) AS SODEAN FROM DEAN
13. Cho biết số lượng đề án do phòng 'Nghiên Cứu' chủ trì
SELECT COUNT(D.MADA) AS SODEAN FROM DEAN D, PHONGBAN P WHERE D.PHONG
= P.MAPHG AND P.TENPHG LIKE N'Nghiên cứu'
14. Cho biết lương trung bình của các nữ nhân viên
PHANCONG (MANV, MADA, THOIGIAN)
THANNHAN (MANV,TENTN,PHAI,NGAYSINH,QUANHE) 92 lOMoARcPSD| 36991220
SELECT AVG(LUONG) AS LUONGTB FROM NHANVIEN WHERE PHAI LIKE N'Nữ'
15. Với mỗi nhân viên, cho biết số lượng nhân viên mà nhân viên đó quản lý trực tiếp.
SELECT Q.TENNV, COUNT(N.MANV) AS SONV FROM NHANVIEN N, NHANVIEN Q
WHERE N.MA_NQL = Q.MANV GROUP BY Q.TENNV
PHANCONG (MANV, MADA, THOIGIAN)
THANNHAN (MANV,TENTN,PHAI,NGAYSINH,QUANHE) 93 lOMoARcPSD| 36991220
16. Với mỗi phòng ban, liệt kê tên phòng ban (TENPHG) và lương trung bình của
những nhân viên làm việc cho phòng ban đó.
17. Với mỗi phòng ban, cho biết tên phòng ban và số lượng đề án mà phòng ban đó chủ trì
18. Với mỗi phòng ban, cho biết tên phòng ban, họ tên người trưởng phòng và số
lượng đề án mà phòng ban đó chủ trì
19. Với mỗi phòng ban có mức lương trung bình lớn hơn 40,000, cho biết tên phòng
ban và số lượng đề án mà phòng ban đó chủ trì.
20. Cho biết số đề án diễn ra tại từng địa điểm
NHANVIEN (MANV,HONV, TENLOT, TENNV, PHAI, LUONG, DIACHI, NGAYSINH,
MA_NQL, PHG) PHONGBAN (MAPB, TENPB, TRPHG, NGAYBĐ) DIADIEM_PHG (MAPB, DIADIEM)
DEAN (MADA, TENDA, NGAYBD, PHONG, DIADIEM_DA) PHANCONG (MANV,
MADA, THOIGIAN) THANNHAN (MANV,TENTN,PHAI,NGAYSINH,QUANHE)
16. Với mỗi phòng ban, liệt kê tên phòng ban (TENPHG) và lương trung bình của
những nhân viên làm việc cho phòng ban đó. lOMoARcPSD| 36991220
SELECT P.TENPHG, AVG(N.LUONG) AS LUONGTB FROM NHANVIEN N, PHONGBAN P
WHERE N.PHG = P.MAPHG GROUP BY P.TENPHG
17. Với mỗi phòng ban, cho biết tên phòng ban và số lượng đề án mà phòng ban đó chủ trì
SELECT P.TENPHG, COUNT(D.MADA) AS SODEAN FROM PHONGBAN P, DEAN D
WHERE P.MAPHG = D.PHONG GROUP BY P.TENPHG
18. Với mỗi phòng ban, cho biết tên phòng ban, họ tên người trưởng phòng và số
lượng đề án mà phòng ban đó chủ trì
SELECT P.TENPHG, N.HONV, N.TENLOT, N.TENNV, COUNT(D.MADA) AS SODEAN
FROM PHONGBAN P, DEAN D, NHANVIEN N WHERE P.MAPHG = D.PHONG AND
P.TRPHG = N.MANV GROUP BY P.TENPHG, N.HONV, N.TENLOT, N.TENNV
19. Với mỗi phòng ban có mức lương trung bình lớn hơn 40,000, cho biết tên phòng
ban và số lượng đề án mà phòng ban đó chủ trì.
SELECT P.TENPHG, COUNT(D.MADA) AS SODEAN FROM NHANVIEN N, PHONGBAN P,
DEAN D WHERE P.MAPHG = N.PHG AND P.MAPHG = D.PHONG GROUP BY P.TENPHG
HAVING AVG(N.LUONG) > 40000
20. Cho biết số đề án diễn ra tại từng địa điểm
SELECT DDIEM_DA, COUNT(DDIEM_DA) AS SODEAN FROM DEAN GROUP BY DDIEM_DA
21. Cho biết danh sách các đề án (MADA) có: nhân công với họ (HONV) là ‘Dinh’ hoặc ,
có người trưởng phòng chủ trì đề án với họ (HONV) là ‘Dinh’. lOMoARcPSD| 36991220
22. Danh sách những nhân viên (HONV, TENLOT, TENNV) có trên 2 thân nhân.
23. Danh sách những nhân viên (HONV, TENLOT, TENNV) không có thân nhân nào.
24. Danh sách những trưởng phòng (HONV, TENLOT, TENNV) có tối thiểu một thân nhân.
25. Tìm họ (HONV) của những trưởng phòng chưa có gia đình.
NHANVIEN (MANV,HONV, TENLOT, TENNV, PHAI, LUONG, DIACHI, NGAYSINH,
MA_NQL, PHG) PHONGBAN (MAPB, TENPB, TRPHG, NGAYBĐ) DIADIEM_PHG (MAPB, DIADIEM)
DEAN (MADA, TENDA, NGAYBD, PHONG, DIADIEM_DA) PHANCONG (MANV,
MADA, THOIGIAN) THANNHAN (MANV,TENTN,PHAI,NGAYSINH,QUANHE)
21. Cho biết danh sách các đề án (MADA) có: nhân công với họ (HONV) là ‘Dinh’ hoặc ,
có người trưởng phòng chủ trì đề án với họ (HONV) là ‘Dinh’.
SELECT TENDA FROM DEAN WHERE MADA IN (SELECT D.MADA FROM DEAN D,
PHANCONG P, NHANVIEN N WHERE D.MADA = P.MADA AND P.MA_NVIEN = N.MANV
AND N.HONV = N'Đinh’) OR MADA IN (SELECT D.MADA FROM DEAN D, PHONGBAN B,
NHANVIEN N WHERE D.PHONG = B.MAPHG AND B.TRPHG = N.MANV AND N.HONV = N'Đinh')
22. Danh sách những nhân viên (HONV, TENLOT, TENNV) có trên 2 thân nhân. lOMoARcPSD| 36991220
SELECT N.HONV, N.TENLOT, N.TENNV FROM NHANVIEN N, THANNHAN T WHERE
N.MANV = T.MA_NVIEN GROUP BY N.HONV, N.TENLOT, N.TENNV HAVING COUNT(T.MA_NVIEN) > 2
23. Danh sách những nhân viên (HONV, TENLOT, TENNV) không có thân nhân nào.
SELECT HONV, TENLOT, TENNV FROM NHANVIEN WHERE MANV NOT IN (SELECT
N.MANV FROM NHANVIEN N, THANNHAN T WHERE N.MANV = T.MA_NVIEN GROUP BY N.MANV)
24. Danh sách những trưởng phòng (HONV, TENLOT, TENNV) có tối thiểu một thân nhân.
SELECT N.HONV, N.TENLOT, N.TENNV FROM NHANVIEN N, PHONGBAN P, THANNHAN
T WHERE P.TRPHG = N.MANV AND N.MANV = T.MA_NVIEN GROUP BY N.HONV, N.TENLOT, N.TENNV
25. Tìm họ (HONV) của những trưởng phòng chưa có gia đình.
SELECT N.HONV FROM NHANVIEN N, PHONGBAN P WHERE P.TRPHG = N.MANV AND
N.MANV NOT IN (SELECT N.MANV FROM NHANVIEN N, THANNHAN T WHERE N.MANV = T.MA_NVIEN GROUP BY N.MANV)
26. Danh sách những nhân viên (HONV, TENLOT, TENNV) làm việc trong mọi đề án của công ty
27. Danh sách những nhân viên (HONV, TENLOT, TENNV) được phân công tất cả đề án do phòng số 4 chủ trì. lOMoARcPSD| 36991220
28. Tìm những nhân viên (HONV, TENLOT, TENNV) được phân công tất cả đề án mà
nhân viên Đinh Bá Tiến làm việc
NHANVIEN (MANV,HONV, TENLOT, TENNV, PHAI, LUONG, DIACHI, NGAYSINH,
MA_NQL, PHG) PHONGBAN (MAPB, TENPB, TRPHG, NGAYBĐ) DIADIEM_PHG (MAPB, DIADIEM)
DEAN (MADA, TENDA, NGAYBD, PHONG, DIADIEM_DA) PHANCONG (MANV,
MADA, THOIGIAN) THANNHAN (MANV,TENTN,PHAI,NGAYSINH,QUANHE)
26. Danh sách những nhân viên (HONV, TENLOT, TENNV) làm việc trong mọi đề án của công ty
SELECT N.HONV, N.TENLOT, N.TENNV FROM NHANVIEN N, PHANCONG P WHERE
N.MANV = P.MA_NVIEN GROUP BY N.HONV, N.TENLOT, N.TENNV HAVING
COUNT(DISTINCT P.MADA) = (SELECT COUNT(D.MADA) FROM DEAN D)
27. Danh sách những nhân viên (HONV, TENLOT, TENNV) được phân công tất cả đề án do phòng số 4 chủ trì. lOMoARcPSD| 36991220
SELECT N.HONV, N.TENLOT, N.TENNV FROM DEAN D, CONGVIEC C, PHANCONG P,
NHANVIEN N WHERE D.MADA = C.MADA AND C.MADA = P.MADA AND C.STT = P.STT
AND P.MA_NVIEN = N.MANV AND D.PHONG = 4 GROUP BY N.HONV, N.TENLOT,
N.TENNV HAVING COUNT(DISTINCT P.MADA) = (SELECT COUNT(MADA) FROM DEAN WHERE PHONG = 4)
28. Tìm những nhân viên (HONV, TENLOT, TENNV) được phân công tất cả đề án mà
nhân viên Đinh Bá Tiến làm việc
SELECT N.HONV, N.TENLOT, N.TENNV FROM NHANVIEN N, PHANCONG P WHERE
N.MANV = P.MA_NVIEN GROUP BY N.MANV, N.HONV, N.TENLOT, N.TENNV HAVING
COUNT(DISTINCT P.MADA) = (SELECT COUNT(DISTINCT PC.MADA) FROM NHANVIEN
NV, PHANCONG PC WHERE NV.MANV = PC.MA_NVIEN AND (NV.HONV + ' ' +
NV.TENLOT + ' ' + NV.TENNV) = N'Đinh Bá Tiên')