Bài 14: Chủ đề: SQL – Ngôn ngữ kiểm soát cơ sở dữ liệu - Tin học 11 Kết nối tri thức

Web Publisher User

 

Chủ đề: SQL – Ngôn ngữ kiểm soát cơ sở dữ liệu

Chào các bạn, ở các bài trước chúng ta đã biết Cơ sở dữ liệu (CSDL) giống như một nhà kho thông tin khổng lồ. Vậy làm thế nào để chúng ta có thể "giao tiếp" với người quản lý kho (Hệ quản trị CSDL) để yêu cầu lấy đồ, cất đồ, hay sắp xếp lại đồ đạc? Đó chính là lúc chúng ta cần đến SQL!

SQL (Structured Query Language) dịch nôm na là "Ngôn ngữ truy vấn có cấu trúc". Nghe thì "nguy hiểm" vậy thôi, nhưng thực chất nó là một bộ các câu lệnh tiếng Anh rất đơn giản mà chúng ta dùng để "ra lệnh" cho CSDL.

Tại sao phải dùng SQL?

Hãy tưởng tượng bạn muốn tìm danh sách các bản nhạc của nhạc sĩ "Jack" trong một thư viện nhạc số. Có hai cách:

Cách 1 (Dùng ngôn ngữ lập trình như Python): Bạn phải tự viết một chương trình: Mở file dữ liệu à Đọc từng dòng một à Tách thông tin của dòng đó ra à Kiểm tra xem tên nhạc sĩ có phải "Jack" không à Nếu đúng thì lấy ra tên bản nhạc à In ra màn hình. Cách này rất dài dòng, phức tạp và nếu lần sau muốn tìm nhạc của "Trịnh Công Sơn", bạn lại phải sửa chương trình.

Cách 2 (Dùng SQL): Bạn chỉ cần viết một câu lệnh duy nhất và gửi cho "người quản kho":
SELECT TenBN FROM BanNhac WHERE TenNhacSi = 'Jack';

Bạn thấy không? Với SQL, bạn chỉ cần nói ra điều mình muốn, chứ không cần chỉ cho "người quản kho" phải làm như thế nào. Mọi việc phức tạp còn lại, hệ thống sẽ tự lo. Đó chính là sức mạnh của SQL!

SQL (Structured Query Language) là Ngôn ngữ truy vấn có cấu trúc, một tiêu chuẩn quốc tế để quản lý và tương tác với cơ sở dữ liệu.


PHẦN 1: NHÓM LỆNH DDL

Trước khi cất đồ đạc, chúng ta cần xây nhà đã! Nhóm lệnh DDL (Data Definition Language - Ngôn ngữ định nghĩa dữ liệu) giúp chúng ta làm việc này: tạo ra CSDL, tạo ra các "căn phòng" (bảng) để chứa dữ liệu.

1. Tạo Cơ sở dữ liệu

Lệnh CREATE DATABASE dùng để tạo ra một CSDL mới hoàn toàn. Giống như bạn mua một mảnh đất để chuẩn bị xây nhà vậy.

Lưu ý: Nếu bạn đang thực hành trên hệ thống TTKT SQL Editor thì bạn sẽ không thể sử dụng lệnh này!

Cú pháp: CREATE DATABASE ten_co_so_du_lieu;

Ví dụ: Chúng ta muốn quản lý thông tin học sinh của trường. Hãy tạo một CSDL tên là QuanLyHocSinh.

      CREATE DATABASE QuanLyHocSinh;

   

2. Tạo Bảng

Khi đã có "mảnh đất" QuanLyHocSinh, chúng ta cần xây các "căn phòng" (bảng) để chứa thông tin cụ thể. Ví dụ: phòng HocSinh để lưu thông tin học sinh, phòng LopHoc để lưu thông tin các lớp.

Lệnh CREATE TABLE sẽ giúp chúng ta. Khi tạo bảng, ta phải định nghĩa các "cột" (trường) và "kiểu dữ liệu" cho mỗi cột.

