Năm 2022 HỌC SQL CÓ GÌ MỚI CẬP NHẬT

Ngày đăng: 17/02/2022   -    Cập nhật: 01/03/2022
Là một lập trình viên, cho dù là lập trình web, lập trình app thì bạn cũng đều phải thao tác với dữ liệu, thực hiện truy vấn, thêm, sửa xóa dữ liệu trong cơ sở dữ liệu (CSDL).


Đối với các tác vụ với CSDL này, ngôn ngữ SQL sẽ giúp bạn hoàn thành xuất sắc nhiệm vụ.


Và vì SQL là kiến thức bắt buộc bạn phải có để có thể học lập trình web, lập trình App. Vì thế, mình sẽ giúp bạn HỌC SQL chỉ trong một bài viết này (Chỉ học những thứ cần thiết nhất).


Bài viết này gồm 3 phần như sau:





Để bắt đầu ngay với phần đầu tiên chắc bạn sẽ nghĩ về công cụ, phần mềm để học SQL?


Đồng ý là chúng ta cần công cụ.


Nhưng hãy cứ follow theo bài hướng dẫn này.


Lát nữa đến phần cài đặt thì sẽ có video hướng dẫn cài đặt chi tiết.


Còn bây giờ, chúng ta bắt đầu với phần đầu tiên.



PHẦN I. CÁC KHÁI NIỆM SQL CĂN BẢN



Đây là phần mình sẽ giới thiệu về những khái niệm căn bản nhất của SQL. Hiểu rõ được phần này là nền tảng vững chắc để bạn tiếp tục tìm hiểu sâu về SQL.


I.1.  Giới thiệu về Cơ sở dữ liệu



Trước khi bắt đầu viết những câu lệnh SQL đầu tiên bạn cần tìm hiểu một số thuật ngữ, khái niệm cơ bản.


Cơ sở dữ liệu là gì?



Databases hay Cơ sở dữ liệu (CSDL) là một tập hợp dữ liệu được tổ chức để tạo điều kiện cho việc truy vấn, quản lý và cập nhật dễ dàng và hiệu quả.


Cơ sở dữ liệu được tạo thành từ các bảng lưu trữ thông tin liên quan.


Ví dụ: Bạn sẽ sử dụng cơ sở dữ liệu, nếu bạn định tạo một trang web như NIITHANOI.EDU.VN, chứa rất nhiều thông tin như họ tên, năm sinh, địa chỉ, khóa học... 



Ví dụ bảng CSDL


Và trong bài học này, chúng ta sẽ học cách tạo và truy vấn cơ sở dữ liệu bằng SQL!


Bảng dữ liệu là gì?



Một bảng lưu trữhiển thị dữ liệu ở định dạng có cấu trúc bao gồm các cột và hàng tương tự như những gì được thấy trong bảng tính Excel.


Cơ sở dữ liệu thường chứa nhiều bảng, mỗi bảng được thiết kế cho một mục đích cụ thể.


Ví dụ, hãy tưởng tượng bạn cần tạo một bảng cơ sở dữ liệu tên, năm sinh, địa chỉ, khóa học.


Đầu tiên, chúng ta sẽ thiết lập các cột với tiêu đề ho_ten, nam_sinhdia_chi, khoa_hoc...


Mỗi bảng bao gồm tập hợp các trường của riêng nó, dựa trên dữ liệu mà nó sẽ lưu trữ.


Một bảng có một số cột cụ thể nhưng có thể có hoặc không có hàng nào.


 

PRIMARY KEY là gì?



PRIMARY KEY hay Khóa chính là một trường trong bảng xác định các bản ghi trong bảng là duy nhất.


Các tính năng chính của khóa chính:



  • Nó phải chứa một giá trị duy nhất cho mỗi hàng.
  • Nó không được chứa giá trị NULL.


Ví dụ, bảng của chúng ta chứa một bản ghi cho học viên.


Số ID duy nhất sẽ là một lựa chọn tốt cho khóa chính trong bảng, vì tên và năm sinh, khóa học có thể có bị trùng.



Demo Bảng CSDL


Mỗi bảng được chỉ có MỘT khóa chính.


Giá trị của khóa chính mỗi hàng phải khác nhau.



SQL là gì?



Khi bạn đã hiểu cơ sở dữ liệu là gì, SQL cũng không có gì khó hiểu nữa. SQL là tên viết tắt của Structured Query Language - Ngôn ngữ truy vấn có cấu trúc.


> Ghi chú: SQL đọc là Xi Quờ hoặc Ét Qui Eo :D


