You are on page 1of 38

2.3.

Ngôn ngữ thao tác dữ liệu (DML)

Câu lệnh Select


• Dùng để truy xuất dữ liệu từ các dòng hay các cột của
một hay nhiều bảng, khung nhìn.
• Có thể sử dụng để thực hiện phép chọn: tức là truy xuất
một tập con các dòng trong một hay nhiều bảng.
• Có thể sử dụng để thực hiện phép chiếu: tức là truy xuất
môt tập con các cột trong một hay nhiều bảng
• Có thể thực hiện phép nối: tức là liên kết các dòng trong
hai hay nhiều bảng để truy xuất dữ liệu.
• Có thể thực hiện các thao tác thống kê dữ liệu khác.
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Công thức tổng quát


SELECT [ALL | DISTINCT][TOP n] danh_sách_chọn
[INTO tên_bảng_mới]
FROM danh_sách_bảng/khung_nhìn
[WHERE điều_kiện]
[GROUP BY danh_sách_cột]
[HAVING điều_kiện]
[ORDER BY cột_sắp_xếp]
[COMPUTE danh_sách_hàm_gộp [BY danh_sách_cột]]
Lưu ý
Các thành phần trong câu lệnh SELECT nếu được sử dụng phải tuân theo đúng
thứ tự như trong cú pháp. Nếu không, câu lệnh sẽ được xem là không hợp lệ. „
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Câu lệnh Select


a. Chọn tất cả các cột trong bảng: sử dụng ký tự *
Ví dụ: hiện thị toàn bộ danh sách sinh viên
SELECT * FROM SINHVIEN
Trong trường hợp cần chỉ định cụ thể các cột cần hiển thị
Ví dụ: Lấy ra MASV, HOSV, TEN từ bảng
SINHVIEN
SELECT MASV, HOSV, TEN
FROM SINHVIEN
Lưu ý: Nếu truy vấn được thực hiện trên nhiều
bảng
Tên_bảng.tên_trường
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Câu lệnh Select


‰ c. Thay đổi tiêu đề cột:
tên_cột AS ten_cột_mơi
Ví dụ: Lấy ra MASV, HOSV, TENSV và đặt lại cột
TENSV thành TEN
SELECT MASV, HOSV, TENSV AS TEN
FROM SINHVIEN
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Câu lệnh Select


‰d. Sử dụng cấu trúc CASE trong danh
sách chọn: Cấu trúc CASE được sử dụng trong danh
sách chọn nhằm thay đổi kết quả của truy vấn tuỳ thuộc
vào các trường hợp khác nhau.
Cấu trúc này có cú pháp như sau:
CASE biểu_thức
WHEN biểu_thức_kiểm_tra THEN kết_quả
[ ... ]
[ELSE kết_quả_của_else]
END
hoặc:
CASE WHEN điều_kiện THEN kết_quả
[ ... ]
[ELSE kết_quả_của_else]
END
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Câu lệnh Select


Ví dụ: Để hiển thị mã, họ tên và giới tính (nam
hoặc nữ) của các sinh viên, ta sử dụng câu lệnh
SELECT masv,hoSV,tenSV,
CASE PHAI
WHEN 'Nam' THEN 1
ELSE 2
END AS gioitinh
FROM sinhvien
hoặc:
SELECT masv,hoSV,tenSV,
CASE
WHEN PHAI= 'Nam' THEN 1
ELSE 2
END AS gioitinh
FROM sinhvien
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Câu lệnh Select


e. Hằng và biểu thức trong danh sách chọn:
Ngoài danh sách trường, trong danh sách chọn
của câu lệnh SELECT còn có thể sử dụng các biểu
thức

Ví dụ: câu lệnh dưới đây cho biết tên và số tiết


của các môn học

SELECT TENMH,SOTIET*15 AS ST
FROM monhoc
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Câu lệnh Select


f. Loại bỏ các dòng dữ liệu trùng nhau
Sử dụng từ khóa DISTINCT ngay sau SELECT.

SELECT SOTIET
FROM MONHOC

SELECT DISTINCT SOTIET


FROM MONHOC
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Câu lệnh Select


