[Hệ quản trị cơ sở dữ liệu] Các nhóm lệnh dùng thường xuyên trong các hệ quản trị cơ sở dữ liệu

[Update trong SQL]Truy vấn UPDATE trong SQL được sử dụng để sửa đổi các bản ghi đang tồn tại trong một bảng.
Bạn có thể sử dụng mệnh đề WHERE với truy vấn UPDATE để cập nhật các hàng đã được lựa chọn, nếu không, tất cả các hàng sẽ bị tác động.

Cú pháp

Cú pháp cơ bản của truy vấn UPDATE với mệnh đề WHERE như sau:
UPDATE ten_bang
SET cot1 = giatri1, cot2 = giatri2...., cotN = giatriN
WHERE [dieu_kien];
Cú pháp cơ bản của truy vấn UPDATE với mệnh đề WHERE như sau:

Ví dụ

Bảng SINHVIEN có các bản ghi sau:
+----+---------+-----+-----------+--------+
| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |
+----+---------+-----+-----------+---------+
|  1 | Hoang   |  21 | CNTT      | 4       |
|  2 | Viet    |  19 | DTVT      | 3.0     |
|  3 | Thanh   |  18 | KTDN      |  4      |
|  4 | Nhan    |  19 | CK        |   4.5   |
|  5 | Huong   |  20 | TCNH      |   5     |
+----+---------+-----+-----------+---------+
Ví dụ sau sẽ cập nhật KHOAHOC cho một sinh viên có ID là 4.
SQL> UPDATE SINHVIEN
SET KHOAHOC = 'TTCK'
WHERE ID = 4;
Bây giờ, bảng SINHVIEN sẽ có các bản ghi sau:
+----+---------+-----+-----------+--------+
| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |
+----+---------+-----+-----------+---------+
|  1 | Hoang   |  21 | CNTT      | 4       |
|  2 | Viet    |  19 | DTVT      | 3.0     |
|  3 | Thanh   |  18 | KTDN      |  4      |
|  4 | Nhan    |  19 | TTCK        |   4.5   |
|  5 | Huong   |  20 | TCNH      |   5     |
+----+---------+-----+-----------+---------+
Nếu bạn muốn sửa đổi tất cả giá trị các cột là KHOAHOC và HOCPHI trong bảng này, bạn không cần sử dụng mệnh đề WHERE và khi đó truy vấn UPDATE sẽ như sau:
SQL> UPDATE SINHVIEN
SET KHOAHOC = 'CNTT', HOCPHI = 4;
Bây giờ, bảng SINHVIEN sẽ có các bản ghi sau:
+----+---------+-----+-----------+--------+
| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |
+----+---------+-----+-----------+---------+
|  1 | Hoang   |  21 | CNTT      | 4       |
|  2 | Viet    |  19 | CNTT      | 4    |
|  3 | Thanh   |  18 | CNTT      |  4      |
|  4 | Nhan    |  19 | CNTT        |   4   |
|  5 | Huong   |  20 | CNTT      |   4     |
+----+---------+-----+-----------+---------+
Lệnh INSERT INTO trong SQL được sử dụng để thêm các hàng dữ liệu mới vào một bảng trong Database.

Cú pháp

Có hai dạng cú pháp cho lệnh INSERT INTO trong SQL như sau:
INSERT INTO TABLE_TEN (cot1, cot2, cot3,...cotN)]  
VALUES (giatri1, giatri2, giatri3,...giatriN);
Ở đây, cot1, cot2,...cotN là tên các cột trong bảng mà bạn muốn chèn dữ liệu.
Bạn có thể không cần xác định tên các cột trong truy vấn SQL nếu bạn đang thêm các giá trị cho tất cả cot của bảng đó. Nhưng bạn nên đảm bảo thứ tự của các giá trị là giống như thứ tự các cột trong bảng. Cú pháp của lệnh INSERT INTO này như sau:
INSERT INTO TABLE_TEN VALUES (giatri1,giatri2,giatri3,...giatriN);

Ví dụ

Các lệnh dưới đây sẽ tạo 4 bản ghi trong bảng SINHVIEN:
INSERT INTO SINHVIEN (ID,TEN,TUOI,KHOAHOC,HOCPHI)
VALUES (1, 'Hoang', 21, 'CNTT', 4.0 );

