SlideShare a Scribd company logo
1 of 58
CƠ SỞ DỮ LIỆU
1
Cao Nhật Uyển
CHƯƠNG 5:
NGÔN NGỮ TRUY VẤN DỮ LIỆU
SQL
CƠ SỞ DỮ LIỆU
2
Nội dung
3
Truy vấn cơ bản
3
Sắp xếp – gom nhóm
4
Truy vấn lồng
5
Lệnh định nghĩa – khởi tạo
2
Giới thiệu chung
1
Giới thiệu chung
4
- SQL : Structured Query Language
- Sơ khai: SEQUEL (Structured English Query
Language)
- Do IBM phát triển ( 1974-1976).
- Các phiên bản
SQL - 86
SQL - 92
SQL - 99
ANSI (American National Standards Institute)
và ISO (International Standards Organization)
Giới thiệu chung
5
SQL
DDL DML
Tạo cấu trúc CSDL Thao tác trên CSDL
Create Select Insert
Update Delete
Alter
Drop
Data Definition
Language
Data Manipulation
Language
Lệnh định nghĩa - DDL
6
Lệnh CREATE được dùng để:
Tạo lược đồ
Tạo bảng
Tạo khung nhìn
Tạo ràng buộc
CREATE DATABASE
CREATE TABLE
ALTER TABLE DROP TABLE
DDL
7
Kiểu dữ liệu
 Kiểu số
- Interger, smallint,
- Numberic, decimal, real, float
 Kiểu chuỗi ký tự
- char (n), nchar (n)
- varchar(n), nvarchar (n)
- text
 Boolean
- bit
 Ngày giờ
- date: ngày, tháng, năm
- time: giờ, phút, giây
- datetime: date + time
DDL
8
Lệnh tạo bảng
Bảng: tên bảng
tập thuộc tính
Tên
Kiểu dữ liệu
Ràng buộc toàn vẹn (RBTV)
CREATE TABLE PhongBan
(
MaPB int primary key,
TenPB nvarchar(50) not null,
NgayTao DateTime
)
CREATE TABLE TenBang
(
<TenCot> <kieu du lieu> [RBTV],
….
<TenCot> <kieu du lieu> [RBTV]
[RBTV]
)
DDL
9
Ràng buộc
Not null: Không cho phép thuộc tính chứa giá trị null
Null: Được chứa giá trị null
Khóa chính: Primary key
Khóa ngoại: Foreign key - references
Unique: Không trùng lắp
Default: Giá trị mặc định
Check: Kiểm tra điều kiện nào đó
Đặt tên ràng buộc: CONSTRAINT <tên ràng buộc> <RBTV
DDL
10
PRIMARY KEY (MANV)
DDL
11
Thay đổi cấu trúc ràng buộc của bảng
ALTER TABLE
 Thêm cột
ALTER TABLE <tên bảng> ADD <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>
 Thay đổi kiểu dữ liệu
ALTER TABLE <tên bảng> ALTER COLUMN <tên côt> <kiểu dữ liệu mới>
ALTER TABLE PhongBan ADD NgayTao Datetime null
ALTER TABLE PhongBan DROP NgayTao
ALTER TABLE PhongBan ALTER COLUMN NgayTao Date
DDL
12
Thay đổi cấu trúc ràng buộc của bảng
ALTER TABLE
 Thêm ràng buộc
ALTER TABLE <tên bảng> ADD
CONSTRAINT <tên ràng buộc> <RBTV>,
 Xóa ràng buộc
ALTER TABLE <tên bảng> DROP <tên ràng buộc>
CONSTRAINT <tên ràng buộc> <RBTV>
Khởi tạo dữ liệu - Insert
13
Thêm 1 dòng dữ liệu
INSERT INTO <TableName> < colName _1, colname_2, …,colName_n> VALUES
( values_1, values_2,…,values_n)
columnName_1
INSERT INTO <TableName> VALUES ( values_1, values_2,…,values_n)
Các giá trị theo thứ tự
Khởi tạo dữ liệu - Insert
14
Thêm nhiều dòng dữ liệu
INSERT INTO <TableName> < colName _1, colname_2, …,colName_n> VALUES
( values_1, values_2,…,values_n),
( values_1, values_2,…,values_n)
INSERT INTO <TableName> VALUES
( values_1, values_2,…,values_n),
( values_1, values_2,…,values_n)
Note: Dòng cuối không có
dấu phẩy “,”
Khởi tạo dữ liệu - Insert
15
Lưu ý
2. Dữ liệu identity: không cần gán giá trị
1. Khi không khai báo thuộc tính, các giá trị insert phải được đặt theo một thứ tự
nhất định
4. Khi insert nhiều dòng dữ liệu, không đặt dấu phẩy ở dòng cuối cùng
5. Insert kiểu dữ liệu ngày giờ theo format “tháng / ngày/ năm”
3. Thuộc tính có ràng buộc “not null” phải luôn có giá trị khi thêm 1 dòng dữ liệu
Khởi tạo dữ liệu - DELETE
16
2. Xóa theo điều kiện
DELTE FROM <TableName>
DELTE FROM <TableName>
WHERE <condition>
1. Xóa toàn bộ dữ liệu
Khởi tạo dữ liệu - UPDATE
17
UPDATE <TableName>
SET <TableColmn> = <value>
WHERE <condition>
Cập nhật dữ liệu
Truy vấn dữ liệu- SELECT
18
SELECT [ DISTINC | ALL ] {*| <tên các cột AS tên mới>,… <>}
FROM <Tên bảng [alias]>, <…>
[ WHERE điều kiện 1 ]
[ GROUP BY {danh sách thuộc tính 1} ]
[ HAVING điều kiện2 ]
[ ORDER BY {danh sách thuộc tính 2} ]
Câu lệnh tổng quát
Tối thiểu có SELECT-FROM
Không thay đổi thứ tự các mệnh đề
trong câu truy vấn
Không phân biệt hoa thường
Lưu ý
Truy vấn dữ liệu- SELECT
19
SELECT {danh sách tất cả các tên cột}
FROM <Tên bảng>
Truy vấn tất cả các dòng trong bảng
SELECT *
FROM <Tên bảng>
SELECT {danh sách các cột cần lấy}
FROM <Tên bảng>
Truy vấn dữ liệu- SELECT
20
Loại trừ giá trị trùng nhau trong kết quả trả về
DISTINCT
SELECT DISTINCT <Danh sách các thuộc tính>
FROM
Truy vấn dữ liệu- SELECT
21
Lấy thông tin tất cả mặt hàng kèm theo giá bán mới sau khi
đã giảm 10 %
PHÉP TÍNH TRÊN THUỘC TÍNH
Truy vấn dữ liệu- SELECT
22
Chọn ra một số dòng - WHERE
SELECT {danh sách tất cả các tên cột}
FROM <Tên bảng>
WHERE <điều kiện>
Lấy thông tin chi tiết của mặt hàng có mã số “BL/12/001”
Truy vấn dữ liệu - WHERE
23
Các điều kiện tìm kiếm
 So sánh : =, >, <, >=, <=
 Tập hợp - IN, NOT IN
 Miền giá trị - BETWEEN, NOT BETWEEN
 Điều kiện tìm kiếm chuỗi
 Điều kiện phức - AND, OR, NOT
 Null, Not null
