Bài giảng môn Cơ sở dữ liệu: Chương 6 - Ngôn ngữ SQL giới thiệu về SQL; kiểu dữ liệu; định nghĩa dữ liệu; truy vấn dữ liệu; cập nhật dữ liệu và một số nội dung khác. Mời các bạn tham khảo bài giảng để bổ sung thêm kiến thức về lĩnh vực này.
Trang 2Đạ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
Trang 4– Khó khăn cho người sử dụng
– 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 IBM (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
Trang 5– 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
Minh họa SQL Server 2000
Trang 6 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).
Trang 11– 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ệ
– CREATE TABLE (tạo bảng)
– ALTER TABLE (sửa bảng)
– DROP TABLE (xóa bảng)
– CREATE DOMAIN (tạo miền giá trị)
– CREATE DATABASE
– …
Trang 12)
Trang 13MANV CHAR (9), HONV NVARCHAR (10), TENLOT NVARCHAR (20), TENNV NVARCHAR (10), NGSINH DATETIME ,
DCHI NVARCHAR (50), PHAI CHAR (3),
LUONG INT , MA_NQL CHAR (9),
)
Trang 15HONV NVARCHAR (10) NOT NULL , 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), PHG INT
)
Trang 16TENPB NVARCHAR (20) UNIQUE , MAPHG INT NOT NULL ,
TRPHG CHAR (9), NG_NHANCHUC DATETIME DEFAULT ( GETDATE() ) )
CREATE TABLE PHANCONG
(
MANV CHAR (9) FOREIGN KEY (MANV)
REFERENCES NHANVIEN(MANV), MADA INT REFERENCES DEAN(MADA), THOIGIAN DECIMAL (3,1),
PRIMARY KEY (MANV,MADA) )
Trang 17HONV NVARCHAR (10) CONSTRAINT NV_HONV_NN NOT NULL , TENLOT NVARCHAR (20) NOT NULL ,
TENNV NVARCHAR (10) NOT NULL , MANV CHAR (9) CONSTRAINT NV_MANV_PK PRIMARY KEY , NGSINH DATETIME ,
DCHI NVARCHAR (50), PHAI NCHAR (3) CONSTRAINT NV_PHAI_CHK
CHECK (PHAI IN (N ‘Nam’ ,N ‘Nữ’ )), LUONG INT CONSTRAINT NV_LUONG_DF DEFAULT (10000), MA_NQL CHAR (9),
PHG INT
)
Trang 18MANV CHAR (9), MADA INT ,
THOIGIAN DECIMAL (3,1),
CONSTRAINT PC_MANV_MADA_PK
PRIMARY KEY (MANV, MADA),
CONSTRAINT PC_MANV_FK FOREIGN KEY (MANV)
REFERENCES NHANVIEN(MANV),
CONSTRAINT PC_MADA_FK FOREIGN KEY (MADA)
REFERENCES DEAN(MADA) )
Trang 20Sửa bảng
ALTER TABLE <Tên_bảng> DROP COLUMN <Tên_cột>
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> ADD
CONSTRAINT <Ten_RBTV> <RBTV>, CONSTRAINT <Ten_RBTV> <RBTV>,
…
ALTER TABLE <Tên_bảng> DROP <Tên_RBTV>
Trang 21ALTER TABLE NHANVIEN
ADD NGHENGHIEP CHAR(20)
ALTER TABLE NHANVIEN
DROP COLUMN NGHENGHIEP
ALTER TABLE NHANVIEN
ALTER COLUMN NGHENGHIEP CHAR(50)
Trang 22MAPHG INT NOT NULL,TRPHG CHAR(9),
NG_NHANCHUC DATETIME
)
ALTER TABLE PHONGBAN ADD
CONSTRAINT PB_MAPHG_PK PRIMARY KEY (MAPHG),
CONSTRAINT PB_TRPHG FOREIGN KEY (TRPHG)
Trang 23 Cú pháp
Ví dụ
DROP TABLE <Tên_bảng>
DROP TABLE NHANVIEN
DROP TABLE PHONGBAN
DROP TABLE PHANCONG
Trang 24TENNV HONV TENLOT MANV NGSINH DCHI PHAI LUONG MA_NQL PHG
PHONGBAN
TRPHG TENPHG MAPHG NG_NHANCHUC
Trang 25 Cú pháp
CREATE DOMAIN <Tên_kdl_mới> AS <Kiểu_dữ_liệu>
CREATE DOMAIN kieu_MANV AS CHAR(9)
Trang 262 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
Trang 27điều kiện nào đó
Dựa trên
Lệnh cơ bản để rút trích thông tin: SELECT
Bảng là bag (đa bộ) quan hệ là set (tập hợp)
Trang 28– Nối các biểu thức: AND, OR, và NOT
– Phép toán: , , , , (<>) , , LIKE và BETWEEN
FROM <danh sách các bảng>
WHERE <điều kiện>
Trang 29L ( C (RxS))
Trang 30TENLOT Thanh Manh
Trang 31SELECT MANV, HONV, TENLOT, TENNV
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’
MANV,HONV,TENLOT,TENNV( PHG=5 PHAI=‘Nam’ (NHANVIEN))
TENNV HONV
Tung Nguyen
Hung Nguyen
TENLOT Thanh Manh
333445555 987987987 MANV
Trang 32SELECT 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( MANV,HONV,TENLOT,TENNV( PHG=5PHAI=‘Nam’(NHANVIEN)))
TÊN HỌ
Tung Nguyen
Hung Nguyen
TÊN LÓT Thanh Manh
333445555 987987987 MANV
Trang 33SELECT MANV, HONV + ‘ ’ + TENLOT + ‘ ’ + TENNV AS [HỌ TÊN]
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’
HỌ TÊN Nguyen Thanh Tung Nguyen Manh Hung
333445555 987987987 MANV
Mở rộng
Trang 34SELECT MANV, LUONG*1.1 AS [LUONG10%]
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’
MANV,LUONG10%( MANV,LUONG*1.1( PHG=5PHAI=‘Nam’(NHANVIEN)))
LUONG10%
33000 27500
333445555 987987987 MANV
Trang 35LUONG 30000 25000 38000
SELECT DISTINCT LUONG
FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’
Trang 36 Cho biết MANV và TENNV làm việc ở
phòng ‘Nghien cuu’
R1 NHANVIEN PHG=MAPHG PHONGBAN
KQ MANV, TENNV ( TENPHG=‘Nghien cuu’(R1))
SELECT MANV, TENNV
FROM NHANVIEN, PHONGBAN
WHERE TENPHG=‘Nghien cuu’ AND PHG=MAPHG
Biểu thức luận lý
Trang 37SELECT MANV, TENNV
FROM NHANVIEN, PHONGBAN
WHERE (TENPHG=‘Nghien cuu’ OR TENPHG=‘Quan ly’) AND PHG=MAPHG
Độ ưu tiên
Trang 38SELECT MANV, TENNV
Trang 39SELECT MANV, TENNV
FROM NHANVIEN
WHERE DCHI LIKE ‘Nguyen _ _ _ _’
SELECT MANV, TENNV
Trang 40SELECT MANV, TENNV
FROM NHANVIEN
WHERE DCHI LIKE ‘% Nguyens_%’ ESCAPE ‘s’
ESCAPE
‘Nguyen_’
Trang 42Convert(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ị.
Hàm CONVERT
Trang 43Ví dụ: định dạng ngày theo dạng dd/mm/yyyy
SELECT SoHD, MaKH, CONVERT (varchar(10),ngaylap, 103 ) as ngaylap
FROM HOADON
Trang 45– Không biết (value unknown)
– Không thể áp dụng (value inapplicable)
– Không tồn tại (value withheld)
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
NULL
Trang 46SELECT MANV, TENNV
FROM NHANVIEN
WHERE MA_NQL IS NULL
SELECT MANV, TENNV
FROM NHANVIEN
WHERE MA_NQL IS NOT NULL
Trang 47WHERE TRUE
SELECT MANV, MAPHG
FROM NHANVIEN, PHONGBAN
Không sử dụng
mệnh đề WHERE
( Tích chéo RxS )
MAPHG 1 4
333445555 333445555 MANV
5 1 987987987
987987987
333445555
4 5 987987987
Trang 48SELECT TENPHG, DIADIEM
FROM PHONGBAN, DDIEM_PHG
WHERE MAPHG=MAPHG
SELECT TENPHG, DIADIEM
FROM PHONGBAN PB, DDIEM_PHG DD
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
Trang 491 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
Trang 50 Dùng để hiển thị kết quả câu truy vấn theo một thứ tự nào đó
Cú pháp
– ASC: tăng (mặc định) – DESC: giảm
Trang 51999887777 999887777 MA_NVIEN
10 30 987987987
987654321
987987987
10 20 987654321
30 987654321
Trang 53 SQL có cài đặt các phép toán
– Hội (UNION) – Giao (INTERSECT) – 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
• UNION ALL
• INTERSECT ALL
• EXCEPT ALL
Trang 54SELECT <ds cột> FROM <ds bảng> WHERE <điều kiện>
UNION [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>
INTERSECT [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>
Trang 55– 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
WHERE MANV=MA_NVIEN AND HONV=‘Nguyen’
UNION
SELECT MADA
FROM NHANVIEN, PHONGBAN, DEAN
WHERE MANV=TRPHG AND MAPHG=PHONG AND HONV=‘Nguyen’
Phép hợp
Trang 56 Tìm nhân viên có người thân cùng tên và cùng giới tính
SELECT TENNV, PHAI, MANV FROM NHANVIEN
Trang 57 Tìm những nhân viên không có thân
nhân nào
Phép trừ
SELECT MANV FROM NHANVIEN
EXCEPTSELECT MA_NVIEN AS MANV FROM THANNHAN
SELECT MANV
FROM NHANVIEN
WHERE MANV NOT IN
(SELECT MANV FROM THANNHAN)
Trang 58 Tìm nhân viên có người thân
SELECT MANV
FROM NHANVIEN
WHERE MANV IN
(SELECT MANV FROM THANNHAN)
SELECT DISTINCT NV.MANV,HONV + ‘ ’ + TENNV [HỌ TÊN]
FROM NHANVIEN NV, THANNHAN TN
Trang 59WHERE <điều kiện>)
Câu truy vấn cha
(Outer query)
Câu truy vấn con (Subquery)
Trang 60đượ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ử
• IN, NOT IN
• ALL
• ANY hoặc SOME
– Kiểm tra sự tồn tại
• EXISTS
Trang 61SELECT *
FROM NHANVIEN
WHERE MLUONG >= ALL
( SELECT MLUONG FROM NHANVIEN)
SELECT *
FROM NHANVIEN
WHERE MLUONG >= ANY/SOME
Trang 62đế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ẽ được thực hiện
trước
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
Trang 63Hãy tìm
Đề án mà nhân viên tham gia đề án có họ ‘Nguyen’
HOẶC
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’
Trang 64FROM 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’ )
Trang 65không có thân nhân
Trang 661 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
Trang 67FROM NHANVIEN NV1, NHANVIEN NV2
WHERE NV1.LUONG > NV2.LUONG AND
Trang 68SELECT MANV, TENNV
FROM NHANVIEN
WHERE EXISTS (
SELECT *
FROM PHONGBAN
WHERE TENPHG=‘Nghien cuu’ AND PHONG=MAPHG )
FROM NHANVIEN, PHONGBAN
WHERE TENPHG=‘Nghien cuu’ AND PHONG=MAPHG
Tìm nhân viên Phòng nghiên cứu
Trang 69Tìm nhân viên
có thân nhân cùng tên, cùng phái
Trang 701 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
Trang 71 IN
– <tên cột> IN <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
EXISTS
– 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 IN đều có thể
chuyển thành câu truy vấn có EXISTS
Trang 72R 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
1 1 1
1 1
a b
1 1
a
a
ai
bi
Trang 73WHERE NOT EXISTS (
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 )
)
Sử dụng NOT EXISTS
để biểu diễn
Trang 74SELECT 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
Sử dụng truy vấn lồng
để biểu diễn phép chia
Trang 75SELECT MANV, COUNT (MADA)
FROM PHANCONG
GROUP BY MANV
HAVING COUNT (MADA)=( SELECT COUNT (MADA) FROM DEAN )
Sử dụng hàm count
Trang 76 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ó đề án nào là
không được phân công làm
– Tập bị chia: PHANCONG(MA_NVIEN, MADA)
– Tập chia: DEAN(MADA)
– Tập kết quả: KQ(MA_NVIEN)
– Kết KQ với NHANVIEN để lấy ra TENNV
Trang 79SELECT 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’
Trang 80 Cú pháp
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
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>
Trang 81SELECT PHG, COUNT(*) AS SL_NV
FROM NHANVIEN
GROUP BY PHG
SELECT TENPHG, COUNT(*) AS SL_NV
FROM NHANVIEN, PHONGBAN
Trang 821 Với mỗi nhân viên
cho biết mã số, họ tên, số lượng đề án
2 10.0
3 10.0
333445555 333445555
10 10.0 333445555
20 20.0
10 35.0
888665555 987987987
30 5.0 987987987
30 20.0 987654321
20 15.0 987654321
1 20.0 453453453
2 20.0 453453453
Trang 83SELECT <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>
HAVING <điều kiện trên nhóm>
SELECT MANV
FROM PHANCONG
GROUP BY MANV
HAVING COUNT (*) >= 2
Trang 84SELECT PHONG, AVG(LUONG) AS LUONG_TB
FROM NHANVIEN
GROUP BY PHONG
HAVING AVG(LUONG) > 20000
SELECT TENPHG, AVG(LUONG) AS LUONG_TB
FROM NHANVIEN, PHONGBAN
WHERE PHG=MAPHG
GROUP BY TENPHG
HAVING AVG(LUONG) > 20000
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
Trang 85 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 đề HAVING
– 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
Trang 86 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
Trang 88 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>
Trang 89 Kết bằng
Kết ngoài
SELECT <danh sách các cột>
FROM R1 [INNER] JOIN R2 ON <biểu thức>
WHERE <điều kiện>
SELECT <danh sách các cột>
FROM R1 LEFT|RIGHT [OUTER] JOIN R2 ON <biểu thức>
WHERE <điều kiện>
FULL JOIN
FULL
Trang 90 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
Trang 91WHERE YEAR(GETDATE()) – YEAR(NGSINH) >= (CASE PHAI
WHEN 'Nam' THEN 60
WHEN 'Nu' THEN 55END )
SELECT HONV, TENNV,
( CASE PHAI
WHEN 'Nam' THEN YEAR(NGSINH) + 60
WHEN 'Nu‘ THEN YEAR(NGSINH) + 55
END ) AS NAMVEHUU
FROM NHANVIEN