1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Hệ quản trị cơ sở dữ liệu SQL Server: Chương 3 - Nguyễn Thị Mỹ Dung

22 15 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 22
Dung lượng 9,33 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Hệ quản trị cơ sở dữ liệu SQL Server: Chương 3 Transact-SQL và truy vấn dữ liệu cung cấp cho người học những kiến thức như: Ngôn ngữ xử lý dữ liệu; Tìm kiếm trên một bảng; Tìm kiếm trên nhiều bảng; Truy vấn con lồng nhau; Sắp xếp; Nhóm dữ liệu và thống kê.

Trang 1

GVPT: NGUYỄN THỊ MỸ DUNG

SỐ TC: 2

SỐ TIẾT: LT: 20; TH: 20

1

Biên soạn: Nguyễn Thị Mỹ Dung

Chương 1: Tổng quan về SQL Server (LT: 2) Chương 2: Tạo và quản trị CSDL (LT: 6; TH: 6) Chương 3: Transact-SQL và truy vấn dữ liệu

Trang 2

I Ngôn ngữ xử lý dữ liệu (DML - Data lation Language): thêm, sửa, xóa

Manipu-II Tìm kiếm trên một bảng III Tìm kiếm trên nhiều bảng

IV Truy vấn con lồng nhau

V Sắp xếp

VI Nhóm dữ liệu và thống kê

Bài tập chương 3

Biên soạn: Nguyễn Thị Mỹ Dung 3

1 Thêm dữ liệu vào bảng

Dạng 1: Thêm 1 dòng dữ liệu

INSERT INTO <Tên_bảng> [(ds_thuộc_tính)]

VALUES (<gt1>, <gt2>, …, <gtn>)

Dạng 2: Thêm nhiều dòng dữ liệu

INSERT INTO <Tên_bảng> [(ds_thuộc_tính)]

SELECT <th_tính_1>, …, <th_tính_n>

FROM <ds_bảng>

[ WHERE <đ_kiện>]

Trang 3

Biên soạn: Nguyễn Thị Mỹ Dung 5

Ví dụ 2: Thêm dữ liệu sinh viên SV005 thực hiện tất

cả đề tài.

INSERT INTO SV_DT SELECT ‘SV005’,MADT, N‘Đồng Tháp’, 8 FROM DETAI

Ví dụ 1:

INSERT INTO SV_DT (Masv, MaDT, KQ) VALUES (‘SV001’, ‘DT08’, 8)

Nhận xét:

-Thứ tự các giá trị phải trùng với thứ tự các cột,

- Có thể thêm giá trị NULL ở những thuộc tínhkhông là khóa chínhhoặc NOT NULL,

- Các giátrị thuộc tính khóa không được trùng,

- Câu lệnh INSERT sẽ gặp lỗi nếu vi phạmRBTV (Khóa chính, tham chiếu, trùng tên,…), cácthuộc tính có ràng buộc NOT NULL bắt buộc phải cógiátrị

Trang 4

Biên soạn: Nguyễn Thị Mỹ Dung 7

2 Cập nhật (Sửa) dữ liệu

UPDATE <Tên_bảng>

SET <thuộc_tính1> = <giá_trị_mới1>,…,

<thuộc_tính_n> = <giá_trị_mới_n>, [ FROM <Ds_bảng>]

[ WHERE <Điều_kiện>]

Ví dụ 1:

UPDATE DE_TAI SET KINHPHI = KINHPHI + 2

Ví dụ 2:

UPDATE SINHVIEN SET HOCLUC = 6.2, NAMSINH = 1991 WHERE MASV = ‘SV006’

TRUNCATE TABLE <Tên_bảng>

VD1: Xóa những môn học dưới 20 tiết DELETE FROM MON

WHERE SOTIET < 20

Trang 5

VD2: Xóa bảng điểm của sinh viên khoa Tin học

có điểm bé hơn 2 DELETE FROM KETQUA FROM SINHVIEN S INNER JOIN KHOA K O N

S MAKH = K MAKH WHERE S MASV = KETQUA.MASV AND

TENKH LIKE N' TIN HỌC ' AND DIEM = 4 VD3: Xóa tất cả kết quả của sinh viên

TRUNCATE TABLE KETQUA

Biên soạn: Nguyễn Thị Mỹ Dung 9