Truy vấn dữ liệu - WHERE
24
Phép toán so sánh : =, >, <, >=, <=
SELECT {danh sách tất cả các tên cột}
FROM <Tên bảng>
WHERE <Tên côt> <Phép toán so sánh> <giá trị>
Kiểu dữ liệu Kiểu dữ liệu
Giống
Truy vấn dữ liệu - WHERE
25
Phép toán so sánh : kiểu ngày giờ MM-DD-YYY
YYY-MM-DD
Truy vấn dữ liệu - WHERE
26
Miền giá trị : BETWEEN , NOT BETWEEN
SELECT {danh sách tất cả các tên cột}
FROM <Tên bảng>
WHERE <Tên côt> BETWEEN <giá trị 1> AND <giá trị 2>
SELECT {danh sách tất cả các tên cột}
FROM <Tên bảng>
WHERE <Tên côt> >= <giá trị 1> AND <Tên côt> <= <giá trị 2>
Truy vấn dữ liệu - WHERE
27
Tập hợp: IN, NOT IN
SELECT {danh sách tất cả các tên cột}
FROM <Tên bảng>
WHERE <Tên côt> IN ( giá trị 1, giá trị 2,…, giá trị n )
Truy vấn dữ liệu - WHERE
28
Tập hợp: IN, NOT IN
SELECT {danh sách tất cả các tên cột}
FROM <Tên bảng>
WHERE <Tên côt> NOT IN ( giá trị 1, giá trị 2,…, giá trị n )
Truy vấn dữ liệu - WHERE
29
Chuỗi ký tự
SELECT {danh sách tất cả các tên cột}
FROM <Tên bảng>
WHERE <Tên côt> = ‘giatri’
Tìm loại hàng có tên là đàm dài
Truy vấn dữ liệu - WHERE
30
Chuỗi ký tự - LIKE , NOT LIKE
SELECT {danh sách tất cả các tên cột}
FROM <Tên bảng>
WHERE <Tên côt> LIKE ‘giatri’
%: chuỗi ký tự có thể rỗng
- : 1 ký tự bất kỳ
Truy vấn dữ liệu - WHERE
31
Chuỗi ký tự - LIKE , NOT LIKE
SELECT {danh sách tất cả các tên cột}
FROM <Tên bảng>
WHERE <Tên côt> NOT LIKE ‘giatri’
Truy vấn dữ liệu - WHERE
32
Kiểu dữ liệu null
SELECT {danh sách tất cả các tên cột}
FROM <Tên bảng>
WHERE <Tên côt> IS null
SELECT {danh sách tất cả các tên cột}
FROM <Tên bảng>
WHERE <Tên côt> IS NOT null
ORDER BY
33
SELECT {danh sách tất cả các tên cột}
FROM <Tên bảng>
ORDER BY <tên cột> ASC (DESC)
Tăng dần. Mặc định
Giảm dần
SELECT {danh sách tất cả các tên cột}
FROM <Tên bảng>
ORDER BY <cột1> <đk sắp xếp> <cột 2> <đk sắp xếp>…
Trái  Phải
ORDER BY
34
Ví dụ:
Sắp xếp mặt hàng theo thứ tự giá bán tăng dần và số
lượng theo thứ tự từ nhiều đến ít
SELECT*
FROM MatHang
ORDER BY GiaBan ASC, SoLuong DESC
SELECT*
FROM MatHang
ORDER BY GiaBan, SoLuong DESC
GROUP BY
35
Tạo ra các nhóm dữ liệu
SELECT {danh sách tất cả các tên cột}
FROM <Tên bảng>
GROUP BY <tên cột>
Ví dụ: Liệt kê các mặt hàng và phân theo nhóm loại hàng
SELECT MaMH, TenMH, Loai
FROM MatHang
GROUP BY Loai, MaMH, TenMH,
Thuộc tính gom nhóm
GROUP BY
36
Tạo ra các nhóm dữ liệu
 Mỗi thuộc tính gom nhóm trong mệnh đề select sẽ có giá
trị giống nhau trong từng nhóm
 Tất cả thuộc tính sau SELECT đều PHẢI xuất hiện ở
GROUP BY (trừ thuộc tính mang giá trị hàm)
 Thuộc tính gom nhóm có thể không có sau mệnh đề