INSERT INTO SINHVIEN (ID,TEN,TUOI,KHOAHOC,HOCPHI)
VALUES (2, 'Viet', 19, 'DTVT', 3.0 );

INSERT INTO SINHVIEN (ID,TEN,TUOI,KHOAHOC,HOCPHI)
VALUES (3, 'Thanh', 18, 'KTDN', 4.0 );

INSERT INTO SINHVIEN (ID,TEN,TUOI,KHOAHOC,HOCPHI)
VALUES (4, 'Nhan', 19, 'CK', 4.5 );
Bạn có thể tạo thêm một bản ghi trong bảng SINHVIEN bởi sử dụng cú pháp thứ hai như sau:
INSERT INTO SINHVIEN 
VALUES (5, 'Huong', 20, 'TCNH', 5.0 );
Tất cả lệnh trên sẽ tạo các bản ghi sau trong bảng SINHVIEN:
+----+---------+-----+-----------+--------+
| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |
+----+---------+-----+-----------+---------+
|  1 | Hoang   |  21 | CNTT      | 4.0       |
|  2 | Viet    |  19 | DTVT      | 3.0     |
|  3 | Thanh   |  18 | KTDN      |  4.0      |
|  4 | Nhan    |  19 | CK        |   4.5   |
|  5 | Huong   |  20 | TCNH      |   5.0     |
+----+---------+-----+-----------+---------+

Chèn dữ liệu vào một bảng bởi sử dụng bảng khác

Bạn có thể chèn dữ liệu vào một bảng thông qua một lệnh SELECT bởi sử dụng bảng khác mà có một tập hợp các trường, là cần thiết để chèn dữ liệu cho bảng đầu tiên. Dưới đây là cú pháp:
INSERT INTO ten_bang_dau_tien [(cot1, cot2, ... cotN)] 
   SELECT cot1, cot2, ...cotN 
   FROM ten_bang_thu_hai
   [WHERE dieu_kien];
Lệnh SELECT trong SQL được sử dụng để lấy dữ liệu từ một bảng trong Database mà trả về dữ liệu ở dạng bảng dữ liệu kết quả. Những bảng dữ liệu kết quả này được gọi là các tập hợp kết quả.

Cú pháp

Cú pháp cơ bản của lệnh SELECT trong SQL như sau:
SELECT cot1, cot2, cotN FROM ten_bang;
Ở đây, cot1, cot2, … là các trường của một bảng có các giá trị mà bạn muốn lấy. Nếu bạn muốn lấy tất cả các trường có sẵn trong bảng, bạn có thể sử dụng cú pháp sau.
SELECT * FROM ten_bang;

Ví dụ

Bạn xét bảng SINHVIEN có các bản ghi sau:
+----+---------+-----+-----------+--------+
| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |
+----+---------+-----+-----------+---------+
|  1 | Hoang   |  21 | CNTT      | 4       |
|  2 | Viet    |  19 | DTVT      | 3     |
|  3 | Thanh   |  18 | KTDN      |  4      |
|  4 | Nhan    |  19 | CK        |   4.5   |
|  5 | Huong   |  20 | TCNH      |   5     |
+----+---------+-----+-----------+---------+
Ví dụ sau sẽ lấy các trường ID, TEN, và HOCPHI của sinh viên có trong bảng đó.
SQL> SELECT ID, TEN, HOCPHI FROM SINHVIEN;
Ví dụ trên sẽ cho kết quả:
+----+----------+----------+
| ID | TEN     | HOCPHI   |
+----+----------+----------+
|  1 | Hoang   |  4 |
|  2 | Viet   |  3 |
|  3 | Thanh  |  4 |
|  4 | Nhan |  4.5 |
|  5 | Huong   |  5 |
+----+----------+----------+
Nếu bạn muốn lấy tất cả các trường của bảng SINHVIEN, bạn sử dụng truy vấn sau:
SQL> SELECT * FROM SINHVIEN;
Ví dụ trên sẽ cho kết quả:
+----+---------+-----+-----------+--------+
| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |
+----+---------+-----+-----------+---------+
|  1 | Hoang   |  21 | CNTT      | 4       |
|  2 | Viet    |  19 | DTVT      | 3     |
|  3 | Thanh   |  18 | KTDN      |  4      |
|  4 | Nhan    |  19 | CK        |   4.5   |
|  5 | Huong   |  20 | TCNH      |   5     |
+----+---------+-----+-----------+---------+
Mệnh đề ORDER BY trong SQL được sử dụng để sắp xếp dữ liệu theo thứ tự tăng dần hoặc theo thứ tự giảm dần, trên một hoặc nhiều cột. Một số Database sắp xếp kết quả truy vấn theo thứ tự tăng dần theo mặc định.

