Download as pdf or txt
Download as pdf or txt
You are on page 1of 63

Ngôn ngữ Transaction - SQL

Nội dung
❑ Giới thiệu

❑ Ngôn ngữ định nghĩa dữ liệu Create, Drop, Alter

❑ Ngôn ngữ thao tác dữ liệu Insert, update, delete

❑ Ngôn ngữ truy vấn dữ liệu cơ bản

❑ Ngôn ngữ truy vấn dữ liệu nâng cao

4
Giới thiệu
❑ Ngôn ngữ SQL (Structured Query Language) là
ngôn ngữ truy vấn có cấu trúc, dùng để thao
tác với dữ liệu trong cơ sở dữ liệu cũng như tạo
và thay đổi cấu trúc của các cơ sở dữ liệu.
❑ T-SQL bao gồm 3 nhóm:
- Ngôn ngữ định nghĩa dữ liệu (DDL): CREATE, ALTER,
DROP, …
- Ngôn ngữ thao tác dữ liệu (DML): SELECT, INSERT,
UPDATE, …
- Ngôn ngữ điều khiển dữ liệu (DCL): GRANT, REVOKE,

Nội dung
❑ Giới thiệu

❑ Ngôn ngữ định nghĩa dữ liệu Create, Drop, Alter

❑ Ngôn ngữ thao tác dữ liệu Insert, update, delete

❑ Ngôn ngữ truy vấn dữ liệu cơ bản

❑ Ngôn ngữ truy vấn dữ liệu nâng cao

4
Ngôn ngữ định nghĩa dữ liệu
❑ Tạo Database

❑ Xóa Database

❑ Chọn Database
Ngôn ngữ định nghĩa dữ liệu
❑ Tạo lược đồ quan hệ R(A1, A2,…,An)

❑ Ví dụ:
Ngôn ngữ định nghĩa dữ liệu
❑ Lệnh sửa bảng
- Thay đổi cấu trúc bảng
- Thay đổi RBTV

Thêm cột

Xóa cột

Mở rộng cột
Ngôn ngữ định nghĩa dữ liệu
❑ Ví dụ: - thay đổi cấu trúc bảng
Ngôn ngữ định nghĩa dữ liệu
❑ Lệnh sửa bảng
- Thay đổi cấu trúc bảng
- Thay đổi RBTV

Thêm RBTV
Ngôn ngữ định nghĩa dữ liệu
❑ Lệnh sửa bảng
Các ràng buộc
Khóa chính primary key(tên cột)
Khóa ngoại foreign key (tên_cột) references
tên_bảng_tham_chiếu
Duy nhất unique(tên_cột)
check check(điều_kiện)
Ngôn ngữ định nghĩa dữ liệu
❑ Ví dụ: - Thay đổi RBTV

Thêm RBTV
Ngôn ngữ định nghĩa dữ liệu

alter table SinhVien add constraint


SinhVien_GioiTinh_C
check(GioiTinh = N'Nam' or GioiTinh = N'Nữ')
Ngôn ngữ định nghĩa dữ liệu
❑ Xóa RBTV

❑ Lệnh xóa bảng

❑ Ví dụ:
Nội dung
❑ Giới thiệu

❑ Ngôn ngữ định nghĩa dữ liệu Create, Drop, Alter

❑ Ngôn ngữ thao tác dữ liệu Insert, update, delete

❑ Ngôn ngữ truy vấn dữ liệu cơ bản

❑ Ngôn ngữ truy vấn dữ liệu nâng cao

4
Ngôn ngữ thao tác dữ liệu
❑ Lệnh Insert
- Ý nghĩa: Dùng để chèn một hàng hoặc một số hàng cho
bảng.

INSERT INTO (Danh sách các cột)


VALUES (Danh sách các giá trị)