SELECT
HAVING
37
Điều kiện trên nhóm
SELECT {danh sách tất cả các tên cột}
FROM <Tên bảng>
GROUP BY <tên cột>
HAVING <điều kiện>
SELECT Loai, count(SoLuong)
FROM MatHang
GROUP BY Loai
HAVING count(soluong) > 1
Ví dụ: Tìm tất cả các loại hàng có số lượng hàng lớn hơn 1
HAVING
38
Điều kiện trên nhóm
Chỉ thực hiện khi có GROUP BY
Sử dụng các hàm kết hợp trong mệnh đề SELECT để gom
nhóm
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 dòng dữ liệu
CÁC HÀM TÍNH TOÁN
39
Count()
MIN
AVG
SUM
MAX
Đếm số giá trị khác null
Tìm giá trị nhỏ nhất
Tính giá trị trung bình
Tìm giá trị lớn nhất
Hàm tính tổng các giá trị
CÁC HÀM TÍNH TOÁN
40
Đặc điểm
1. Nhận tên một trường
2. Hàm SUM, AVG: chỉ áp dụng cho trường kiểu số
3. Hàm count (), Min, Max có thể áp dụng cho trường kiểu
số và kiểu dữ liệu khác
Một giá trị
Trả về
4. Chỉ có hàm count (*) thực hiện được trên giá trị null
5. Mệnh đề SELECT chứa hàm tính toán nếu
Có GROUP BY  được liệt kê thuộc tính đơn
WHERE – OR - AND
41
AND = và : Thỏa cùng lúc điều kiện này và điều kiện khác
OR = hoặc : hoặc thỏa điều kiện này hoặc thỏa điều kiện khác
Ví dụ: Tìm những mặc hàng có số lượng lớn hơn 20 hoặc có giá bán là
150.000
SELECT*
FROM MatHang
WHERE SoLuong >= 20 OR GiaBan = 150000
WHERE – OR - AND
42
Ví dụ: Tìm những chiếc đầm có số bán là dưới 250.000
SELECT*
FROM MatHang
WHERE TenMH like N’%đầm%’ AND GiaBan <250000
UNION - INTERSECT
43
UNION : phép hội
SELECT <danh sách tên cột>
FROM <Tên bảng 1>
WHERE <điều kiện1>
UNION
SELECT <danh sách tên cột>
FROM <Tên bảng 2>
WHERE <điều kiện2>
SELECT MaKH
FROM KhachHang
WHERE LoaiKH = 2
UNION
SELECT KhachHang
FROM DonHang
Tìm khách hàng có mã loại = 2 hoặc khách hàng đã mua
hàng
UNION - INTERSECT
44
INTERSECT: phép giao
SELECT <danh sách tên cột>
FROM <Tên bảng1 >
WHERE <điều kiện1>
INTERSECT
SELECT <danh sách tên cột>
FROM <Tên bảng 2>
WHERE <điều kiện2>
SELECT MaKH
FROM KhachHang
WHERE LoaiKH = 2
INTERSECT
SELECT KhachHang
FROM DonHang
Tìm khách hàng có mã loại = 2 và đã mua hàng
UNION - INTERSECT
45
Trả về kết quả không trùng nhau
Dể lấy tât cả các kết quả, thêm từ khóa ALL vào
- UNION ALL
- INTERSECT ALL
Notes:
TRUY VẤN CON
46
Có thể xuất hiện trong các mệnh đề WHERE, HAVING,
INSERT, UPDATE, DELETE
Là câu truy vấn xuất hiện trong một câu truy vấn khác
Tìm khách hàng có mã loại = 2 đã mua hàng
SELECT MaKH
FROM KhachHang
WHERE LoaiKH = 2 AND MaKH IN (SELECT KhachHang
FROM DonHang )
TRUY VẤN LỒNG
47
Là câu truy vấn có chứa truy vấn con ở mệnh đề WHERE
SELECT <danh sách tên cột>
FROM <Tên bảng>
WHERE <biểu thức so sánh> (SELECT <danh sách thuộc tính>
FROM Tên bảng
WHERE <điều kiện>)
Biểu thức so sánh thường có: IN, NOT IN, ALL, ANY
EXISTS, NOT EXISTS
TRUY VẤN LỒNG
48
Có 2 loại truy vấn lồng Lồng phân cấp
 Lồng phân cấp
Lồng tương quan
SELECT MaKH
FROM KhachHang
WHERE LoaiKH = 2 AND MaKH IN (SELECT KhachHang
FROM DonHang
WHERE SoLuong > 1)
Mệnh đề WHERE của câu truy vấn con không
tham chiếu đến giá trị thuộc tính của các bảng
ở mệnh đề FROM của truy vấn cha
Thực thi câu truy
vấn con trước
TRUY VẤN LỒNG
49
 Lồng tương quan
