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

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

67 24 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 67
Dung lượng 2,14 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: Chương 3 Truy vấn SQL cung cấp cho người học những kiến thức như: Thao tác CSDL (tạo, sửa, xoá, thêm dữ liệu); Các câu truy vấn: Select, Insert, Update, Delete; Truy vấn lồng, gom nhóm, điều kiện gom nhóm; Các hàm xử lý dữ liệu; Bài tập thực hành.

Trang 2

NỘI DUNG MÔN HỌC

Trang 3

Chương 3: Truy vấn SQL

I Thao tác CSDL (tạo, sửa, xoá, thêm dữ liệu)

II Các câu truy vấn: Select, Insert, Update,

Trang 4

I Thao tác CSDL

1 Cho CSDL

Ví dụ: Cho các lược đồ quan hệ sau

 Sinhvien (MaSV, Hoten, Namsinh, QQ, Hocluc)

 Detai (MaDT, TenDT, Chunhiem, Kinhphi)

 SVDT (MaSV, MaDT, NoiAD, KQ)

Bảng dữ liệu mẫu như sau:

Sinhvien MaSv Hoten Namsinh QQ Hocluc

SV001 Thái Bình An 1983 Cần Thơ 7.5 SV002 Lê Văn Khang 1985 Vĩnh Long 7.1 SV003 Trần Đức Thịnh 1983 Đồng Tháp 8.1 SV004 Bùi Quốc Vượng 1984 Đồng Tháp 9.2 SV005 Lâm Nhân Nghĩa 1985 Tiền Giang 6.5 SV006 Hà Công Sự 1982 Cần Thơ 6.0 SV007 Hồ Phương Thanh 1985 An giang 8.2

Trang 5

Bảng dữ liệu mẫu (tt)

Detai MaDT TenDT Chunhiem Kinhphi

DT001 Quản lý Nhân sự Nguyễn Thị Xuân 10 DT002 Web site Bán hàng qua mạng Hồ Văn Quang 15 DT003 Bảo mật trong thương mại điện tử Trần Hiếu Hạnh 20 DT004 Quản lý lịch công tác trên mạng Lê Đức Phúc 8 DT005 Bộ soạn thảo công thức toán học Trần Hiếu Hạnh 9 DT006 Web site đào tạo từ xa Lê Đức Phúc 25

SVDT MaSV MaDT Noi_AD KQ

SV001 DT001 Đồng Tháp 9.5 SV002 DT002 Vĩnh Long 9.0 SV003 DT001 Trà Vinh 9.0 SV004 DT002 Đồng Tháp 10.0 SV007 DT004 Trà Vinh 9.0 SV008 DT003 Bạc Liêu 10.0 SV001 DT004 Đồng Tháp 9.5

Trang 7

– Default_exp: dữ liệu của cột nhận giá trị

default_exp nếu người dùng không

Trang 8

Tạo bảng (tt)

