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 field1, field2, field3, ... FROM table_name WHERE <dieu_kien_loc> ORDER BY field_name ASC|DESC LIMIT start, limit4 ở mức căn bản nhất, nghĩa là chỉ SELECT field1, field2, field3, ... FROM table_name WHERE <dieu_kien_loc> ORDER BY field_name ASC|DESC LIMIT start, limit4 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é. Show Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức. Trước tiên chúng ta cần tạo database SELECT field1, field2, field3, ... FROM table_name WHERE <dieu_kien_loc> ORDER BY field_name ASC|DESC LIMIT start, limit6, tạo bảng SELECT field1, field2, field3, ... FROM table_name WHERE <dieu_kien_loc> ORDER BY field_name ASC|DESC LIMIT start, limit7 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'); Bài viết này được đăng tại [free tuts .net] Và đây danh sách sinh viên mà ta đã thêm: 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 MySQLLệnh SELECT field1, field2, field3, ... FROM table_name WHERE <dieu_kien_loc> ORDER BY field_name ASC|DESC LIMIT start, limit4 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 field1, field2, field3, ... FROM table_name WHERE <dieu_kien_loc> ORDER BY field_name ASC|DESC LIMIT start, limit4 một table, trong bài học về JOIN chúng ta sẽ tìm hiểu SELECT field1, field2, field3, ... FROM table_name WHERE <dieu_kien_loc> ORDER BY field_name ASC|DESC LIMIT start, limit4 nhiều table. Cú pháp của lệnh SELECT field1, field2, field3, ... FROM table_name WHERE <dieu_kien_loc> ORDER BY field_name ASC|DESC LIMIT start, limit4 như sau: SELECT field1, field2, field3, ... FROM table_name WHERE <dieu_kien_loc> ORDER BY field_name ASC|DESC LIMIT start, limit Trong đó:
Ví dụ: Lấy danh sách sinh viên gồm các thông tin SELECT sv_id, sv_name, sv_description FROM SINHVIEN7, SELECT sv_id, sv_name, sv_description FROM SINHVIEN8, SELECT sv_id, sv_name, sv_description FROM SINHVIEN9 từ bảng SELECT field1, field2, field3, ... FROM table_name WHERE <dieu_kien_loc> ORDER BY field_name ASC|DESC LIMIT start, limit7. 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. Để 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 SELECT sv_id, sv_name, sv_description FROM SINHVIEN4 trong SELECT field1, field2, field3, ... FROM table_name WHERE <dieu_kien_loc> ORDER BY field_name ASC|DESC LIMIT start, limit4. 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: 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ệuDiễn giải=So sánh bằng, ví dụSELECT * FROM SINHVIEN3>Lớn hơn, ví dụ SELECT * FROM SINHVIEN4>=Lớn hơn hoặc bằng, ví dụ SELECT * FROM SINHVIEN5<Bé hơn, ví dụ SELECT * FROM SINHVIEN6<=Bé hơn hoặc bằng, ví dụ SELECT * FROM SINHVIEN7<> hoặc !=Khác, ví dụ sv_id <> 3LikeSo sánh theo biểu thức. Học sauinTrong 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ó SELECT sv_id, sv_name, sv_description FROM SINHVIEN7 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ó SELECT sv_id, sv_name, sv_description FROM SINHVIEN7 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ệuDiễn giảiANDnếu cả hai mệnh đề đều đúng thì kết quả là đúngORNếu một trong hai mệnh đề đúng thì sẽ trả kết quả đúngThô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ó SELECT * FROM SINHVIEN4 và có tên là SELECT sv_id, sv_name, sv_description FROM SINHVIEN WHERE sv_name = 'Mr Kinh'1 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ó SELECT sv_id, sv_name, sv_description FROM SINHVIEN WHERE sv_name = 'Mr Kinh'2 hoặc có tên là SELECT sv_id, sv_name, sv_description FROM SINHVIEN WHERE sv_name = 'Mr Kinh'3 SELECT sv_id, sv_name, sv_description FROM SINHVIEN WHERE sv_id = 2 OR sv_name = 'Mr Kinh' 3. Lệnh SELECT có ORDER BYORDER 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 field1, field2, field3, ... FROM table_name WHERE <dieu_kien_loc> ORDER BY field_name ASC|DESC LIMIT start, limit0 Kết quả: Sắp xếp giảm dần: SELECT field1, field2, field3, ... FROM table_name WHERE <dieu_kien_loc> ORDER BY field_name ASC|DESC LIMIT start, limit1 Kết quả: 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 SELECT sv_id, sv_name, sv_description FROM SINHVIEN7 tăng dần cho ví dụ 1 và giảm dần cho ví dụ 2. 4. Lênh SELECT có LIMITSELECT sv_id, sv_name, sv_description FROM SINHVIEN6 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 field1, field2, field3, ... FROM table_name WHERE <dieu_kien_loc> ORDER BY field_name ASC|DESC LIMIT start, limit2 Ví dụ: Lấy hai sinh viên bắt đầu từ sinh viên thứ 2 trong kết quả SELECT field1, field2, field3, ... FROM table_name WHERE <dieu_kien_loc> ORDER BY field_name ASC|DESC LIMIT start, limit3 Ở phần này bạn hay sai ở chỗ truyền tham số vào bị nhầm lẫn giữa start và limit. 5. Quy trình xử lý câu SELECTPhầ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ếtLệ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é! |