Kiểu dữ liệu là gì? Nó quy định loại thông tin mà cột đó sẽ chứa. Ví dụ:

INT

INTEGER

Chứa số nguyên (tuổi, sĩ số lớp...)

VARCHAR(n)

Chứa một đoạn văn bản (text) có độ dài thay đổi, nhưng không quá n ký tự (họ tên, địa chỉ...)

CHAR(n)

CHARACTER(n)

Chứa một đoạn văn bản có độ dài cố định n ký tự (mã học sinh, mã lớp...)

DATE

Chứa ngày tháng năm (ngày sinh)

TIME

Chứa thời gian theo định dạng HH:MM:SS (giờ vào lớp)

BOOLEAN

Chỉ chứa 1 trong 2 giá trị: Đúng (True/1) hoặc Sai (False/0)

REAL

Chứa số thực có dấu phẩy động gần giống với FLOAT

FLOAT

Chứa số thực có độ chính xác cao hơn và có thể lưu trữ các giá trị lớn hơn so với REAL

 

Cú pháp:

CREATE TABLE ten_bang (

    ten_cot_1 KIEU_DU_LIEU,

    ten_cot_2 KIEU_DU_LIEU,

    ...

    PRIMARY KEY (ten_cot_lam_khoa_chinh)

);

   

Ví dụ: Tạo bảng HocSinh trong CSDL QuanLyHocSinh.

CREATE TABLE HocSinh (

    MaHS CHAR(5),          -- Mã học sinh, ví dụ 'HS001', có 5 ký tự

    HoTen VARCHAR(50),     -- Họ tên, tối đa 50 ký tự

    NgaySinh DATE,         -- Ngày sinh theo dạng 'NĂM-THÁNG-NGÀY'

    DiemToan REAL,         -- Điểm toán, là số thực

    PRIMARY KEY (MaHS)     -- Khai báo MaHS là khóa chính

);

 

3. Các lệnh khác

Câu lệnh SQL

Ý nghĩa

ALTER TABLE

Thay đổi định nghĩa bảng

PRIMARY KEY

Khai báo khóa chính

FOREIGN KEY ... REFERENCES ...

Khai báo khóa ngoại

RENAME TO

Đổi tên bảng

ADD COLUMN

Thêm cột mới

RENAME COLUMN ... TO ...

Đổi tên cột

Lưu ý: Hệ thống  TTKT SQL Editor không hỗ trợ thay đổi PRIMARY KEYFOREIGN KEY bảng đã có sẵn

Vi dụ: Khởi tạo CSDL âm nhạc, đặt tên là music và khởi tạo các bảng Nhạc sĩ, Bản nhạc có tên tương ứng là nhacsi và bannhac.

A screenshot of a computer program

AI-generated content may be incorrect.

 

PHẦN 2: LỆNH DML

Nhà đã xây xong, giờ là lúc "dọn đồ vào ở": thêm, xem, sửa, xóa dữ liệu. Nhóm lệnh DML (Data Manipulation Language - Ngôn ngữ thao tác dữ liệu) sẽ giúp chúng ta.

1. Thêm dữ liệu - INSERT INTO

Dùng để thêm một hàng dữ liệu mới vào bảng.

Cú pháp: INSERT INTO ten_bang (cot1, cot2, ...) VALUES (giatri1, giatri2, ...);

Ví dụ: Thêm 2 bạn học sinh mới vào bảng HocSinh.

-- Thêm bạn An

INSERT INTO HocSinh (MaHS, HoTen, NgaySinh, DiemToan)

VALUES ('HS001', 'Nguyễn Văn An', '2007-05-20', 8.5);

 

-- Thêm bạn Bình

INSERT INTO HocSinh (MaHS, HoTen, NgaySinh, DiemToan)

VALUES ('HS002', 'Trần Thị Bình', '2007-09-12', 9.0);

 

2. Lấy dữ liệu - SELECT

