1. Trang chủ
  2. » Thể loại khác

Tài liệu tham khảo - CITD - Bến Tre Bai 5_Ngon ngu SQL

10 147 0

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 158,2 KB

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

Nội dung

Tài liệu tham khảo - CITD - Bến Tre Bai 5_Ngon ngu SQL tài liệu, giáo án, bài giảng , luận văn, luận án, đồ án, bài tập...

Trang 1

NGÔN NGỮ SQL

Tổng số tiết: 17

Mục tiêu bài học

 Có khả năng dùng SQL để tạo bảng và xoá

bảng

 Có khả năng dùng SQL để thêm, sửa, xoá

dữ liệu

 Có thể thống kê, tổng hợp dữ liệu bằng SQL

3

Tài liệu tham khảo

[1] Lê Tiến Vương (2000), “Nhập môn cơ sở dữ

liệu quan hệ”, NXB Thống Kê.

[2] Nguyễn Đăng Tỵ và Đỗ Phúc (2009), “Giáo

trình Cơ sở dữ liệu”, NXB Đại Học Quốc Gia

Thành phố Hồ Chí Minh, chương 6, trang 97

[3] Nguyễn Thị Ngọc Mai (2007), “Lý thuyết cơ

sở dữ liệu”, tập 1, NXB Lao Động Xã Hội

Nội dung

 Giới thiệu

 Nhóm lệnh định nghĩa và cập nhật sơ đồ CSDL

 Tạo bảng

 Xoá bảng

 Nhóm lệnh cập nhật dữ liệu

 Thêm

 Sửa

 Xoá

 Nhóm lệnh truy vấn dữ liệu

 Truy vấn lựa chọn

 Truy vấn nhóm

 Truy vấn con

 Giải một số bài tập

 Tổng kết chương

ĐỌC THÊM

 Lệnh đổi tên bảng, thêm cột, xoá cột, đổi tên cột

 Lệnh tạo khoá chính

 Lệnh tạo mối quan hệ giữa

2 bảng

 Lệnh thiết lập các ràng buộc toàn vẹn

 …

Trang 2

Giới thiệu

 Các hệ quản trị CSDL cần có ngôn ngữ giao tiếp

giữa người sử dụng với CSDL, gồm:

 Ngôn ngữ định nghĩa và cập nhật sơ đồ CSDL (Data

Definition Language – DDL): Cho phép định nghĩa và thay

đổi cấu trúc các bảng

 Ngôn ngữ thao tác dữ liệu (Data Manipulation Language –

DML): Cho phép thêm, sửa, xoá dữ liệu

 Ngôn ngữ truy vấn dữ liệu (Structured Query Language –

SQL): Cho phép truy vấn các thông tin trong CSDL

6

 Năm 1975, hãng IBM lần đầu tiên đưa ra HQT CSDL

quan hệ System-R với ngôn ngữ giao tiếp là SEQUEL

 Năm 1976 ngôn ngữ SEQUEL được cải tiến thành

SEQUEL2

 Năm 1978-1979 SEQUEL2 được cải tiến và đổi thành

ngôn ngữ truy vấn có cấu trúc (Structured Query

Language – SQL)

 Năm 1986 Viện Tiêu Chuẩn Quốc gia Mỹ (Ameriacan

National Standards Institute – ANSI) đã công nhận và

chuẩn hoá ngôn ngữ SQL Sau đó Tổ chức Tiêu chuẩn

quốc tế (International Standards Organization – ISO)

cũng đã công nhận ngôn ngữ này Đó là chuẩn SQL-86

7

 Tới nay SQL đã qua 3 lần chuẩn hoá (1989,

1992, 1996) nhằm mở rộng các phép toán và tăng cường khả năng bảo mật, tính toàn vẹn

dữ liệu

 Trong tài liệu này, chúng ta tìm hiểu ngôn

ngữ truy vấn dữ liệu dựa trên chuẩn SQL-92

8

Ngôn ngữ định nghĩa và cập nhật sơ đồ CSDL

 Tạo bảng

CREATE TABLE tên_bảng(tên_cột KDL(độ lớn), tên_cột KDL,…)

 KDL (Kiểu dữ liệu) có thể là:

Char(w): Kiểu ký tự

Number(w,s): Kiểu số có kích thước tối đa w ký

tự, trong đó có s chữ số sau dấu chấm thập phân

Date: Kiểu ngày tháng năm

Logical: Kiểu logic 1 byte có giá trị hoặc đúng

(True), hoặc sai (False)

Trang 3

 Ví dụ: Tạo bảng SV(maSV, ht, phai, ns)

CREATE TABLE Sv(maSV Char(4), ht Char(30), phai

Logical, ns Date)

CREATE TABLE Sv(maSV Char(4) Primary Key, ht

Char(30) Not Null, phai Logical Default True, ns Date)

(tham khảo thêm về cú pháp câu lệnh trong tài liệu)

 Xoá bảng