SELECT MaKH
FROM KhachHang
WHERE LoaiKH = 2 AND ESXISTS (SELECT KhachHang
FROM DonHang
WHERE KhachHang = MaKH)
Mệnh đề WHERE của câu truy vấn con tham
chiếu đến ít nhất 1 thuộc tính của các bảng ở
mệnh đề FROM của truy vấn cha
Thực thi câu truy
vấn con nhiều lần
TRUY VẤN LỒNG
50
IN
IN và EXISTS
<tên côt> IN <câu truy vấn con> EXISTS <câu truy vấn con>
Thuộc tính trong SELECT cuả truy
vấn con CÙNG kiểu dữ liệu thuộc
tính trong WHERE của truy vấn cha
Không nhất thiết liệt kê thuộc tính ở
mệnh đề SELECT của câu truy vấn
con
EXISTS
PHÉP KẾT
51
Làm thế nào để lấy thông tin chi tiết (tên mặt hàng,
số lượng, giá bán) các mặt hàng trong đơn hàng?
PHÉP KẾT
PHÉP KẾT
52
- Dùng khi truy xuất dữ liệu từ nhiều bảng
- Liên kết 2 hay nhiều bảng với nhau dựa trên 1
thuộc tính
Các loại phép kết
Phép kết tự nhiên
JOIN
Phép kết trong
INNER JOIN
Phép kết trái
LEFT JOIN
Phép kết phải
RIGHT JOIN
Phép kết ngoài
OUTER JOIN
PHÉP KẾT
53
SELECT <danh sách thuộc tính>
FROM Table1 tbl1 JOIN Table2 tbl2 ON tbl1.ThuocTinh = tb2.ThuocTinh
INNER JOIN LEFT JOIN RIGHT JOIN
OUTER JOIN
MaMH TenMH Loai
001 Áo sơ mi A
002 Đầm B
003 Jean C
004 Áo thun A
MaMH SoHD SoLuong
001 001 3
003 002 2
JOIN
54
SELECT *
FROM Mathang a JOIN ChiTietDonHang bON a.maMH = b.MaMH
MaMH TenMH Loai
001 Áo sơ mi A
002 Đầm B
003 Jean C
004 Áo thun A
MaMH SoHD SoLuong
001 001 3
003 002 2
MaMH TenMH Loai MaMH SoHD SoLuong
001 Áo sơ mi A 001 001 3
003 Jean C 003 002 2
INNER JOIN
LEFT JOIN
55
SELECT *
FROM Mathang a LEFT JOIN ChiTietDonHang bON a.maMH = b.MaMH
MaMH TenMH Loai
001 Áo sơ mi A
002 Đầm B
003 Jean C
004 Áo thun A
MaMH SoHD SoLuong
001 001 3
003 002 2
MaMH TenMH Loai MaMH SoHD SoLuong
001 Áo sơ mi A 001 001 3
002 Đầm B Null Null Null
003 Jean C 003 002 2
004 Áo thun A Null Null null
RIGHT JOIN
56
SELECT *
FROM ChiTietDonHang a RIGHT JOIN Mathang bON a.maMH = b.MaMH
MaMH TenMH Loai
001 Áo sơ mi A
002 Đầm B
003 Jean C
004 Áo thun A
MaMH SoHD SoLuong
001 001 3
003 002 2
MaMH SoHD SoLuong MaMH TenMH Loai
001 001 3 001 Áo sơ mi A
Null Null Null 002 Đầm B
003 002 2 003 Jean C
Null Null null 004 Áo thun A
OUTER JOIN
57
SELECT *
FROM ChiTietDonHang a OUTER JOIN Mathang bON a.maMH = b.MaMH
MaMH TenMH Loai
001 Áo sơ mi A
002 Đầm B
003 Jean C
004 Áo thun A
MaMH SoHD SoLuong
001 001 3
003 002 2
005 004 1
MaMH SoHD SoLuong MaMH TenMH Loai
001 001 3 001 Áo sơ mi A
Null Null Null 002 Đầm B
003 002 2 003 Jean C
Null Null null 004 Áo thun A
005 004 1 Null Null Null
www.themegallery.com
Thank you !

More Related Content

Similar to Cơ sở dữ liệu SQL qua các vi du cu the.pptx

04 chuong 4 - sap xep, tim kiem, loc du lieu
04   chuong 4 - sap xep, tim kiem, loc du lieu04   chuong 4 - sap xep, tim kiem, loc du lieu
04 chuong 4 - sap xep, tim kiem, loc du lieutruong le hung
 
Bài 4: NGÔN NGỮ TRUY VẤN CÓ CẤU TRÚC (SQL)
Bài 4: NGÔN NGỮ TRUY VẤN CÓ CẤU TRÚC (SQL)Bài 4: NGÔN NGỮ TRUY VẤN CÓ CẤU TRÚC (SQL)
Bài 4: NGÔN NGỮ TRUY VẤN CÓ CẤU TRÚC (SQL)MasterCode.vn
 
Bài 3: Ngôn ngữ truy vân có cấu trúc (SQL) - Giáo trình FPT
Bài 3: Ngôn ngữ truy vân có cấu trúc (SQL) - Giáo trình FPTBài 3: Ngôn ngữ truy vân có cấu trúc (SQL) - Giáo trình FPT
Bài 3: Ngôn ngữ truy vân có cấu trúc (SQL) - Giáo trình FPTMasterCode.vn
 
Ngon ngu truy van sql
Ngon ngu truy van sqlNgon ngu truy van sql
Ngon ngu truy van sqlPhùng Duy
 
Thiet Ke Co So Du Lieu2
Thiet Ke Co So Du Lieu2Thiet Ke Co So Du Lieu2
Thiet Ke Co So Du Lieu2Vo Oanh
 
csdl bai-thuchanh_02
csdl bai-thuchanh_02csdl bai-thuchanh_02
csdl bai-thuchanh_02kikihoho
 
Chuong6_NgonnguSQL.pdf
Chuong6_NgonnguSQL.pdfChuong6_NgonnguSQL.pdf
Chuong6_NgonnguSQL.pdfHanaYuki19
 
Note4_ThucHanh.pdf
Note4_ThucHanh.pdfNote4_ThucHanh.pdf
Note4_ThucHanh.pdfimquang
 
[Bachkhoa-Aptech] Hướng dẫn sử dụng Microsoft Office Excel 2003
[Bachkhoa-Aptech] Hướng dẫn sử dụng Microsoft Office Excel 2003[Bachkhoa-Aptech] Hướng dẫn sử dụng Microsoft Office Excel 2003
[Bachkhoa-Aptech] Hướng dẫn sử dụng Microsoft Office Excel 2003Phạm Văn Hưng
 
Cau lenh truy_van_sql
Cau lenh truy_van_sqlCau lenh truy_van_sql
Cau lenh truy_van_sql. .
 
Cau lenh truy_van_sql
Cau lenh truy_van_sqlCau lenh truy_van_sql
Cau lenh truy_van_sqlLiễu Hồng
 
Cau lenh truy_van_sql
Cau lenh truy_van_sqlCau lenh truy_van_sql
Cau lenh truy_van_sqlVu Phong
 
02. baigiangquery
02. baigiangquery02. baigiangquery
02. baigiangqueryHoang Minh
 
Trigger, Cursor, Function in SQL Server
Trigger, Cursor, Function in SQL ServerTrigger, Cursor, Function in SQL Server
Trigger, Cursor, Function in SQL ServerNguyễn Phúc
 

Similar to Cơ sở dữ liệu SQL qua các vi du cu the.pptx (20)