CREATE TABLE SINHVIEN (

MASV CHAR(10) PRIMARY KEY ,

CREATE TABLE DETAI(

MADT CHAR(10) PRIMARY KEY ,

TENDT VARCHAR2(40),

CHUNHIEM VARCHAR2(40),

KINHPHI NUMBER

)

Trang 9

Tạo bảng (tt)

CREATE TABLE SVDT (

MASV CHAR(10) NOT NULL,

MADT CHAR(10) NOT NULL,

NOIA_D CHAR(40),

KETQUA FLOAT,

PRIMARY KEY (MASV, MADT),

CONSTRAINT SVDT_SV FOREIGN KEY

(MASV) REFERENCES SINHVIEN (MASV), CONSTRAINT SVDT_DT FOREIGN KEY

(MADT) REFERENCES DETAI(MADT)

Trang 10

Thao tác CSDL (tt)

Kiểu ràng buộc Diễn giải

NULL/NOT NULL Cho phép/không cho phép cột chứa giá

trị rỗng

CHECK (Criteria) Giá trị nhập vào cột phải thỏa Criteria

UNIQUE Giá trị nhập vào cột phải là duy nhất

PRIMARY KEY Ràng buộc khóa chính cho cột

REFERENCES

<Table_name1>

(Column_name1)

Ràng buộc khóa ngoại cho cột sẽ tham

chiếu tới Column_name đã tồn tại trong bảng Table_name

Mô tả:

CONSTRAINT <constraint_name>[<constraint_type>]

Trang 11

Thao tác CSDL (tt)

3 Sửa bảng

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 cột:

ALTER TABLE <Tên_bảng> MODIFY

<Tên_cột> <Kiểu_dữ_liệu_mới>

Trang 12

)

Trang 13

Sửa bảng (tt)

 Mở rộng kiểu dữ liệu cho thuộc tính bảng:

ALTER TABLE HANGHOA

MODIFY DONGIA LONG

Trang 14

Sửa bảng (tt)

Thay đổi RBTV:

ALTER TABLE SINHVIEN ADD

CONSTRAINT fk_sv FOREIGN KEY (MAKHOA)

REFERENCES KHOA(MAKHOA)

ALTER TABLE HANGHOA ADD CONSTRAINT fk_HH

PRIMIRY KEY (MAHG)

Xóa ràng buộc toàn vẹn trong bảng

ALTER TABLE SINHVIEN DROP CONSTRAINT fk_sv

Trang 16

Thao tác dữ liệu bảng (tt)

5 Thêm dữ liệu

INSERT INTO Tênbảng [Cột1, Cột2, …]

VALUES (giátrị1, giátrị2, …)

VD:

INSERT INTO SVDT (Masv, MaDT, KQ)

VALUES (‘SV001’, ‘DT08’, 8)

 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 17

- 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ạm RBTV (Khóa chính, tham chiếu, trùng tên,…), các thuộc tính có ràng buộc NOT NULL bắt buộc phải có giá trị

Trang 18

II Truy vấn Select

1 Định danh

Tạo định danh ( SYNONYM ):Tạo một định danh (tên

gọi tắt) tham chiếu đến một đối tượng của một schema

CREATE SYNONYM < tênđịnhdanh > FOR

<tên schema>.< tên object >

Xóa định danh:

 DROP SYNONYM < tên định danh >

VD: PHONG(MA_PHONG, TEN_PHONG)

CREATE SYNONYM P FOR PHONG;

INSERT INTO P(MA_PHONG, TEN_PHONG) VALUES (1, 'Dao tao');

SELECT * FROM P; # SELECT * FROM PHONG;

Trang 19

Bài tập

Xác định khóa chính?

CONGNHAN (HOTEN_CN, NAMS_CN, NAM_VAO_N,

CH_MON)

THAMGIA (HOTEN_CN, STT_CTR, NGAY_TGIA, SO_NGAY)

KTRUCSU (HOTEN_KTS, NAMS_KTS, PHAI, NOI_TN,

DCHI_LL_KTS)

THIETKE (HOTEN_KTS, STT_CTR, THU_LAO)

CGTRINH (STT_CTR, TEN_CTR, DIACHI_CTR, TINH_THANH,

KINH_PHI, TEN_CHU, TEN_HAU, NGAY_BD)

CHUTHAU (TEN_THAU, TEL, DCHI_THAU)

CHUNHAN (TEN_CHU, DCHI_CHU)

Trang 20

Bài tập (tt)

Xác định khóa ngoại?

CONGNHAN (HOTEN_CN, NAMS_CN, NAM_VAO_N,

THAMGIA (HOTEN_CN, STT_CTR, NGAY_TGIA, SO_NGAY)

KTRUCSU (HOTEN_KTS, NAMS_KTS, PHAI, NOI_TN,

DCHI_LL_KTS)

THIETKE (HOTEN_KTS, STT_CTR, THU_LAO)

CGTRINH (STT_CTR, TEN_CTR, DIACHI_CTR, TINH_THANH,

KINH_PHI, TEN_CHU, TEN_THAU, NGAY_BD)

CHUTHAU (TEN_THAU, TEL, DCHI_THAU)

CHUNHAN (TEN_CHU, DCHI_CHU)

Trang 21

Bài tập (tt)

Tạo Synonym

CREATE SYNONYM <tên định danh>

FOR <tên schema>.<tên object>

CONGNHAN => CN THAMGIA => TG

KTRUCSU => KTS THIETKE => TK

CGTRINH => CgTr CHUTHAU => ChThau

CHUNHAN => ChNhan

Trang 22

Truy vấn Select (tt)

2 Select

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

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

Trang 23

Truy vấn Select (tt)

 Select với Distinct | All

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

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ác bộ 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: ‘%’ (nhiều

Trang 24

Truy vấn Select (tt)

 Select nhiều bảng

SELECT * | <Danhsáchtrường>

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>]

Trong đó <loạikếtnối>:

JOIN : Kết nối trong với cột chỉ định

LEFT OUTER JOIN : kết trái

RIGHT OUTER JOIN : kết phải

FULL OUTER JOIN : kết đầy đủ NATURAL JOIN: kết tự nhiên

CROSS JOIN: kết liên bảng cho phép kết tất

cả các bộ có thể có (tương tự phép kết tích đề-các), khi

đó không cần bất kỳ điều kiện kết nối nào

24

Trang 26

Bài tập select

1 In ra mã số, họ tên của tất cả sinh viên

2 In ra mã số, họ tên của tất cả sinh viên từ 30 tuổi trở

lên

3 Tìm họ tên sinh viên thực hiện tên đề tài, kết quả từ

9 trở lên

4 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ả

5 Tìm tất cả họ tên chủ nhiệm và sinh viên

6 Tìm tất cả MASV có quê quán khác với nơi áp dụng

đề tài

7 Xóa tất cả những sinh viên chưa đăng ký đề tài nào

Trang 28

TRUNCATE TABLE <Tên_bảng>

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

DELETE FROM MON WHERE SOTIET < 20

Trang 29

DELETE FROM SINHVIEN

WHERE EXISTS (SELECT MASV FROM SVDT WHERE SINHVIEN.MASV = SVDT.MASV AND

Trang 30

Truy vấn Select (tt)

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

Trang 31

Bài tập Select

Tìm tên địa chỉ liên lạc các chủ thầu thi công công trình ở Cần Thơ

CGTRINH (STT_CTR, TEN_CTR, DIACHI_CTR,

TINH_THANH, KINH_PHI, TEN_CHU, TEN_THAU,

NGAY_BD)

CHUTHAU (TEN_THAU, TEL, DCHI_THAU)

SQL:

Select TEN_THAU, DCHI_THAU

From CGTRINH CT , CHUTHAU T

Where CT.TEN_THAU = T.TEN_THAU and

Trang 32

Bài tập Select (tt)

1 Tìm tên và địa chỉ liên lạc của các chủ thầu thi công công trình ở Cần Thơ do kiến trúc sư Lê Kim Dung thiết kế

CGTRINH (STT_CTR, TEN_CTR, DIACHI_CTR,

TEN_THAU, NGAY_BD)

SQL: ???

32

Trang 33

TEN_CHU, TEN_THAU, NGAY_BD)

Trang 34

Bài tập Select (tt)

3 Tìm tên, năm sinh, năm vào nghề của công nhân

có chuyên môn hàn hoặc điện tham gia công trình của chủ thầu Lê Văn Sơn?

CONGNHAN ( HOTEN_CN, NAMS_CN, NAM_VAO_N , CH_MON )

THAMGIA (HOTEN_CN, STT_CTR, NGAY_TGIA,

SO_NGAY)

CGTRINH (STT_CTR, TEN_CTR, DIACHI_CTR,

TINH_THANH, KINH_PHI, TEN_CHU , TEN_THAU, NGAY_BD)

SQL???

Trang 35

NGAY_BD)

Trang 36

TINH_THANH, KINH_PHI, TEN_CHU, TEN_THAU, NGAY_BD)