VD4: Xóa tất cả những sinh viên chưa tham gia học tập môn học nào.

DELETE FROM SINHVIEN WHERE MASV NOT IN ( SELECT MASV FROM SV_DT)

danh.

Trang 6

Biên soạn: Nguyễn Thị Mỹ Dung 11

Nhận xét:

- Các lệnh UPDATE, DELETE có thể gây ra

vi phạm RBTV ( không cho sửa, xóa , hoặc xóa luôn các dòng dữ liệu tham chiếu hoặc dữ liệu tham chiếu sẽ là Null ).

- Điều kiện trong mệnh đề WHERE sẽ được thực hiện cho các dòng thỏa điều kiện, nếu không

có mệnh đề WHERE toàn bộ bảng sẽ có ảnh hưởng.

- Tránh vi phạm RBTV khi xóa, nên xóa các

dữ liệu bảng nhiều trước, sau đó xóa bảng một.

1 Select không có điều kiện

SELECT * | <Col1,Col2, …, Coln>

FROM <Tên_bảng>

Ví dụ 1: In ra thông tin chi tiết của tất cả sviên

SELECT * FROM sinhvien

Ví dụ 2: In ra mã số, họ tên của tất cả sinh viên SELECT masv, hoten

FROM sinhvien

Trang 7

Biên soạn: Nguyễn Thị Mỹ Dung 13

2/ Select có điều kiện

WHERE ( YEAR ( GETDATE ())-NAMSINH)>21

3 Select với Distinct | All

- Distinct:loại bỏ phần tử trùng nhau

- ALL: lấy tất cả các bộ kể cả phần tử trùngSELECT DISTINCT | All<danh_sách_cột>

SELECTDISTINCT MADTFROMSV_DT

WHERENOIA_D = 'DONG THAP'

Trang 8

Ghi chú:

-Mệnh đề WHEREkết hợp với các toán tử:

AND, OR:kết hợp nhiều điều kiện

[NOT] LIKE: so sánh chuỗi

BETWEEN …AND…: so sánh trong khoảng

IS [NOT] NULL: tìm cácbộ là (không) rỗng

[NOT] IN: tìm trong/ ngoài danh sách

- Các ký tự so sánh đại diện đối với chuỗi: ‘%’

FROM <Tênbảng1> [bídanh1] <loạikếtnối>

<Tênbảng2> [bídanh2] ON<điềukiệnkếtnối>

[WHERE<điềukiệnkếtnối>[AND|OR<điềukiệnchọn>]

CROSS JOINJOIN:: kếtkết liênliên bảngbảng chocho phépphép kếtkết tấttấtcả

cả cáccác bộbộ cócó thểthể cócó (tương(tương tựtự phépphép kếtkết tíchtích đềđề các),các),khiđóđó khôngkhông cầncần bấtbất kỳkỳ điềuđiều kiệnkiện kếtkết nốinối nàonào

Trang 9

Ví dụ 1: Tìm họ tên sinh viên thực hiện tên đề tài, kếtquả từ 9 trở lên

CáchCách 11::

SELECT HOTENSV, TENDT,KETQUAFROM SINHVIEN S,DETAI D, SV_DTSD

WHERES.MASV =SD.MASV ANDSD.MADT= D.MADT

ANDKETQUA >= 9;

CáchCách 22::

SELECTHOTENSV, TENDT,KETQUAFROM( SINHVIEN SINNER JOIN SV_DTSDON

S.MASV =SD.MASV) INNER JOIN DETAI D

ONSD.MADT = D.MADT)WHEREKETQUA >= 9;

Biên soạn: Nguyễn Thị Mỹ Dung 17

Vídụ 2: Tìm họ tên của tất cả sinh viên thực hiện đềtài (có thể có sinh viên không thực hiện đề tài) gồm,

họ tên sinh viên, mã đề tài, kết quảSELECTHOTENSV, MADT, KETQUAFROM SINHVIEN SLEFTJOIN SV_DT SDON

S.MASV =SD.MASVHoặc:

SELECTHOTENSV, MADT, KETQUAFROM SINHVIEN SFULL JOIN SV_DTSDON

S.MASV =SD.MASV