SQL được sử dụng để truy cập và thao tác cơ sở dữ liệu (MySQL là một chương trình hiểu được cú pháp SQL)


SQL có thể:



  • Chèn, cập nhật hoặc xóa bản ghi trong cơ sở dữ liệu
  • Tạo cơ sở dữ liệu mới, bảng, thủ tục lưu trữ, khung nhìn
  • Lấy dữ liệu từ cơ sở dữ liệu
  • ...


Thêm nữa, SQL là một tiêu chuẩn ANSI (Viện Tiêu chuẩn Quốc gia Hoa Kỳ), nhưng có các phiên bản khác nhau của ngôn ngữ SQL.


Hầu hết các chương trình cơ sở dữ liệu SQL đều có phần mở rộng độc quyền của riêng họ ngoài tiêu chuẩn SQL, nhưng tất cả chúng đều hỗ trợ các lệnh chính.


Có nghĩa là gì?



"CHỈ CẦN HỌC SQL LÀ NẮM ĐƯỢC PHẦN LỚN CÁC NGÔN NGỮ TRUY VẤN, CÁC HỆ QUẢN TRỊ CSDL KHÁC"


SQL giống như là cái gốc rễ của các ngôn ngữ truy vấn cơ sở dữ liệu quan hệ. Vì thế, học SQL là tiền đề để bạn tiếp tục hiểu những phiên bản, hệ quản trị khác.


> Lưu ý: Kể cả bạn muốn HỌC PHP, HỌC JAVA, HỌC PYTHON hay học bất kỳ công nghệ nào khác bạn cũng cần phải hiểu về dữ liệu, hiểu cách thao tác với dữ liệu. Trong đó, nắm giữ được SQL là nắm giữ được cốt lõi của vấn đề.



I.2. Lệnh SELECT



Lệnh SELECT là một lệnh thường được sử dụng nhất trong lập trình SQL. Lệnh này giúp bạn chọn cái gì đó từ CSDL.


Nhưng trước khi hiểu về lệnh SELECT, bạn cần hiểu thêm một vài thứ nữa đã.



Các lệnh SQL cơ bản



Câu lệnh SQL SHOW hiển thị thông tin có trong cơ sở dữ liệu và các bảng của nó.


Lệnh này cho phép bạn theo dõi nội dung cơ sở dữ liệu của mình và giúp nhớ lại cấu trúc CSDL của bạn.


Ví dụ, lệnh SHOW DATABASES liệt kê các cơ sở dữ liệu do máy chủ quản lý.




SHOW DATABASES;
 


Trong suốt bài học SQL này, chúng ta sẽ sử dụng công cụ MySQL và công cụ PHPMyAdmin để chạy các truy vấn SQL.


Cách dễ nhất để có được MySQL và PHPMyAdmin là cài đặt XAMPP hoặc WAMP, chúng đã bao gồm tất cả các trình cài đặt cần thiết.






Video hướng dẫn cài đặt XAMPP




Video hướng dẫn bảng CSDL, chèn dữ liệu trên phpmyadmin


 
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;
 


Lệnh SHOW TABLES trong SQL


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:


Demo Lệnh SHOW COLUMNS trong SQL


SHOW COLUMNS hiển thị các giá trị sau cho mỗi cột trong bảng:


  • Field: Tên cột
  • Type: Kiểu dữ liệu cột
  • 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:


Dữ liệu trong bảng CSDL hoc_vien


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:


Ví dụ sử dụng SQL lấy ra một cột trong bảng CSDL


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

Ví dụ câu lệnh SELECT


Bên dưới ta lại có thêm một kết quả như thế này


Ví dụ câu lệnh SELECT (1)


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:


Ví dụ chọn nhiều cột từ bảng CSDL
 

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




SELECT *
FROM hoc_vien;
 


Kết quả:


Ví dụ chọn tất cả các cột với câu lệnh SELECT trong SQL


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


Ví dụ bảng CSDL (có dữ liệu trùng lặp)


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ề)


Ví dụ sử dụng từ khóa DISTINCT trong SQL


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:


Ví dụ sử dụng từ khóa LIMIT trong SQL


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 OFFSET 3;
 


Với câu lệnh này, ta sẽ nhận được 4 bản ghi:


Ví dụ sử dụng kết hợp từ khóa LIMIT với OFFSET trong SQL


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


Ví dụ sử dụng từ khóa ORDER BY trong SQL


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:



Ví dụ bảng CSDL


Để 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:


Ví dụ sắp xếp nhiều cột trong SQL


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:


Ví dụ Bảng CSDL


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:


Ví dụ sử dụng câu lệnh WHERE trong SQL


Toán tử trong SQL



Toán tử so sánhtoá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 bằng
  • != : 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ả:


Ví dụ sử dụng câu lệnh WHERE với toán tử


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í dụ sử dụng câu lệnh WHERE với toán tử BETWEEN


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

Ví dụ sử dụng câu lệnh WHERE so sánh bản ghi text value


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



ANDOR đề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:


Ví dụ sử dụng câu lệnh WHERE kết hợp với toán tử AND trong SQL


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


Ví dụ sử dụng câu lệnh WHERE kết hợp với toán tử OR trong SQL


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


Ví dụ sử dụng câu lệnh WHERE kết hợp toán tử AND và OR trong SQL


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


Ví dụ sử dụng câu lệnh WHERE và toán tử OR để chọn nhiều bản ghi trong cột


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


Ví dụ sử dụng câu lệnh WHERE kết hợp từ khóa NOT IN trong SQL


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


Ví dụ sử dụng từ khóa CONCAT trong SQL


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


Ví dụ sử dụng CONCAT và từ khóa AS để tùy biến cột trong SQL


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:



Ví dụ bảng CSDL Nhân viên


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

Ví dụ sử dụng toán tử toán học trong truy vấn SQL


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 + 500AS 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ả:


Ví dụ sử dụng hàm UPPER trong truy vấn SQL


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


Ví dụ sử dụng hàm tính căn bậc hai (SQRT) trong truy vấn SQL


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


Ví dụ sử dụng hàm tính trung bình (AVG) trong truy vấn SQL


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


Ví dụ sử dụng hàm tính tổng SUM trong truy vấn SQL


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


Ví dụ sử dụng truy vấn con trong SQL


Để 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ự:


Ví dụ sử dụng truy vấn con trong SQL (2)
 

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


Ví dụ sử dụng toán tử LIKE trong truy vấn SQL


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:


Ví dụ sử dụng hàm MIN trong SQL


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:



Ví dụ bảng CSDL 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:

Ví dụ Bảng CSDL Đơn hà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_vienhoc_vien_ID ở bảng don_hang


Kết quả:



Ví dụ Join bảng trong SQL


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
  • LEFT JOIN
  • RIGHT JOIN


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:



Minh họa INNER JOIN trong SQL
 

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ình ảnh minh họa Kỹ thuật LEFT JOIN trong SQL


Hãy xem 2 bảng dưới đây:


hoc_vien:



Ví dụ Bảng CSDL hoc_vien


don_hang:


Ví dụ Bảng CSDL 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:


Ví dụ sử dụng LEFT JOIN trong SQL


Đó, 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:

Ví dụ sử dụng RIGHT JOIN trong SQL


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í dụ câu lệnh SELECT sử dụng toán tử UNION (1)


Và bảng test_union_b:


Ví dụ câu lệnh SELECT sử dụng toán tử UNION (2)


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


 
Ví dụ câu lệnh SELECT sử dụng toán tử UNION (3)


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:


Ví dụ câu lệnh SELECT sử dụng toán tử UNION (4)


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


Ví dụ câu lệnh SELECT sử dụng toán tử UNION ALL


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:


Ví dụ sử dụng câu lệnh INSERT INTO trong SQL (1)


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"1990100);
 


Kết quả ta được:


Ví dụ sử dụng câu lệnh INSERT INTO trong SQL (2)



> 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"1990100);
 



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


Ví dụ sử dụng câu lệnh INSERT INTO trong SQL (3)


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:


Ví dụ sử dụng câu lệnh UPDATE trong SQL (1)


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


Ví dụ Truy vấn DELETE trong SQL