Đây là lệnh quan trọng và được dùng nhiều nhất! Nó giúp chúng ta xem và lấy dữ liệu ra khỏi bảng.

Cú pháp cơ bản: SELECT ten_cot FROM ten_bang;

Câu truy xuất dữ liệu

Ý nghĩa

SELECT <dữ liệu cần lấy>

<dữ liệu cần lấy> có thể là danh sách các trường hoặc hàm với biến là trường

   FROM <tên bảng>

Chỉ định bảng cần truy vấn dữ liệu

   WHERE <điều kiện chọn>

Chỉ định chọn các dòng thỏa mãn điều kiện xác định

   ORDER BY <tên trường>

Sắp xếp các dòng kết quả theo thứ tự được chỉ định

 

Ví dụ 1: Xem toàn bộ thông tin của tất cả học sinh trong cơ sở dữ liệu đã được lưu trữ sẵn
Dấu * đại diện cho "tất cả các cột".

      SELECT * FROM HocSinh;

Kết quả:

A screenshot of a computer

AI-generated content may be incorrect.

Ví dụ 2: Chỉ xem Họ tên và Điểm toán

      SELECT HoTen, DiemToan FROM HocSinh;

Kết quả:

A screenshot of a computer

AI-generated content may be incorrect.

Thêm điều kiện lọc kết quả dữ liệu trả về với câu lệnh WHERE
WHERE giống như một cái rây, giúp ta lọc ra những dòng thỏa mãn điều kiện.


Ví dụ 3: Tìm những học sinh có điểm Toán trên 8.5 và tìm học sinh có điểm Toán giảm dần

      SELECT * FROM HocSinh WHERE DiemToan > 8.5;

Kết quả:

A screenshot of a computer

AI-generated content may be incorrect.

 

      SELECT HoTen, DiemToan FROM HocSinh ORDER BY DiemToan DESC;

    • ASC: Tăng dần (mặc định)
    • DESC: Giảm dần

Kết quả:

A screenshot of a computer

AI-generated content may be incorrect.

 

3. Sửa dữ liệu - UPDATE

Dùng để cập nhật, thay đổi dữ liệu của các hàng đã có sẵn.

Chú ý: Luôn luôn dùng WHERE khi UPDATE. Nếu không, bạn sẽ sửa tất cả các dòng trong bảng!

Cú pháp: UPDATE ten_bang SET ten_cot = gia_tri_moi WHERE dieu_kien;

Ví dụ: Bạn "Nguyễn Văn An" kiểm tra lại bài và được cộng thêm 0.5 điểm. Ta cần cập nhật điểm của bạn ấy.

UPDATE HocSinh

SET DiemToan = 9.0

WHERE MaHS = 'HS001';

   

4. Xóa dữ liệu - DELETE

Dùng để xóa một hoặc nhiều hàng ra khỏi bảng.

Chú ý CỰC KỲ QUAN TRỌNG: Giống như UPDATE, luôn luôn dùng WHERE khi DELETE trừ khi bạn thật sự muốn xóa sạch cả bảng.

Cú pháp: DELETE FROM ten_bang WHERE dieu_kien;

Ví dụ: Xóa học sinh có mã 'HS002' ra khỏi CSDL.

      DELETE FROM HocSinh WHERE MaHS = 'HS002';

 

PHẦN 3: LỆNH JOIN

Thông tin thường không nằm ở một nơi. Ví dụ, bảng HocSinh lưu điểm, còn bảng LopHoc lưu tên giáo viên chủ nhiệm. Làm sao để xem "Học sinh A do cô giáo nào chủ nhiệm?"

Đó là lúc ta cần JOIN để kết nối các bảng lại với nhau thông qua các cột chung (khóa chính - khóa ngoại).

Ví dụ: Giả sử ta có thêm bảng LopHoc:

CREATE TABLE LopHoc (

    MaLop CHAR(4),

    TenLop VARCHAR(10),

    GVCN VARCHAR(50),

    PRIMARY KEY (MaLop)

);

