Chủ đề nổi bật
03/08/2018, 10:07

Bài 12: Lệnh SELECT lấy dữ liệu trong MySQL

Trong bài này chúng ta sẽ tìm hiểu cách lấy dữ liệu trong MySQL với lệnh SELECT ở mức căn bản nhất, nghĩa là chỉ SELECT data ở một bảng duy nhất ...

Trong bài này chúng ta sẽ tìm hiểu cách lấy dữ liệu trong MySQL với lệnh SELECT ở mức căn bản nhất, nghĩa là chỉ SELECT data ở một bảng duy nhất chữ không có liên kết giữa nhiều bảng. Bài này khá là quan trọng nên các bạn cần lưu ý các vấn đề mình trình bày nhé.

Trước tiên chúng ta cần tạo database QLSV, tạo bảng SINHVIEN và thêm một vài dòng dữ liệu như sau:

CREATE DATABASE IF NOT EXISTS qlsv;
USE qlsv;

CREATE TABLE IF NOT EXISTS sinhvien(
	sv_id INT(11) NOT NULL AUTO_INCREMENT,
	sv_name VARCHAR(255) NOT NULL,
	sv_description  VARCHAR(500),
	CONSTRAINT pk_sinhvien PRIMARY KEY(sv_id)
) ENGINE = INNODB;

INSERT INTO sinhvien(sv_name, sv_description)
VALUES('Mr Cuong', 'Nguyen Van Cuong');

INSERT INTO sinhvien(sv_name, sv_description)
VALUES('Mr Kinh', 'Nguyen Van Kinh');

INSERT INTO sinhvien(sv_name, sv_description)
VALUES('Mr Chinh', 'Nguyen Van Chinh');

INSERT INTO sinhvien(sv_name, sv_description)
VALUES('Mr Quyen', 'Nguyen Van Quyen');

Và đây danh sách sinh viên mà ta đã thêm:

322/danh-sach-sinh-vien.png

Bây giờ ta sẽ sử dụng kết quả này để thực hành trong quá trình học nhé.

1. Lệnh SELECT trong MySQL

Lệnh SELECT có nhiệm vụ lấy danh sách dữ liệu của một hoặc nhiều bảng trong database, tuy nhiên phạm vi của bài này chúng ta chỉ đề cập đến SELECT một table, trong bài học về JOIN chúng ta sẽ tìm hiểu SELECT nhiều table.

Cú pháp của lệnh SELECT như sau:

SELECT field1, field2, field3, ...
FROM table_name
WHERE <dieu_kien_loc>
ORDER BY field_name ASC|DESC 
LIMIT start, limit
Trong đó:
  • SELECT field1, field2, field3, ... là danh sách các fields cần lấy
  • FROM table_name tên table cần lấy
  • WHERE <dieu_kien_loc> là các điều kiện để lấy các dòng dữ liệu
  • ORDER BY field_name, ASC|DESC: là cách sắp xếp cho field_name theo kiểu ASC (tăng dần) hoặc DESC (giảm dần)
  • LIMIT start, limit là lấy limit records kể từ record thứ start trong kết quả.

Ví dụ: Lấy danh sách sinh viên gồm các thông tin sv_id, sv_name, sv_description từ bảng SINHVIEN.

SELECT sv_id, sv_name, sv_description
FROM SINHVIEN

Chạy lên kết quả gồm tất cả sinh viên (4 sv) trong bảng SINHVIEN.

/322/danh-sach-sinh-vien.png

Để lấy tất cả các fields thì ta sử dụng dấu sao (*).

Ví dụ:

SELECT *
FROM SINHVIEN

2. Lệnh SELECT có WHERE

Để lọc danh sách sinh viên theo một tiêu chí nào đó thì ta sử dụng thêm chức năng WHERE trong SELECT. Ví dụ tôi muốn lấy sinh viên có tên là 'Mr Kinh' thì tôi sẽ viết câu truy vấn như sau:

SELECT sv_id, sv_name, sv_description
FROM SINHVIEN
WHERE sv_name = 'Mr Kinh'
Chạy lên kết quả là một sinh viên:

/322/select-mot-sinh-vien.png

Tới đây bạn sẽ có câu hỏi là "Có phải ở WHERE chỉ có sử dụng toán tử bằng để lọc?". Câu trả lời là không nhé, có rất nhiều toán tử dùng để lọc như một ngôn ngữ lập trình khác, tuy nhiên về cú pháp thì hơi khác chút xíu (xem các bảng dưới đây).

Bảng các toán tử quan hệ thông dụng

Các toán tử quan hệ chính là các toán tử thể hiện mối quan hệ giữa hai vế (vế phải và vế trái).

Ký hiệu Diễn giải
= So sánh bằng, ví dụ sv_name='nguyen van cuong'
> Lớn hơn, ví dụ sv_id > 1
>= Lớn hơn hoặc bằng, ví dụ sv_id >= 2
< Bé hơn, ví dụ sv_id < 2
<=  Bé hơn hoặc bằng, ví dụ sv_id <= 3
<> hoặc != Khác, ví dụ sv_id <> 3
Like So sánh theo biểu thức. Học sau
in Trong một tập hợp nào đó. Học sau 

Trong bảng này toán tử LIKE và IN sẽ tìm hiểu ở một bài khác. bây giờ ta sẽ thực hành vài ví dụ để các bạn làm quen nhé.

Ví dụ 1: Lấy danh sách sinh viên có sv_id lớn hơn 2.
SELECT sv_id, sv_name, sv_description
FROM SINHVIEN
WHERE sv_id > 2<br><br>
Ví dụ 2: Lấy danh sách sinh viên có tên không phải là Mr Cuong
SELECT sv_id, sv_name, sv_description
FROM SINHVIEN
WHERE sv_name <> 'Mr Cuong'
Ví dụ 3: Lấy danh sách sinh viên có sv_id bé hơn 3
SELECT sv_id, sv_name, sv_description
FROM SINHVIEN
WHERE sv_name < 3
Bảng các toán tư luận lý thông dụng:

Toán tử luận lý dùng để thể hiện suy luận giữa hai mệnh đề (mệnh đề trái, mệnh đề phải) và từ đó trả về kết quả đúng hoặc sai.

Ký hiệu Diễn giải
AND nếu cả hai mệnh đề đều đúng thì kết quả là đúng
OR Nếu một trong hai mệnh đề đúng thì sẽ trả kết quả đúng

Thông thường chúng ta sử dụng hay toán tử này là quá đủ rồi. Sau đây là một số ví dụ:

Ví dụ 1: Lấy danh sách sinh viên có sv_id > 1 và có tên là Mr Cuong
SELECT sv_id, sv_name, sv_description
FROM SINHVIEN
WHERE sv_id > 1 AND sv_name = 'Mr Cuong'
Ví dụ 2: Lấy danh sách sinh viên có id = 2 hoặc có tên là Mr Kinh
SELECT sv_id, sv_name, sv_description
FROM SINHVIEN
WHERE sv_id = 2 OR sv_name = 'Mr Kinh'

3. Lệnh SELECT có ORDER BY

ORDER dùng để sắp xếp kết quả trả về của câu truy vấn, nó có hai tham số là tên field và kiểu sắp xếp. Sau đây là cách dùng của cả hai trường hợp.

Sắp xếp tăng dần:

SELECT sv_id, sv_name, sv_description
FROM SINHVIEN
ORDER BY sv_id ASC

Kết quả:

/322/order-by-asc.png

Sắp xếp giảm dần:

SELECT sv_id, sv_name, sv_description
FROM SINHVIEN
ORDER BY sv_id DESC

Kết quả:

/322/order-by-desc.png

Các bạn thấy hai kết quả đều trả về 4 sinh viên nhưng thứ tự của nó lại khác nhau. Lý do là ta đã sắp xếp field sv_id tăng dần cho ví dụ 1 và giảm dần cho ví dụ 2.

4. Lênh SELECT có LIMIT