Ghi Ghi chú chú:: SV thựcthực hiệnhiện phépphép kết RightRight JoinJoin,, InnerJoin,, CrossCross JoinJoinđểđể soso sánhsánh kếtkết quảquả hiểnhiển thịthị bằngbằng SQLSQL

Trang 10

2 SELECT với INTO

INTO tạo ra bảng mới với thuộc tính được chọn

 Union [ALL]()SELECT<ds_trường>

FROM<ds_bảng>

[WHERE<điều_kiện>]

UNIONSELECT<ds_trường>

FROM<ds_bảng>

[WHERE<điều_kiện>]

Vídụ: Tìm tất cả họ tênchủ nhiệm và sinh viênUSE QLDETAISVSELECTCHUNHIEMFROMDE_TAI

UNIONSELECTHOTENSVFROMSINHVIEN

Trang 11

Intersect [ALL] ()SELECT<ds_trường>

FROM<ds_bảng>

[WHERE<điều_kiện>]

INTERSECTSELECT<ds_trường>

FROM<ds_bảng>

[WHERE<điều_kiện]

Ví dụ: Tìm MASV cóquê quán cùng với nơi ápdụng đề tài

USE QLDETAISVSELECTMASV, QUEQUAN

FROMSINHVIENINTERSECTSELECTMASV, NOIA_DFROMSV_DT

Biên soạn: Nguyễn Thị Mỹ Dung 21

 Except [ALL](-)SELECT<ds_trường>

FROM<ds_bảng>

[WHERE<điều_kiện>]

EXCEPTSELECT<ds_trường>

FROMSINHVIENEXCEPT

SELECTMASV, NOIA_DFROMSV_DT

Trang 12

Lưu Lưu ý ý 1 1:: Phép giao rs có thể viết theo nhiều cáchnhư sau:

CáchCách 11::

SELECT* FROM rINTERSECT

SELECT* FROM sCách

Cách 22::

SELECT* FROM rWHEREr.cIN(SELECTs.c FROMs)Cách

Cách 33::

SELECT* FROM rWHEREEXISTS (SELECT* FROM s

WHEREs.c=r.c)

Biên soạn: Nguyễn Thị Mỹ Dung 23

Lưu Lưu ý ý 2 2:: Phép trừ r-s có thể viết theo nhiều cách nhưsau:

CáchCách 11::

SELECT*FROMrEXCEPT

SELECT*FROMsCách

Cách 22::

SELECT*FROMrWHEREr.c NOT IN (SELECTs.c FROM s)Cách

Cách33::

SELECT*FROMrWHERE NOT EXISTS (SELECT*FROMs

WHEREs.c=r.c)

Trang 13

Truy vấn con là một câu lệnh SELECT được lồngvào bên trong một câu lệnh SELECT, INSERT,UPDATE, DELETE hoặc bên trong một truy vấn khác.

Biên soạn: Nguyễn Thị Mỹ Dung 25

1 Sử dụng truy vấn con với toán tử IN

Khi cần thực hiện phép kiểm tra giá trị của mộtbiểu thức cóxuất hiện (không xuất hiện) trong tập cácgiá trị của truy vấn con, ta có thể sử dụng toán tử IN(NOT IN) như sau:

WHERE<biểu_thức> [NOT] IN (<truy_vấn_con>)

Vídụ: Tìm những sinh viên khôngthực hiện đề tàiSELECTHOTENSV, HOCLUC

FROMSINHVIENWHEREMASVNOT IN

(SELECTMASV FROM SV_DT)

Trang 14

2 Truy vấn con với EXISTS

Lượng từ EXISTS (NOT E XIS TS) để kiểm traxem một truy vấn con có trả về dòng kết quả nào haykhôngđược sử dụng trong truy vấn con dưới dạng:

WHERE [NOT]EXISTS (<truy_vấn_con>)

Ví dụ: cho biết họ tên của những sinh viên hiệnchưa có điểm thi của bất kỳ một môn học nào

SELECT hosv,tensv FROM sinhvien WHERE NOT EXISTS ( SELECT masv

FROM k etqua WHERE k etqua.masv=sinhvien.masv)

Biên soạn: Nguyễn Thị Mỹ Dung 27

3 Truy vấn con với mệnh đề HAVING

Một truy vấn con có thể được sử dụng trongmệnh đề HAVING của một truy vấn khác Kết quả củatruy vấn con được sử dụng để tạo điều kiện đối vớicác hàmgộp

