Hướng dẫn select into mysql - chọn vào mysql

Bài viết này sẽ hướng dẫn bạn lưu các kết quả truy vấn vào biến sử dụng

SELECT 
    city
INTO
    @city
FROM 
    customers
WHERE 
    customerNumber = 103;
9

SELECT 
    c1, c2, c3, ...
INTO 
    @v1, @v2, @v3,...
FROM 
    table_name
WHERE 
    condition;

Giải thích cú pháp:

  • c1, c2, và c3 là các cột hoặc biểu thức mà bạn muốn select và lưu vào biến.
  • @v1, @v2, và @v3 là các biến lưu giá trị của c1, c2 và c3.

Số lượng biến phải giống số lượng cột hoặc biểu thức. Thêm nữa là truy vấn phải trả về 0 hoặc 1 row.

Nếu truy vấn trả về 0 row, MySQL sẽ báo warning và giá trị biến không hề thay đổi.

Trong trường hợp truy vấn trả về nhiều row, MySQL báo 1 error. Và để đảm bảo truy vấn lúc nào cũng trả về 1 row, thì bạn sử dụng

SELECT 
    city,
    country 
INTO
    @city,
    @country
FROM 
    customers
WHERE 
    customerNumber = 103;
0.

Ví dụ sử dụng MySQL SELECT city, country INTO @city, @country FROM customers WHERE customerNumber = 103; 1

Chúng ta sẽ sử dụng bảng

SELECT 
    city,
    country 
INTO
    @city,
    @country
FROM 
    customers
WHERE 
    customerNumber = 103;
2 trong database mẫu để làm ví dụ:

Hướng dẫn select into mysql - chọn vào mysql

Ví dụ MySQL SELECT INTO single variable

Ví dụ sau lấy city của khách hàng có number là 103 và lưu vào biến

SELECT 
    city,
    country 
INTO
    @city,
    @country
FROM 
    customers
WHERE 
    customerNumber = 103;
3:

SELECT 
    city
INTO
    @city
FROM 
    customers
WHERE 
    customerNumber = 103;

Xem giá tị biến

SELECT 
    city,
    country 
INTO
    @city,
    @country
FROM 
    customers
WHERE 
    customerNumber = 103;
3:

Ví dụ MySQL SELECT INTO multiple variables

Để lưu nhiều giá trị vào nhiều biến, bạn sử dụng dấu phẩy để tách biệt. Ví dụ sau tìm kiếm city và country của khách hàng có number là 103 và lưu vào 2 biến tương ứng là

SELECT 
    city,
    country 
INTO
    @city,
    @country
FROM 
    customers
WHERE 
    customerNumber = 103;
3 và
SELECT 
    city,
    country 
INTO
    @city,
    @country
FROM 
    customers
WHERE 
    customerNumber = 103;
6:

SELECT 
    city,
    country 
INTO
    @city,
    @country
FROM 
    customers
WHERE 
    customerNumber = 103;

Xem giá trị 2 biến

SELECT 
    city,
    country 
INTO
    @city,
    @country
FROM 
    customers
WHERE 
    customerNumber = 103;
3 và
SELECT 
    city,
    country 
INTO
    @city,
    @country
FROM 
    customers
WHERE 
    customerNumber = 103;
6:

Hướng dẫn select into mysql - chọn vào mysql

Ví dụ MySQL SELECT INTO variable – multiple rows

Lệnh sau sẽ báo error vì truy vấn trả về nhiều rows:

SELECT 
    creditLimit
INTO
    @creditLimit
FROM 
    customers
WHERE 
    customerNumber > 103;

Kết quả:

Error Code: 1172. Result consisted of more than one row

Để sửa lỗi, thì sử dụng

SELECT 
    city,
    country 
INTO
    @city,
    @country
FROM 
    customers
WHERE 
    customerNumber = 103;
0:

SELECT 
    creditLimit
INTO
    @creditLimit
FROM 
    customers
WHERE 
    customerNumber > 103
LIMIT 1;

Như vậy là các bạn có thể sử dụng MySQL

SELECT 
    creditLimit
INTO
    @creditLimit
FROM 
    customers
WHERE 
    customerNumber > 103;
