images
16/11/2020 09:09 am

Các câu lệnh SQL truy vấn lấy dữ liệu phổ biến - Part 1

Trong SQL DQL có khá nhiều câu lệnh, mệnh đề khác nhau. Tuy nhiên dưới đây là một số những truy vấn thường gặp nhất.

- Truy vấn SELECT

- Kèm mệnh đề điều kiện (Condition) WHERE

- Kèm từ khóa DISTINCT 

- Kèm từ khóa LIMIT

- Kèm từ khóa CONCATENATE

- Kèm từ khóa AS

- Kèm mệnh đề ORDER BY

- Kèm mệnh đề GROUP BY

<Để tham gia khóa học SQL Cơ bản Miễn phí do Tech Zone tổ chức, bạn vui lòng ĐĂNG KÝ TẠI ĐÂY nhé>

Để thuận tiện cho các bạn theo dõi và thực hành, các ví dụ sẽ theo dữ liệu có từ 2 bảng (Table) sau: People Orders

Bảng (Table) People:

id

name

email

mobile

city

1

Trần Văn Nam

namnguyen@gmail.com

0917765544

HN

2

Nguyễn Tuấn Anh

tuananh@gmail.com

0987659000

HCM

3

Phạm Hải Yến

yenpham@gmail.com

0965891876

DN

4

Nguyễn Minh Lam

minh2@gmail.com

null

HP

 

Bảng (Table) Orders (Đơn hàng)

id

product_name

catalogy

customer_id

quantity

created_at

1

Áo sơ mi

MS01

1

3

2020-04-12 10:10:30

2

Túi xách

MS02

2

5

2020-03-23 17:05:13

3

Quần âu

MS03

1

7

2020-02-03 11:07:18

4

Áo phông

MS01

3

1

2020-01-03 16:08:24

5

MS07

2

4

2019-12-23 12:12:45

 

1. Cấu trúc câu lệnh truy vấn lấy dữ liệu SELECT

Cú pháp

SELECT Column FROM Table WHERE Condition;

 

Trong đó:

SELECT Column

Lựa chọn cột để lấy kết quả.

Lấy dữ liệu của nhiều cột thì liệt kê tên cột có cách nhau bởi dấu phẩy “,”. Ví dụ: SELECT customerId, Name

Dùng SELECT * để lấy tất cả các cột

FROM Table

Lựa chọn bảng (Table) để lấy kết quả

WHERE Condition

Lấy kết quả theo điều kiện

 

Lưu ý: Kết thúc câu lệnh phải có dấu chấm phẩy (;)

Ví dụ:

SELECT * FROM people; → Kết quả trả về toàn bộ dữ liệu có ở bảng People. (Xem Bảng People ở trên)


SELECT id, name FROM people; → Kết quả trả về dữ liệu ở 2 cột id và name ở bảng People. (Xem Kết quả ví dụ 2 ở dưới)


SELECT id, name, email FROM people WHERE id > 2; → Kết quả trả về dữ liệu ở 3 cột id, name, email có id = 3, 4, 5. (Xem Kết quả ví dụ 3 ở dưới)


 

Kết quả ví dụ 2

id

name

1

Trần Văn Nam

2

Nguyễn Tuấn Anh

3

Phạm Hải Yến

4

Nguyễn Minh Lam

 

Kết quả ví dụ 3

id

name

email

2

Nguyễn Tuấn Anh

tuananh@gmail.com

3

Phạm Hải Yến

yenpham@gmail.com

4

Nguyễn Minh Lam

minh2@gmail.com

 

2. Các điều kiện (Condition) truy vấn WHERE  thường dùng

Condition

Giải thích

>, <,>=,<=

So sánh lớn hơn, nhỏ hơn

=

So sánh bằng

like

So sánh giống, % được sử dụng để đại điện cho ký tự, _ so sánh cho 1 ký tự

not like

So sánh khác

is not

So sánh không null: name is not null

in

Lựa chọn giá trị trong một tập hợp

Để kết hợp nhiều điều kiện, ta dùng toán tử AND, OR

 

Ví dụ:

WHERE name =’Nam’;  →  lấy chính xác tên chỉ gồm chữ “Nam”

WHERE name LIKE ‘%Nam’;   → % được sử dụng so sánh các ký tự thay thế. WHERE name LIKE ‘_am’;  → _ được sử dụng thay thế cho 1 ký tự

WHERE mobile is not null;    → Kiểm tra mobile có giá trị