g. Giới hạn số lượng dòng trong kết quả truy vấn
SELECT TOP N
Ví dụ 1: hiển thị họ tên và ngày sinh của 5 sinh viên
đầu tiên trong danh sách
SELECT TOP 5 hoSV,tenSV, NS
FROM sinhvien
Ví dụ 2: hiển thị họ tên và ngày sinh của 10% số
lượng sinh viên hiện có trong bảng SINHVIEN
SELECT TOP 10 PERCENT hoSV,tenSV,NS
FROM SINHVIEN
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Mệnh đề WHERE
Mệnh đề WHERE trong câu lệnh SELECT được sử dụng
nhằm xác định các điều kiện đối với việc truy xuất dữ liệu.
SELECT <ds các cột>
FROM <tên bảng>
WHERE <ds điều kiện>
Ví dụ: Hiện thị danh sách tất cả các sinhvien thuộc khoa công
nghệ thông tin
SELECT *
FROM SINHVIEN
WHERE MAKHOA=‘CNTT’
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Mệnh đề WHERE
Các phép toán so sánh: <,>,>=,<=,<>;Logic:AND,OR,NOT

Ví dụ 1: Lấy ra MASV,HOSV,TENSV của sinh viên có năm sinh


1985 và phái Nam

SELECT MASV,HOSV,TENSV
FROM SINHVIEN
WHERE YEAR(NS)=1985 AND PHAI='Nam'
Ví dụ 2: Danh sách các MASV,HOSV,TENSV, NS của những
sinh viên sinh ra trong khoảng từ năm 1983 đến 1986?
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Mệnh đề WHERE
BETWEEN..AND VÀ NOT BETWEEN…AND
Ví dụ 1: Lấy ra MASV, MAMH,DIEM có điểm thi nằm
khoảng 7 đến 9
SELECT MASV, MAMH,DIEM
FROM KETQUA
WHERE DIEM BETWEEN 7 AND 9
Ví dụ 2: Lấy ra MASV, MAMH,DIEM có điểm thi nằm ngoài
khoảng 5 đến 10
SELECT MASV, MAMH,DIEM
FROM KETQUA
WHERE DIEM NOT BETWEEN 5 AND 10
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Mệnh đề WHERE
Toán tử LIKE và các ký tự đại diện: Từ khoá LIKE (NOT
LIKE) sử dụng trong câu lệnh SELECT nhằm mô tả khuôn
dạng của dữ liệu cần tìm kiếm.
Chúng thường được kết hợp với các ký tự đại diện sau:
Ký tự đại diện ý nghĩa
% Chuỗi ký tự bất kỳ gồm không hoặc nhiều ký tự
_ Ký tự đơn bất kỳ
[ ] Ký tự đơn bất kỳ trong giới hạn được chỉ định
(ví dụ [a-f]) hay một tập (ví dụ [abcdef])
[^] Ký tự đơn bất kỳ không nằm trong giới hạn
được chỉ định ( ví dụ [^a-f] hay một tập (ví dụ [^abcdef])
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Mệnh đề WHERE
Toán tử LIKE _ (1 kí tự ), % (chuỗi kí tự bất kì)

Ví dụ 1: Hiển thị những sinhvien tên bắt đầu chữ ‘H’

SELECT *
FROM SINHVIEN
WHERE TENSV LIKE ‘H%'

Ví dụ 2: Đưa ra MASV,HOSV, TENSV sinh viên có tên ‘La_’


(ví dụ Lam, Lan)
Select MASV,HOSV, TENSV
From SINHVIEN
Where TENSV like 'La_'
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Mệnh đề WHERE
Toán tử NOT LIKE

Ví dụ 1: Hiện thị những Sinh vien có tên không bắt


đầu chữ ‘H’

SELECT MASV, HOSV, TENSV


FROM SINHVIEN
WHERE TENSV NOT LIKE ‘H%’
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Mệnh đề WHERE
IS NULL và IS NOT NULL
Kiểm tra giá trị của một cột có giá trị NULL hay không

WHERE tên_cột IS NULL


hoặc:
WHERE tên_cột IS NOT NULL
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Mệnh đề WHERE
IN và NOT IN
• Từ khoá IN được sử dụng khi ta cần chỉ định điều kiện tìm kiếm dữ
liệu cho câu lệnh SELECT là một danh sách các giá trị.
• Sau IN (hoặc NOT IN) có thể là một danh sách các giá trị hoặc là một
câu lệnh SELECT khác.
Ví dụ 1: Để biết danh sách các môn học có số tiết 45 hoặc 60 thay vì
sử dụng câu lệnh

SELECT * FROM MONHOC


WHERE SOTIET=45 OR SOTIET=60
ta có thể sử dụng câu lệnh

SELECT * FROM MONHOC


WHERE SOTIET IN (45,60)
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Mệnh đề SELECT… INTO

Lệnh SELECT INTO tạo ra bảng mới từ các bảng có sẵn


và dữ liệu của chúng.
Cú pháp
SELECT *| danh sách cột
INTO Tên bảng mới
FROM Tên bảng

Ví dụ: Tạo bảng Tuổi sinh viên bao gồm HoSV, Tên, Tuổi
Select Hosv, Ten,Year(getdate())-Year(ngaysinh) as Tuoi
INTO Tuoisv
FROM Sinhvien
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Câu lệnh Select


Mệnh đề ORDER BY
sắp xếp kết quả truy vấn
ASC: tăng (mặc định)
DESC: giảm
vd1: Hiển thị danh sách các môn học? Sắp xếp theo số tiết
tăng dần
SELECT *
FROM MONHOC
ORDER BY SOTIET ASC
vd2: Hiển thị danh sách các sinh viên sinh, sắp xếp theo
danh sách theo ngày sinh giảm dần.
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Một số hàm thường dùng

Các hàm làm việc với kiểu dữ liệu số


 Hàm ISNUMERIC(x) : kiểm tra x có là số hay không?
• Nếu x có kiểu số: hàm cho kết quả TRUE
• Nếu X ko có dạng số: hàm cho kết quả FALSE
 Hàm ROUND(x,n): làm tròn x đến n số sau dấu
phẩy
• Ví dụ: ROUND(8.268,2) cho kết quả là 8.27

20
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Một số hàm thường dùng

Các hàm làm việc với kiểu dữ liệu chuỗi


 Hàm LEFT(x,n): chọn n ký tự bên trái của x
 Hàm RIGHT(x,n): chọn n ký tự bên trái của x
 Hàm SUBSTRING(x,m,n): cho n ký tự, kể từ vị trí thứ
m trong chuỗi x
 Hàm LEN(x): cho độ dài của chuỗi x
 Hàm REPLACE(x,y,z): thay x bởI z trong chuỗi x
 Hàm LOWER(x): chuyển chuỗI x thành chữ thường
 Hàm UPPER(x): chuyển chữ x thành chữ hoa

21
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Một số hàm thường dùng

Các hàm làm việc với kiểu dữ liệu Ngày tháng/ Thời gian
 Hàm GETDATE(): cho ngày/ tháng/ năm hiện thời
 Hàm DAY(x): cho giá trị ngày của x

ví dụ: day(’03/24/1990’) cho kết quả là 24


 Hàm MONTH(x):cho giá trị tháng của x

ví dụ: month(’03/24/1990’) cho kết quả là 03


 Hàm YEAR(x): cho giá trị năm của x

ví dụ: year (’03/24/1990’) cho kết quả là 1990

22
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Các hàm thống kê

Count(*) : đếm số bản ghi (đếm cả giá trị Null)

Sum(biểu thức) : tính tổng các giá trị dạng số

AVG(biểu thức) : tính trung bình tổng các giá trị dạng số

Max(biểu thức) : cho giá trị lớn nhất

Min(biểu thức) : tìm giá trị nhỏ nhất


2.3. Ngôn ngữ thao tác dữ liệu (DML)

Các hàm thống kê


Ví dụ 1: Hiện thị có điểm thi cao nhất
Select Max(DIEM) as diemcaonhat
From KETQUA
Ví dụ 2: Hiện thị điểm thi trung bình
Select avg(DIEM) as DTB
From KETQUA
Ví dụ 3: Hiện thị tổng điểm
Select sum(DIEM) as tongcong
From KETQUA
Ví dụ 4: Đếm số sinh viên
Select COUNT(*)
From SINHVIEN
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Câu lệnh Select


Thống kê dữ liệu với mệnh đề group by
Nhóm dữ liệu lại theo từng nhóm để thực hiện các phép
toán thống kê.
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Câu lệnh Select


Mệnh đề group by
Ví dụ 1: Cho biết số lượng sinh viên theo từng phái?
Select PHAI, count(MASV)
From SINHVIEN
Group by PHAI
Ví dụ: Còn câu lệnh dưới đây cho biết tuổi lớn nhất, tuổi nhỏ nhất và
độ tuổi trung bình của tất cả các sinh viên sinh mã khoa CNTT
SELECT MAX(YEAR(GETDATE())-YEAR(ngaysinh)),
MIN(YEAR(GETDATE())-YEAR(ngaysinh)),
AVG(YEAR(GETDATE())-YEAR(ngaysinh))
FROM sinhvien
WHERE noisinh=’Huế’
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Câu lệnh Select


Mệnh đề having: Hiện thị một số nhóm phù hợp

Ví dụ: Đưa ra số lượng sinh viên khoa


CNTT và số lượng sinh viên khoa QTKD

select MAKHOA, count(*)


from SINHVIEN
group by MAKHOA
having (MAKHOA = ‘CNTT’ or MAKHOA =
‘QTKD’)
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Truy vấn lồng nhau

Cú pháp:
SELECT danh_sách_các cột
FROM danh_sách_tên_bảng
WHERE <Phép so sánh> <lượng từ> <Khối SELECT
con>
Trong đó:
- Phép so sánh: >, >, >=, <=, =, <>, like, not, notIn, Not
Exists,…
- Lượng từ: All (= NotIn), Any (=In),
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Truy vấn lồng nhau


Phép so sánh >=,=,<=
Ví dụ 1: Cho biết MASV, HOSV,TENSV sinh viên cùng
khoa với sinh viên có tên là Hoa

Select MASV, HOSV,TENSV


From SINHVIEN
WHERE MAKHOA = ( Select MAKHOA
From SINHVIEN
WHERE TENSV='Hoa')
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Truy vấn lồng nhau


Toán tử in, not in
Ví dụ 1: Cho biết MASV, HOSV,TENSV sinh viên cùng
khoa với sinh viên có tên là Hoa

Select MASV, HOSV,TENSV


From SINHVIEN
WHERE MAKHOA IN ( Select MAKHOA
From SINHVIEN
WHERE TENSV='Hoa')
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Truy vấn lồng nhau


từ khóa exist| not exist
Kiểm tra tồn tại hàng dữ liệu truy vấn được
Ví dụ: Tìm danh sách sinh viên từng tham gia thi học kỳ

SELECT Masv,hosv,tensv,makhoa
FROM sinhvien
WHERE Exists(
SELECT masv
FROM ketqua
WHERE masv=sinhvien.masv)
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Truy vấn dữ liệu từ nhiều bảng

-Phép nối bằng (phép nối tự nhiên): INNER JOIN


-Phép nối ngoài trái (LEFT OUTER JOIN)
-Phép nối ngoài phải (RIGHT OUTER JOIN)
-Phép nối ngoài đầy đủ (FULL OUTER JOIN)
2.3. Ngôn ngữ thao tác dữ liệu (DML)

ĐK kết nối đặt ở mệnh đề Where

Ví dụ: Lấy ra hosv,tensv,mamh,lanthi,diem của


sinh viên có masv bằng S007
Select Sinhvien.Hosv,Sinhvien.Ten,Ketqua.MaMH,
Ketqua.Lanthi, Ketqua.Diem
from Sinhvien, Ketqua
where (Ketqua.MASV='S007') and
(Sinhvien.Masv= Ketqua.Masv)
2.3. Ngôn ngữ thao tác dữ liệu (DML)

KẾT NỐI INNER JOIN


Cú pháp
FROM tên_bảng_a [INNER] JOIN tên_bảng_b ON
điều_kiện_nối

Ví dụ: Lấy ra hosv,tensv,mamh,lanthi,diem của


sinh viên có masv bằng S007
Select
SINHVIEN.HOSV,SINHVIEN.TEN,KETQUA.MAMH,
KETQUA.LANTHI, KETQUA.DIEM
from SINHVIEN INNER JOIN KETQUA ON
SINHVIEN.MASV= KETQUA. MASV
where KETQUA.MASV='S007’
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Nối ngoài- OUTER JOIN

Cú pháp:
FROM tên_bảng_a LEFT|RIGHT|FULL [OUTER] JOIN
tên_bảng_b ON điều_kiện_nối
• LEFT JOIN trả về tất cả các dòng của bảng thứ nhất, ngay cả khi các
dòng đó không ứng với dòng nào ở bảng thứ hai.

• RIGHT JOIN trả về tất cả các dòng ở bảng thứ hai, ngay cả khi các
dòng đó không ứng với dòng nào ở bảng thứ nhất.
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Nối ngoài- OUTER JOIN

Cú pháp:
FROM tên_bảng_a LEFT|RIGHT|FULL [OUTER] JOIN
tên_bảng_b ON điều_kiện_nối

Select *

from Ketqua LEFT OUTER JOIN Sinhvien

ON Ketqua.Masv = Sinhvien.Masv
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Nối ngoài- OUTER JOIN


Cú pháp:
FROM tên_bảng_a LEFT|RIGHT|FULL [OUTER] JOIN
tên_bảng_b ON điều_kiện_nối

Select *
from Ketqua RIGHT OUTER JOIN Sinhvien
ON Ketqua.Masv = Sinhvien.Masv
2.3. Ngôn ngữ thao tác dữ liệu (DML)

Nối ngoài- OUTER JOIN

Cú pháp:
FROM tên_bảng_a LEFT|RIGHT|FULL [OUTER] JOIN
tên_bảng_b ON điều_kiện_nối

Select *

from Ketqua FULL OUTER JOIN Sinhvien

ON Ketqua.Masv = Sinhvien.Masv

You might also like