SQL???

Trang 37

Bài tập Select (tt)

6 Tìm tên và năm sinh của kiến trúc sư tốt nghiệp ở tp HCM và thiết kế ít nhất 1 công trình có kinh phí >400?

Trang 39

Truy vấn lồng (tt)

 Mục đích sử dụng:

– Điều kiện tìm kiếm lấy từ kết quả của câu select khác

– Giúp trả lời các câu hỏi

• Tìm dự án thi công dài nhất?

• Tìm kiến trúc sư có thù lao cao nhất?

• Tìm các tác giả có nhiều bài viết nhất?

Trang 40

TRUY VẤN CON LỒNG NHAU (tt)

a 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ột biểu thức có xuất hiện (không xuất hiện) trong tập các giá 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ông thực hiện đề tài

SELECT HOTENSV, HOCLUC FROM SINHVIEN

WHERE MASV NOT IN

(SELECT MASV FROM SV_DT)

Trang 41

TRUY VẤN CON LỒNG NHAU (tt)

b Truy vấn con với EXISTS

Lượng từ EXISTS (NOT EXISTS) để kiểm tra xem một truy vấn con có trả về dòng kết quả nào hay khô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ện chưa

có đăng ký đề tài nào

SELECT hotensv

WHERE NOT EXISTS ( SELECT masv *

Trang 42

TRUY VẤN CON LỒNG NHAU (tt)

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

Một truy vấn con có thể được sử dụng trong mệnh

đề HAVING của một truy vấn khác Kết quả của truy vấn con được sử dụng để tạo điều kiện đối với các hàm gộ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ểm của tất cả các môn học

SELECT KETQUA.MAMH,TENMH, AVG(DIEM)

FROM KETQUA,MONHOC

WHERE KETQUA.MAMH = MON.MAMH

GROUP BY KETQUA.MAMH,TENMH

HAVING AVG(DIEM ) > [All | Any | Some]

(SELECT AVG(DIEM) FROM KETQUA)

Trang 43

TRUY VẤN CON LỒNG NHAU (tt)

d 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:

Trang 44

Phép chia với truy vấn lồng nhau (tt)

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

Trang 45

Truy vấn Select (tt)

2 Gom nhóm Group by

Tạo bảng tạm

WITH <tên bảng tạm> AS (<câu truy vấn con>)

[, <tên bảng tạm> AS (<câu truy vấn con>) [,…]]

Trang 46

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ên trường của kết quả truy vấn không phù hợp ta cần đặt lại tên trường

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

Trang 47

Hàm thống kê (tt)

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 MAX (<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

Trang 48

Cách sử dụng hàm (tt)

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 49

Cách sử dụng hàm (tt)

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

trong bả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àm chủ nhiệm

SELECT COUNT(MaDT) AS So_DT

FROM Detai

WHERE Chunhiem = ‘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ên

SELECT Chunhiem , COUNT(MaDT) AS SoLG FROM Detai

GROUP BY Chunhiem

Trang 50

[ WHERE <Ðiều kiện> ]

HAVING <điều kiện chọn trên nhóm>

Trang 52

GROUP BY (tt)

theo từng chủ thầu

CGTRINH (STT_CTR, TEN_CTR, DIACHI_CTR,

Trang 53

GROUP BY (tt)

trình lớn hơn 25 triệu

THIETKE (HOTEN_KTS, STT_CTR, THU_LAO)

Select HOTEN_KTS, sum (THU_LAO) As

Trang 54

GROUP BY (tt)

trình lớn hơn 25 triệu

THIETKE (HOTEN_KTS, STT_CTR, THU_LAO)

Select count(*) As Solg_KTS

From (Select HOTEN_KTS, sum (THU_LAO)

Having sum (THU_LAO) > 25);

Trang 55

CGTRINH (STT_CTR, TEN_CTR, DIACHI_CTR,

TEN_THAU, NGAY_BD)

with t1 as (

Select STT_CTR, count(*) As TongSoCN

From THAMGIA

Trang 56

Where a.STT_CTR = b.STT_CTR and

TongSoCN = (Select Max (TongSoCN)

Trang 57

IV Các hàm xử lý dữ liệu

1 LENGTH (<chuỗi>): Trả về chiều dài chuỗi

Select LENGTH ('lop DHCNTT') LEN

From Dual len = 10

2 INSTR(<chuỗi a>, <chuỗi con b>,

<vị trí bắt đầu tìm n>,<số lần xuất hiện m>)

 Tìm vị trí chuỗi b trong chuỗi a bắt đầu từ vị trí n,

lần xuất hiện thứ m

 n<0: tìm từ phải sang trái

Select INSTR ('CORORATE FLOOR','OR',3,2)

Trang 58

Các hàm xử lý dữ liệu (tt)

3 SUBSTR (<chuỗi a>, <vị trí bắt đầu cắt lấy n>, <số ký tự cần cắt m>)

 Cắt lấy chuỗi con của chuỗi a, lấy từ vị trí n về

phải m ký tự, nếu không chỉ m thì lấy cho đến cuối chuỗi

 n<0: vị trí cắt đếm từ phải sang trái

Select SUBSTR('ORACLE',1,3) Substring

From Dual ORA

4 CONCAT (<chuỗia>,<chuỗib>): Nối 2 chuỗi a, b

Select CONCAT ('Lop DHCNTT',' Khoa SP Tin') Substring

Toan-From Dual Lop DHCNTT Khoa SP Toan-Tin

Trang 59

Các hàm xử lý dữ liệu (tt)

5 SUBOWER/UPPER/INITCAPSTR (<chuỗi>)

 Chuyển chuỗi thành chuỗi viết thường /hoa /ký

tự đầu các từ viết hoa

6 LTRIM/RTRIM(<chuỗi a>, <chuỗi b>)

 Loại bỏ chuỗi b ở bên trái/ phải chuỗi a

Select LTRIM(‘khoa su pham toan - tin’, ’khoa’) From Dual; su pham toan - tin

Select RTRIM(‘LAST WORDx’, ’xy’) FROM Dual; LAST WORD

Trang 60

Các hàm xử lý dữ liệu (tt)

7 REPLACE (chuỗi a, chuỗi b [,chuỗi c])

 Thay tất cả các chuỗi b có trong chuỗi a bằng

Trang 61

Các hàm xử lý dữ liệu (tt)

8 SYSDATE(chuỗi a, chuỗi b [,chuỗi c])

 Hàm lấy ngày tháng hiện hành của hệ thống

SELECT SYSDATE FROM DUAL

9 EXTRACT (YEAR|MONTH|DAY FROM <chuỗi ngày>) Tách lấy năm|tháng|ngày của <chuỗi ngày>

Select EXTRACT(Month FROM DATE

‘2001-05-07’) FROM Dual; 5

Select EXTRACT(DAY FROM Sysdate)

FROM Dual;

Trang 62

Các hàm xử lý dữ liệu (tt)

10 MONTHS_BETWEEN(<ngày 1>, <ngày 2>)

 Cho biết số tháng giữa <ngày1> và <ngày2>

Trang 63

Các hàm xử lý dữ liệu (tt)

12 NEXT_DAY(<ngày>, <thứ>)

 Cho biết <thứ> sau <ngày> là ngày nào

Select NEXT_DAY(DATE ‘2015-04-10’, 'friday')

Trang 64

Các hàm xử lý dữ liệu (tt)

14 TO_CHAR(<số>): Chuyển số sang chuỗi

TO_CHAR(<ngày>, <chuỗi định dạng>):Chuyển

ngày sang chuỗi theo định dạng

Select TO_CHAR(DATE'2011-09-20',

'DD-MM-YYYY') FROM Dual; ‘20-09-2011’

16 TO_NUMBER(<chuỗi ký số>): Chuyển chuỗi

ký số sang dạng số

Select TO_NUMBER('123')+TO_NUMBER('34')

FROM Dual; => 157

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

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