Cú pháp

Cú pháp cơ bản của mệnh đề ORDER BY trong SQL như sau:
SELECT danh_sach_cot 
FROM ten_bang 
[WHERE dieu_kien] 
[ORDER BY cot1, cot2, .. cotN] [ASC | DESC];
Bạn có thể sử dụng nhiều hơn một cột trong mệnh đề ORDER BY. Đảm bảo rằng, bất cứ cột nào bạn đang sử dụng để sắp xếp, thì nó phải có trong danh_sach_cot.

Ví dụ

Bảng SINHVIEN có các bản ghi sau:
+----+---------+-----+-----------+--------+
| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |
+----+---------+-----+-----------+---------+
|  1 | Hoang   |  21 | CNTT      | 4       |
|  2 | Viet    |  19 | DTVT      | 3     |
|  3 | Thanh   |  18 | KTDN      |  4      |
|  4 | Nhan    |  19 | CK        |   4.5   |
|  5 | Huong   |  20 | TCNH      |   5     |
+----+---------+-----+-----------+---------+
Ví dụ sau minh họa cách sắp xếp theo thứ tự tăng dần cho TEN và HOCPHI.
SQL> SELECT * FROM SINHVIEN
     ORDER BY TEN, HOCPHI;
Ví dụ trên sẽ cho kết quả:
+----+---------+-----+-----------+--------+
| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |
+----+---------+-----+-----------+---------+
|  1 | Hoang   |  21 | CNTT      | 4       |
|  5 | Huong   |  20 | TCNH      |   5     |
|  4 | Nhan    |  19 | CK        |   4.5   |
|  3 | Thanh   |  18 | KTDN      |  4      |
|  2 | Viet    |  19 | DTVT      | 3     |
+----+---------+-----+-----------+---------+
Ví dụ sau sẽ sắp xếp theo thứ tự giảm dần cho TEN:
SQL> SELECT * FROM SINHVIEN
     ORDER BY TEN DESC;
Ví dụ trên sẽ cho kết quả:
+----+---------+-----+-----------+--------+
| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |
+----+---------+-----+-----------+---------+
|   2 | Viet    |  19 | DTVT      | 3     |
|   3 | Thanh   |  18 | KTDN      |  4      |
| 4 | Nhan    |  19 | CK        |   4.5   |
| 5 | Huong   |  20 | TCNH      |   5     |
| 1 | Hoang   |  21 | CNTT      | 4       |
+----+---------+-----+-----------+---------+
Mệnh đề GROUP BY trong SQL được sử dụng kết hợp với lệnh SELECT để sắp xếp dữ liệu đồng nhất vào trong các nhóm.
Trong SQL, mệnh đề GROUP BY theo sau mệnh đề WHERE trong một lệnh SELECT và ở trước mệnh đề ORDER BY.

Cú pháp

Cú pháp cơ bản của Mệnh đề GROUP BY trong SQL như dưới đây. Mệnh đề GROUP BY phải theo sau các điều kiện trong mệnh đề WHERE và phải đứng trước mệnh đề ORDER BY nếu được sử dụng.
SELECT cot1, cot2
FROM ten_bang
WHERE [ dieu_kien ]
GROUP BY cot1, cot2
ORDER BY cot1, cot2

Ví dụ

Bạn theo dõi bảng SINHVIEN có các bản ghi sau:
+----+---------+-----+-----------+--------+
| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |
+----+---------+-----+-----------+---------+
|  1 | Hoang   |  21 | CNTT      | 4       |
|  2 | Viet    |  19 | DTVT      | 3     |
|  3 | Thanh   |  18 | KTDN      |  4      |
|  4 | Nhan    |  19 | CK        |   4.5   |
|  5 | Huong   |  20 | TCNH      |   5     |
+----+---------+-----+-----------+---------+
Nếu bạn muốn biết tổng số học phí của mỗi sinh viên, thì truy vấn GROUP BY sẽ như sau:
SQL> SELECT TEN, SUM(HOCPHI) FROM SINHVIEN
     GROUP BY TEN;