LIMIT dùng để giới hạn hết quả trả về và rất thường hay sử dụng kết hợp với thuật toán phân trang để tốc độ website chạy nhanh hơn.  Nó có hai tham số đó là vị trí record cần lấy (start) và lấy bao nhiêu record (limit).

Ví dụ: Lấy một sinh viên  đầu tiên trong kết quả

SELECT sv_id, sv_name, sv_description
FROM SINHVIEN
ORDER BY sv_id DESC
LIMIT 0, 1
Ví dụ: Lấy hai sinh viên bắt đầu từ sinh viên thứ 2 trong kết quả
SELECT sv_id, sv_name, sv_description
FROM SINHVIEN
ORDER BY sv_id DESC
LIMIT 2,2 
Ở phần này bạn hay sai ở chỗ truyền tham số vào bị nhầm lẫn giữa start limit.

5. Quy trình xử lý câu SELECT

Phần này có lẽ nhiều bạn chưa biết nên tôi đưa vào luôn cho bạn tham khảo. Nhìn vào cú pháp câu truy vấn bạn có thắc mắc về quy trình chạy câu truy vấn hay không? Nhiều bạn hiểu lầm là cứ chạy từ trên xuống là sai nhé. Quy trình chạy của nó như sau: FROM -> WHERE -> SELECT, nghĩa là nó sẽ chọn từ bảng trước, sau đó kiểm tra điều kiện WHERE rồi mới quyết định chọn SELECT.

# Lời kết

Lệnh SELECT trong MySQL quá đơn giản phải không các bạn. Bạn cần phải nắm vững các kiến thức trên ở bài tiếp theo chúng ta sẽ tìm hiểu về lệnh JOIN sẽ rất là khó đấy, chưa kể nó rất thông dụng khi làm việc lầm trình web nữa. Chúc bạn học tốt nhé!

BÀI KẾ SAU
BÀI KẾ TIẾP

Nguồn: code24h.com

Bài liên quan
Mới nhất

MySQL căn bản

Trong series học MySQL căn bản này bạn sẽ được hướng dẫn tự học MySQL tại nhà một cách hiệu quả, series này dành cho những bạn đang muốn tự học MySQL. Khi học lập trình web với PHP thì chắc chắn bạn sẽ được gợi ý học thêm MySQL nữa bởi bộ đôi PHP + MySQL là một cặp hoàn hảo xưa nay, nó ...

MySQL Functions

BÀI KẾ SAU BÀI KẾ TIẾP

MySQL View

BÀI KẾ SAU BÀI KẾ TIẾP

MySQL Tutorials

BÀI KẾ SAU BÀI KẾ TIẾP

Bài 20: INNER JOIN trong MySQL

Trong bài này chúng ta tìm hiểu cách sử dụng INNER JOIN để kết hai bảng với nhau. Ở bài tích đề cát chúng ta đã tìm hiểu cách truy vấn dữ liệu ...

Bài 18: Gộp kết quả với toán tử UNION trong MySQL

Nếu bạn cần viết hai câu truy vấn SELECT khác nhau nhưng bạn muốn nó trả về một danh sách kết quả duy nhất thì bạn phải sử dụng toán tử UNION. ...

Tạo Unique trong MySQL

Trong bài tạo khóa chính Primary Key mình đã nói rằng trong một bảng sẽ tồn tại một khóa chính ( có thể có nhiều fields ) và giá trị của nó sẽ là ...

Bài 13: WHERE IN - WHERE LIKE trong MySQL

Ở bài tìm hiểu lệnh SELECT mình đã liệt kê danh sách các toán tử và trong đó có hai toán tử là IN và LIKE thì trong bài này chúng ta sẽ tìm hiểu ...

Bài 16: Phép tích đề cát trong MySQL

Tích đề cát trong MySQL có nghĩa là truy vấn trên nhiều table trong cùng một câu SELECT và kêt quả trả về có thể là một trong số các fields của ...

Lệnh tạo database (Create Database) trong MySQL

Với mỗi ứng dụng chúng ta sẽ tạo một Database để lưu trữ dữ liệu của ứng dụng đó. Mỗi database sẽ có các table và trong mỗi table thì có nhiều ...