Bạn có thể tự tạo CSDL demo cho riêng mình, nhưng...
Và để nhất quán, giúp bạn có thể theo sát được các ví dụ học SQL trong bài này, mình cũng đã tạo một CSDL demo hoc_lap_trinh_sql (mà mình sẽ dùng trong bài học này).
Bạn có thể tải CSDL demo tại đây, và nhập vào phpmyadmin của bạn (theo hướng dẫn trong video này).
Hướng dẫn Nhập / Xuất cơ sở dữ liệu trên phpmyadmin
Ngoài ra, trong bài học SQL này sẽ có rất nhiều ví dụ. Nếu bạn muốn học SQL thành công thì hãy thực hành chạy ngay các truy vấn trong các ví dụ để ghi nhớ câu lệnh, rèn luyện kỹ năng, hiểu các truy vấn SQL hoạt động ra sao.
Hướng dẫn chạy truy vấn SQL trên phpmyadmin
> Hey bro! Trong các khóa học LẬP TRÌNH PHP, JAVA, PYTHON tại NIIT - ICT Hà Nội đều sẽ dạy các bạn sử dụng SQL. Tham gia ngay nếu bạn muốn học nhanh, đi thực tập sớm nhé. :D
OK.
Giờ hãy tiếp tục bài học SQL của chúng ta....
Lệnh SHOW TABLES được sử dụng để hiển thị tất cả các bảng trong cơ sở dữ liệu MySQL hiện được chọn.
SHOW TABLES;
Trong ví dụ trên, chúng ta đã tạo một cơ sở dữ liệu hoc_lap_trinh_sql
, với một bảng được gọi là hoc_vien
.
Lệnh SHOW COLUMNS hiển thị thông tin về các cột trong một bảng nhất định.
SHOW COLUMNS FROM hoc_vien;
Ví dụ sau hiển thị các cột trong bảng hoc_vien
của chúng ta:
SHOW COLUMNS hiển thị các giá trị sau cho mỗi cột trong bảng:
-
Key: Cho biết cột có được đánh chỉ mục (khóa) hay không
-
Default: Giá trị mặc định được gán cho cột
-
Extra: Có thể chứa bất kỳ thông tin bổ sung nào có sẵn về một cột nhất định
> Ghi chú: Các cột cho bảng hoc_vien
dễ dàng được tạo bằng công cụ PHPMyAdmin.
Câu lệnh SELECT trong SQL
Câu lệnh SELECT trong SQL được sử dụng để chọn dữ liệu từ cơ sở dữ liệu.
Kết quả trả về được lưu trữ trong một bảng kết quả, được gọi là tập kết quả.
Truy vấn có thể lấy thông tin từ các cột đã chọn hoặc từ tất cả các cột trong bảng.
Để tạo một câu lệnh SELECT đơn giản, bạn cần chỉ định (các) tên của (các) cột bạn cần từ bảng nào đó.
Cú pháp của câu lệnh SELECT trong SQL:
SELECT column_list
FROM table_name;
Trong đó:
-
column_list: Là danh sách các cột cần lấy dữ liệu (FirstName, LastName) được phân tách bằng dấu phảy
,
. Nếu chọn tất cả các cột thì có thể thay thế bằng dấu * (Ví dụ: SELECT * FROM hoc_vien;
)
-
table_name: Tên của bảng mà bạn cần xuất thông tin từ đó
Dưới đây là dữ liệu từ bảng hoc_vien của chúng ta:
Câu lệnh SQL dưới đây sẽ lấy dữ liệu cột ho_ten
từ bảng hoc_vien
:
SELECT ho_ten
FROM hoc_vien;
Kết quả ta được:
> Ghi chú: Câu lệnh SELECT truy xuất 0 hoặc nhiều hàng từ 1 hoặc nhiều bảng cơ sở dữ liệu.
Truy xuất dữ liệu với tên đầy đủ
Vì trong CSDL có thể có nhiều bảng, và các bảng lại có thể có cột trùng nhau.
Ví dụ, trong bảng hoc_vien
có ho_ten
, trong bảng nhan_vien
cũng có ho_ten
.
Chính vì thế, để đỡ nhầm lẫn, bạn có thể cung cấp tên bảng trước tên cột, bằng cách phân tách chúng bằng dấu chấm.
Các câu sau đây là tương đương:
SELECT ho_ten
FROM hoc_vien;
SELECT hoc_vien.ho_ten
FROM hoc_vien;
Thuật ngữ cho cú pháp nêu trên được gọi là "Fully Qualified Names" của cột đó.
I.3. Quy tắc cú pháp SQL
Bất kỳ ngôn ngữ nào cũng có quy tắc riêng, SQL cũng vậy. Quy tắc cú pháp của SQL là những thứ bạn nên học chúng để làm quen với ngôn ngữ.
Quy tắc cú pháp SQL giúp bạn biết câu lệnh SQL được viết như thế nào sẽ đúng về mặt cú pháp (logic chưa bàn nha)
Viết nhiều câu truy vấn SQL
SQL cho phép bạn chạy nhiều câu truy vấn hoặc lệnh cùng một lúc.
Câu lệnh SQL sau chọn cột ho_ten
và dia_chi
từ bảng hoc_vien
:
SELECT ho_ten
FROM hoc_vien;
SELECT dia_chi
FROM hoc_vien;
Kết quả ta được:
Bên dưới ta lại có thêm một kết quả như thế này
Hãy nhớ kết thúc mỗi câu lệnh SQL bằng DẤU CHẤM PHẨY ;
để cho chương trình biết rằng câu lệnh SQL đã hoàn chỉnh và sẵn sàng được thông dịch.
Trong hướng dẫn tự học SQL này, chúng ta sẽ tuân thủ việc sử dụng dấu chấm phẩy ;
ở cuối mỗi câu lệnh SQL.
SQL có phân biệt HOA - thường không?
SQL không phân biệt chữ HOA hay chữ thường.
Các câu lệnh sau là tương đương và sẽ cho ra cùng một kết quả:
select dia_chi
from hoc_vien;
SELECT dia_chi
FROM hoc_vien;
sElEct dia_chi
From hoc_vien;
Best practice (Cách làm phổ biến được công nhận) là viết tất cả các lệnh SQL bằng chữ HOA.
Khoảng trống có ảnh hưởng gì đến câu lệnh SQL không?
Một câu lệnh SQL đơn có thể được đặt trên một hoặc nhiều dòng văn bản. Ngoài ra, nhiều câu lệnh SQL có thể được kết hợp trên một dòng văn bản.
Khoảng trắng và xuống dòng sẽ bị bỏ qua trong SQL.
Ví dụ, truy vấn sau đây là hoàn toàn chính xác.
SELECT dia_chi
FROM hoc_vien;
Tuy nhiên, bạn nên tránh những khoảng trắng và xuống dòng không cần thiết.
> Chú ý: Kết hợp với khoảng cách và thụt lề thích hợp, chia nhỏ các lệnh thành các dòng hợp lý sẽ làm cho các câu lệnh SQL của bạn dễ đọc và dễ bảo trì hơn nhiều.
I.4. Chọn nhiều cột với SELECT
Như đã nói ở trên, câu lệnh SELECT trong SQL truy xuất bản ghi từ các bảng trong cơ sở dữ liệu SQL của bạn.
Nhưng không phải chỉ có thể truy xuất 1 cột, bạn có thể chọn nhiều cột từ bảng dữ liệu.
Để làm việc này, bạn chỉ cần liệt kê tên cột và phân tách chúng bằng dấu phẩy:
Ví dụ: Câu lệnh SELECT dưới đây chọn 3 cột ho_ten
, nam_sinh
, dia_chi
từ bảng hoc_vien
.
SELECT ho_ten, nam_sinh, dia_chi
FROM hoc_vien;
Kết quả ta được:
> Lưu ý: Không đặt dấu phẩy sau tên cột cuối cùng.
Chọn tất cả các cột có trong bảng
Để truy xuất tất cả thông tin có trong bảng của bạn, hãy đặt dấu hoa thị (*
) sau lệnh SELECT, thay vì nhập từng tên cột riêng biệt.
Câu lệnh SQL sau chọn tất cả các cột trong bảng hoc_vien
:
Kết quả:
> Ghi chú: Trong SQL, dấu hoa thị *
có nghĩa là ALL
I.5. DISTINCT và LIMIT
Từ khóa DISTINCT
Trong các tình huống mà bạn có nhiều bản ghi bị trùng lặp trong một bảng. Thay vì trả về tất cả các bản ghi, thì trả về các bản ghi duy nhất sẽ tốt hơn.
Để làm việc đó, từ khóa DISTINCT trong SQL được sử dụng cùng với SELECT để loại bỏ tất cả các bản ghi trùng lặp và chỉ trả lại những bản ghi duy nhất.
Cú pháp cơ bản của DISTINCT như sau:
SELECT DISTINCT column_name1, column_name2
FROM table_name;
Ví dụ, chúng ta có bảng CSDL dưới đây:
Hãy nhìn kỹ để thấy rằng có những tên học viên bị trùng lặp. Câu lệnh SQL sau chỉ chọn các giá trị riêng biệt từ cột ho_ten
:
SELECT DISTINCT ho_ten
FROM hoc_vien;
Kết quả bạn nhận lại được sẽ như thế này. Các bản ghi trùng lặp đã bị loại bỏ (trong kết quả trả về)
Bởi vì từ khóa DISTINCT chỉ tìm nạp các giá trị duy nhất.
Từ khóa LIMIT
Theo mặc định, tất cả các kết quả thỏa mãn các điều kiện được chỉ định trong câu lệnh SQL sẽ được trả về.
Tuy nhiên, đôi khi chúng ta chỉ cần truy xuất một tập hợp con các bản ghi. Trong MySQL, để làm việc này chúng ta sử dụng từ khóa LIMIT.
Cú pháp cho LIMIT như sau:
SELECT column_list
FROM table_name
LIMIT [Số bản ghi];
Ví dụ, chúng ta có thể truy xuất 3 bản ghi đầu tiên từ bảng customers
.
SELECT ID, ho_ten, nam_sinh, dia_chi
FROM hoc_vien LIMIT 3;
Với câu lệnh trên, ta có kết quả như sau:
Ngoài ra, bạn cũng có thể chọn một tập hợp các bản ghi trong một khoảng cụ thể với việc kết hợp từ khóa OFFSET với từ khóa LIMIT.
Trong ví dụ sau, chúng ta chọn 4 bản ghi, bắt đầu từ vị trí thứ 3:
SELECT ID, ho_ten, nam_sinh, dia_chi
FROM hoc_vien LIMIT 4 OFFSET 3;
Với câu lệnh này, ta sẽ nhận được 4 bản ghi:
Lý do mà chúng ta nhận được kết quả từ ID thứ 4, chứ không phải 3 đó là:
-
MySQL bắt đầu đếm từ số 0, có nghĩa là hàng đầu tiên có vị trí index là 0 (Giống như đánh số trong mảng vậy)
I.6. Sắp xếp kết quả trong SQL
Trong SQL, bạn có thể sắp xếp kết quả trả về, và đây là cách sắp xếp đơn giản với ORDER BY.
Từ khóa ORDER BY
Chúng ta sử dụng từ khóa ORDER BY kết hợp với SELECT để sắp xếp dữ liệu trả về.
Ví dụ sau đây sắp xếp bảng hoc_vien
của chúng ta theo cột ho_ten
.
SELECT *
FROM hoc_vien
ORDER BY ho_ten;
Kết quả:
Như bạn có thể thấy, các hàng được sắp xếp theo thứ tự bảng chữ cái của cột ho_ten
.
Theo mặc định, từ khóa ORDER BY sắp xếp các kết quả theo thứ tự tăng dần.
Sắp xếp nhiều cột
Từ khóa ORDER BY cũng có thể giúp bạn sắp xếp dữ liệu truy xuất theo nhiều cột.
> Lưu ý: Khi sử dụng ORDER BY với nhiều hơn một cột, hãy tách danh sách các cột theo ORDER BY bằng dấu phẩy.
Đây là bảng hoc_vien
, hiển thị các bản ghi sau:
Để sắp xếp theo nam_sinh
và ho_ten
, ta theo thứ tự tăng dần có câu lệnh SQL như sau:
SELECT * FROM hoc_vien
ORDER BY nam_sinh, ho_ten;
Câu lệnh ORDER BY này trả về kết quả như sau:
Lệnh ORDER BY bắt đầu sắp xếp thứ tự theo cùng một trình tự với các cột.
Nó sẽ sắp xếp thứ tự theo cột nam_sinh
(được liệt kê đầu tiên), sau đó đến cột thứ hai (ho_ten
), v.v.
OK! BẠN ĐÃ HIỂU RỒI CHỨ?
Đến đây, mình tin là bạn đã có những khái niệm cơ bản, căn bản nhất về SQL. Bạn bắt đầu hiểu về SQL là gì và biết công việc bạn sẽ phải làm với SQL.
Và để tiếp tục chuyển sang phần tiếp theo, hãy đảm bảo là bạn hoàn toàn hiểu rõ, ghi nhớ các kiến thức ở trên.
Ít nhất là tự thực hiện lại ví dụ trên máy của bạn.
Và nếu bạn đã hoàn thành, hãy tiếp tục học SQL...
PHẦN II. TÌM HIỂU VỀ LỌC DỮ LIỆU, HÀM, TRUY VẤN CON
Sang phần này, chúng ta sẽ tìm hiểu kỹ hơn về truy vấn dữ liệu theo các nhu cầu cụ thể hơn.
II.1. Mệnh đề WHERE
Mệnh đề WHERE trong SQL chỉ được sử dụng để trích xuất những bản ghi đáp ứng một tiêu chí cụ thể.
Cú pháp cho mệnh đề WHERE:
SELECT column_list
FROM table_name
WHERE condition;
Hãy theo dõi bảng dữ liệu sau:
Bây giờ, chúng ta sẽ chọn một bản ghi cụ thể:
SELECT * FROM hoc_vien
WHERE ID = 5;
Và đây là kết quả ta nhận được:
Toán tử trong SQL
Toán tử so sánh và toán tử logic được sử dụng trong mệnh đề WHERE để lọc dữ liệu được chọn.
Các toán tử so sánh sau có thể được sử dụng trong mệnh đề WHERE:
-
!=
: Toán tử so sánh không bằng
-
>
: Toán tử so sánh lớn hơn
-
<
: Toán tử so sánh nhỏ hơn
-
>=
: Toán tử so sánh lớn hơn hoặc bằng
-
<=
: Toán tử so sánh nhỏ hơn hoặc bằng
-
Ngoài ra còn có toán tử
BETWEEN
giúp chọn dữ liệu trong một khoảng
Ví dụ: Chúng ta có thể hiển thị tất cả các tên học viên được liệt kê trong bảng của chúng ta, ngoại trừ học viên có ID là 5.
SELECT * FROM hoc_vien
WHERE ID != 5;
Kết quả:
Như bạn thấy, bản ghi có ID = 5
đã bị loại khỏi kết quả trả về.
Toán tử BETWEEN
Toán tử BETWEEN trong SQL chọn các giá trị trong một phạm vi (một khoảng). Giá trị đầu tiên là giới hạn dưới và giá trị thứ hai là giới hạn trên.
Cú pháp cho mệnh đề BETWEEN như sau:
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
Ví dụ: Câu lệnh SQL sau đây chọn tất cả các bản ghi có ID nằm trong khoảng từ 3 đến 7
SELECT *
FROM hoc_vien
WHERE ID BETWEEN 3 AND 7;
Kết quả:
Và hãy để ý, cả giới hạn dưới và giới hạn trên đều được lấy ra.
Text Values
Khi làm việc với các cột text, hãy đặt bất kỳ văn bản nào xuất hiện trong câu lệnh bằng dấu nháy đơn '
.
Câu lệnh SQL sau đây chọn tất cả các bản ghi trong đó địa chỉ bằng 'Tuyên Quang'
.
SELECT ID, ho_ten, dia_chi
FROM hoc_vien
WHERE dia_chi = 'Tuyên Quang';
Kết quả:
Nếu văn bản của bạn chứa dấu nháy đơn (dấu nháy đơn - Ký tự đặc biệt), bạn nên sử dụng hai ký tự dấu nháy đơn. Ví dụ: Từ Can't
phải được đặt là 'Can''t'
II.2. Lọc dữ liệu với AND và OR
AND và OR đều đều là loại toán tử Logic.
Các toán tử logic có thể được sử dụng để kết hợp hai giá trị Boolean và trả về kết quả là true
, false
hoặc null
.
Bạn có thể sử dụng các toán tử logic sau trong SQL:
-
AND: Trả về true nếu tất cả các biểu thức true
-
OR: Trả về true nếu một trong các biểu thức true
-
IN: True nếu toán hạng nằm trong danh sách...
-
NOT: True nếu biểu thức không đúng
Khi truy xuất dữ liệu bằng câu lệnh SELECT, bạn có thể sử dụng các toán tử logic trong mệnh đề WHERE để kết hợp nhiều điều kiện.
Sử dụng toán tử AND trong SQL
Nếu bạn muốn chọn các hàng thỏa mãn tất cả các điều kiện đã cho, hãy sử dụng toán tử logic AND.
Để tìm tên của học viên sinh năm từ 1990 đến 2000, hãy thiết lập câu truy vấn như sau:
SELECT ID, ho_ten, nam_sinh
FROM hoc_vien
WHERE nam_sinh >= 1990 AND nam_sinh <= 2000;
Kết quả ta được:
Bạn có thể kết hợp nhiều điều kiện nếu cần để trả về kết quả mong muốn.
Sử dụng toán tử OR trong SQL
Nếu bạn muốn chọn các hàng thỏa mãn ít nhất một trong các điều kiện đã cho, bạn có thể sử dụng toán tử logic OR.
Ví dụ: Nếu bạn muốn chọn những học viên sống ở Hà Nội hoặc Tuyên Quang, truy vấn SQL sẽ như sau:
SELECT *
FROM hoc_vien
WHERE dia_chi = 'Hà Nội' OR dia_chi = 'Tuyên Quang';
Kết quả:
Giống như AND, bạn cũng có thể thêm nhiều điều kiện với toán tử OR.
Kết hợp toán tử AND và OR trong SQL
Các điều kiện AND và OR có thể được kết hợp để kiểm tra nhiều điều kiện trong một truy vấn SQL.
Việc kết hợp này được gọi là toán tử liên hợp.
Khi kết hợp các điều kiện này, điều quan trọng là sử dụng dấu ngoặc đơn, để biết thứ tự đánh giá từng điều kiện.
Câu lệnh SQL dưới đây chọn tất cả học viên có giới tính là Nam
và năm sinh từ 1990
đến 2000
trong bảng hoc_vien
SELECT *
FROM hoc_vien
WHERE gioi_tinh = 'Nam'
AND (nam_sinh >= 1990 OR nam_sinh <= 2000);
Kết quả:
Khi sử dụng toán tử AND kết hợp với OR, bạn vẫn có thể lồng bao nhiêu điều kiện tùy ý.
II.3. IN và NOT IN
Sử dụng toán tử IN trong SQL
Toán tử IN trong SQL được sử dụng khi bạn muốn so sánh một cột có nhiều hơn một giá trị.
Ví dụ: Bạn có thể cần chọn tất cả học viên từ Hà Nội, Tuyên Quang và Đào Hoa Đảo.
Sử dụng điều kiện OR, câu truy vấn SQL của bạn sẽ giống như sau:
SELECT *
FROM hoc_vien
WHERE dia_chi = 'Hà Nội'
OR dia_chi = 'Tuyên Quang'
OR dia_chi = 'Đào Hoa Đảo';
Kết quả:
Nhưng bạn có thể đạt được kết quả tương tự với một điều kiện IN, thay vì nhiều điều kiện OR:
SELECT *
FROM hoc_vien
WHERE dia_chi IN ('Hà Nội', 'Tuyên Quang', 'Đào Hoa Đảo');
> Lưu ý: Trong trường hợp này bạn sẽ cần sử dụng thêm dấu ngoặc đơn.
Sử dụng toán tử NOT IN trong SQL
Toán tử NOT IN trong SQL cho phép bạn loại trừ danh sách các giá trị cụ thể khỏi tập kết quả.
Nếu chúng ta thêm từ khóa NOT trước IN trong truy vấn trước đó của chúng ta, các học viên ở địa chỉ đó sẽ bị loại trừ:
SELECT *
FROM hoc_vien
WHERE dia_chi NOT IN ('Hà Nội', 'Tuyên Quang', 'Đào Hoa Đảo');
Kết quả:
II.4. Tùy biến cột
Trong khi truy vấn dữ liệu, có một số trường hợp chúng ta cần tùy biến cột dữ liệu, ví dụ, như khi sử dụng CONCAT
Hàm CONCAT
Hàm CONCAT được sử dụng để nối hai hoặc nhiều text value và trả về chuỗi nối.
Hãy thử nối họ tên với địa chỉ, phân tách chúng bằng dấu phẩy:
SELECT CONCAT(ho_ten, ', ' , dia_chi)
FROM hoc_vien;
Kết quả:
> Lưu ý: Hàm CONCAT() có thể nhận hai hoặc nhiều tham số.
Từ khóa AS
Khi bạn sử dụng CONCAT để tạo ra một cột mới. Mặc định, tên cột mới sẽ là hàm CONCAT....
Như vậy sẽ rất xấu, bạn có thể gán tên tùy chỉnh cho cột kết quả bằng từ khóa AS:
SELECT CONCAT(ho_ten,', ', dia_chi) AS thong_tin
FROM hoc_vien;
Và khi bạn chạy truy vấn trên, tên cột trong kết quả trả về đã được thay đổi.
Toán tử số học trong SQL
Toán tử số học thực hiện các phép toán số học trên các toán hạng số. Các toán tử Số học bao gồm cộng (+
), trừ (-
), nhân (*
) và chia (/
).
Chúng ta có bảng nhân viên như sau:
Câu truy vấn SQL dưới đây sẽ cộng 500 vào lương của mỗi nhân viên và chọn kết quả:
SELECT ID, ho_ten, dia_chi, luong + 500 AS luong_nv
FROM nhan_vien;
Kết quả:
Cũng giống như toán học, trong SQL, dấu ngoặc đơn có thể được ưu tiên thực hiện. Ngoài ra, dấu ngoặc đơn còn được sử dụng để cải thiện khả năng đọc code.
SELECT ID, ho_ten, dia_chi, (luong + 500) AS luong_nv
FROM nhan_vien;
II.5. Hàm trong SQL
Hàm là một hỗ trợ cực kỳ đắc lực mà SQL cung cấp cho bạn, giúp bạn tăng cường các truy vấn dễ dàng hơn.
Hàm UPPER / LOWER trong SQL
Hàm UPPER trong SQL chuyển đổi tất cả các chữ cái trong chuỗi được chỉ định thành chữ HOA.
Còn hàm LOWER chuyển đổi chuỗi thành chữ thường.
Ví dụm, truy vấn SQL sau đây chọn tất cả ID
, ho_ten
, nam_sinh
. Trong đó cột ho_ten
chuyển thành chữ HOA với cột mới tên là 'Họ tên'
SELECT ID, UPPER(ho_ten) AS 'Họ tên', nam_sinh
FROM nhan_vien;
Kết quả:
> Lưu ý: Nếu có các ký tự trong chuỗi không phải là chữ cái, hàm UPPER này sẽ không có tác dụng đối với chúng.
Hàm SQRL và AVG
Hàm SQRT trả về căn bậc hai của giá trị đã cho trong đối số.
Ví dụ, thử tính căn bậc hai của cột lương:
SELECT ID, ho_ten, SQRT(luong)
FROM nhan_vien;
Kết quả:
Tương tự, hàm AVG trong SQL thì trả về giá trị trung bình của một cột số:
SELECT AVG(luong)
FROM nhan_vien;
Kết quả:
Có một cách khác để thực hiện căn bậc hai là sử dụng POWER với số mũ là 1/2. Tuy nhiên, trong trường hợp này, dường như SQRT chạy nhanh hơn POWER.
Hàm SUM trong SQL
Hàm SUM trong được sử dụng để tính tổng cho các giá trị của cột.
Ví dụ: Để lấy tổng của tất cả các khoản lương trong bảng nhân viên, truy vấn SQL của chúng ta sẽ trông giống như sau:
SELECT SUM(luong)
FROM nhan_vien;
Kết quả:
II.6. Truy vấn con trong SQL
Truy vấn con trong SQL là việc lồng một truy vấn trong một truy vấn khác.
Tại sao cần sử dụng truy vấn con?
Hãy xem xét một ví dụ. Chúng ta có thể cần tìm ra tất cả nhân viên có mức lương cao hơn mức trung bình.
Đầu tiên, hãy tính giá trị trung bình của nhân viên:
SELECT AVG(luong)
FROM nhan_vien;
Kết quả ta được: 718.75 (như đã tính ở bên trên)
Và nếu chúng ta đã biết mức lương trung bình, chúng ta có thể sử dụng WHERE để liệt kê các mức lương lớn hơn con số đó.
SELECT ID, ho_ten, luong
FROM nhan_vien
WHERE luong >= 718.75;
Kết quả:
Để kết quả đẹp hơn bạn cũng có thể sử dụng thêm từ khóa DESC để sắp xếp theo thứ tự giảm dần (ngoặc lại ASC)
SELECT ID, ho_ten AS 'Họ tên', luong AS 'Lương'
FROM nhan_vien
WHERE luong >= 718.75
ORDER BY luong DESC;
Sử dụng truy vấn con
Cũng cùng một ví dụ trên, sử dụng một truy vấn con sẽ trả về cùng một kết quả.
SELECT ID, ho_ten AS 'Họ tên', luong AS 'Lương'
FROM nhan_vien
WHERE luong >= (SELECT AVG(luong) FROM nhan_vien)
ORDER BY luong DESC;
Chúng ta đạt được kết quả tương tự:
> Lưu ý: Hãy đặt truy vấn con trong dấu ngoặc đơn. Ngoài ra, cuối truy vấn con thì không có dấu chấm phảy.
II.7. Toán tử LIKE và MIN
Toán tử LIKE trong SQL
Từ khóa LIKE rất hữu ích khi chỉ định điều kiện tìm kiếm trong mệnh đề WHERE của bạn.
Toán tử LIKE sẽ giúp bạn tìm kiếm các bản ghi có giá trị "giống như" mẫu đối sánh (pattern) mà bạn chỉ định.
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
Mẫu đối sánh SQL cho phép bạn sử dụng _
để khớp với bất kỳ ký tự đơn nào và %
để khớp với một số ký tự tùy ý (bao gồm cả không có ký tự nào).
Ví dụ: Để chọn nhân viên có tên bắt đầu bằng chữ Q, bạn sẽ sử dụng truy vấn sau:
SELECT *
FROM nhan_vien
WHERE ho_ten LIKE 'Q%';
Kết quả ta được:
Mẫu so sánh bạn còn có thể sử dụng rất đa dạng như:
-
'
%a
' Tìm bất kỳ giá trị nào kết thúc bằng 'a
'
-
'
%or%
' Tìm bất kỳ giá trị nào có 'or
' ở bất kỳ vị trí nào
-
'
_r%
' Tìm bất kỳ giá trị nào có 'r
' ở vị trí thứ hai
-
'
a_%
' Tìm bất kỳ giá trị nào bắt đầu bằng 'a
' và có độ dài ít nhất 2 ký tự
-
'
a__%
' Tìm bất kỳ giá trị nào bắt đầu bằng 'a
' và có độ dài ít nhất 3 ký tự
-
'
a%o
' Tìm bất kỳ giá trị nào bắt đầu bằng 'a
' và kết thúc bằng 'o
'
Hàm MIN
Hàm MIN được sử dụng để trả về giá trị nhỏ nhất của một biểu thức trong một câu lệnh SELECT.
Ví dụ, bạn có thể muốn tìm xem mức lương thấp nhất là bao nhiêu:
SELECT MIN(luong) AS 'Lương thấp nhất'
FROM nhan_vien;
Kết quả ta nhận được:
OK.
Tới đây bạn đã biết kha khá về các kỹ thuật truy vấn trong SQL rồi đấy.
Việc học SQL cơ bản của bạn sắp hoàn thành rồi. Chỉ còn 1 phần nữa thôi.
Và để tiếp tục qua phần tiếp theo. Hãy hoàn thành bài tập SQL ngay tại đây để đảm bảo rằng bạn đã hiểu những kiến thức SQL vừa học.
BÀI TẬP SQL PHẦN 2 (Trắc nghiệm 100%)... Updating...
Nếu bạn đã hoàn thành, hãy sang phần tiếp theo ngay thôi.
Phần III. JOIN, THAO TÁC VỚI BẢNG
Một nhiệm vụ rất thường xuyên khi sử dụng SQl là thao tác với các bảng khác nhau, lọc dữ liệu từ các bảng, kết hợp chúng lại theo một mối quan hệ cụ thể...
III.1. Join là gì?
Tất cả các truy vấn bạn thực hiện ở phần I và II chỉ được chọn từ một bảng tại một thời điểm.
Nhưng một trong những tính năng có lợi nhất của SQL là khả năng kết hợp dữ liệu từ hai hoặc nhiều bảng.
Ví dụ, trong 2 bảng dưới đây, bảng có tên hoc_vien
lưu trữ thông tin về học viên:
Bảng don_hang
lưu trữ về thông tin đăng ký khóa học riêng lẻ với số học phí tương ứng:
Trong SQL, kỹ thuật Join có nghĩa là kết hợp dữ liệu từ hai hoặc nhiều bảng. Việc này sẽ tạo ra một bảng tạm thời để lưu dữ liệu đã nối.
Thay vì lưu tên khách hàng trong cả hai bảng, bảng don_hang
chứa tham chiếu đến ID xuất hiện trong bảng hoc_vien
.
Cách tiếp cận này hiệu quả hơn, so với với việc lưu trữ các giá trị văn bản giống nhau trong cả hai bảng.
Để có thể chọn dữ liệu tương ứng từ cả hai bảng, chúng ta sẽ cần nối chúng với điều kiện đó.
Để join hai bảng, hãy chỉ định chúng dưới dạng danh sách được phân tách bằng dấu phẩy trong mệnh đề FROM:
SELECT hoc_vien.ID, hoc_vien.ho_ten, don_hang.ten_khoa_hoc, don_hang.hoc_phi
FROM hoc_vien, don_hang
WHERE hoc_vien.ID = don_hang.hoc_vien_ID
ORDER BY hoc_vien.ID;
Mỗi bảng đều chứa cột ID, vì vậy để chọn đúng các bản ghi thì chúng ta cần so sánh ID
ở bảng hoc_vien
và hoc_vien_ID
ở bảng don_hang
Kết quả:
Khi chọn cột từ các bảng ở bên trên, bạn có thấy dài và khó nhìn không?
Để dễ đọc hơn. Thay vì viết tên gốc của bảng, chúng ta có thể tùy chỉnh lại.
Sử dụng từ khóa AS
để rút ngắn tên các bảng như sau:
SELECT hv.ID, hv.ho_ten, dh.ten_khoa_hoc, dh.hoc_phi
FROM hoc_vien AS hv, don_hang AS dh
WHERE hv.ID = dh.hoc_vien_ID
ORDER BY hv.ID;
III.2. Các kiểu Join trong SQL
Có 3 kiểu join bạn có thể sử dụng trong MySQL:
INNER JOIN
INNER JOIN tương đương với JOIN. Nó trả về các hàng khi có sự trùng khớp giữa các bảng.
Cú pháp INNER JOIN:
SELECT column_name(s)
FROM table1 INNER JOIN table2
ON table1.column_name = table2.column_name;
> Lưu ý: Từ khóa ON để chỉ định điều kiện INNER JOIN.
Hình ảnh dưới đây minh họa cách thức hoạt động của INNER JOIN:
Sau khi thực hiện INNER JOIN, chỉ các bản ghi phù hợp với điều kiện JOIN mới được trả về.
LEFT JOIN
LEFT JOIN trả về tất cả các hàng từ bảng bên trái, ngay cả khi không có hàng nào phù hợp trong bảng bên phải.
Điều này có nghĩa là nếu không có kết quả phù hợp nào với mệnh đề ON trong bảng bên phải, phép Join sẽ vẫn trả về các hàng từ bảng đầu tiên trong kết quả.
Cú pháp cơ bản của LEFT JOIN như sau:
SELECT table1.column1, table2.column2...
FROM table1 LEFT OUTER JOIN table2
ON table1.column_name = table2.column_name;
> Lưu ý: Từ khóa OUTER là tùy chọn và có thể bỏ qua.
Hình ảnh dưới đây minh họa cách hoạt động của LEFT JOIN:
Hãy xem 2 bảng dưới đây:
hoc_vien
:
don_hang
:
Câu lệnh SQL sau sẽ trả về tất cả các khách hàng và các mục mà họ có thể có:
SELECT hoc_vien.ID, hoc_vien.ho_ten, don_hang.ten_khoa_hoc, don_hang.hoc_vien_ID
FROM hoc_vien LEFT JOIN don_hang
ON hoc_vien.ID = don_hang.hoc_vien_ID;
Kết quả ta được:
Đó, như bạn thấy, tập hợp kết quả chứa tất cả các hàng từ bảng bên trái và khớp dữ liệu từ bảng bên phải.
Nếu không tìm thấy kết quả phù hợp nào cho một hàng cụ thể, nó sẽ trả về NULL.
RIGHT JOIN
RIGHT JOIN trả về tất cả các hàng từ bảng bên phải, ngay cả khi không có hàng nào phù hợp trong bảng bên trái.
Cú pháp cơ bản của RIGHT JOIN như sau:
SELECT table1.column1, table2.column2...
FROM table1 RIGHT OUTER JOIN table2
ON table1.column_name = table2.column_name;
Một lần nữa, từ khóa OUTER là tùy chọn và có thể bỏ qua.
Hãy xem xét lại ví dụ bên trên của chúng ta, nhưng lần này với là với RIGHT JOIN:
SELECT hoc_vien.ID, hoc_vien.ho_ten, don_hang.ten_khoa_hoc, don_hang.hoc_vien_ID
FROM hoc_vien RIGHT JOIN don_hang
ON hoc_vien.ID = don_hang.hoc_vien_ID;
Kết quả ta nhận được:
RIGHT JOIN trả về tất cả các hàng từ bảng bên phải, ngay cả khi không có hàng nào phù hợp trong bảng bên trái.
Vẫn còn có các kiểu JOIN khác trong ngôn ngữ SQL, nhưng chúng không được MySQL hỗ trợ (Và bạn cũng chỉ cần biết như thế này trước thôi)
III.3. Kết hợp nhiều bảng CSDL
Đôi khi, bạn có thể cần kết hợp dữ liệu từ nhiều bảng thành một tập dữ liệu đầy đủ hơn.
Để có thể làm điều này, hãy sử dụng toán tử UNION và UNION ALL.
-
UNION kết hợp nhiều tập dữ liệu thành một tập dữ liệu duy nhất và xóa mọi bản sao hiện có.
-
UNION ALL kết hợp nhiều tập dữ liệu thành một tập dữ liệu, nhưng không xóa các hàng trùng lặp.
> Lưu ý: UNION ALL nhanh hơn UNION vì nó không thực hiện thao tác xóa trùng lặp trên tập dữ liệu. (Làm ít việc hơn thì dĩ nhiên là nhanh hơn)
Toán tử UNION
Toán tử UNION được sử dụng để kết hợp các tập kết quả của hai hoặc nhiều câu lệnh SELECT.
Trong đó:
-
Tất cả các câu lệnh SELECT trong UNION phải có cùng số cột
-
Các cột cũng phải có cùng kiểu dữ liệu
-
Ngoài ra, các cột trong mỗi câu lệnh SELECT phải theo cùng một thứ tự.
Cú pháp của UNION như sau:
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
Giả sử, chúng ta có hai bảng CSDL, test_union_a
:
Và bảng test_union_b
:
> Lưu ý: Trong bảng test_union_b
có một bản ghi trùng với bảng test_union_b
Bây giờ, chúng ta chọn lấy tên, tuổi, địa chỉ (cùng số cột, cùng dữ liệu, cùng thứ tự) của bảng test_union_a
và test_union_b
:
SELECT ten, tuoi, dia_chi FROM test_union_a
UNION
SELECT ten, tuoi, dia_chi FROM test_union_b;
Kết quả ta được:
Như bạn thấy đó, khi sử dụng toán tử UNION, kết quả trả về đã loại bỏ đi các bản ghi bị trùng.
MẸO: Nếu các bảng có số cột không giống nhau thì bạn cũng có thể sử dụng NULL để thay thế
Ví dụ: Chúng ta giả sử bảng test_union_b
không có cột địa chỉ. Trong trường hợp này ta sẽ đặt NULL để thay thế.
SELECT ten, tuoi, dia_chi FROM test_union_a
UNION
SELECT ten, tuoi, null FROM test_union_b;
Kết quả ta được:
Toán tử UNION ALL
Như đã nói ở trên, toán tử UNION ALL sẽ giúp kết hợp dữ liệu từ nhiều bảng như UNION nhưng không loại bỏ bản ghi trùng lặp.
Ví dụ:
SELECT ten, tuoi, dia_chi FROM test_union_a
UNION ALL
SELECT ten, tuoi, dia_chi FROM test_union_b;
Kết quả:
III.4. Câu lệnh INSERT INTO trong SQL
Bảng CSDL SQL lưu trữ dữ liệu theo hàng, từ hàng này sang hàng khác. Để thêm các hàng dữ liệu mới vào bảng, chúng ta sử dụng câu lệnh INSERT INTO
Cú pháp INSERT INTO của SQL như sau:
INSERT INTO table_name
VALUES (value1, value2, value3,...);
Ví dụ, ta có bảng nhan_vien
:
Bây giờ, ta thêm một bản ghi như sau:
INSERT INTO nhan_vien
VALUES (9, "Tiêu Phong", "Nam", "Cái Bang", 1990, 100);
Kết quả ta được:
> Lưu ý: Khi chèn bản ghi vào bảng bằng câu lệnh SQL INSERT, bạn phải cung cấp giá trị cho mọi cột không có giá trị mặc định hoặc không hỗ trợ NULL.
Ngoài ra, bạn có thể chỉ định tên cột của bảng trong câu lệnh INSERT INTO, cú pháp:
INSERT INTO table_name (column1, column2, column3, ...,columnN)
VALUES (value1, value2, value3,...valueN);
Trong đó:
-
column1
, column2
, ..., columnN
là tên của các cột mà bạn muốn chèn dữ liệu vào.
-
value1
, value2
, ..., valueN
là các giá trị tương ứng với các cột
Ví dụ: Chúng ta có thể viết lại câu lệnh INSERT INTO ở trên
INSERT INTO nhan_vien (id, ho_ten, gioi_tinh, dia_chi, nam_sinh, luong)
VALUES (9, "Tiêu Phong", "Nam", "Cái Bang", 1990, 100);
> Lưu ý: Bạn có thể chỉ định thứ tự cột của riêng mình, miễn là thứ tự giá trị tương ứng với thứ tự cột.
Với việc chỉ định cụ thể tên cột, bạn cũng có thể chỉ chèn dữ liệu vào các cột cụ thể đó (mà không phải tất cả các cột có sẵn).
Ví dụ:
INSERT INTO nhan_vien (id, ho_ten, gioi_tinh)
VALUES (10, "Tiêu Viễn Sơn", "Nam");
Kết quả:
III.5. Câu lệnh UPDATE trong SQL
Câu lệnh UPDATE cho phép chúng ta thay đổi, cập nhật dữ liệu trong bảng.
Cú pháp cơ bản của câu lệnh UPDATE trong SQL với mệnh đề WHERE như sau:
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
Trong này, bạn sử dụng từ khóa SET
để chỉ định cột và giá trị mới của nó trong bảng, được phân tách bằng dấu ,
> CẢNH BÁO : ĐỪNG BAO GIỜ QUÊN WHERE. Nếu không thì tất cả các bản ghi sẽ được cập nhật!
OK, bây giờ chúng ta sẽ sử dụng câu lệnh này để update lại một số cột trong bản ghi số 10 của bảng nhan_vien
UPDATE nhan_vien
SET nam_sinh = 1969, luong = 500
WHERE id = 10;
Kết quả ta được:
III.6. Câu lệnh DELETE trong SQL
Câu lệnh DELETE được sử dụng để xóa dữ liệu khỏi bảng của bạn. Truy vấn DELETE hoạt động giống như truy vấn UPDATE.
DELETE FROM table_name
WHERE condition;
Ví dụ: Xóa bản ghi số 10 của bảng nhan_vien
DELETE FROM nhan_vien
WHERE id = 10;
Kết quả: Trong bảng nhan_vien
chỉ còn lại 9 bản ghi
> CẢNH BÁO : ĐỪNG BỎ QUÊN WHERE. Nếu không tất cả các bản ghi trong bảng sẽ bị xóa! Câu lệnh DELETE xóa dữ liệu khỏi bảng vĩnh viễn.
III.7. Tạo bảng CSDL trong SQL
Một cơ sở dữ liệu có thể chứa hàng trăm bảng, mỗi bảng đóng vai trò duy nhất trong lược đồ cơ sở dữ liệu.
Bảng SQL bao gồm các hàng và cột của bảng. Các cột trong bảng có nhiệm vụ lưu trữ nhiều loại dữ liệu khác nhau, bao gồm số, văn bản, ngày tháng và thậm chí cả các tệp.
Trong quá trình làm việc, chúng ta sẽ thường xuyên phát sinh nhu cầu tạo bảng CSDL mới. Để làm việc này, chúng ta sử dụng câu lệnh CREATE TABLE.
* Tạo một bảng cơ bản bao gồm việc đặt tên cho bảng và xác định các cột của nó và kiểu dữ liệu của mỗi cột.
Cú pháp cơ bản của câu lệnh CREATE TABLE trong SQL như sau:
CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
columnN data_type(size)
);
Trong đó:
-
column_name
... xác định tên của các cột mà chúng ta muốn tạo.
-
Tham số
data_type
chỉ định loại dữ liệu mà cột có thể chứa. Ví dụ, sử dụng int cho các số nguyên.
-
Tham số
size
chỉ định độ dài tối đa của cột trong bảng.
Giả sử bạn muốn tạo bảng có tên là Admins có các cột là: AdminID, Admin_Name, Admin_Password và Age
CREATE TABLE Admins
(
AdminID int,
Admin_Name varchar(100),
Admin_Password varchar(100),
Age int
);
> Note: varchar
là kiểu dữ liệu lưu trữ các ký tự (thường dùng cho các trường văn bản ngắn). 100
trong dấu ngoặc kép là quy định độ dài tối đa của trường này là 100
ký tự.
Chúng ta có các kiểu dữ liệu phổ biến nhất:
Kiểu Số
-
INT
- Một số nguyên có kích thước bình thường có thể có dấu hoặc không dấu.
-
FLOAT(M, D)
- Một số dấu phẩy động không thể không dấu. Bạn có thể tùy chọn xác định độ dài hiển thị (M) và số lượng phần thập phân (D).
-
DOUBLE(M, D)
- Kiểu dữ liệu double. Bạn có thể tùy chọn xác định độ dài hiển thị (M) và số lượng phần thập phân (D).
Kiểu Ngày và giờ
-
DATE
- Ngày ở định dạng YYYY-MM-DD.
-
DATETIME
- Kết hợp ngày và giờ ở định dạng YYYY-MM-DD HH: MM: SS.
-
TIMESTAMP
- Dấu thời gian, được tính từ nửa đêm, ngày 1 tháng 1 năm 1970
-
TIME
- Lưu trữ thời gian ở định dạng HH:MM:SS.
Kiểu Chuỗi
-
CHAR(M)
- Chuỗi ký tự có độ dài cố định. Kích thước được chỉ định trong ngoặc đơn. Tối đa 255 byte.
-
VARCHAR(M)
- Chuỗi ký tự có độ dài thay đổi. Kích thước tối đa được chỉ định trong ngoặc đơn.
-
BLOB
- "Big Large Objects" và được sử dụng để lưu trữ lượng lớn dữ liệu nhị phân, chẳng hạn như hình ảnh hoặc các loại tệp khác.
-
TEXT
- Số lượng lớn dữ liệu văn bản.
Chú ý: Chọn đúng loại dữ liệu là chìa khóa để thiết kế CSDL tốt
Và để tạo khóa chính cho bảng thì ta sử dụng từ khóa PRIMARY KEY
Ví dụ:
CREATE TABLE Admins
(
AdminID int,
Admin_Name varchar(100),
Admin_Password varchar(100),
Age int,
PRIMARY KEY(AdminID)
);
Bây giờ, bảng CSDL mới đã được tạo thành công trong CSDL.
Sau đó, bạn có thể sử dụng câu lệnh INSERT INTO để chèn bản ghi vào bảng.
III.8. NOT NULL và AUTO_INCREMENT
Các ràng buộc SQL (SQL Constraints) được sử dụng để chỉ định các quy tắc cho dữ liệu bảng.
Sau đây là các ràng buộc SQL thường được sử dụng:
-
NOT NULL
- Chỉ ra rằng một cột không thể chứa bất kỳ giá trị NULL nào.
-
UNIQUE
- Không cho phép chèn giá trị trùng lặp trong một cột. Ràng buộc UNIQUE duy trì tính duy nhất của một cột trong bảng. Có thể sử dụng nhiều hơn một cột UNIQUE trong một bảng.
-
PRIMARY KEY
- Bắt buộc bảng chấp nhận dữ liệu duy nhất cho một cột cụ thể và ràng buộc này tạo ra một chỉ mục duy nhất để truy cập bảng nhanh hơn.
-
CHECK
- Xác định xem giá trị có hợp lệ hay không từ một biểu thức logic.
-
DEFAULT
- Trong khi chèn dữ liệu vào bảng, nếu không có giá trị nào được cung cấp cho một cột, thì cột đó sẽ nhận giá trị được đặt là DEFAULT.
Ví dụ, câu lệnh bên dưới có nghĩa là cột name
không cho phép chứa các giá trị NULL
.
name varchar(100) NOT NULL
Trường AUTO_INCREMENT sẽ tự động tăng 1 khi chèn vào một bản ghi mới.
Thông thường, chúng ta muốn giá trị của trường PRIMARY KEY được tạo tự động mỗi khi một bản ghi mới được chèn vào.
Theo mặc định, giá trị bắt đầu cho AUTO_INCREMENT là 1 và nó sẽ tăng lên 1 cho mỗi bản ghi mới.
Chúng ta thiết lập lại trường AdminID
như sau:
Admins int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (AdminID)
Bây giờ, chúng ta tạo lại bảng CSDL Admins
và sử dụng thêm các ràng buộc:
CREATE TABLE Admins
(
AdminID int NOT NULL AUTO_INCREMENT,
Admin_Name varchar(100) NOT NULL,
Admin_Password varchar(100) NOT NULL,
Age int,
PRIMARY KEY(AdminID)
);
Kết quả, ta được một bảng như sau:
> Chú ý: Khi chèn bản ghi vào bảng Admins
thì không nhất thiết phải truyền giá trị AdminID
bởi vì SQL sẽ tự sinh.
III.9. ALTER, DROP và RENAME
Câu lệnh ALTER TABLE
Lệnh ALTER TABLE được sử dụng để thêm, xóa hoặc sửa đổi các cột trong bảng hiện có.
Bạn cũng sẽ sử dụng lệnh ALTER TABLE để thêm và bỏ các ràng buộc khác nhau trên một bảng hiện có.
Ví dụ, ta có bảng CSDL tên là Admins
:
Câu lệnh SQL sau sẽ thêm một cột mới có tên Admin_Role
ALTER TABLE Admins ADD Admin_Role varchar(100);
SELECT * FROM Admins;
Kết quả ta được:
Câu lệnh DROP
Câu lệnh SQL sau sẽ xóa cột Admin_Role
khỏi bảng Admins
ALTER TABLE Admins
DROP COLUMN Admin_Role;
Khi đó bảng Admins
chỉ còn các cột lại như hình:
Cùng với đó, dữ liệu của cột (nếu có) cũng bị xóa hoàn toàn khỏi bảng.
Còn để xóa toàn bộ bảng thì bạn có thể sử dụng câu lệnh DROP TABLE như sau:
DROP TABLE Admins;
> CẢNH BÁO : Hãy thật cẩn thận khi xóa bảng. Bởi vì khi đã xóa bảng, dữ liệu sẽ bị mất hoàn toàn. Bạn không thể cứu vãn được đâu (Trừ khi có bản Backup)
Đổi tên
Câu lệnh ALTER TABLE cũng có thể được sử dụng để đổi tên cho các cột trong bảng. (Sử dụng cú pháp SQL trong MySQL)
ALTER TABLE Admins
Change Admin_name account varchar(100);
Kết quả, cột Admin_name
được đổi tên thành account_name
với kiểu dữ liệu là varchar(100):
Nếu bạn muốn đổi tên bảng, ví dụ Admins
thành Users
thì sử dụng câu lệnh RENAME TABLE như sau:
RENAME TABLE Admins TO Users;
III.10. VIEW trong SQL
Trong SQL, VIEW là một bảng ảo dựa trên tập kết quả của một câu lệnh SQL.
Một VIEW chứa các hàng và cột, giống như một bảng thực. Các trường trong một dạng xem là các trường từ một hoặc nhiều bảng thực trong cơ sở dữ liệu.
Chế độ VIEW cho phép chúng ta:
-
Cấu trúc dữ liệu theo cách mà người dùng thấy tự nhiên hoặc trực quan.
-
Hạn chế quyền truy cập vào dữ liệu theo cách mà người dùng có thể nhìn thấy và (đôi khi) sửa đổi.
-
Tổng hợp dữ liệu từ các bảng khác nhau và sử dụng nó để tạo báo cáo.
Để tạo chế độ xem, bạn sử dụng cú pháp như sau:
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition;
Truy vấn SELECT có thể phức tạp tùy theo cách mà bạn muốn, thậm chí JOIN và nhiều câu lệnh khác.
Ví dụ, chúng ta muốn tạo một VIEW bao gồm tên và lương của bảng nhan_vien
:
CREATE VIEW danh_sach AS
SELECT ho_ten, luong
FROM nhan_vien;
Bây giờ, chúng ta có thể truy vấn VIEW danh_sach
như một bảng thực.
SELECT * FROM danh_sach;
Kết quả ta được:
> Note: Chế độ VIEW luôn hiển thị dữ liệu cập nhật! Database Engine sử dụng câu lệnh SQL của dạng VIEW để tạo lại dữ liệu mỗi khi người dùng truy vấn một dạng VIEW.
Ngoài ra, bạn có thể cập nhật lại VIEW:
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition;
Ví dụ bên dưới cập nhật VIEW danh_sach
của chúng ta để thêm cột nam_sinh
:
CREATE OR REPLACE VIEW danh_sach AS
SELECT ho_ten, nam_sinh, luong
FROM nhan_vien;
SELECT * FROM danh_sach;
Kết quả ta được:
Cuối cùng, bạn có thể xóa VIEW bằng lệnh DROP VIEW.
DROP VIEW danh_sach;
TỔNG KẾT BÀI HỌC SQL
Như vậy, trong bài hướng dẫn HỌC SQL này mình đã giúp bạn tự học SQL từ con số 0.
Đến tận đây, nếu trong quá trình học, bạn tự tay viết lại từng ví dụ ở trên thì mình tin rằng bạn đã làm chủ được các kiến thức cần có về SQL của một lập trình viên.
Còn đi sâu hơn nữa thì bạn cần làm việc nhiều hơn với SQL, trao đổi nhiều hơn với các Anh / Chị đi trước để tích lũy kinh nghiệm.
Hi vọng bài học SQL này giúp ích cho quá trình HỌC LẬP TRÌNH của bạn.
Chúc bạn thành công!
---
HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI
Học Lập trình chất lượng cao (Since 2002). Học thực tế + Tuyển dụng ngay!
Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội
SĐT: 02435574074 - 0383.180086
Email: hello@niithanoi.edu.vn
Fanpage: https://facebook.com/NIIT.ICT/
#niit #icthanoi #niithanoi #icthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp #java #php #python