You are on page 1of 79

TRƢỜNG ĐẠI HỌC SƢ PHẠM TP HCM

KHOA TOÁN – TIN


280, An Dương Vương, Q5, Tp HCM ĐT: (08).8352020 - 8352021

CƠ SỞ DỮ LIỆU
Lê Đức Long
Email: longld@math.hcmup.edu.vn
Website: http://www.2learner.edu.vn
NỘI DUNG TRÌNH BÀY

Edited by Duc-Long, Le - 2009 2


TRƢỜNG ĐẠI HỌC SƢ PHẠM TP HCM
KHOA TOÁN – TIN
280, An Dương Vương, Q5, Tp HCM ĐT: (08).8352020 - 8352021

NGÔN NGỮ SQL


(Structured Query Language)

Lê Đức Long  Các lệnh định nghĩa dữ liệu


Email: longld@math.hcmup.edu.vn
 Các lệnh truy vấn dữ liệu cơ bản
Website: http://www.2learner.edu.vn
 Lệnh tạo khung nhìn (View)
Đặt vấn đề …
Một DBMS phải có ngôn ngữ giao tiếp
giữa ngƣời sử dụng với CSDL, bao
gồm:
 Ngôn ngữ mô tả dữ liệu (Data Definition Language –
DDL) để cho phép khai báo cấu trúc các bảng CSDL,
khai báo các mối liên hệ của dữ liệu và các ràng
buộc áp đặt lên các dữ liệu đó
 Ngôn ngữ thao tác dữ liệu (Data Manipulation
Language – DML) cho phép ngƣời dùng thêm, xoá,
sửa dữ liệu
 Ngôn ngữ truy vấn dữ liệu, hay ngôn ngữ hỏi đáp có
cấu trúc ( Structured Query Language – SQL) cho
phép khai thác thông tin cần thiết trong CSDL
 Ngôn ngữ quản lý dữ liệu (Data Control Language –
DCL) cho phép ngƣời quản trị hệ thống thay đổi cấu
trúc của bảng, khai báo bảo mật thông tin, cấp quyền
khai thác CSDL
4
Giới thiệu về SQL
Ngôn ngữ ĐSQH
 Cách thức truy vấn dữ liệu
 Khó khăn cho ngƣời sử dụng
Ngôn ngữ giao tiếp CSDL: SQL
 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)
 Ban đầu có tên là SEQUEL (Structured English Query Language)
 Đƣợc ANSI (American National Standard Institute)
công nhận và phát triển thành chuẩn:
• SQL-86 (được ISO – International Standards Organization công nhận)
• SQL-92
Ví dụ và bài tập : MS SQL Server 2000
• SQL-99
THAO TÁC VỚI NGÔN NGỮ SQL QUA
DMBS MS SQL SERVER

Thao tác Thao tác


trực tiếp gián tiếp

Cửa sổ Enterprise Manager Cửa sổ Query Analyzer

Màn hình gõ câu lệnh

Màn hình xuất tbáo, kết quả

Sử dụng hệ thống thực đơn Sử dụng ngôn ngữ SQL để


(menu) để thực hiện các yêu cầu thực hiện các yêu cầu
Chủ yếu các yêu cầu tạo, Bao gồm tất cả các yêu cầu
thêm, xoá, sửa dữ liệu cập nhật, khai thác dữ liệu
Edited by Duc-Long, Le - 2009 6
TRƢỜNG ĐẠI HỌC SƢ PHẠM TP HCM
KHOA TOÁN – TIN
280, An Dương Vương, Q5, Tp HCM ĐT: (08).8352020 - 8352021

Định nghĩa dữ liệu


Lê Đức Long XEM CHAPTER 4 – DATA DEFINITION LANGUAGE
Email: longld@math.hcmup.edu.vn Ở SQL SERVER 2000-A BEGINNER’S GUIDE
Website: http://www.2learner.edu.vn
Các lệnh định nghĩa dữ liệu

Là ngôn ngữ mô tả (DDL) cho:


 Tạo CSDL
 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
 …
Ví dụ
 CREATE DATABASE (tạo CSDL)
 CREATE TABLE (tạo bảng), DROP TABLE (xóa bảng)
 ALTER TABLE (sửa bảng)
 …

8
Tạo cơ sở dữ liệu
Tạo mới một database và các files được dùng để lưu trữ Database, hay
attaches một Database từ các files của một previously created Database.
Tối đa có thể tạo 32,767 databases trên một DB server.
Có 3 loại file được dùng để lưu trữ một Database:
The primary file contains the startup information for the database. The primary file is also
used to store data. Every database has one primary file. (tập tin dữ liệu)
 Secondary files hold all of the data that does not fit in the primary data file. Databases
need not have any secondary data files if the primary file is large enough to hold all of the
data in the database. Other databases may be large enough to need multiple secondary data
files, or they may use secondary files on separate disk drives to spread the data across
multiple disks.
Transaction log files hold the log information used to recover the database. There must
be at least one transaction log file for each database, although there may be more than
one. The minimum size for a transaction log file is 512 KB. (tập tin lƣu vết)
Mỗi Database phải có ít nhất 2 files, a primary file and a transaction log file.
Có thể đặt tên các file này theo qui tắc đặt tên file bình thƣờng, nhƣng nên sử dụng tên và
phần mở rộng mặc định (xem bảng dƣới)

File type File name extension


Primary data file .mdf
Secondary data file .ndf
Transaction log file .ldf
Tạo cơ sở dữ liệu
 Tạo trực tiếp từ cửa sổ Enterprise Manager
 Tạo gián tiếp từ cửa sổ SQL Query Analyzer