Ví dụ: Cho biết mã, tên và trung bình điểm thi của

các môn học có trung bình lớn hơn trung bình điểmcủa tất cả các môn học

SELECTKETQUA.MAMH,TENMH, AVG(DIEM)FROMKETQUA,MONHOC

WHEREKETQUA.MAMH = MON.MAMHGROUP BYKETQUA.MAMH,TENMHHAVINGAVG(DIEM) >

(SELECTAVG(DIEM) FROM KETQUA)

Trang 15

4 Thực hiện phép chia với truy vấn lồng nhau

Sử dụng toán tử NOT EXISTS để thực hiện:

Cú pháp:

SELECT * FROM R

WHERE NOT EXISTS ( SELECT *

Biên soạn: Nguyễn Thị Mỹ Dung 29

Vídụ: Tìm thông tin sinh viênthực hiện tấttất cảcảcác đềtài

SELECT*FROM SINHVIENWHERENOT EXISTS (SELECT*FROM DETAI

WHERENOT EXISTS (SELECT*

FROM SV_DTWHERE SV_DT.MADT = DETAI.MADT

ANDSV_DT.MASV =SINHVIEN.MASV))

Trang 16

Cho phép sắp xếp các dòng trong kết quả câu truy vấn theo thứ tự tăng dần (hoặc giảm dần) dựa trên một hoặc nhiều trường làm tiêu chí

ORDER BY <DS trường> ASC | DESC

 ASC: giá trị mặc nhiên, sắp xếp kết quả theo thứ tự tăng dần.

 DESC: sắp xếp kết quả theo thứ tự giảm dần

Biên soạn: Nguyễn Thị Mỹ Dung 31

Ví dụ: In ra thông tin gồm mã số, họ tên và kết quả tương ứng của sinh viên thực hiện các đề tài

có nơi áp dụng ở Đồng Tháp Danh sách được sắp thứ tự giảm dần theo kết quả thực hiện.

SELECT Sinhvien.MaSV, Hoten, KQ FROM Sinhvien INNER JOIN SV_DT

ON Sinhvien.MaSV = SV_DT.MaSV WHERE NoiA_D = N‘Đồng Tháp’

ORDER BY KQ DESC

Trang 17

Sử dụng ORDER BY với TOP

Mệnh đề TOP dùng để hạn chế số bộ trong truyvấn Cú pháp:

SELECT TOP <số_lượng> <ds_trường>

FROM<danh_sách_bảng>

WHERE <điều_kiện>

ORDER BY<danh_sách_trường>ASC|DESC

Vídụ: Tìm những đề tài có kinh phí cao nhất và nhì

SELECTTOP 2 MADTFROM SV_DT

ORDER BYkinhphiDESC

Biên soạn: Nguyễn Thị Mỹ Dung 33

Sử dụng ORDER BY với hàm RANK()

Hàm RANK() dùng để xếp hạng theo ORDER

BY Cú pháp:

SELECT RANK() OVER (ORDER BY <COL>

[ASC | DESC])AS<tên_trường>, <ds_trường>

S.MASV =SD.MASV

Trang 18

Sử dụng ORDER BY với hàm ROW_NUMBER()

Hàm ROW_NUMBER() dùng để đánh số thứ tựdòng theo ORDER BY Cú pháp:

SELECT ROW_NUMBER() OVER(ORDER BY(SELECT <col>))AS<tên_trường>, <ds_trường>

FROM<danh_sách_bảng>

[WHERE <điều_kiện>]

Vídụ: Thêm cột số thứ tự cho truy vấn

SELECTROW_NUMBER() OVER(ORDER BY

(SELECT1)) ASSTT, HOTENSV, KQFROMSINHVIEN SINNER JOIN SV_DTSDON

Các hàm kết tập bao gồm: SUM, MAX, MIN, AVG

và COUNT

Đặt lại tên trường: Trong một số trường hợp têntrường của kết quả truy vấn không phù hợp ta cần đặtlại tên trường

Cú pháp:<Tên_trường_cũ>AS<Tên_trường_mới>

Trang 19

Cách sử dụng các hàm:

a Hàm SUM (<Tên_trường>): Trả về tổng giá

trị của tất cả các dòng của một trường kiểu số

Ví dụ: Tính tổng kinh phí của tất cả các đề tài SELECT SUM (Kinhphi) as Tong_KP

FROM Detai;

b Hàm M AX (<Tên trường>): Trả về giá trị lớn

nhất trong tất cả các dòng của một trường

Ví dụ: Tìm kinh phí lớn nhất của tất cả các đề tài

SELECT MAX(Kinhphi) AS KP_MAX FROM Detai

Biên soạn: Nguyễn Thị Mỹ Dung 37

c Hàm MIN (<Tên trường>): Trả về giá trị nhỏ

nhất trong tất cả các dòng của một trường

Ví dụ: Tìm kinh phí nhỏ nhất của tất cả các đề

tài SELECT MIN(Kinhphi) AS KP_MIN FROM Detai

d Hàm AVG (<Tên_trường>): Trả về giá trị

trung bình cộng của tất cả các dòng một trường kiểu số

Ví dụ: Tính trung bình cộng kinh phí của tất cả

các đề tài SELECT AVG(Kinhphi) AS TBC_KP FROM Detai

Trang 20

e Hàm COUNT (<Tên trường>): Đếm các dòng

trongbảng theo một hoặc một số trường nào đó

Ví dụ 1: In ra số lượng đề tài mà thầy Lê Đức Phúc

làmchủ nhiệmSELECTCOUNT(MaDT) ASSo_DTFROMDetai

WHEREChunhiem = ‘Lê Đức Phúc’

Ví dụ 2: In ra họ tên của các giáo viên chủ nhiệm

từ 2 đề tài trở lênSELECTChunhiem, COUNT(MaDT) ASSoLGFROMDetai

GROUP BYChunhiemHAVING COUNT(MaDT) >= 2

Biên soạn: Nguyễn Thị Mỹ Dung 39

2 Gom nhóm sử dụng Compute, Compute By

Các mệnh đề Compute và Compute By sinh ra cácdòng chitiết và một dòng tổng chính

Compute By sử dụng giống Group By Thứ tự trongCompute Bygiống thứ tự trong Order By

Trang 21

VD1: Liệt kê bảng điểm chi tiết của sinh viên và chobiết điểm trung bình của cả lớp

SELECTS.MASV, (HOSV+' '+TENSV) AS HTSV, DIEMFROMSINHVIEN SINNER JOIN KETQUAKON

S.MASV =K.MASVCOMPUTEAVG(DIEM)

VD 2: Liệt kê bảng điểm chi tiết của sinh viên và chobiết điểm trung bình của từng sinh viên

SELECTS.MASV, (HOSV+' '+TENSV) AS HTSV, DIEMFROMSINHVIEN SINNER JOIN KETQUAKON

S.MASV =K.MASVORDER BYS.MASV

COMPUTEAVG(DIEM)BYS.MASV

Biên soạn: Nguyễn Thị Mỹ Dung 41

3 Gom nhóm tổng hợp với Rollup, Cube

Để thêm các dòng thống kê từng nhóm, thêm toán tử Rollup hoặc Cube với mệnh đề Group by

Trang 22

VD 1: Liệt kê bảng điểm chi tiết của sinh viên và cho biết điểm trung bình của từng sinh viên

SELECT S MASV, (HOSV+' '+TENSV) AS

HOTENSV, MAMH, AVG (DIEM) AS ĐTB FROM SINHVIEN S INNER JOIN KETQUA K

ON S MASV = K MASV GROUP BY S.MASV, HOSV, TENSV, MAMH WITH ROLLUP

VD2: SV thực hiện yêu cầu của VD1 với câu lệnh với CUBE để so sánh kết quả thực hiện.

Biên soạn: Nguyễn Thị Mỹ Dung 43

- Ngôn ngữ xử lý dữ liệu ( Insert , Update , Delete )

- Truy vấn dữ liệu trên một và nhiều bảng ( select

… from … where …)

- Truy vấn sử dụng hàm kết tập (SUM, MAX, MIN , AVG, COUNT)

- Truy vấn sắp xếp dữ liệu ( ORDER BY , TOP ,

RANK , ROW_NUMBER ,…)

- Truy vấn thống kê trên nhóm (GROUP BY ,

Ngày đăng: 13/07/2021, 11:45

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w