0 để lưu các kết quả trong truy vấn và lưu vào biến, để sử dụng cho lần sau.

Hi vọng bài viết hữu ích cho các bạn.

Hãy like, share và comment để cùng nhau học nhé.

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é!

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 
    creditLimit
INTO
    @creditLimit
FROM 
    customers
WHERE 
    customerNumber > 103;
1 ở mức căn bản nhất, nghĩa là chỉ
SELECT 
    creditLimit
INTO
    @creditLimit
FROM 
    customers
WHERE 
    customerNumber > 103;
1 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é.freetuts.net, không được copy dưới mọi hình thức.

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

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');

Trước tiên chúng ta cần tạo database

SELECT 
    creditLimit
INTO
    @creditLimit
FROM 
    customers
WHERE 
    customerNumber > 103;
3, tạo bảng
SELECT 
    creditLimit
INTO
    @creditLimit
FROM 
    customers
WHERE 
    customerNumber > 103;
4 và thêm một vài dòng dữ liệu như sau:

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 MySQL

Lệnh

SELECT 
    creditLimit
INTO
    @creditLimit
FROM 
    customers
WHERE 
    customerNumber > 103;
1 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 
    creditLimit
INTO
    @creditLimit
FROM 
    customers
WHERE 
    customerNumber > 103;
1 một table, trong bài học về JOIN chúng ta sẽ tìm hiểu
SELECT 
    creditLimit
INTO
    @creditLimit
FROM 
    customers
WHERE 
    customerNumber > 103;
1 nhiều table.
:

SELECT field1, field2, field3, ...
FROM table_name
WHERE <dieu_kien_loc>
ORDER BY field_name ASC|DESC 
LIMIT start, limit

Cú pháp của lệnh

SELECT 
    creditLimit
INTO
    @creditLimit
FROM 
    customers
WHERE 
    customerNumber > 103;
1 như sau::

  • Trong đó:field1, field2, field3, ... là danh sách các fields cần lấy
  • SELECT 
        creditLimit
    INTO
        @creditLimit
    FROM 
        customers
    WHERE 
        customerNumber > 103;
    
    1 field1, field2, field3, ... là danh sách các fields cần lấytable_name tên table cần lấy
  • Error Code: 1172. Result consisted of more than one row
    
    0 table_name tên table cần lấy là các điều kiện để lấy các dòng dữ liệu
  • Error Code: 1172. Result consisted of more than one row
    
    1 là các điều kiện để lấy các dòng dữ liệufield_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)
  • Error Code: 1172. Result consisted of more than one row
    
    2 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)start, limit là lấy limit records kể từ record thứ start trong kết quả.

Error Code: 1172. Result consisted of more than one row
3 start, limit là lấy limit records kể từ record thứ start trong kết quả.: Lấy danh sách sinh viên gồm các thông tin
Error Code: 1172. Result consisted of more than one row
4,
Error Code: 1172. Result consisted of more than one row
5,
Error Code: 1172. Result consisted of more than one row
6 từ bảng
SELECT 
    creditLimit
INTO
    @creditLimit
FROM 
    customers
WHERE 
    customerNumber > 103;
4.

SELECT sv_id, sv_name, sv_description
FROM SINHVIEN

Ví dụ: Lấy danh sách sinh viên gồm các thông tin

Error Code: 1172. Result consisted of more than one row
4,
Error Code: 1172. Result consisted of more than one row
5,
Error Code: 1172. Result consisted of more than one row
6 từ bảng
SELECT 
    creditLimit
INTO
    @creditLimit
FROM 
    customers
WHERE 
    customerNumber > 103;
4.

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

2. Lệnh SELECT có WHEREMr 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'

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

Error Code: 1172. Result consisted of more than one row
1 trong
SELECT 
    creditLimit
INTO
    @creditLimit
FROM 
    customers
WHERE 
    customerNumber > 103;
1. 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:

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

Ký hiệuDiễ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ó
SELECT 
    creditLimit
INTO
    @creditLimit
FROM 
    customers
WHERE 
    customerNumber > 103
LIMIT 1;
1 và có tên là
SELECT 
    creditLimit
INTO
    @creditLimit
FROM 
    customers
WHERE 
    customerNumber > 103
LIMIT 1;
8
< Bé hơn, ví dụ
SELECT 
    creditLimit