DROP TABLE tên_bảng;

 Ví dụ: Xoá bảng SV đã được tạo ở trên

Drop Table Sv

11

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

 Chỉnh sửa dữ liệu

UPDATE tên_bảng SET <tên_cột = biểu thức> ,…

WHERE <điều_kiện_cập_nhật>;

 Ví dụ 1: Cập nhật số tiết môn CSDL lên 60 tiết

Update Monhoc Set sotiet = 60 Where tenMH=“Cơ sở dữ liệu”

 Tất cả các ví dụ phía sau sẽ thao tác trên CSDL “Quản lý sinh viên” có cấu trúc như sau:

Khoa(maK, tenK) Sinhvien(maSV, hoSV, tenSV, phai, ns, que,maK) Ketqua(maSV, maMH, diem)

Monhoc(maMH, tenMH, st)

Trang 4

 Ví dụ 2: Tăng số tiết cho tất cả các môn lên

5%

Update Monhoc

Set sotiet = sotiet + sotiet*5%

 Ví dụ 3: Đổi số tiết môn TRR thành 90 tiết và

tên môn thành Toán rời rạc

Update Monhoc

Set sotiet=90, tenMH=“Toán rời rạc”

Where maMH=“TRR”

14

 Xoá dữ liệu (xoá các dòng thoả điều kiện)

DELETE FROM tên_bảng

WHERE điều_kiện_xoá

 Ví dụ 1: Xoá các môn học có số tiết lớn hơn

100

Delete from Monhoc

Where st > 100

15

 Ví dụ 2: Xoá môn CSDL

Delete from Monhoc Where tenMH=“Cơ sở dữ liệu”

16

 Thêm 1 dòng

INSERT INTO tên_bảng(cột_1, cột_2,…, cột_n) VALUES (giá_trị_1, giá_trị2,…, giá_trị_n);

 Ví dụ: Thêm môn (“LSD”, “Lịch sử Đảng”, 90) vào quan hệ Monhoc

Insert Into Monhoc(maMH, tenMH, st) Values (“LSD”, “Lịch Sử Đảng”, 90)

Trang 5

Truy vấn dữ liệu

 Truy vấn lựa chọn (đơn giản)

SELECT [DISTINCT] danh_sách_các_cột | *

FROM danh_sách_các_bảng

WHERE [điều_kiện_kết AND điều_kiện_lọc]

ORDER BY cộtsx [ASC | DESC]

 Điều_kiện_kết: Được dùng khi ở mệnh đề

FROM có từ 2 bảng trở lên

 Ví dụ: Liệt kê danh sách sinh viên gồm họ tên,

ngày sinh và tên khoa

Select hoSv, tenSV, ns, tenK

From Sinhvien, Khoa

Where sinhvien.maK = khoa.maK

19

 Điều_kiện_lọc: Có các dạng sau:

 <trường> ss <biểu thức>

Ví dụ: diem >=5

masv= ‘A01’

 <trường> [NOT] BETWEEN <gtrị đầu> AND

<gtrị cuối>

 Ví dụ: diem BETWEEN 5 and 7  Lọc các dòng

có điểm từ 5 đến 7

 Yêu cầu sv làm cách khác tương đương

 <trường> [NOT] IN (tập giá trị)

 Ví dụ: diem IN (6,7,8)  Lọc các dòng có điểm là

6, 7,8

 Yêu cầu sv làm cách khác tương đương

Trang 6

 <trường> [NOT] LIKE “chuỗi”

“chuỗi”: Trong phần “chuỗi”, có thể dùng dấu * đại

diện cho 1 chuỗi ký tự bất kỳ, ? Đại diện cho một

ký tự bất kỳ

 Ví dụ: tenSV LIKE “T*”  Tìm các sv có tên bắt

đầu là ký tự T

22

Các hàm xử lý ngày

 Day(ngày): Trả về ngày

 Month(ngày): Trả về tháng

 Year(ngày): Trả về năm

 getDate(): Trả về ngày tháng năm hiện hành

Các hàm tính toán

 Sum(bthức): Tính tổng

 Avg(bthức): Tính trung bình

 Count(bthức): Đếm số dòng

 Max(bthức): Trả về giá trị lớn nhất trong <bthức>

 Min(bthuc): Trả về giá trị nhỏ nhất trong <bthuc>

23

 Ví dụ 1: Cho ds kết quả học tập của các sinh viên gồm

mã sinh viên, họ tên, tên khoa, tên môn, điểm

Select maSV, hoSV, tenSV, tenK, tenMH, diem From khoa, sinhvien, ketqua, monhoc

Where khoa.maK = sinhvien.maK and

Sinhvien.maSV = ketqua.maSV and Ketqua.maMH = monhoc.maMH

24

 Ví dụ 2: Liệt kê các sinh viên học ở khoa công nghệ thông tin