- Ví dụ:
INSERT INTO NHANVIEN (HOTENN, MANV, NS,
DCHI, GT, PHG) VALUES (‘nguyen van A’,
‘ANV123’, '20010210 12:30:00‘, ‘abc’, ‘Nam’,1)
Ngôn ngữ thao tác dữ liệu
❑ Lệnh Update
- Ý nghĩa: Dùng để sửa đổi dữ liệu.
UPDATE <Tên bảng>
SET <Tên cột 1 = Biểu thức 1, Tên cột 2 = Biểu
thức 2…>
[WHERE] <Điều kiện>
- Ví dụ:
HOTENN MANV NS DCHI GT PHG
nguyen van A ANV123 '20010210 12:30:00 abc Nam 1

UPDATE NHANVIEN
SET DCHI=‘xyz’ WHERE MaNV=‘ANV123’
Ngôn ngữ thao tác dữ liệu
❑ Lệnh Delete
- Ý nghĩa: Xoá một số hàng trong bảng.
DELETE FROM <Tên bảng> WHERE
<Điều kiện>

- Ví dụ:
DELETE FROM NHANVIEN WHERE
PHG=1
Nội dung
❑ Giới thiệu

❑ Ngôn ngữ định nghĩa dữ liệu Create, Drop, Alter

❑ Ngôn ngữ thao tác dữ liệu Insert, update, delete

❑ Ngôn ngữ truy vấn dữ liệu cơ bản

❑ Ngôn ngữ truy vấn dữ liệu nâng cao


Nội dung
❑ Ngôn ngữ 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

- Cho phép 1 bảng có nhiều dòng trùng nhau


Truy vấn dữ liệu cơ bản
❑ Câu truy vấn tổng quát
Truy vấn dữ liệu cơ bản
❑ Câu truy vấn tổng quát
- SELECT
◼ Liệt kê các thuộc tính cần hiển thị trong kết quả

◼ Nếu xuất hiện giá trị * nghĩa là xem toàn bộ các

cột của bảng


◼ Nếu sử dụng DISTINCT thì sẽ lấy giá trị đại diện

- FROM
◼ Liệt kê các quan hệ cần thiết, các phép kết
- WHERE
◼ Điều kiện lọc liên quan tới thuộc tính
◼ sử dụng các phép nối luận lý AND, OR, NOT, các
Truy vấn dữ liệu cơ bản
❑ Lệnh SELECT
- Liệt kê các thuộc tính cần hiển thị trong kết quả
- Nếu xuất hiện giá trị * nghĩa là xem toàn bộ các cột
của bảng
- Nếu sử dụng DISTINCT thì sẽ lấy giá trị đại diện
❑ Ví dụ
- Xuất thông tin toàn bộ bảng

- Xuất họ tên và phái của toàn bộ nhân viên


Truy vấn dữ liệu cơ bản
❑ Đặt bí danh, Sử dụng distinct
- Đặt bí danh (Alias) cho
thuộc tính và quan hệ
Tên_cũ AS Tên_mới
Truy vấn dữ liệu cơ bản
❑ Đặt bí danh, Sử dụng distinct
- DISTINCT: trùng chỉ lấy 1 lần

SELECT DISTINCT PHG


FROM NHANVIEN
Truy vấn dữ liệu cơ bản
❑ Thêm điều kiện lọc với WHERE
Truy vấn dữ liệu cơ bản
❑ Mệnh đề WHERE
- Cho biết họ tên của các nhân viên nữ
SELECT HONV, TENLOT, TENNV
FROM NHANVIEN
WHERE PHAI = 'Nu'
- Độ ưu tiên

SELECT MANV, TENNV


FROM NHANVIEN, PHONGBAN
WHERE (TENPHG='Nghien cuu' OR
TENPHG='Quan ly') AND PHG=MAPHG
Truy vấn dữ liệu cơ bản
❑ Mệnh đề Where: các toán tử truy vấn
- Toán tử so sánh: =, >, <, >=, <=, <>
- Toán tử logic: AND, OR, NOT
- Phép toán: +, -, *, /
- BETWEEN…AND
- IS NULL, IS NOT NULL
- LIKE (_%)
- IN, NOT IN
- EXISTS, NOT EXISTS
- SOME, ALL
Truy vấn dữ liệu cơ bản
❑ BETWEEN
SELECT MANV, TENNV
FROM NHANVIEN
WHERE LUONG>20000 AND LUONG<30000

SELECT MANV, TENNV


FROM NHANVIEN
WHERE LUONG BETWEEN 20000 AND 30000
Truy vấn dữ liệu cơ bản
❑ NOT BETWEEN

SELECT MANV, TENNV


FROM NHANVIEN
WHERE LUONG NOT BETWEEN 20000 AND 30000
Truy vấn dữ liệu cơ bản
❑ NULL
- Sử dụng trong trường hợp
◼ Không biết (value unknown)

◼ Không thể áp dụng (value inapplicable)

◼ Không tồn tại (value 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


Truy vấn dữ liệu cơ bản
❑ IS NULL/ IS NOT NULL

SELECT MANV, TENNV


FROM NHANVIEN
WHERE MA_NQL IS NULL

SELECT MANV, TENNV


FROM NHANVIEN
WHERE MA_NQL IS NOT NULL
Truy vấn dữ liệu cơ bản
❑ Toán tử so sánh, phép toán
SELECT TENNV, LUONG*2
FROM NHANVIEN
WHERE MA_NQL='005'

❑ IN, NOT IN

SELECT TENNV, PHG


FROM NHANVIEN
WHERE PHG IN (4,5)
Truy vấn dữ liệu cơ bản
❑ Toán tử LIKE/ NOT LIKE
- So sánh chuỗi tương đối
- Cú pháp: s LIKE p, p có thể chứa % hoặc _
◼ %: thay thế một chuỗi ký tự bất kỳ

◼ _: thay thế một ký tự bất kỳ

❑ Ví dụ:
Truy vấn dữ liệu cơ bản
❑ Các hàm tính toán cơ bản
- COUNT: Đếm số bộ dữ liệu của thuộc tính

- MIN: Tính giá trị nhỏ nhất

- MAX: Tính giá trị lớn nhất

- AVG: Tính giá trị trung bình

- SUM: Tính tổng giá trị các bộ dữ liệu


Truy vấn dữ liệu cơ bản
❑ Tính lương thấp nhất, cao nhất, trung bình và
tổng lương của tất cả nhân viên

❑ Có tất cả bao nhiêu nhân viên?

❑ Bao nhiêu nhân viên có người quản lí?

❑ Tính lương trung bình của các nhân viên theo


từng phòng ban
Truy vấn dữ liệu cơ bản
❑ Tính lương thấp nhất, cao nhất, trung bình và
tổng lương của tất cả nhân viên
Truy vấn dữ liệu cơ bản
❑ Có tất cả bao nhiêu nhân viên?

❑ Bao nhiêu nhân viên có người quản lí?

❑ Tính lương trung bình của các nhân viên theo


từng phòng ban
Truy vấn dữ liệu cơ bản
❑ Mệnh đề FROM
SELECT TENPHG, DIADIEM
PHONGBAN,AS
FROM PHONGBAN DIADIEM_PHG
PB, DIADIEM_PHG AS DD
MAPHG=MAPHG
WHERE PB.MAPHG=DD.MAPHG

SELECT TENNV, NV.NGSINH,


NGSINH, TENTN,
TENTN,
NGSINH
TN.NGSINH
FROM NHANVIEN
NHANVIEN,NV,
THANNHAN
THANNHAN TN
WHERE MANV=MA_NVIEN
Truy vấn dữ liệu cơ bản
❑ Phép kết: Khi thực hiện các truy vấn làm việc
với dữ liệu từ 2 bảng trở nên thì điều kiện xử lý
phức tạp hơn.
- Tự kết nối
- Kết nối nhiều Table
❑ Ví dụ:
- Kiểm tra bảng NHANVIEN có bị nhập trùng hay
không?
Truy vấn dữ liệu cơ bản
❑ Phép kết
- Kết bằngSELECT <danh sách các cột>
FROM R1 [INNER] JOIN R2 ON <biểu thức>
WHERE <điều kiện>

- Kết ngoài

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>
Truy vấn dữ liệu cơ bản
❑ Ví dụ: Tìm mã và tên các nhân viên làm việc tại
phòng ‘Nghien cuu’

SELECT MANV, TENNV


FROM NHANVIEN, PHONGBAN
WHERE TENPHG=‘Nghien cuu’ AND PHG=MAPHG

SELECT MANV, TENNV


FROM NHANVIEN INNER JOIN PHONGBAN ON PHG=MAPHG
WHERE TENPHG=‘Nghien cuu’
Truy vấn dữ liệu cơ bản
❑ Ví dụ: Cho biết họ tên nhân viên và tên phòng
ban mà họ là trưởng phòng nếu có

SELECT TENNV, HONV, TENPHG


FROM NHANVIEN, PHONGBAN
WHERE MANV=TRPHG
Truy vấn dữ liệu cơ bản
❑ Ví dụ: Cho biết họ tên nhân viên và tên phòng
ban mà họ là trưởng phòng nếu có

NHANVIEN join PHONGBAN


MANV=TRPHG

SELECT TENNV, HONV, TENPHG


FROM NHANVIEN LEFT JOIN PHONGBAN ON MANV=TRPHG
Truy vấn dữ liệu cơ bản
❑ Ví dụ: Cho biết họ tên nhân viên và tên phòng
ban mà họ là trưởng phòng nếu có
PHONGBAN join NHANVIEN
TRPHG=MANV

SELECT TENNV, HONV, TENPHG


FROM PHONGBAN RIGHT JOIN NHANVIEN ON MANV=TRPHG
Truy vấn dữ liệu cơ bản
❑ Tìm họ tên các nhân viên và tên các đề án nhân
viên tham gia nếu có

SELECT NV.TENNV, DA.TENDA


FROM (PHANCONG PC JOIN DEAN DA ON
PC.MADA=DA.MADA) RIGHT JOIN NHANVIEN NV ON
PC.MA_NVIEN=NV.MANV
Truy vấn dữ liệu cơ bản
❑ 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
Truy vấn dữ liệu cơ bản
❑ 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ờ
Truy vấn dữ liệu cơ bản
❑ 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 đó
Truy vấn dữ liệu cơ bản
❑ Tìm họ tên của những nhân viên được “Nguyen
Thanh Tung” phụ trách trực tiếp
Truy vấn dữ liệu cơ bản
❑ Gom nhóm: GROUP BY
- Sử dụng hàm gom nhóm trên các bộ trong quan hệ

- Mỗi nhóm bộ bao gồm tập hợp các bộ có cùng giá trị
trên các thuộc tính gom nhóm.

- SQL có mệnh đề GROUP BY để chỉ ra các thuộc tính


gom nhóm, các thuộc tính này phải xuất hiện trong
mệnh đề SELECT
Truy vấn dữ liệu cơ bản
❑ Tính lương trung bình của các nhân viên theo
từng phòng ban
SELECT PHG, AVG(LUONG) AS [lƯƠNG TB]
FROM NHANvIEN
GROUP BY PHG
Truy vấn dữ liệu cơ bản
❑ Với mỗi đề án, liệt kê tên đề án (TENDA) và
tổng số giờ làm việc một tuần của tất cả các
nhân viên tham dự đề án đó
Truy vấn dữ liệu cơ bản
❑ Điều kiện sau gom nhóm: HAVING
- Lọc kết quả theo điều kiện, sau khi đã gom nhóm
- Các điều kiện có liên quan đến thuộc tính GROUP BY
❑ Ví dụ:
- Tìm phòng có số lượng nhân viên Nam trên 2 người
SELECT PHG
FROM NHANvIEN
WHERE PHAI='Nam'
GROUP BY PHG
HAVING COUNT(MANV)>2
Truy vấn dữ liệu cơ bản
❑ Với các phòng ban có mức lương trung bình trên
30,000, liệt kê tên phòng ban và số lượng nhân
viên của phòng ban đó
Truy vấn dữ liệu cơ bản
❑ Sắp xếp kế quả trả về với ORDER BY
- DESC là sắp xếp giảm dần theo bảng mã ASCII
- ASC là sắp xếp tăng dần theo bảng mã ASCII

SELECT TOP(3)*
FROM NHANVIEN
ORDER BY LUONG DESC
Truy vấn dữ liệu nâng cao
❑ TRUY VẤN LỒNG
- Truy vấn lồng là một câu truy vấn mà ở bên trong nội
dung của nó có chứa một câu truy vấn con khác.
- Phân loại: Dựa vào đặc điểm của câu truy vấn con
người ta phân truy vấn lồng thành 2 loại chính
◼ Truy vấn lồng phân cấp: Khi nội dung của câu truy

vấn con độc lập với câu truy vấn cha.


◼ Truy vấn lồng tương quan: Khi nội dung của câu

truy vấn con phụ thuộc vào câu truy vấn cha.
Truy vấn lồng
❑ Truy vấn lồng phân cấp: Khi nội dung của câu
truy vấn con độc lập với câu truy vấn cha.
Truy vấn lồng
❑ Truy vấn lồng tương quan: Khi nội dung của câu
truy vấn con phụ thuộc vào câu truy vấn cha.
Truy vấn lồng
❑ Các vị trí của câu truy vấn con
- Đặt tại mệnh đề SELECT:
◼ Kết quả của câu truy vấn sẽ như là một giá trị của

một thuộc tính.


◼ Ví dụ: với mỗi phòng ban cho biết tên phòng ban

và số lượng nhân viên của phòng ban đó

SELECT P.TENPHG, (SELECT COUNT(*)


SELECT P.TENPHG, FROM
count(N.MANV)
NHANVIEN N
FROM NHANVIEN N, WHERE
PHONGBAN P = P.MAPHG)
N.PHG
WHERE N.PHG = P.MAPHG
AS [SỐ LƯỢNG NV]
GROUP BY P.TENPHG
FROM PHONGBAN P
Truy vấn lồng
❑ Các vị trí của câu truy vấn con
- Đặt tại mệnh đề FROM:
◼ Kết quả của câu truy vấn sẽ xem như là một bảng

dữ liệu, do vậy có thể truy vấn từ bảng dữ liệu


này
◼ Ví dụ: cho biết họ tên và lương các nhân viên

thuộc phòng 5
SELECT T.HONV, T.TENNV, T.LUONG
FROM (SELECT N.HONV, N.TENNV, N.LUONG
FROM NHANVIEN N
WHERE PHG = 5) AS T
Truy vấn lồng
❑ Các vị trí của câu truy vấn con
- Đặt tại mệnh đề WHERE:
◼ Kết quả của câu truy vấn được sử dụng như một

thành phần trong biểu thức điều kiện.


◼ Ví dụ: cho biết họ tên và lương của các nhân viên

thuộc phòng nghiên cứu


SELECT T.HONV, T.TENNV, T.LUONG
FROM NHANVIEN T
WHERE T.PHG =
(SELECT P.MAPHG
FROM PHONGBAN P
WHERE P.TENPHG ='Nghien cuu')
Truy vấn lồng
❑ Truy vấn lồng phân cấp với toán tử IN
- Toán tử IN dùng để kiểm tra một giá trị có nằm trong
một tập hợp nào đó hay không.
Truy vấn lồng
❑ Truy vấn lồng phân cấp với toán tử IN
- Toán tử IN dùng để kiểm tra một giá trị có nằm trong
một tập hợp nào đó hay không.
- Ví dụ: cho biết tên của nhân viên mà không có thân
nhân nào
SELECT TENNV FROM NHANVIEN
WHERE MANV NOT IN
(select DISTINCT MA_NVIEN
from THANNHAN)

You might also like