Và ta thêm cột MaLop vào bảng HocSinh để biết học sinh đó thuộc lớp nào.
Bây giờ, để xem tên học sinh và tên giáo viên chủ nhiệm của họ, ta dùng
INNER JOIN.

SELECT HocSinh.HoTen, LopHoc.GVCN

FROM HocSinh

INNER JOIN LopHoc ON HocSinh.MaLop = LopHoc.MaLop;

Lệnh này có nghĩa là: "Hãy lấy cột HoTen từ bảng HocSinh và cột GVCN từ bảng LopHoc, bằng cách ghép 2 bảng này lại với nhau tại những dòng nào có MaLop bằng nhau."

 

PHẦN 4: BẢO MẬT VÀ PHÂN QUYỀN

Phần này nâng cao hơn, giúp bảo mật CSDL. "Bảo vệ" sẽ quyết định ai được làm gì.

Lưu ý: Nếu bạn đang thực hành trên hệ thống TTKT SQL Editor thì bạn sẽ không thể sử dụng lệnh này!

  • GRANT: Cấp quyền (ví dụ: cấp quyền chỉ được xem, không được sửa, xóa).
  • REVOKE: Thu hồi quyền.

Ví dụ: Cấp cho người dùng tên tuan quyền được dùng lệnh xem (SELECT) bảng HocSinh.

GRANT SELECT

ON HocSinh

TO tuan;

Ví dụ: Cấp cho người dùng tên tuan quyền được dùng lệnh xem (SELECT) tất cả các bảng trong CSDL MyDb.

GRANT SELECT

ON MyDb.*

TO tuan;

Ví dụ: Thu hồi quyền được dùng lệnh xem (SELECT) bảng HocSinh của người dùng tuan.

REVOKE SELECT

ON HocSinh

TO tuan;

 


PHẦN 5: LUYỆN TẬP

Giờ hãy thử sức với một bài toán nhỏ nhé! Chúng ta sẽ quản lý một thư viện sách.

Tạo bảng: Hãy viết lệnh SQL để tạo bảng Sach với các cột sau:

MaSach (CHAR(5))

TenSach (VARCHAR(100))

TacGia (VARCHAR(50))

NamXuatBan (INT)

Thêm dữ liệu: Viết lệnh để thêm 2 cuốn sách sau vào bảng:

('S0001', 'Dế Mèn Phiêu Lưu Ký', 'Tô Hoài', 1941)

('S0002', 'Lão Hạc', 'Nam Cao', 1943)

Truy vấn: Viết lệnh để:

a. Lấy ra tất cả thông tin các cuốn sách.

b. Lấy ra Tên sách và Tác giả của những cuốn sách được xuất bản sau năm 1942.

c. Tìm thông tin của cuốn sách có tên 'Dế Mèn Phiêu Lưu Ký'.

 

CLICK VÀO ĐÂY ĐỂ TRUY CẬP TRANG THỰC HÀNH, HOẶC SCAN QR CODE BÊN DƯỚI:

 

 

Đăng nhận xét

Chúng tôi rất vui khi bạn muốn đóng góp ý kiến. Để đảm bảo môi trường trao đổi lành mạnh, vui lòng tuân thủ các quy định sau:

1. Sử dụng tiếng Việt có dấu đầy đủ, tránh viết tắt.
2. Bình luận sẽ được kiểm duyệt trước khi công khai.
3. Tôn trọng người khác và đóng góp ý kiến xây dựng.
4. Tuân thủ chính sách của Google và TTKT.

Cảm ơn bạn đã đồng hành cùng chúng tôi!

CẢNH BÁO

Gần đây, chúng tôi phát hiện nội dung bị chụp màn hình và chia sẻ trái phép. TTKT khuyến cáo bạn không nên chụp màn hình mà hãy chia sẻ link đến bài viết để tôn trọng tác giả và tránh bị vô hiệu hóa tài khoản.

Yêu cầu Đăng nhập

Để tiếp tục sử dụng, vui lòng đăng nhập.