Select maSV, h oSV, tenSV From Khoa, sinhvien Where khoa.maK = sinhvien.maK and

tenK = “Công nghệ thông tin”

 Ví dụ 3: Liệt kê các sinh viên họ Trần Select maSV, h oSV, tenSV From sinhvien Where h oSV LIKE “Trần*”

Trang 7

 Ví dụ 4: Liệt kê các sinh viên thi môn CSDL từ 8 đến

10 điểm

Select maSV, ht From sinhvien, ketqua, monhoc

Where sinhvien.maSV=ketqua.maSV and

ketqua.maMH=monhoc.maMH and tenMH=“Cơ sở dữ

liệu” and diem between 8 and 10

 Ví dụ 5: Liệt kê các sinh viên học ở khoa

CNTT, sư phạm, và kinh tế

Select maSV, ht from sinhvien

Where maK IN (“CNTT”, “SP”, “KT”)

 Ví du 6: Liệt kê các sinh viên 18, 21 và 25

tuổi

Select maSV, ht from sinhvien

Where year(now())-year(ns) IN (18,21,25)

27

 Ví dụ 7: Cho danh sách sinh viên được sắp xếp theo họ tăng dần

Select * from sinhvien Order by ht

Truy vấn nhóm

 Cú pháp

SELECT danh_sách_các_cột FROM danh_sách_các_bảng WHERE <điều_kiện_kết> AND

<điều_kiện_lọc_trên_dòng>

GROUP BY cột_phân_nhóm,…

HAVING điều_kiện_lọc_trên_nhóm;

Trang 8

 Ví dụ 1: Cho biết điểm trung bình của từng

sinh viên

Select maSV, avg(diem) from ketqua

Group by maSV

 Ví dụ 2: Cho biết điểm cao nhất của từng

môn học

Select maMH, max(diem) from ketqua

Group by maMH

30

 Ví dụ 3: Cho danh sách sinh viên (maSV) có điểm

trung bình lớn hơn hoặc bằng 5

Select maSV from ketqua

Group by masv

Having avg(diem) >=5

 Ví dụ 4: Cho mã sinh viên có điểm trung bình cao

nhất

Select top 1 maSV, avg(diem)

From ketqua

Group by maSV

Order by avg(diem) DESC

31

 Ví dụ 5: Cho tổng số sinh viên hiện có

Select count(maSV) from sinhvien

 Ví dụ 6: Cho biết tổng số sinh viên theo từng khoa

Select maK, count(maSV) from sinhvien Group by maK

 Ví dụ 7: Cho biết điểm cao nhất theo từng môn của sinh viên khoa CNTT

Select maMH, max(diem) From ketqua

Where maK=“CNTT”

Group by maMH

32

Bài tập

 Liệt kê các sv khoa kinh tế có điểm trung bình lớn hơn 8

Select sinhvien.masv, hoSV, tenSV, avg(diem) as diemtb

From ketqua, sinhvien, khoa Where ketqua.masv = sinhvien.masv and sinhvien.mak = khoa.mak and tenK =‘kinh tế’

Group by sinhvien.masv, hoSV, tenSV Having avg(diem) > 8

Trang 9

 Liệt kê các môn có trên 5 sinh viên thi

 Liệt kê các sv nữ, khoa công nghệ thông tin

thi trên 3 môn

 Liệt các sv có điểm trung bình từ 5 trở lên

 Liệt kê các sv chưa từng thi rớt môn nào

Select masv

From ketqua

Group by masv

Having min(diem)>=5

35

 Liệt kê các sv thi rớt môn CSDL

 Cho biết điểm trung bình của từng sinh viên

Select sinhvien.maSV, hoSv, tenSV, avg(diem) as DTB

From ketqua, sinhvien Where ketqua.masv = sinhvien.masv Group by sinhvien.masv, hoSV, tenSV

Truy vấn con

 Cú pháp

SELECT danh_sách_các_cột FROM danh_sách_các_bảng

WHERE cột so_sánh (SELECT… FROM…)

[GROUP BY cột_phân_nhóm,…

HAVING cột so_sánh (SELECT… FROM…)];

Trang 10

 Ví dụ 1: Liệt kê các khoa không có sv

 Phân tích đề:

Tập hợp

tất cả các

khoa

Các khoa

có sv học

-Các khoa không có

sv học Select mak

from sinhvien

Select mak, tenk

from khoa

Select mak, tenk

From Khoa

Where mak NOT IN (Select mak From Sinhvien)

38

 Ví dụ 2: Cho ds các sv chưa thi môn nào

Select maSV, hoSV, tenSV from sinhvien

Where maSV NOT IN (select maSV from ketqua)

Tập hợp

tất cả các

sv

Các sv đã từng dự thi

-Các sv chưa thi môn nào

39

Tổng kết bài

Ngày đăng: 18/12/2017, 20:20

TỪ KHÓA LIÊN QUAN

w