04 chuong 4 - sap xep, tim kiem, loc du lieu
04   chuong 4 - sap xep, tim kiem, loc du lieu04   chuong 4 - sap xep, tim kiem, loc du lieu
04 chuong 4 - sap xep, tim kiem, loc du lieu
 
ORACLE_ch2_SQL.pptx
ORACLE_ch2_SQL.pptxORACLE_ch2_SQL.pptx
ORACLE_ch2_SQL.pptx
 
2 co ban ve sql
2 co ban ve sql2 co ban ve sql
2 co ban ve sql
 
Com201 slide 4
Com201   slide 4Com201   slide 4
Com201 slide 4
 
Bài 4: NGÔN NGỮ TRUY VẤN CÓ CẤU TRÚC (SQL)
Bài 4: NGÔN NGỮ TRUY VẤN CÓ CẤU TRÚC (SQL)Bài 4: NGÔN NGỮ TRUY VẤN CÓ CẤU TRÚC (SQL)
Bài 4: NGÔN NGỮ TRUY VẤN CÓ CẤU TRÚC (SQL)
 
Bài 3: Ngôn ngữ truy vân có cấu trúc (SQL) - Giáo trình FPT
Bài 3: Ngôn ngữ truy vân có cấu trúc (SQL) - Giáo trình FPTBài 3: Ngôn ngữ truy vân có cấu trúc (SQL) - Giáo trình FPT
Bài 3: Ngôn ngữ truy vân có cấu trúc (SQL) - Giáo trình FPT
 
Com201 slide 3
Com201   slide 3Com201   slide 3
Com201 slide 3
 
Ngon ngu truy van sql
Ngon ngu truy van sqlNgon ngu truy van sql
Ngon ngu truy van sql
 
Thiet Ke Co So Du Lieu2
Thiet Ke Co So Du Lieu2Thiet Ke Co So Du Lieu2
Thiet Ke Co So Du Lieu2
 
csdl bai-thuchanh_02
csdl bai-thuchanh_02csdl bai-thuchanh_02
csdl bai-thuchanh_02
 
Chuong6_NgonnguSQL.pdf
Chuong6_NgonnguSQL.pdfChuong6_NgonnguSQL.pdf
Chuong6_NgonnguSQL.pdf
 
Note4_ThucHanh.pdf
Note4_ThucHanh.pdfNote4_ThucHanh.pdf
Note4_ThucHanh.pdf
 
[Bachkhoa-Aptech] Hướng dẫn sử dụng Microsoft Office Excel 2003
[Bachkhoa-Aptech] Hướng dẫn sử dụng Microsoft Office Excel 2003[Bachkhoa-Aptech] Hướng dẫn sử dụng Microsoft Office Excel 2003
[Bachkhoa-Aptech] Hướng dẫn sử dụng Microsoft Office Excel 2003
 
Cau lenh truy_van_sql
Cau lenh truy_van_sqlCau lenh truy_van_sql
Cau lenh truy_van_sql
 
Cau lenh truy_van_sql
Cau lenh truy_van_sqlCau lenh truy_van_sql
Cau lenh truy_van_sql
 
Cau lenh truy_van_sql
Cau lenh truy_van_sqlCau lenh truy_van_sql
Cau lenh truy_van_sql
 
02. baigiangquery
02. baigiangquery02. baigiangquery
02. baigiangquery
 
Trigger, Cursor, Function in SQL Server
Trigger, Cursor, Function in SQL ServerTrigger, Cursor, Function in SQL Server
Trigger, Cursor, Function in SQL Server
 
slide_Chuong 3_ (1).ppt
slide_Chuong 3_ (1).pptslide_Chuong 3_ (1).ppt
slide_Chuong 3_ (1).ppt
 
02. baigiangquery
02. baigiangquery02. baigiangquery
02. baigiangquery
 