Ví dụ trên sẽ cho kết quả:
+----------+-------------+
| TEN     | SUM(HOCPHI) |
+----------+-------------+
| Hoang |     4 |
| Huong   |     3 |
| Nhan  |     4 |
| Thanh   |     4.5 |
| Viet    |     5 |
+----------+-------------+
Bây giờ, chúng ta có bảng sau với bản sao các tên:
+----+---------+-----+-----------+--------+
| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |
+----+---------+-----+-----------+---------+
|  1 | Hoang   |  21 | CNTT      | 4       |
|  2 | Hoang   |  20 | DTVT      | 3       |
|  3 | Viet    |  19 | DTVT      | 3     |
|  4 | Thanh   |  18 | KTDN      |  4      |
|  5 | Nhan    |  19 | CK        |   4.5   |
|  6 | Huong   |  20 | TCNH      |   5     |
+----+---------+-----+-----------+---------+
Lúc này, nếu bạn muốn biết tổng số học phí của mỗi sinh viên, thì truy vấn GROUP BY sẽ như sau:
SQL> SELECT TEN, SUM(HOCPHI) FROM SINHVIEN
     GROUP BY TEN;
Ví dụ trên sẽ cho kết quả:
+---------+-------------+
| TEN    | SUM(HOCPHI) |
+---------+-------------+
| Hoang |     7 |
| Huong   |     3 |
| Nhan  |     4 |
| Thanh   |     4.5 |
| Viet    |     5 |
+---------+-------------+
Từ khóa DISTINCT trong SQL được sử dụng kết hợp với lệnh SELECT để loại tất cả các bản sao của bản ghi và chỉ lấy các bản ghi duy nhất.
Có thể có tình huống bạn có nhiều bản sao của bản ghi trong một bảng. Trong khi lấy các bản ghi này, nó là hợp lý khi chỉ lấy bản ghi duy nhất thay vì lấy nhiều bản sao của bản ghi đó.

Cú pháp

Cú pháp cơ bản của từ khóa DISTINCT để loại bỏ các bản sao của bản ghi là như sau:
SELECT DISTINCT cot1, cot2,.....cotN 
FROM ten_bang
WHERE [dieu_kien]

Ví dụ

Bảng SINHVIEN có các bản ghi sau:
+----+---------+-----+-----------+--------+
| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |
+----+---------+-----+-----------+---------+
|  1 | Hoang   |  21 | CNTT      | 4       |
|  2 | Viet    |  19 | DTVT      | 3     |
|  3 | Thanh   |  18 | KTDN      |  4      |
|  4 | Nhan    |  19 | CK        |   4.5   |
|  5 | Huong   |  20 | TCNH      |   5     |
+----+---------+-----+-----------+---------+
Đầu tiên, chúng ta xem cách truy vấn SELECT trả về bản sao của HOCPHI:
SQL> SELECT HOCPHI FROM SINHVIEN
     ORDER BY HOCPHI;
Trong kết quả thu được, HOCPHI 4 xuất hiện 2 lần, mà là một bản sao bản ghi từ bảng ban đầu.
+----------+
| HOCPHI   |
+----------+
|  4 |
|  3 |
|  4 |
|  4.5 |
|  5 |
+----------+
Bây giờ, sử dụng từ khóa DISTINCT với truy vấn SELECT trên và theo dõi kết quả:
SQL> SELECT DISTINCT HOCPHI FROM SINHVIEN
     ORDER BY HOCPHI;
Trong kết quả thu được, chúng ta sẽ thấy không có bất kỳ bản sao nào.
+----------+
| HOCPHI   |
+----------+
|  4 |
|  5 |
|  4.5 |
|  5 |
+----------+
Mệnh đề ORDER BY trong SQL được sử dụng để sắp xếp dữ liệu theo thứ tự tăng dần hoặc giảm dần, trên một hoặc nhiều cột. Một số Database sắp xếp kết quả truy vấn theo thứ tự tăng dần theo mặc định.