Cú pháp tổng quát
CREATE DATABASE tên csdl
[ ON
[ < filespec > [ ,...n ] ]
[ , < filegroup > [ ,...n ] ]
]
[ LOG ON { < filespec > [ ,...n ] } ]
[ COLLATE collation_name ]
[ FOR LOAD | FOR ATTACH ]
< filespec > ::=
[ PRIMARY ]
( [ NAME = logical_file_name , ]
FILENAME = 'os_file_name'
[ , SIZE = size ]
[ , MAXSIZE = { max_size | UNLIMITED } ]
[ , FILEGROWTH = growth_increment ] ) [ ,...n ]
< filegroup > ::=
FILEGROUP filegroup_name < filespec > [ ,...n ] 10
Tạo CSDL có tên Sales với các thông số như sau:
CREATE DATABASE Sales
ON
( NAME = Sales_dat,
Kích thƣớc FILENAME = 'c:\program files\microsoft sql server\mssql\data\saledat.mdf',
SIZE = 10,
ban đầu
MAXSIZE = 50,
Kích thƣớc FILEGROWTH = 5 )
LOG ON
tối đa
( NAME = 'Sales_log',
FILENAME = 'c:\program files\microsoft sql server\mssql\data\salelog.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB )

Hệ thống sẽ tạo CSDL Sales với 2 file có tên saledat.mdf và


salelog.ldf cùng với các thông số đã chỉ định

Tạo CSDL có tên QLSV gồm 2 file QLSV_Data.mdf


và QLSV_log.ldf với các thông số mặc định (kích
thƣớc ban đầu 1MB, kích thƣớc tối đa không giới hạn)
CREATE DATABASE QLSV
11
QUAN SÁT CỬA SỔ ENTERPRISE MANAGER
Khi tạo CSDL QLSV với các thông số mặc nhiên trong
cửa sổ Enterprise Manager – tương đương với lệnh tạo:
CREATE DATABASE QLSV

Trasaction log file với các


thông số mặc định Lưu ở …\MSSQL\data
Primary file với các
thông số mặc định

12
Xoá cơ sở dữ liệu hiện có

 Xoá trực tiếp từ cửa sổ Enterprise Manager: nhấn


phím Delete, nhấp chuột trên biểu tƣợng Delete
 Xoá gián tiếp từ cửa sổ SQL Query Analyzer

DROP DATABASE QLSV

Lưu ý:
 Không thể hủy bỏ các CSDL hệ thống như: Master, Model, Tempdb
 Để hủy bỏ một CSDL thành công thì phải đảm bảo không còn người sd đang
truy cập CSDL
 Tuyệt đối không xoá CSDL bằng cách sử dụng Windows Explorer hoặc
Windows Commander (chẳng hạn) để hủy bỏ các loại tập tin dữ liệu của SQL
trong thư mục C:\Microsoft SQL Server\MSSQL.1\MSSQL\DATA

13
Lệnh tạo bảng (Table)
Để định nghĩa một bảng
 Tên bảng
 Các thuộc tính
• Tên thuộc tính
• Kiểu dữ liệu
• Các RBTV trên thuộc tính
Cú pháp tổng quát
CREATE TABLE < Tên quan hệ> (
<Thuộc tính> <Kiểu> [<Kích thƣớc>] [NOT NULL],….
PRIMARY KEY (<Khoá chính>)
[UNIQUE (<Khoá chỉ định>),…]
[FOREIGN KEY (<Khoá ngoại>) REFERENCES <bảng>,…]
[CHECK < Điều kiện ràng buộc>, …]
[CONSTRAINT <Tên ràng buộc> <kiểu ràng buộc>] )
14
QUAN SÁT CỬA SỔ ENTERPRISE MANAGER

CSDL QLSinhVien

Cấu trúc của bảng


HPhan

15
CREATE TABLE < Tên quan hệ> (
<Thuộc tính> <Kiểu> [<Kích thƣớc>] [NOT NULL],….
PRIMARY KEY (<Khoá chính>)
[UNIQUE (<Khoá chỉ định>),…]
[FOREIGN KEY (<Khoá ngoại>) REFERENCES <bảng>,…]
[CHECK < Điều kiện ràng buộc>, …]
[CONSTRAINT <Tên ràng buộc> <kiểu ràng buộc>] )
Ý NGHĨA
Lệnh tạo một bảng rỗng có cấu trúc gồm các thuộc tính với các kiểu
dữ liệu tƣơng ứng, cùng với một số tham số.
-Các kiểu dữ liệu có thể sử dụng nhƣ: char(n), smallint, integer,
decimal(p,s), real, datetime, binary, ...
-not null: thuộc tính không lấy giá trị rỗng. Lưu ý thuộc tính khoá
mặc nhiên bị ràng buộc not null.
-primary key (<khoá chính>): khai báo khoá chính của bảng.
-unique (<khoá>): khai báo các khoá chỉ định khác (nếu có)
-foreign key (<khoá ngoại>) …: khai báo khoá ngoại của bảng
-check <điều kiện ràng buộc>: mô tả các ràng buộc miền giá trị
16
Các kiểu dữ liệu của SQL

Số (numeric)
 INTEGER
 SMALLINT
 NUMERIC, NUMERIC(p),
Kiểu số thường dùng NUMERIC(p,s)
trong lập trình
 DECIMAL, DECIMAL(p),
DECIMAL(p,s)
 REAL
 DOUBLE PRECISION
 FLOAT, FLOAT(p)

17
Kiểu dữ liệu (tt)
Xem MS SQL Online Help

Chuỗi ký tự (character string)


 CHARACTER, CHARACTER(n)
 CHARACTER VARYING(x)

Kiểu thường dùng Chuỗi bit (bit string)


trong lập trình  BIT, BIT(x)
 BIT VARYING(x)

Ngày giờ (datetime)


 DATE gồm ngày, tháng và năm
 TIME gồm giờ, phút và giây
 TIMESTAMP gồm ngày và giờ
18
Table 6-1. SQL Server datatype synonyms.
Synonym Mapped to system datatype
binary varying varbinary
char varying varchar
character char(1)
character(n) char(n)
character varying(n) varchar(n)
dec decimal
double precision float
float[(n)] for n = 1 to 7 real
float[(n)] for n = 8 to 15 float
integer int
national character(n) nchar(n)
national char(n) nchar(n)
national character varying(n) nvarchar(n)
national char varying(n) nvarchar(n)
national text ntext
numeric decimal
19
Table 6-2. SQL Server number datatypes.

Storage
Datatype Range
(bytes)
bigint -263 to 263-1 8
int -231 to 231-1 4
smallint -215 to 215-1 2
tinyint 0 to 255 1
- 922,337,203,685,477.5808 to
money 922,337,203,685,477.5807 with accuracy of one ten- 8
thousandth of a monetary unit
-214,748.3648 to 214,748.3647, with accuracy of
smallmoney 4
one ten-thousandth of a monetary unit
decimal(p,s) Whole or fractional numbers from -1038 to 1038 2~17
Approximations of numbers from -1.79E308 to
float 8
1.79E308 (15 digit precision)
Approximations of numbers from -3.40E38 to 3.40E38
real 4
(7 digit precision)
20
Table 6-3. SQL Server decimal and numeric datatype storage requirements.

Precision Storage (bytes)

1 to 9 5
10 to 19 9
20 to 28 13
29 to 38 17

Table 6-4. SQL Server datetime datatypes.

Storage
Datatype Range
(bytes)
January 1, 1753, through December 31, 9999, with an
datetime 8
accuracy of three-hundredths of a second
January 1, 1900, through June 6, 2079,with an
smalldatetime 4
accuracy of one minute

21
Table 6-5. SQL Server character datatypes.

Up to 8000 characters, 1 byte per character n declared, even


char(n) if partially unsused (fix length)
Up to 8000 characters, 1 byte per character stored. Declared
varchar(n) but unsused characters do not consume storage (variable
length)
Up to 4000 character, 2 bytes per character declared (Unicode
nchar(n) character strings)
Up to 4000 character, 2 bytes per character stored. Declared
nvarchar(n) but unsused do not use storage (Unicode character strings)
Up to 230 -1 (1,073,741,823) characters (Unicode character
ntext strings)
Text: character data up to 231-1 characters
text and image Image: Binary data up to 231-1 characters
Text and Image is always variable length
Any binary representation (bit patterns) up to 255 bytes (n
binary(n) bytes)
Any binary representation (bit patterns) up to 255 bytes (n
varbinary(n) bytes). No storage for space declared but not used

22
Chọn tab Search, Gọi từ menu Start
gõ từ cần tra cứu Start/All Programs/Microsoft SQL Server/Book Online
Gọi trực tiếp từ ứng dụng
Bấm F1 23
Ví dụ - Tạo bảng đơn giản

CREATE TABLE NhanVien(


MaNV char(8) not null,
HoNV nvarchar(50) not null,
Tạo bảng NHANVIEN
trong CSDL hiện TenLot nvarchar(50) not null,
hành (đang mở) với TenNV nvarchar(50) not null,
các thuộc tính được
định nghĩa là bắt NgSinh datetime not null,
buộc hay không bắt Phai nvarchar(5),
buộc nhập khi nhập
liệu hoặc thêm Dchi nvarchar(100),
Ma_NQL char(8),
Phong char(4) not null,
MLuong real
)
24
QUAN SÁT CỬA SỔ ENTERPRISE MANAGER
Khi tạo bảng NHANVIEN trực tiếp với các thuộc tính tương ứng

Tương đương với lệnh CREATE TABLE NHANVIEN...

Khóa chính

Kiểu dữ liệu
 Chọn kiểu dữ liệu
phù hợp với phân tích

Kích thƣớc (tƣơng ứng


số byte lƣu trữ)
Cho phép Null

Mô tả thuộc tính

25
Tạo bảng NHANVIEN có khai báo các khóa
chính, khóa ngoại

CREATE TABLE NhanVien(


MaNV char(8) not null,
HoNV nvarchar(50) not null,
TenLot nvarchar(50) not null,
TenNV nvarchar(50) not null, QUAN HỆ CON
NgSinh datetime,
Phai nvarchar(5),
Dchi nvarchar(100),
Ma_NQL char(8) not null,
Phong char(4) not null, Khai báo khóa chính
MLuong real,
Primary Key (MaNV),
Foreign Key (Ma_NQL) References NhanVien(MaNV),
Foreign Key (Phong) References PhongBan(MaPhg)
)
Khai báo khóa ngoại QUAN HỆ CHA
26
Ví dụ - Tạo bảng
Tạo bảng MONHOC có khai báo các khóa chính, khóa
ngoại và kiểm tra duy nhất
QUAN HỆ CON
CREAT TABLE MONHOC (
Mamon char(4) NOT NULL, Có thể bỏ qua (kô báo lỗi)
Tenmon char(20) NOT NULL,
Kiểm tra thuộc tính Sotietquidinh
Mato char(2), phải lớn hơn 0
Sotietquidinh int,
Hệ CHECK (Sotietquidinh > 0),
thống
tự đặt PRIMARY KEY (Mamon),
tên UNIQUE (Tenmon),
ràng FOREIGN KEY (Mato) REFERENCES TOBM(MaBM)
buộc
)
Khai báo tên môn là duy nhất (điểm
khác biệt với PK là đƣợc phép xuất QUAN HỆ CHA
hiện nhiều lần
27
Ví dụ - Tạo bảng
Tạo bảng PHONGBAN có khai báo các ràng buộc (có đặt
tên ràng buộc)
Đặt giá trị mặc nhiên là ‘88556611’
CREATE TABLE PHONGBAN(
MaPhg char(4) NOT NULL,
TenPhg nvarchar(100) NOT NULL, Tạo ràng buộc khóa chính
TrPhg char(8) DEFAULT '88556611',
NgNC datetime,
CONSTRAINT PK_PhongBan PRIMARY KEY (MaPhg),
CONSTRAINT U_PhongBan UNIQUE (TenPhg),
CONSTRAINT FK_PhongBan
FOREIGN KEY (TrPhg) REFERENCES NhanVien(MaNV)
ON DELETE SET DEFAULT ON UPDATE CASCADE
)
Tạo ràng buộc khóa ngoại, có kiểm tra khi xóa, sửa
Tạo ràng buộc tên phòng ban là duy nhất
28
Thao tác chỉnh sửa cấu trúc

Đƣợc dùng để
 Thay đổi cấu trúc bảng
 Thay đổi các ràng buộc (RB)

ALTER TABLE <Tên_bảng> ADD


Thêm cột <Tên_cột> <Kiểu_dữ_liệu> [<RBTV>]

Xóa cột ALTER TABLE <Tên_bảng> DROP COLUMN <Tên_cột>

ALTER TABLE <Tên_bảng> ALTER COLUMN


Mở rộng cột <Tên_cột> <Kiểu_dữ_liệu_mới>

29
Ví dụ - Thay đổi cấu trúc bảng
THÊM CỘT

ALTER TABLE NHANVIEN ADD NGHENGHIEP CHAR(20)

XOÁ CỘT

ALTER TABLE NHANVIEN DROP COLUMN NGHENGHIEP

THAY ĐỔI ĐỘ RỘNG CỘT

ALTER TABLE NHANVIEN ALTER COLUMN NGHENGHIEP CHAR(50)

BỔ SUNG KHOÁ CHÍNH, KHOÁ NGOẠI

ALTER TABLE NHANVIEN ADD PRIMARY KEY (MANV)

ALTER TABLE NHANVIEN ADD FOREIGN KEY (PHONG)


REFERENCES PHONGBAN (MAPHG)

30
Thao tác chỉnh sửa cấu trúc

Thêm ràng buộc


ALTER TABLE <Tên_bảng> ADD
CONSTRAINT <Ten_RBTV> <RBTV>,
CONSTRAINT <Ten_RBTV> <RBTV>,

Xóa ràng buộc

ALTER TABLE <Tên_bảng> DROP <Tên_RBTV>

31
TẠO BẢNG PHONG BAN
CREATE TABLE PhongBan(
MaPhg char(4) not null,
TenPhg nvarchar(100) not null,
)
TẠO RÀNG BUỘC KHÓA CHÍNH
ALTER TABLE PhongBan ADD CONSTRAINT pk_PhongBan
PRIMARY KEY (MaPhg)
SAU KHI TẠO BẢNG PHONGBAN, TẠO BẢNG NHANVIEN
BỔ SUNG THÊM CÁC RÀNG BUỘC

ALTER TABLE PhongBan ADD TrPhg char(8), NgNC datetime


ALTER TABLE PhongBan ADD CONSTRAINT fk_PhongBan
FOREIGN KEY (TrPhg) REFERENCES NhanVien(MaNV)
32
Lệnh 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 NHANVIEN

DROP TABLE PHONGBAN

CHÚ Ý ĐẾN THỨ TỰ KHI XOÁ  LIÊN QUAN ĐẾN RELATIONSHIP

33
Lệnh xóa bảng (tt)

(2)
NHANVIEN

HONV TENLOT TENNV MANV NGSINH DCHI PHAI LUONG MA_NQL PHG

(1)
PHONGBAN

TENPHG MAPHG TRPHG NG_NHANCHUC

(3)
(1) ALTER TABLE PHONGBAN DROP COLUMN TRPHG (xoá cột TRPHG)

HAY ALTER TABLE PHONGBAN DROP fk_PHONGBAN (xoá RB fk_PHONGBAN)


(2) DROP TABLE NHANVIEN

(3) DROP TABLE PHONGBAN

34
TRƢỜNG ĐẠI HỌC SƢ PHẠM TP HCM
KHOA TOÁN – TIN
280, An Dương Vương, Q5, Tp HCM ĐT: (08).8352020 - 8352021

Truy vấn dữ liệu


Lê Đức Long
Email: longld@math.hcmup.edu.vn XEM CHAPTER 5 – SIMPLE QUERIES
Website: http://www.2learner.edu.vn Ở SQL SERVER 2000-A BEGINNER’S GUIDE
Khai thác CSDL bằng SQL

BOOK INSERT
INSERTINTO
INTOBOOK
BOOK
Title Author Publisher Year VALUES('Fund
VALUES('Fundof...','..')
of...','..')
Intro to DB Systems Date Addison-Wesley 1986
Fund. of DB Systems Elmasri Addison-Wesley 1989 DELETE
DELETEFROM
FROMBOOKBOOK
WHERE TITLE='London
WHERE TITLE='London
London Fields Amis Penguin 1989
Fields'
Fields'
100 years of solitude Marquez Picador 1982
The history man Bradbury Arrow Books 1977 UPDATE
UPDATEBOOK
BOOK
SET YEAR='1975'
SET YEAR='1975'
WHERE
WHERETITLE=The
TITLE=The
history
historyman'
man'

Title Author
Fund. of DB lmasri SELECT
SELECTTITLE,
TITLE,AUTHOR
AUTHOR
Systems FROM BOOK
FROM BOOK
London Amis WHERE
WHEREYEAR='1989'
YEAR='1989'
Fields

36
Truy vấn dữ liệu

Là ngôn ngữ rút trích dữ liệu thỏa một


số điều kiện nào đó
Dựa trên Phép toán ĐSQH  Một số bổ sung

Lệnh cơ bản để rút trích thông tin từ


CSDL: SELECT
Lệnh SELECT không hoàn toàn giống
phép chọn/chiếu trong ĐSQH:
 Cho phép 1 bảng có nhiều dòng trùng nhau
 Bảng kết quả truy vấn là tập các bộ (đa bộ - tuples)

37
CÚ PHÁP CÂU LỆNH SELECT

Trả lời câu truy vấn khai thác CSDL như sau:
“LIỆT KÊ DANH SÁCH CÁC CỘT ĐƯỢC CHỌN TỪ DANH
SÁCH CÁC BẢNG THEO ĐIỀU KIỆN CHỌN”

SELECT <Danh sách các cột đƣợc chọn>


FROM < Danh sách các bảng>
WHERE <Điều kiện chọn>
GROUP BY <Danh sách cột cần nhóm>
HAVING < Điều kiện nhóm>
ORDER BY < Danh sách cột cần sắp xếp>

38
Câu truy vấn cơ bản
Gồm 3 mệnh đề
SELECT <danh sách các cột> Gần giống phép chiếu

FROM <danh sách các bảng> Tƣơng ứng phép tích


WHERE <điều kiện> Tƣơng ứng phép chọ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:  ,  ,  ,  ,  , , LIKE và BETWEEN
39
Truy vấn cơ bản (tt)

Tƣơng ứng giữa SQL và ĐSQH



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
L (C (R))
WHERE C
40
Ví dụ Liệt kê các nhân viên ở phòng Nghiên
cứu (MÃ PHÒNG = „NC‟)

Lấy tất cả các cột của


quan hệ kết quả
SELECT *
FROM NHANVIEN
Gía trị chuỗi phải để
WHERE PHONG=‘NC’ trong nháy đơn ‘

MANV HONV TENLOT TENNV NGSINH PHAI DCHI MA_NQL PHONG MLUONG

002 Nguyen Thanh Tung 1955-01-09 Nam 731 Tran Hung Dao,Q1,Tp HCM 001 NC 2500000.0

004 Dinh Ba Tien 1968-01-09 Nam 638 Nguyen Van Cu,Q5,Tp HCM 002 NC 2200000.0

006 Nguyen Manh Hung 1973-09-15 Nam 978 Ba Ria,Vung Tau 002 NC 2000000.0

007 Tran Thanh Tam 1975-07-31 Nu 543 Mai Thi Luu,Q1,TpHCM 002 NC 2200000.0

008 Tran Hong Van 1976-07-04 Nu 980 Le HongPhong,Q10,HCM 004 NC 1800000.0

MANV,HONV,TENLOT,TENNV,NGSINH,DCHI,PHAI,LUONG,MA_NQL,PHONG (PHONG=„NC‟ (NHANVIEN))


HAY PHONG=„NC‟ (NHANVIEN)
41
Liệt kê manv, honv, tenlot, tennv của các nhân
Ví dụ viên nam ở phòng Nghiên cứu (PHONG = „NC‟)

SELECT MANV, HONV, TENLOT, TENNV


Sử dụng nháy đơn nếu là chuỗi
FROM NHANVIEN
WHERE PHONG=‘NC’ AND PHAI=‘Nam’

SỬ DỤNG THÊM CÁC TOÁN TỬ LUẬN LÝ AND, OR, NOT, LIKE, BETWEEN

MANV HONV TENLOT TENNV


002 Nguyen Thanh Tung
004 Dinh Ba Tien
006 Nguyen Manh Hung

42
Đặt tên/bí danh khi truy vấn

Có thể có hoặc Tên bí danh - Alias


không

SELECT MANV, HONV AS HONV, TENLOT AS „TEN LOT‟, TENNV AS “TÊN ”


FROM NHANVIEN
WHERE PHONG=„NC‟ AND PHAI=„Nam‟
Sự khác nhau khi đặt tên có thêm
nháy đơn/nháy kép và không có

MANV HONV TEN LOT TÊN


002 Nguyen Thanh Tung
004 Dinh Ba Tien
006 Nguyen Manh Hung

ĐẶT BÍ DANH CHO QUAN HỆ CŨNG TƯƠNG TỰ - NHANVIEN AS NV

43
Nối các thuộc tính

Ví dụ Liệt kê manv, họ tên của các nhân viên nam ở


phòng Nghiên cứu (PHONG = „NC‟)

SỬ DỤNG TOÁN TỬ CỘNG CHUỖI + (CHỈ DÙNG CHO THUỘC TÍNH KIỂU CHUỖI)

SELECT MANV, HONV + ‘ ‘ + TENLOT + ‘ ‘ + TENNV AS ‘HỌ TÊN’


FROM NHANVIEN
WHERE PHONG=‘NC’ AND PHAI=‘Nam’

MANV HỌ TÊN
002 Nguyen Thanh Tung
004 Dinh Ba Tien
006 Nguyen Manh Hung

44
Mở rộng thuộc tính hiển thị

Ví dụ Liệt kê manv, lương tăng thêm 10% của các nhân


viên nam ở phòng Nghiên cứu (PHONG = „NC‟)

Mở rộng với các biểu thức số học

SELECT MANV, LUONG*1.1 AS ‘LUONG 10%’


FROM NHANVIEN
WHERE PHG=5 AND PHAI=‘Nam’

MANV LUONG 10%


002 2750000.0
004 2420000.0
006 2200000.0

45
Sử dụng toán tử Between

Ví dụ Liệt kê manv, tennv của các nhân viên có mức lương từ 2.000.000
đến 3.000.000
Lƣơng nhân viên từ 2000000 đến 3000000

SELECT MANV, TENNV


FROM NHANVIEN
WHERE MLUONG>=2000000 AND MLUONG<=3000000

MANV TENNV
001 Quyen HAY CÓ THỂ VIẾT LẠI SỬ DỤNG TOÁN TỬ BETWEEN
002 Tung
SELECT MANV, TENNV
003 Nhan
004 Tien FROM NHANVIEN
005 Vu WHERE MLUONG BETWEEN 2000000 AND 3000000
006 Hung
007 Tam
Chú ý Between lấy Từ đâu ….. Đến đâu

46
Sử dụng toán tử Between

Ví dụ Liệt kê manv, tennv của các nhân viên có mức lương KHÔNG
từ 2.000.000 đến 3.000.000

TOÁN TỬ NOT BETWEEN

SELECT MANV, TENNV


FROM NHANVIEN
WHERE MLUONG NOT BETWEEN 2000000 AND 3000000

MANV TENNV
008 Van TƢƠNG ĐƢƠNG VỚI CÁCH VIẾT:

SELECT MANV, TENNV


FROM NHANVIEN
WHERE MLUONG < 2000000 OR MLUONG > 3000000

47
Sử dụng toán tử In
Ví dụ Liệt kê manv, tennv của các nhân viên có mức lương là
2.500.000 hoặc 3.000.000

Hoặc 2500000 hoặc 3000000


SELECT MANV, TENNV
FROM NHANVIEN
WHERE MLUONG = 2500000 OR MLUONG =3000000
MANV TENNV
001 Quyen TƢƠNG ĐƢƠNG VỚI CÁCH VIẾT:
002 Tung
SELECT MANV, TENNV
003 Nhan Toán tử tập hợp
FROM NHANVIEN
WHERE MLUONG IN (2500000, 3000000)

Thuộc các giá trị 2500000 hoặc 3000000

48
Sử dụng toán tử Distinct
Ví dụ Liệt kê các mức lương của nhân viên ở phòng
Nghiên cứu (PHONG = „NC‟)
SELECT MLUONG - Loại bỏ sẽ tốn chi phí thời gian
- Người dùng muốn thấy
MLUONG FROM NHANVIEN
- Khi dùng hàm kết hợp nếu tự
2500000.0 WHERE PHONG=‘NC’ động loại bỏ có thể cho kết quả sai
2200000.0
2000000.0 SQL HIỂN THỊ CÁC BỘ TRÙNG
2200000.0 NHAU TRONG KẾT QUẢ TRUY VẤN
1800000.0

Loại bỏ các dòng trùng nhau

MLUONG
SELECT DISTINCT MLUONG -Kết quả cho thấy
1800000.0
đã được sắp thứ tự
FROM NHANVIEN 2000000.0 một cách phân biệt
WHERE PHONG=‘NC’ 2200000.0
2500000.0

49
Sử dụng toán tử Like
TOÁN TỬ LIKE – so sánh chuỗi tương đối

Kí tự gạch nối dưới _ : ký tự đại diện cho 1 ký tự tại vị trí dấu

Kí tự phần trăm % : ký tự đại diện cho 1 nhóm ký tự tại vị trí dấu

Liệt kê manv, tennv của nhân viên có tên bắt đầu


bằng vần “Va” SELECT MANV, TENNV

MANV TENNV FROM NHANVIEN


008 Van WHERE TENNV LIKE ‘Va_’

Liệt kê manv, tennv của nhân viên có tên bắt đầu


bằng kí tự “T”
SELECT MANV, TENNV
MANV TENNV 1 Ký tự bất kỳ
FROM NHANVIEN
002 Tung
004 Tien
WHERE TENNV LIKE ‘T%’
007 Tam Chuỗi bất kỳ tối đa 255 ký tự

(tại vị trí đó trở đi)


50
Sử dụng toán tử Like
TOÁN TỬ LIKE – so sánh chuỗi tương đối

Kí tự gạch nối dưới _ : ký tự đại diện cho 1 ký tự tại vị trí dấu

Kí tự phần trăm % : ký tự đại diện cho 1 nhóm ký tự tại vị trí dấu


Liệt kê manv, tennv của nhân viên có tên chứa vần “u”hoặc vần “o”
MANV TENNV SELECT MANV, TENNV
001 Quyen FROM NHANVIEN
002 Tung
WHERE TENNV LIKE ‘%u%’ OR TENNV LIKE ‘%o%’
005 Vu
006 Hung Liệt kê manv, tennv của nhân viên có tên KHÔNG
bắt đầu bằng vần “T”
MANV TENNV
TOÁN TỬ NOT LIKE
001 Quyen
SELECT MANV, TENNV
003 Nhan
005 Vu FROM NHANVIEN
006 Hung WHERE TENNV NOT LIKE ‘T%’
008 Van
51
Sử dụng toán tử Like
TOÁN TỬ LIKE – so sánh chuỗi tương đối
MANV TENNV
Liệt kê manv, tennv của nhân viên có địa chỉ ở TP.HCM
002 Tung
SELECT MANV, TENNV
003 Nhan
004 Tien FROM NHANVIEN
005 Vu WHERE DCHI LIKE ‘%TP HCM%’
007 Tam
008 Van
Toán tử LIKE đƣợc sử dụng kèm với nhiều kí tự
(Wildcard Character) nhƣ: %, _, [ ], [^] và từ khóa
Escape

52
Chọn tab Search, Gọi từ menu Start
gõ từ cầm tra cứu Start/All Programs/Microsoft SQL Server/Book Online
Gọi trực tiếp từ ứng dụng
Bấm F1
53
Search với từ khóa Escape, chọn topic LIKE

Gọi từ menu Start


Start/All Programs/Microsoft SQL Server/Book Online
Gọi trực tiếp từ ứng dụng
Bấm F1
54
KẾT QUẢ TÌM KIẾM – TRA CỨU HIỂN THỊ …

Wildcard character Description Example

% Any string of zero or more WHERE title LIKE '%computer%' finds all
characters. book titles with the word 'computer' anywhere in
the book title.

_ (underscore) Any single character. WHERE au_fname LIKE '_ean' finds all four-
letter first names that end with ean (Dean,
Sean, and so on).

[] Any single character within WHERE au_lname LIKE '[C-P]arsen' finds


the specified range ([a-f]) or author last names ending with arsen and
set ([abcdef]). beginning with any single character between C
and P, for example Carsen, Larsen, Karsen,
and so on.

[^] Any single character not WHERE au_lname LIKE 'de[^l]%' all author
within the specified range last names beginning with de and where the
([^a-f]) or set ([^abcdef]). following letter is not l.

Cú pháp
Thuộc tính so trùng [ NOT ] LIKE giá trị [ ESCAPE kí tự ]

55
Thể hiện ngày giờ
Các dạng thể hiện trong SQL

„1955-12-08‟ YYYY-MM-DD ‟17:30:00‟ HH:MI:SS


‟12/08/1955‟ MM/DD/YYYY ‟05:30PM‟ HH:MIPM (OR AM)
thể hiện ngày giờ „Dec 8, 1955‟ hay „Dec, 8 1955‟
trong cặp nháy đơn
„1955-12-08 17:30:00‟

Liệt kê manv, ngsinh của nhân viên có


ngày sinh sau ngày 1/1/1970 SELECT MANV,NGSINH
FROM NHANVIEN
MANV NGSINH WHERE NGSINH > 'Jan 1, 1970'
005 1972-07-19 00:00:00.000
006 1973-09-15 00:00:00.000
hay
007 1975-07-31 00:00:00.000 SELECT MANV,NGSINH
FROM NHANVIEN
008 1976-07-04 00:00:00.000
WHERE NGSINH > '1970-01-01'
hay SELECT MANV,NGSINH
FROM NHANVIEN
WHERE NGSINH > '1970-01-01 00:00:00'
56
Thể hiện ngày giờ
Ví dụ Liệt kê manv, tennv của các nhân viên có ngày
sinh từ ngày 1/1/1955 đến ngày 31/12/1966
MANV TENNV
SELECT MANV, TENNV
001 Quyen
FROM NHANVIEN
002 Tung
003 Nhan WHERE NGSINH BETWEEN ‘1955-01-01’ AND ‘1966-12-31’

MANV TENNV
001 Quyen
Liệt kê manv, tennv của các nhân viên có ngày 002 Tung
sinh từ trước ngày 31/12/1960 và đến sau ngày 003 Nhan
1/1/1975
007 Tam
SELECT MANV, TENNV
008 Van
FROM NHANVIEN
WHERE NGSINH <= ‘Dec, 31 1960’ OR NGSINH >=‘Jan, 1 1975’

57
Sử dụng hàm Datetime của SQL
Tên hàm Cú pháp
DATEDIFF DATEDIFF ( datepart , startdate , enddate )
DATEPART DATEPART ( datepart , date )
DAY DAY ( date )
GETDATE GETDATE ( )
MONTH MONTH ( date )
YEAR YEAR ( date )

Tên hàm Ý nghĩa Ví dụ minh họa


GETDATE( ) Returns the current date in SELECT MaHD FROM HOADON
or DATE( ) datetime format. WHERE NgayHD = GETDATE()
Calculates an interval between SELECT * FROM NHANVIEN WHERE
DATEDIFF( )
two dates. DATEDIFF(year, NGSINH, GETDATE()) > 5
Returns the specified portion
of a date or datetime column, SELECT DATEPART(year, NGSINH)
DATEPART( )
including the day, month, or FROM NHANVIEN
year.

(Sử dụng Book online, Search với từ khóa Date and Time Functions) 58
Sử dụng hàm Datetime của SQL
The table lists dateparts and abbreviations recognized by Microsoft® SQL Server™.
SELECT GETDATE() AS 'Current Date'
Here is the result set: Datepart Abbreviations
Current Date ---------- 2006-12-13 14:56:07.117 Year yy, yyyy
SELECT DATEPART(month, GETDATE()) AS 'Month Number'
Here is the result set: quarter qq, q
Month Number -------- 12
This example assumes the date May 29. Month mm, m
SELECT DATEPART(month, GETDATE())
dayofyear dy, y
Here is the result set:
----------- 5 (1 row(s) affected) Day dd, d
In this example, the date is specified as a number. Notice that SQL
Server interprets 0 as January 1, 1900. Week wk, ww
SELECT DATEPART(m, 0), DATEPART(d, 0), DATEPART(yy, 0)
Here is the result set: Hour hh
----- ------ --- 1 1 1900 minute mi, n
VD: Liệt kê manv, tennv của NV có tuổi từ 40
second ss, s
trở lên
SELECT MANV, TENNV millisecond ms
FROM NHANVIEN
where year(getdate())-year(ngsinh)>=40 SELECT MANV, TENNV
FROM NHANVIEN
SELECT MANV, TENNV where datediff(yy, ngsinh, getdate()) >=40
FROM NHANVIEN
where datepart(yy,getdate())-datepart(yy, ngsinh)>=40 59
Sử dụng giá trị Null

 Sử dụng trong trƣờng hợp


• Không biết giá trị (value unknown)
• Giá trị không thể áp dụng (value inapplicable)
• Không tồn tại giá trị (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
• Tương tự cho phép toán -, *, /
 Những biểu thức so sánh có liên quan đến giá trị
NULL sẽ cho ra kết quả là NULL (UNKNOWN)
• x = 3 cho ra kết quả là UNKNOWN (x có giá trị NULL)
• Tương tự cho phép toán >, <, <>, not, and, or
Xem tài liệu SQL Server 2000: A Beginer’s Guide, pp 74

60
Sử dụng giá trị Null
LIỆT KÊ CÁC NHÂN VIÊN KHÔNG CÓ NGƢỜI QUẢN LÝ

MANV TENNV SELECT MANV, TENNV


001 Quyen FROM NHANVIEN
WHERE MA_NQL IS NULL

MANV TENNV
002 Tung
003 Nhan
004 Tien
005 Vu
LIỆT KÊ CÁC NHÂN VIÊN CÓ NGƢỜI QUẢN LÝ
006 Hung
007 Tam SELECT MANV, TENNV
008 Van FROM NHANVIEN
WHERE MA_NQL IS NOT NULL

61
CÁC ĐIỂM LƢU Ý

SELECT MANV, TENNV Biểu thức luận lý


Sử dụng 2 bảng
nên phải sử dụng FROM NHANVIEN, PHONGBAN
phép kết WHERE TENPHG=‘Nghien cuu’ AND PHONG=MAPHG

TRUE TRUE

Các toán tử toán học


Các toán tử toán học bao gồm các phép toán +, -, *, / và các
phép toán so sánh >, < , <> , >=, <=, …
Các toán tử logic
Các toán tử logic là các toán tử đƣợc dùng trong biểu thức điều
kiện: AND, OR, NOT,..
Các toán tử khác
LIKE, EXISTS, ANY/SOME, ALL, IN

62
CÁC ĐIỂM LƢU Ý (tt)

ĐỘ ƯU TIÊN CÁC TOÁN TỬ

Ví dụ Liệt kê manv, tennv của các nhân viên làm việc ở
các phòng ban có tên Nghiên cứu hoặc Quản lý
SELECT MANV, TENNV
FROM NHANVIEN, PHONGBAN
WHERE (TENPHG=‘Nghien cuu’ OR TENPHG=‘Quan ly’) AND PHONG=MAPHG

MANV TENNV

001 Quyen
002 Tung
004 Tien
006 Hung (I) (II)
007 Tam
008 Van ƯU TIÊN TRONG NGOẶC SẼ THỰC HIỆN TRƯỚC

63
CÁC ĐIỂM LƢU Ý (tt)

Không sử dụng mệnh đề WHERE  PHÉP TÍCH DESCARTES

MANV PHONG MAPHG


001 QL DH
002 NC DH
003 DH DH
004 NC DH Tính tích Descartes của hai bảng
005 DH DH
NHANVIEN và PHONGBAN và chiếu
trên hai cột MANV, PHONG, MAPHG


006 NC DH
007 NC DH
MANV, PNONG, MAPHG(NHANVIEN X PHONGBAN)
008 NC DH
001 QL NC
002 NC NC
003 DH NC
…. …. ….
SELECT MANV, PHONG, MAPHG
FROM NHANVIEN, PHONGBAN
64
CÁC ĐIỂM LƢU Ý (tt)
TRƯỜNG HỢP CÁC THUỘC TÍNH Ở CÁC QUAN HỆ KHÁC NHAU BỊ TRÙNG TÊN

Tên bí danh
SỬ DỤNG TÊN BÍ DANH

SELECT TENPHG, DIADIEM SELECT TENPHG, DIADIEM

FROM PHONGBAN, DIADIEM_PHG FROM PHONGBAN AS PB, DIADIEM_PHG AS DD

WHERE MAPHG=MAPHG WHERE PB.MAPHG=DD.MAPHG

SELECT TENNV, NGSINH, TENTN, NGSINH Tên bí danh


FROM NHANVIEN, THANNHAN Server: Msg 209, Level 16, State 1, Line 1
Ambiguous column name 'MAPHG'.
WHERE MANV=MA_NVIEN Server: Msg 209, Level 16, State 1, Line 1
Ambiguous column name 'MAPHG'.

SELECT TENNV, NV.NGSINH, TENTN, TN.NGSINH


FROM NHANVIEN NV, THANNHAN TN
WHERE MANV=MA_NVIEN
65
Sử dụng mệnh đề ORDER BY

 Dùng để hiển thị kết quả câu truy vấn theo


một thứ tự nào đó (sắp xếp kết quả hiển thị)
 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: sắp xếp tăng (mặc định)


 DESC: sắp xếp giảm

66
Mệnh đề ORDER BY (tt)
MANV MADA
Ví dụ
008 DT002
Liệt kê manv, mada mà nhân viên đó tham gia đề án
008 TH001 theo thứ tự manv giảm dần, nếu trùng manv thì liệt
007 TH001 kê theo thứ tự tăng dần
007 TH002
006 DT001 SELECT MANV, MADA
004 DT001
FROM PHANCONG
004 DT002
ORDER BY MANV DESC, MADA
003 TH001
002 DT001
002 DT002
MADA tăng dần
002 TH001
002 TH002
001 TH001
001 TH002 MANV giảm dần

67
Mệnh đề ORDER BY (tt)

Ví dụ
Liệt kê manv, họ tên nhân viên theo thứ tự nữ trước nam
sau, nếu trùng giới tính thì liệt kê theo thứ tự manv tăng
dần

MANV HO TEN NV
SELECT MANV, HONV + ' ‘ + TENLOT+' ‘ +
001 Vuong Ngoc Quyen TENNV AS "HỌ TÊN NV"
003 Le Thi Nhan
FROM NHANVIEN
005 Bui Thuy Vu
ORDER BY PHAI DESC, MANV
007 Tran Thanh Tam

008 Tran Hong Van


PHAI giảm dần
002 Nguyen Thanh Tung

004 Dinh Ba Tien

006 Nguyen Manh Hung


MANV tăng dần
68
Kết hợp mệnh đề TOP n
Ví dụ
Liệt kê 3 nhân viên (manv) có tham gia đề án „TH001‟ với
thời gian được phân công nhiều nhất

Ý tưởng:
Chọn các nhân viên tham gia đề án „TH001‟
 Sắp xếp theo thứ tự giảm dần
 Lấy ra 3 nhân viên đầu tiên

SELECT TOP 3 MANV


FROM PHANCONG
WHERE MADA = ‘TH001’
ORDER BY THOIGIAN DESC

Xem mệnh đề TOP n ở trang 570-572 trong sách SQL Server 2000:
A Beginner’s Guide
Edited by Duc-Long, Le - 2009 69
TRƢỜNG ĐẠI HỌC SƢ PHẠM TP HCM
KHOA TOÁN – TIN
280, An Dương Vương, Q5, Tp HCM ĐT: (08).8352020 - 8352021

Truy vấn dữ liệu


Lê Đức Long
Email: longld@math.hcmup.edu.vn XEM CHAPTER 5 – SIMPLE QUERIES
Website: http://www.2learner.edu.vn Ở SQL SERVER 2000-A BEGINNER’S GUIDE
Câu truy vấn trên nhiều bảng

Phân tích tƣơng tự nhƣ trong ĐSQH


Sau đó ánh xạ tự ĐSQH  SQL
Lƣu ý ở mệnh đề
 From: chỉ ra các bảng cần liên kết
 Where: chỉ ra thêm điều kiện kết

SELECT MASV,TENSV,SVIEN.MAKHOA,TENKHOA
FROM SVIEN,KHOA
WHERE SVIEN.MAKHOA='CNTT' AND SVIEN.MAKHOA=KHOA.MAKHOA

71
Tìm họ tên nhân viên và tên phòng ban nhân
Ví dụ 1 viên đó trực thuộc có mức lương từ 2.000.000
đến 3.000.000
HONV,TENLOT, TENNV, TENPHG,MLUONG (MLUONG  2000000  MLUONG ≤ 3000000
(NHANVIEN PHONG = MAPHG PHONGBAN ))
SELECT HONV,TENLOT,TENNV,TENPHG,MLUONG
FROM NHANVIEN,PHONGBAN
WHERE PHONG=MAPHG
AND MLUONG >= 2000000 AND MLUONG <=3000000
SELECT HONV,TENLOT,TENNV,TENPHG,MLUONG
FROM NHANVIEN,PHONGBAN
WHERE PHONG=MAPHG
AND MLUONG BETWEEN 2000000 AND 3000000
HONV TENLOT TENNV TENPHG MLUONG
Vuong Ngoc Quyen Quan Ly 3000000.0
Nguyen Thanh Tung Nghien Cuu 2500000.0
Le Thi Nhan Dieu Hanh 2500000.0
Dinh Ba Tien Nghien Cuu 2200000.0
Bui Thuy Vu Dieu Hanh 2200000.0
Nguyen Manh Hung Nghien Cuu 2000000.0
Tran Thanh Tam Nghien Cuu 2200000.0
72
Lập danh sách các thân nhân dưới 18 tuổi
Ví dụ 2 của các nhân viên.

R1  NHANVIEN X THANNHAN
R2  YEAR(NOW) – YEAR(THANNHAN.NGSINH) < 18 ^ NHANVIEN.MANV = THANNHAN.MANV (R1)
MANV, TENNV, TENTN, THANNHAN.PHAI, THANNHAN.NGSINH, QUANHE (R2)
(NOW kí hiệu cho hàm lấy giá trị ngày tháng hiện hành)

SELECT NV.MANV,TENNV, TENTN, TN.PHAI, TN.NGSINH, QUANHE


FROM NHANVIEN NV,THANNHAN TN
WHERE NV.MANV =TN.MANV AND YEAR(GETDATE())-YEAR(TN.NGSINH)<18

Server: Msg 209, Level 16, State 1, Line 1


Ambiguous column name 'MANV'.
Server: Msg 209, Level 16, State 1, Line 1
Bắt buộc nếu kô sẽ báo lỗi !!!
Ambiguous column name 'NGSINH'.
MANV TENNV TENTN PHAI NGSINH QUANHE
003 Nhan Tran Minh Tien Nam 1990-11-12 Con
003 Nhan Tran Ngoc Linh Nu 1993-10-03 Con
005 Vu Nguyen Manh Tam Nam 2003-01-13 Con

73
Với mỗi phòng ban, cho biết tên phòng ban và
Ví dụ 3 địa điểm phòng

 TENPHG, DIADIEM (PHONGBAN PHONGBAN.MAPHG = DIADIEM_PHG.MAPHG DIADIEM_PHG ))

SELECT TENPHG,DIADIEM
FROM DIADIEM_PHG DD,PHONGBAN PB
WHERE DD.MAPHG=PB.MAPHG

TENPHG DIADIEM
Dieu Hanh HANOI
Dieu Hanh NHATRANG
Dieu Hanh TPHCM
Nghien Cuu HANOI
Nghien Cuu TPHCM
Quan Ly TPHCM

74
Tìm tên những người trưởng phòng của từng
Ví dụ 4 phòng ban

 HONV, TENLOT, TENNV, TENPHG(PHONGBAN TRPHG = MANVNHANVIEN))

SELECT TENPHG,HONV+' '+TENLOT+' '+TENNV AS TENTP


FROM NHANVIEN,PHONGBAN
WHERE MANV=TRPHG

TENPHG TENTP
Dieu Hanh Le Thi Nhan
Nghien Cuu Nguyen Thanh Tung
Quan Ly Vuong Ngoc Quyen

75
Ví dụ 5 Tìm TENDA, MADA, DDIEM_DA, PHONG,
TENPHG, MAPHG, TRPHG, NGNC

 TENDA, MADA, DDIEM_DA, PHONG, TENPHG, MAPHG, TRPHG, NGNC(PHONGBAN MAPHG = PHONGDEAN ))

SELECT TENDA,MADA,DDIEM_DA,MAPHG,TENPHG,TRPHG,NGNC
FROM DEAN,PHONGBAN
WHERE PHONG=MAPHG

TENDA MADA DDIEM_DA MAPHG TENPHG TRPHG NGNC


DAO TAO 1 DT001 NHATRANG DH Dieu Hanh 003 2002-10-10
DAO TAO 2 DT002 HANOI DH Dieu Hanh 003 2002-10-10
TIN HOC HOA 1 TH001 HANOI NC Nghien Cuu 002 2002-03-15
TIN HOC HOA 2 TH002 TPHCM NC Nghien Cuu 002 2002-03-15

76
Tìm tên và địa chỉ của tất cả các nhân viên
Ví dụ 6 của phòng "Nghien cuu".

 TENNV,DCHI ( TENPHG=”Nghien cuu”(PHONGBAN MAPHG=PHONGNHANVIEN) )


SELECT TENNV,DCHI
FROM PHONGBAN,NHANVIEN
WHERE PHONG = MAPHG AND TENPHG='Nghien cuu'

TENNV DCHI
Tung 731 Tran Hung Dao,Q1,TPHCM
Tien 638 Nguyen Van Cu,Q5,TPHCM
Hung 978 Ba Ria,VungTau
Tam 543 Mai Thi Luu,Q3,TPHCM
Van 980 LeHong Phong,Q10,TPHCM

77
Tìm tên những nữ nhân viên và tên người
Ví dụ 7 thân của họ

 TENNV,TENTN(  PHAI=”Nu”(NHANVIEN MANVTHANNHAN) )

SELECT TENNV,TENTN
FROM THANNHAN TN,NHANVIEN NV
WHERE TN.MANV=NV.MANV AND NV.PHAI='Nu'

TENNV TENTN
Quyen Le Nhat Minh
Nhan Tran Minh Tien
Nhan Tran Ngoc Linh
Nhan Tran Minh Long

78
TRƢỜNG ĐẠI HỌC SƢ PHẠM TP HCM
KHOA TOÁN – TIN
280, An Dương Vương, Q5, Tp HCM ĐT: (08).8352020 - 8352021

Cám ơn đã theo dõi …

Lê Đức Long
Email: longld@math.hcmup.edu.vn
Website: http://www.2learner.edu.vn
79

You might also like