Cơ sở dữ liệu SQL qua các vi du cu the.pptx

  • 1. CƠ SỞ DỮ LIỆU 1 Cao Nhật Uyển
  • 2. CHƯƠNG 5: NGÔN NGỮ TRUY VẤN DỮ LIỆU SQL CƠ SỞ DỮ LIỆU 2
  • 3. Nội dung 3 Truy vấn cơ bản 3 Sắp xếp – gom nhóm 4 Truy vấn lồng 5 Lệnh định nghĩa – khởi tạo 2 Giới thiệu chung 1
  • 4. Giới thiệu chung 4 - SQL : Structured Query Language - Sơ khai: SEQUEL (Structured English Query Language) - Do IBM phát triển ( 1974-1976). - Các phiên bản SQL - 86 SQL - 92 SQL - 99 ANSI (American National Standards Institute) và ISO (International Standards Organization)
  • 5. Giới thiệu chung 5 SQL DDL DML Tạo cấu trúc CSDL Thao tác trên CSDL Create Select Insert Update Delete Alter Drop Data Definition Language Data Manipulation Language
  • 6. Lệnh định nghĩa - DDL 6 Lệnh CREATE được dùng để: Tạo lược đồ Tạo bảng Tạo khung nhìn Tạo ràng buộc CREATE DATABASE CREATE TABLE ALTER TABLE DROP TABLE
  • 7. DDL 7 Kiểu dữ liệu  Kiểu số - Interger, smallint, - Numberic, decimal, real, float  Kiểu chuỗi ký tự - char (n), nchar (n) - varchar(n), nvarchar (n) - text  Boolean - bit  Ngày giờ - date: ngày, tháng, năm - time: giờ, phút, giây - datetime: date + time
  • 8. DDL 8 Lệnh tạo bảng Bảng: tên bảng tập thuộc tính Tên Kiểu dữ liệu Ràng buộc toàn vẹn (RBTV) CREATE TABLE PhongBan ( MaPB int primary key, TenPB nvarchar(50) not null, NgayTao DateTime ) CREATE TABLE TenBang ( <TenCot> <kieu du lieu> [RBTV], …. <TenCot> <kieu du lieu> [RBTV] [RBTV] )
  • 9. DDL 9 Ràng buộc Not null: Không cho phép thuộc tính chứa giá trị null Null: Được chứa giá trị null Khóa chính: Primary key Khóa ngoại: Foreign key - references Unique: Không trùng lắp Default: Giá trị mặc định Check: Kiểm tra điều kiện nào đó Đặt tên ràng buộc: CONSTRAINT <tên ràng buộc> <RBTV
  • 11. DDL 11 Thay đổi cấu trúc ràng buộc của bảng ALTER TABLE  Thêm cột ALTER TABLE <tên bảng> ADD <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>  Thay đổi kiểu dữ liệu ALTER TABLE <tên bảng> ALTER COLUMN <tên côt> <kiểu dữ liệu mới> ALTER TABLE PhongBan ADD NgayTao Datetime null ALTER TABLE PhongBan DROP NgayTao ALTER TABLE PhongBan ALTER COLUMN NgayTao Date
  • 12. DDL 12 Thay đổi cấu trúc ràng buộc của bảng ALTER TABLE  Thêm ràng buộc ALTER TABLE <tên bảng> ADD CONSTRAINT <tên ràng buộc> <RBTV>,  Xóa ràng buộc ALTER TABLE <tên bảng> DROP <tên ràng buộc> CONSTRAINT <tên ràng buộc> <RBTV>
  • 13. Khởi tạo dữ liệu - Insert 13 Thêm 1 dòng dữ liệu INSERT INTO <TableName> < colName _1, colname_2, …,colName_n> VALUES ( values_1, values_2,…,values_n) columnName_1 INSERT INTO <TableName> VALUES ( values_1, values_2,…,values_n) Các giá trị theo thứ tự
  • 14. Khởi tạo dữ liệu - Insert 14 Thêm nhiều dòng dữ liệu INSERT INTO <TableName> < colName _1, colname_2, …,colName_n> VALUES ( values_1, values_2,…,values_n), ( values_1, values_2,…,values_n) INSERT INTO <TableName> VALUES ( values_1, values_2,…,values_n), ( values_1, values_2,…,values_n) Note: Dòng cuối không có dấu phẩy “,”
  • 15. Khởi tạo dữ liệu - Insert 15 Lưu ý 2. Dữ liệu identity: không cần gán giá trị 1. Khi không khai báo thuộc tính, các giá trị insert phải được đặt theo một thứ tự nhất định 4. Khi insert nhiều dòng dữ liệu, không đặt dấu phẩy ở dòng cuối cùng 5. Insert kiểu dữ liệu ngày giờ theo format “tháng / ngày/ năm” 3. Thuộc tính có ràng buộc “not null” phải luôn có giá trị khi thêm 1 dòng dữ liệu
  • 16. Khởi tạo dữ liệu - DELETE 16 2. Xóa theo điều kiện DELTE FROM <TableName> DELTE FROM <TableName> WHERE <condition> 1. Xóa toàn bộ dữ liệu
  • 17. Khởi tạo dữ liệu - UPDATE 17 UPDATE <TableName> SET <TableColmn> = <value> WHERE <condition> Cập nhật dữ liệu
  • 18. Truy vấn dữ liệu- SELECT 18 SELECT [ DISTINC | ALL ] {*| <tên các cột AS tên mới>,… <>} FROM <Tên bảng [alias]>, <…> [ WHERE điều kiện 1 ] [ GROUP BY {danh sách thuộc tính 1} ] [ HAVING điều kiện2 ] [ ORDER BY {danh sách thuộc tính 2} ] Câu lệnh tổng quát Tối thiểu có SELECT-FROM Không thay đổi thứ tự các mệnh đề trong câu truy vấn Không phân biệt hoa thường Lưu ý
  • 19. Truy vấn dữ liệu- SELECT 19 SELECT {danh sách tất cả các tên cột} FROM <Tên bảng> Truy vấn tất cả các dòng trong bảng SELECT * FROM <Tên bảng> SELECT {danh sách các cột cần lấy} FROM <Tên bảng>
  • 20. Truy vấn dữ liệu- SELECT 20 Loại trừ giá trị trùng nhau trong kết quả trả về DISTINCT SELECT DISTINCT <Danh sách các thuộc tính> FROM
  • 21. Truy vấn dữ liệu- SELECT 21 Lấy thông tin tất cả mặt hàng kèm theo giá bán mới sau khi đã giảm 10 % PHÉP TÍNH TRÊN THUỘC TÍNH
  • 22. Truy vấn dữ liệu- SELECT 22 Chọn ra một số dòng - WHERE SELECT {danh sách tất cả các tên cột} FROM <Tên bảng> WHERE <điều kiện> Lấy thông tin chi tiết của mặt hàng có mã số “BL/12/001”
  • 23. Truy vấn dữ liệu - WHERE 23 Các điều kiện tìm kiếm  So sánh : =, >, <, >=, <=  Tập hợp - IN, NOT IN  Miền giá trị - BETWEEN, NOT BETWEEN  Điều kiện tìm kiếm chuỗi  Điều kiện phức - AND, OR, NOT  Null, Not null
  • 24. Truy vấn dữ liệu - WHERE 24 Phép toán so sánh : =, >, <, >=, <= SELECT {danh sách tất cả các tên cột} FROM <Tên bảng> WHERE <Tên côt> <Phép toán so sánh> <giá trị> Kiểu dữ liệu Kiểu dữ liệu Giống
  • 25. Truy vấn dữ liệu - WHERE 25 Phép toán so sánh : kiểu ngày giờ MM-DD-YYY YYY-MM-DD
  • 26. Truy vấn dữ liệu - WHERE 26 Miền giá trị : BETWEEN , NOT BETWEEN SELECT {danh sách tất cả các tên cột} FROM <Tên bảng> WHERE <Tên côt> BETWEEN <giá trị 1> AND <giá trị 2> SELECT {danh sách tất cả các tên cột} FROM <Tên bảng> WHERE <Tên côt> >= <giá trị 1> AND <Tên côt> <= <giá trị 2>
  • 27. Truy vấn dữ liệu - WHERE 27 Tập hợp: IN, NOT IN SELECT {danh sách tất cả các tên cột} FROM <Tên bảng> WHERE <Tên côt> IN ( giá trị 1, giá trị 2,…, giá trị n )
  • 28. Truy vấn dữ liệu - WHERE 28 Tập hợp: IN, NOT IN SELECT {danh sách tất cả các tên cột} FROM <Tên bảng> WHERE <Tên côt> NOT IN ( giá trị 1, giá trị 2,…, giá trị n )
  • 29. Truy vấn dữ liệu - WHERE 29 Chuỗi ký tự SELECT {danh sách tất cả các tên cột} FROM <Tên bảng> WHERE <Tên côt> = ‘giatri’ Tìm loại hàng có tên là đàm dài
  • 30. Truy vấn dữ liệu - WHERE 30 Chuỗi ký tự - LIKE , NOT LIKE SELECT {danh sách tất cả các tên cột} FROM <Tên bảng> WHERE <Tên côt> LIKE ‘giatri’ %: chuỗi ký tự có thể rỗng - : 1 ký tự bất kỳ
  • 31. Truy vấn dữ liệu - WHERE 31 Chuỗi ký tự - LIKE , NOT LIKE SELECT {danh sách tất cả các tên cột} FROM <Tên bảng> WHERE <Tên côt> NOT LIKE ‘giatri’
  • 32. Truy vấn dữ liệu - WHERE 32 Kiểu dữ liệu null SELECT {danh sách tất cả các tên cột} FROM <Tên bảng> WHERE <Tên côt> IS null SELECT {danh sách tất cả các tên cột} FROM <Tên bảng> WHERE <Tên côt> IS NOT null
  • 33. ORDER BY 33 SELECT {danh sách tất cả các tên cột} FROM <Tên bảng> ORDER BY <tên cột> ASC (DESC) Tăng dần. Mặc định Giảm dần SELECT {danh sách tất cả các tên cột} FROM <Tên bảng> ORDER BY <cột1> <đk sắp xếp> <cột 2> <đk sắp xếp>… Trái  Phải
  • 34. ORDER BY 34 Ví dụ: Sắp xếp mặt hàng theo thứ tự giá bán tăng dần và số lượng theo thứ tự từ nhiều đến ít SELECT* FROM MatHang ORDER BY GiaBan ASC, SoLuong DESC SELECT* FROM MatHang ORDER BY GiaBan, SoLuong DESC
  • 35. GROUP BY 35 Tạo ra các nhóm dữ liệu SELECT {danh sách tất cả các tên cột} FROM <Tên bảng> GROUP BY <tên cột> Ví dụ: Liệt kê các mặt hàng và phân theo nhóm loại hàng SELECT MaMH, TenMH, Loai FROM MatHang GROUP BY Loai, MaMH, TenMH, Thuộc tính gom nhóm
  • 36. GROUP BY 36 Tạo ra các nhóm dữ liệu  Mỗi thuộc tính gom nhóm trong mệnh đề select sẽ có giá trị giống nhau trong từng nhóm  Tất cả thuộc tính sau SELECT đều PHẢI xuất hiện ở GROUP BY (trừ thuộc tính mang giá trị hàm)  Thuộc tính gom nhóm có thể không có sau mệnh đề SELECT
  • 37. HAVING 37 Điều kiện trên nhóm SELECT {danh sách tất cả các tên cột} FROM <Tên bảng> GROUP BY <tên cột> HAVING <điều kiện> SELECT Loai, count(SoLuong) FROM MatHang GROUP BY Loai HAVING count(soluong) > 1 Ví dụ: Tìm tất cả các loại hàng có số lượng hàng lớn hơn 1
  • 38. HAVING 38 Điều kiện trên nhóm Chỉ thực hiện khi có GROUP BY Sử dụng các hàm kết hợp trong mệnh đề SELECT để gom nhóm 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 dòng dữ liệu
  • 39. CÁC HÀM TÍNH TOÁN 39 Count() MIN AVG SUM MAX Đếm số giá trị khác null Tìm giá trị nhỏ nhất Tính giá trị trung bình Tìm giá trị lớn nhất Hàm tính tổng các giá trị
  • 40. CÁC HÀM TÍNH TOÁN 40 Đặc điểm 1. Nhận tên một trường 2. Hàm SUM, AVG: chỉ áp dụng cho trường kiểu số 3. Hàm count (), Min, Max có thể áp dụng cho trường kiểu số và kiểu dữ liệu khác Một giá trị Trả về 4. Chỉ có hàm count (*) thực hiện được trên giá trị null 5. Mệnh đề SELECT chứa hàm tính toán nếu Có GROUP BY  được liệt kê thuộc tính đơn
  • 41. WHERE – OR - AND 41 AND = và : Thỏa cùng lúc điều kiện này và điều kiện khác OR = hoặc : hoặc thỏa điều kiện này hoặc thỏa điều kiện khác Ví dụ: Tìm những mặc hàng có số lượng lớn hơn 20 hoặc có giá bán là 150.000 SELECT* FROM MatHang WHERE SoLuong >= 20 OR GiaBan = 150000
  • 42. WHERE – OR - AND 42 Ví dụ: Tìm những chiếc đầm có số bán là dưới 250.000 SELECT* FROM MatHang WHERE TenMH like N’%đầm%’ AND GiaBan <250000
  • 43. UNION - INTERSECT 43 UNION : phép hội SELECT <danh sách tên cột> FROM <Tên bảng 1> WHERE <điều kiện1> UNION SELECT <danh sách tên cột> FROM <Tên bảng 2> WHERE <điều kiện2> SELECT MaKH FROM KhachHang WHERE LoaiKH = 2 UNION SELECT KhachHang FROM DonHang Tìm khách hàng có mã loại = 2 hoặc khách hàng đã mua hàng
  • 44. UNION - INTERSECT 44 INTERSECT: phép giao SELECT <danh sách tên cột> FROM <Tên bảng1 > WHERE <điều kiện1> INTERSECT SELECT <danh sách tên cột> FROM <Tên bảng 2> WHERE <điều kiện2> SELECT MaKH FROM KhachHang WHERE LoaiKH = 2 INTERSECT SELECT KhachHang FROM DonHang Tìm khách hàng có mã loại = 2 và đã mua hàng
  • 45. UNION - INTERSECT 45 Trả về kết quả không trùng nhau Dể lấy tât cả các kết quả, thêm từ khóa ALL vào - UNION ALL - INTERSECT ALL Notes:
  • 46. TRUY VẤN CON 46 Có thể xuất hiện trong các mệnh đề WHERE, HAVING, INSERT, UPDATE, DELETE Là câu truy vấn xuất hiện trong một câu truy vấn khác Tìm khách hàng có mã loại = 2 đã mua hàng SELECT MaKH FROM KhachHang WHERE LoaiKH = 2 AND MaKH IN (SELECT KhachHang FROM DonHang )
  • 47. TRUY VẤN LỒNG 47 Là câu truy vấn có chứa truy vấn con ở mệnh đề WHERE SELECT <danh sách tên cột> FROM <Tên bảng> WHERE <biểu thức so sánh> (SELECT <danh sách thuộc tính> FROM Tên bảng WHERE <điều kiện>) Biểu thức so sánh thường có: IN, NOT IN, ALL, ANY EXISTS, NOT EXISTS
  • 48. TRUY VẤN LỒNG 48 Có 2 loại truy vấn lồng Lồng phân cấp  Lồng phân cấp Lồng tương quan SELECT MaKH FROM KhachHang WHERE LoaiKH = 2 AND MaKH IN (SELECT KhachHang FROM DonHang WHERE SoLuong > 1) Mệnh đề WHERE của câu truy vấn con không tham chiếu đến giá trị thuộc tính của các bảng ở mệnh đề FROM của truy vấn cha Thực thi câu truy vấn con trước
  • 49. TRUY VẤN LỒNG 49  Lồng tương quan SELECT MaKH FROM KhachHang WHERE LoaiKH = 2 AND ESXISTS (SELECT KhachHang FROM DonHang WHERE KhachHang = MaKH) Mệnh đề WHERE của câu truy vấn con tham chiếu đến ít nhất 1 thuộc tính của các bảng ở mệnh đề FROM của truy vấn cha Thực thi câu truy vấn con nhiều lần
  • 50. TRUY VẤN LỒNG 50 IN IN và EXISTS <tên côt> IN <câu truy vấn con> EXISTS <câu truy vấn con> Thuộc tính trong SELECT cuả truy vấn con CÙNG kiểu dữ liệu thuộc tính trong WHERE của truy vấn cha Không nhất thiết liệt kê thuộc tính ở mệnh đề SELECT của câu truy vấn con EXISTS
  • 51. PHÉP KẾT 51 Làm thế nào để lấy thông tin chi tiết (tên mặt hàng, số lượng, giá bán) các mặt hàng trong đơn hàng? PHÉP KẾT
  • 52. PHÉP KẾT 52 - Dùng khi truy xuất dữ liệu từ nhiều bảng - Liên kết 2 hay nhiều bảng với nhau dựa trên 1 thuộc tính Các loại phép kết Phép kết tự nhiên JOIN Phép kết trong INNER JOIN Phép kết trái LEFT JOIN Phép kết phải RIGHT JOIN Phép kết ngoài OUTER JOIN
  • 53. PHÉP KẾT 53 SELECT <danh sách thuộc tính> FROM Table1 tbl1 JOIN Table2 tbl2 ON tbl1.ThuocTinh = tb2.ThuocTinh INNER JOIN LEFT JOIN RIGHT JOIN OUTER JOIN MaMH TenMH Loai 001 Áo sơ mi A 002 Đầm B 003 Jean C 004 Áo thun A MaMH SoHD SoLuong 001 001 3 003 002 2
  • 54. JOIN 54 SELECT * FROM Mathang a JOIN ChiTietDonHang bON a.maMH = b.MaMH MaMH TenMH Loai 001 Áo sơ mi A 002 Đầm B 003 Jean C 004 Áo thun A MaMH SoHD SoLuong 001 001 3 003 002 2 MaMH TenMH Loai MaMH SoHD SoLuong 001 Áo sơ mi A 001 001 3 003 Jean C 003 002 2 INNER JOIN
  • 55. LEFT JOIN 55 SELECT * FROM Mathang a LEFT JOIN ChiTietDonHang bON a.maMH = b.MaMH MaMH TenMH Loai 001 Áo sơ mi A 002 Đầm B 003 Jean C 004 Áo thun A MaMH SoHD SoLuong 001 001 3 003 002 2 MaMH TenMH Loai MaMH SoHD SoLuong 001 Áo sơ mi A 001 001 3 002 Đầm B Null Null Null 003 Jean C 003 002 2 004 Áo thun A Null Null null
  • 56. RIGHT JOIN 56 SELECT * FROM ChiTietDonHang a RIGHT JOIN Mathang bON a.maMH = b.MaMH MaMH TenMH Loai 001 Áo sơ mi A 002 Đầm B 003 Jean C 004 Áo thun A MaMH SoHD SoLuong 001 001 3 003 002 2 MaMH SoHD SoLuong MaMH TenMH Loai 001 001 3 001 Áo sơ mi A Null Null Null 002 Đầm B 003 002 2 003 Jean C Null Null null 004 Áo thun A
  • 57. OUTER JOIN 57 SELECT * FROM ChiTietDonHang a OUTER JOIN Mathang bON a.maMH = b.MaMH MaMH TenMH Loai 001 Áo sơ mi A 002 Đầm B 003 Jean C 004 Áo thun A MaMH SoHD SoLuong 001 001 3 003 002 2 005 004 1 MaMH SoHD SoLuong MaMH TenMH Loai 001 001 3 001 Áo sơ mi A Null Null Null 002 Đầm B 003 002 2 003 Jean C Null Null null 004 Áo thun A 005 004 1 Null Null Null