Cú pháp

Cú pháp cơ bản của mệnh đề ORDER BY được sử dụng để sắp xếp dữ liệu theo thứ tự tăng dần hoặc giảm dần là như sau (ASC là sắp xếp theo thứ tự tăng dần và DESC là giảm dần):
SELECT danh_sach_cot 
FROM ten_bang 
[WHERE dieu_kien] 
[ORDER BY cot1, cot2, .. cotN] [ASC | DESC];
Bạn có thể sử dụng nhiều hơn một cột trong mệnh đề ORDER BY này. Đảm bảo rằng bất cứ cột nào bạn đang sử dụng để sắp xếp, thì nó nên có trong danh_sach_cot.

Ví dụ

Bảng SINHVIEN có các bản ghi sau:
+----+---------+-----+-----------+--------+
| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |
+----+---------+-----+-----------+---------+
|  1 | Hoang   |  21 | CNTT      | 4       |
|  2 | Viet    |  19 | DTVT      | 3     |
|  3 | Thanh   |  18 | KTDN      |  4      |
|  4 | Nhan    |  19 | CK        |   4.5   |
|  5 | Huong   |  20 | TCNH      |   5     |
+----+---------+-----+-----------+---------+
Ví dụ sau sẽ sắp xếp kết quả theo thứ tự tăng dần cho TEN và HOCPHI.
SQL> SELECT * FROM SINHVIEN
     ORDER BY TEN, HOCPHI;
Ví dụ trên sẽ cho kết quả:
+----+----------+-----+-----------+----------+
| ID | TEN     | TUOI | KHOAHOC   | HOCPHI   |
+----+----------+-----+-----------+----------+
|  1 | Hoang |  21 | CNTT    |  4 |
|  5 | Huong   |  20 | TCNH    |  5 |
|  4 | Nhan  |  19 | CK      |  4.5 |
|  3 | Thanh   |  18 | KTDN     |  4 |
|  2 | Viet    |  19 | DTVT        |  3 |
+----+----------+-----+-----------+----------+
Ví dụ dưới đây sắp xếp kết quả theo thứ tự giảm dần cho TEN:
SQL> SELECT * FROM SINHVIEN
     ORDER BY TEN DESC;
Ví dụ trên sẽ cho kết quả:
+----+----------+-----+-----------+----------+
| ID | TEN     | TUOI | KHOAHOC   | HOCPHI   |
+----+----------+-----+-----------+----------+
|  2 | Viet    |  19 | DTVT        |  3 |
|  3 | Thanh   |  18 | KTDN     |  4 |
|  4 | Nhan  |  19 | CK      |  4.5 |
|  5 | Huong   |  20 | TCNH    |  5 |
|  1 | Hoang |  21 | CNTT    |  4 |
+----+----------+-----+-----------+----------+
Để lấy các hàng với thứ tự ưu tiên riêng, truy vấn SELECT sẽ như sau:

SQL> SELECT * FROM SINHVIEN
    ORDER BY (CASE KHOAHOC
    WHEN 'TCNH'   THEN 1
    WHEN 'KTDN'   THEN 2
    WHEN 'CNTT'   THEN 3
    ELSE 100 END) ASC, KHOAHOC DESC;
Ví dụ trên sẽ cho kết quả:
+----+----------+-----+-----------+----------+
| ID | TEN     | TUOI | KHOAHOC   | HOCPHI   |
+----+----------+-----+-----------+----------+
|  5 | Huong   |  20 | TCNH    |  5 |
|  3 | Thanh   |  18 | KTDN     |  4 |
|  1 | Hoang |  21 | CNTT    |  4 |
|  2 | Viet    |  19 | DTVT        |  3 |
|  4 | Nhan  |  19 | CK      |  4.5 |
+----+----------+-----+-----------+----------+
Đầu tiên, sẽ sắp xếp sinh viên theo KHOAHOC theo thứ tự của riêng bạn, sau đó, các KHOAHOC còn lại sẽ được sắp xếp thứ tự tự nhiên. Các KHOAHOC còn lại này cũng sẽ được sắp xếp theo thứ tự chữ cái đảo ngược.
Mới hơn Cũ hơn

Biểu mẫu liên hệ