WHERE  city IN (‘HN', ‘DN');   →  Kiểm tra các bản ghi có địa chỉ trong tập hợp 2  thành phố.

WHERE  city IN (‘HN', ‘DN') AND mobile is not null; Kiểm tra các bản ghi có địa chỉ thuộc 2 thành phố và thông tin trường mobile có giá trị.


 

Ở đây, các bạn lưu ý thêm về cách truy vấn với điều kiện tìm là chuỗi ký tự và kiểu ngày tháng nhé:

- Truy vấn điều kiện dữ liệu là chuỗi ký tự (SQL Condition vs String)

WHERE name LIKE ‘%Nam%’


% đại diện cho chuỗi ký tự

Tìm các record có trường Name có chứa chuỗi ký tự “Nam"

Kết quả:1 kết quả là dữ liệu có tên “Trần Văn Nam”


WHERE name LIKE ‘%_am%’


_ đại diện cho 1 ký tự

Tìm các record có trường Name có 3 ký tự kết thúc bằng “am”. 


Kết quả: 2 kết quả: là dữ liệu có tên Trần Văn Nam và Nguyễn Minh Lam.

WHERE name LIKE ‘Nguyen  Tu_n An_’

Sử dụng _ để kết hợp. Tìm kiếm tên có dạng:

Nguyen Tu*n An*.


Kết quả: 1 kết quả: Nguyễn Tuấn Anh

REPLACE(name, src, des) 

Thay thế chuỗi ký tự với des thay cho src

Ví dụ:


SELECT REPLACE(name, 'Yến', 'Mai’)  FROM people;


Kết quả: Tên Yến thay bằng Mai, xem bảng kết quả ví dụ 4 ở dưới

lower(name)
upper(name)

Lower: Chuyển hết các dữ liệu tìm kiếm thành chữ thường trước khi so sánh và lấy ra.

Upper: Chuyển dữ liệu thành chữ in hoa rồi so sánh và lấy ra.


Ví dụ

WHERE lower(name) LIKE ’%nam’ → Tìm với điều kiện tên là viết thường là nam.


Kết quả: 1 kết quả là dữ liệu có tên “Trần Văn Nam”


 

Kết quả ví dụ 4

id

name

email

mobile

city

1

Trần Văn tam

namnguyen@gmail.com

0917765544

HN

2

Nguyễn Tuấn Anh

tuananh@gmail.com

0987659000

HCM

3

Phạm Hải Mai

yenpham@gmail.com

0965891876

DN

4

Nguyễn Minh Lam

minh2@gmail.com

null

HP

 

- Truy vấn điều kiện WHERE với dữ liệu dạng ngày tháng (Condition vs Date)

Với kiểu datetime có nhiều cách so sánh theo cách RDBMS hỗ trợ. 

Ví dụ

Lấy toàn bộ order từ ngày 2020-02-03:

SELECT * FROM orders WHERE created_at > '2020-03-02 00:00:00'

Kết quả: Xem kết quả ví dụ 5 ở dưới

 

Lấy toàn bộ order TẠI NGÀY 2020-02-03:

Nếu dùng:

SELECT * FROM orders WHERE created_at = '2020-02-03'; → sẽ không trả về kết quả.

Cần phải chuyển đổi kiểu dữ liệu để so sánh (convert - cast):

SELECT * FROM orders WHERE created_at::date = '2020-02-03'

Hoặc 

SELECT * FROM orders 

WHERE created_at >= '2020-02-03' and created_at < '2020-02-04'

Kết quả: Xem kết quả ví dụ 6 ở dưới

 

Ngoài ra có thể sử dụng hàm Day(created_at), Month(created_at), Year(created_at) để convert ngày, tháng, năm.


Kết quả ví dụ 5:

id

product_name

catalogy

customer_id

quantity

created_at

1

Áo sơ mi

MS01

1

3

2020-04-12 10:10:30

2

Túi xách

MS02

2

5

2020-03-23 17:05:13

3

Quần âu

MS03

1

7

2020-02-03 11:07:18

 

Kết quả ví dụ 6:

id

product_name

catalogy

customer_id

quantity

created_at

3

Quần âu

MS03

1

7

2020-02-03 11:07:18

 

Mời các bạn đọc bài “Tìm hiểu SQL và phân loại câu lệnh SQL”.

- Tech Zone -

Thư giãn chút nào!!!

Bài viết liên quan