INTO
    @creditLimit
FROM 
    customers
WHERE 
    customerNumber > 103
LIMIT 1;
3
Bé hơn, ví dụ
SELECT 
    creditLimit
INTO
    @creditLimit
FROM 
    customers
WHERE 
    customerNumber > 103
LIMIT 1;
3
Bé hơn hoặc bằng, ví dụ
SELECT 
    creditLimit
INTO
    @creditLimit
FROM 
    customers
WHERE 
    customerNumber > 103
LIMIT 1;
4
hoặc != Khác, ví dụ sv_id 3
Like So sánh theo biểu thức. Học sauHọc sau
in Trong một tập hợp nào đó. Học sauHọ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ó

Error Code: 1172. Result consisted of more than one row
4 lớn hơn 2.: Lấy danh sách sinh viên có
Error Code: 1172. Result consisted of more than one row
4 lớn hơn 2.

SELECT 
    city
INTO
    @city
FROM 
    customers
WHERE 
    customerNumber = 103;
0

Ví dụ 2: Lấy danh sách sinh viên có tên không phải là Mr Cuong: Lấy danh sách sinh viên có tên không phải là Mr Cuong

SELECT 
    city
INTO
    @city
FROM 
    customers
WHERE 
    customerNumber = 103;
1

Ví dụ 3: Lấy danh sách sinh viên có

Error Code: 1172. Result consisted of more than one row
4 bé hơn 3: Lấy danh sách sinh viên có
Error Code: 1172. Result consisted of more than one row
4 bé hơn 3

SELECT 
    city
INTO
    @city
FROM 
    customers
WHERE 
    customerNumber = 103;
2

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

SELECT 
    creditLimit
INTO
    @creditLimit
FROM 
    customers
WHERE 
    customerNumber > 103
LIMIT 1;
1 và có tên là
SELECT 
    creditLimit
INTO
    @creditLimit
FROM 
    customers
WHERE 
    customerNumber > 103
LIMIT 1;
8
: Lấy danh sách sinh viên có
SELECT 
    creditLimit
INTO
    @creditLimit
FROM 
    customers
WHERE 
    customerNumber > 103
LIMIT 1;
1 và có tên là
SELECT 
    creditLimit
INTO
    @creditLimit
FROM 
    customers
WHERE 
    customerNumber > 103
LIMIT 1;
8

SELECT 
    city
INTO
    @city
FROM 
    customers
WHERE 
    customerNumber = 103;
3

Ví dụ 2: Lấy danh sách sinh viên có

SELECT 
    creditLimit
INTO
    @creditLimit
FROM 
    customers
WHERE 
    customerNumber > 103
LIMIT 1;
9 hoặc có tên là
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');
0
: Lấy danh sách sinh viên có
SELECT 
    creditLimit
INTO
    @creditLimit
FROM 
    customers
WHERE 
    customerNumber > 103
LIMIT 1;
9 hoặc có tên là
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');
0

SELECT 
    city
INTO
    @city
FROM 
    customers
WHERE 
    customerNumber = 103;
4

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 
    city
INTO
    @city
FROM 
    customers
WHERE 
    customerNumber = 103;
5

Kết quả:

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

SELECT 
    city
INTO
    @city
FROM 
    customers
WHERE 
    customerNumber = 103;
6

Kết quả:

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

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 Error Code: 1172. Result consisted of more than one row 4 tăng dần cho ví dụ 1 và giảm dần cho ví dụ 2.

4. Lênh SELECT có LIMITstart) và lấy bao nhiêu record (limit).

Error Code: 1172. Result consisted of more than one row
3 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).: Lấy một sinh viên đầu tiên trong kết quả

SELECT 
    city
INTO
    @city
FROM 
    customers
WHERE 
    customerNumber = 103;
7

Ví dụ: Lấy một sinh viên đầu tiên trong kết quả: Lấy hai sinh viên bắt đầu từ sinh viên thứ 2 trong kết quả

SELECT 
    city
INTO
    @city
FROM 
    customers
WHERE 
    customerNumber = 103;
8

Ví dụ: Lấy hai sinh viên bắt đầu từ sinh viên thứ 2 trong kết quảstart limit.

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