>  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(100NOT 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(100NOT NULL
   Admin_Password varchar(100NOT NULL,
   Age int,
   PRIMARY KEY(AdminID)
);
 


Kết quả, ta được một bảng như sau:


Ví dụ tạo bảng trong CSDL với câu lệnh CREATE TABLE và Constraints



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



Ví dụ sử dụng câu lệnh ALTER TABLE trong SQL (1)


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:


Ví dụ sử dụng câu lệnh ALTER TABLE trong SQL (2)


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:


Ví dụ sử dụng câu lệnh DROP COLUMN trong SQL


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


Ví dụ thay đổi tên cột của bảng CSDL trong SQL



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:

Ví dụ sử dụng câu lệnh CREATE VIEW trong SQL




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


Ví dụ UPDATE VIEW trong SQL



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

Bình luận Facebook
Khóa học liên quan đến bài viết

KHÓA HỌC LẬP TRÌNH FRONT END VỚI REACT.JS

56 giờ
Học Lập trình Front end hiện đại với ReactJS. Học làm chủ HTML, CSS, JS và thư viện JavaScript phổ biến nhất hiện nay. Sẵn sàng đi thực tập / đi làm ngay sau khóa học.

Khóa học PHP Full stack [2023] cho người mới bắt đầu

96 giờ
Khóa học Lập trình PHP Full stack, phiên bản cập nhật lần thứ 8. Dạy Lập trình PHP bài bản từ Front end đến Back end + Laravel. Hướng dẫn làm 2 Dự Án Web lớn

KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG

50 giờ
Khóa học giúp học viên sử dụng thành thạo ngôn ngữ Lập trình Python (3x). Hiểu và phát triển được Ứng dụng Web với Django Framework. Học thực hành với Giảng viên cao cấp.

Lập trình PHP với Laravel Framework

42 giờ
Khóa học Lập trình PHP với Laravel Framework được NIIT - ICT HÀ NỘI xây dựng nhằm hoàn thiện kỹ năng lập trình web các các bạn đã biết Lập trình Web PHP thuần.

Khóa học Java Full stack (IJFD)

104 giờ
Học lập trình Java Fullstack với khóa học được xây dựng theo lộ trình bài bản, từ JAVA CƠ BẢN đến JAVA WEB và nâng cao về JAVA FRAMEWORK như: Spring Boot, Hibernate
Mục lục
Đăng ký tư vấn
Nhân viên gọi điện tư vấn miễn phí sau khi đăng ký
Được cập nhật các ưu đãi sớm nhất
Hotline: 0383180086
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Hãy đăng ký để nhận những thông tin mới nhất về học bổng mới nhất tại NIIT - ICT Hà Nội
top
Đóng lại Đăng ký học tại NIIT - ICT Hà Nội
6260+ học viên đã theo học tại NIIT - ICT Hà Nội và có việc làm tốt trong ngành lập trình. Nắm lấy cơ hội ngay hôm nay!
Chọn khóa học
  • KHÓA HỌC LẬP TRÌNH FRONT END VỚI REACT.JS
  • KHÓA HỌC LẬP TRÌNH PHP WEB
  • Khóa học PHP Full stack [2023] cho người mới bắt đầu
  • Khóa học BIG DATA với Hadoop và Spark
  • Khóa học Lập trình Android tại Hà Nội
  • [Tuyển sinh 2023] Lập trình viên Quốc tế DigiNxt
  • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại Hà Nội
  • LẬP TRÌNH GAME
    • Khóa học Lập trình Game Unity
  • LẬP TRÌNH WEB FRONT END
    • KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG
    • KHÓA HỌC ANGULAR & TYPESCRIPT (FRONT END)
  • LẬP TRÌNH WEB BACK END
    • LẬP TRÌNH JAVA WEB VỚI FRAME WORK
    • Lập trình Web với Django
    • Lập trình PHP với Laravel Framework
  • CHƯƠNG TRÌNH ĐÀO TẠO ỨNG DỤNG CÔNG NGHỆ
    • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại TP HCM
  • LẬP TRÌNH WEB FULL STACK
    • Khóa học Java Full stack (IJFD)
  • LẬP TRÌNH MOBILE
    • FRONT-END VỚI REACTJS VÀ REACT NATIVE
    • Lập trình Android Nâng cao
  • ĐÀO TẠO CHO DOANH NGHIỆP
    • KHÓA HỌC BUSINESS ANALYSIC TỪ CƠ BẢN ĐẾN NÂNG CAO 2023
    • Khóa học Magento: Làm chủ CMS TMĐT lớn nhất
    • Khóa học IOT: Xây dựng Sản phẩm IOT với Raspberry Pi
    • Khóa học Automation Testing Chuyên nghiệp
  • KHÓA HỌC DỰ ÁN
    • Học sử dụng bộ Office: Word, Excel, Power Point, Mail chuyên nghiệp
  • KHÓA HỌC KHÁC
    • VBA Excel Toàn Tập (Cơ Bản - Nâng Cao)
    • VBA Excel Nâng cao
    • Khóa học JMeter: Performance Testing
    • Khóa học Tester đạt chuẩn Quốc tế ISTQB Foundation Level
    • Khoá Học Tester đạt chuẩn quốc tế ISTQB Advanced Level
Bạn chưa chọn khóa học cần đăng ký
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Đăng ký học thành công!
Cảm ơn bạn đã đăng ký học tại NIIT - ICT HÀ NỘI!