MySQL Cheat Sheet đầy đủ (Bảng tổng hợp câu lệnh MySQL)

MySQL Cheat Sheet đầy đủ (Bảng tổng hợp câu lệnh MySQL)

MySQL Cheat Sheet đầy đủ giúp bạn tra cứu nhanh các câu lệnh MySQL từ cơ bản đến nâng cao như SELECT, INSERT, UPDATE, DELETE, JOIN, GROUP BY, Index, Transaction, View, Trigger, Stored Procedure cùng nhiều ví dụ thực tế dễ áp dụng, chi tiết như nào hãy cùng chúng tôi phân tích:

MySQL là một trong những hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) phổ biến nhất hiện nay. Dù bạn là người mới học SQL, lập trình viên web, quản trị cơ sở dữ liệu hay DevOps, việc sở hữu một MySQL Cheat Sheet đầy đủ sẽ giúp tiết kiệm rất nhiều thời gian khi làm việc. Thay vì phải nhớ từng cú pháp hoặc tra cứu liên tục, bạn chỉ cần mở tài liệu này để tìm nhanh lệnh cần dùng.

Bài viết dưới đây được biên soạn theo dạng tài liệu tra cứu thực tế, bao gồm từ những câu lệnh cơ bản cho đến các kỹ thuật nâng cao thường gặp trong quá trình phát triển phần mềm. Mỗi phần đều có ví dụ minh họa giúp bạn dễ hiểu và áp dụng ngay.

MySQL Cheat Sheet đầy đủ (Bảng tổng hợp câu lệnh MySQL)

MySQL Cheat Sheet là gì?

Cheat Sheet là tài liệu tổng hợp nhanh các cú pháp, câu lệnh và mẹo sử dụng thường xuyên. Thay vì giải thích quá dài dòng, Cheat Sheet tập trung vào những nội dung quan trọng nhất để người dùng có thể tìm kiếm và sử dụng ngay khi cần.

Một Cheat Sheet MySQL đầy đủ thường bao gồm:

  • Kết nối đến MySQL.
  • Quản lý Database.
  • Quản lý Table.
  • Thao tác dữ liệu.
  • Điều kiện lọc.
  • Sắp xếp dữ liệu.
  • Hàm xử lý.
  • JOIN.
  • GROUP BY.
  • Subquery.
  • Index.
  • Transaction.
  • User và Permission.
  • Sao lưu và phục hồi dữ liệu.

Kết nối MySQL bằng Command Line

Đây là các câu lệnh được sử dụng thường xuyên khi làm việc với MySQL Server.

Đăng nhập MySQL

mysql -u root -p

Hoặc kết nối đến máy chủ khác:

mysql -h 192.168.1.100 -P 3306 -u username -p

Kiểm tra phiên bản MySQL

SELECT VERSION();

Xem người dùng hiện tại

SELECT USER();

Xem Database đang sử dụng

SELECT DATABASE();

Quản lý Database

Đây là nhóm câu lệnh cơ bản nhất mà hầu như dự án nào cũng sử dụng.

Hiển thị toàn bộ Database

SHOW DATABASES;

Tạo Database

CREATE DATABASE webmoi;

Tạo Database nếu chưa tồn tại

CREATE DATABASE IF NOT EXISTS webmoi;

Sử dụng Database

USE webmoi;

Xóa Database

DROP DATABASE webmoi;

Xóa nếu tồn tại

DROP DATABASE IF EXISTS webmoi;

Quản lý bảng dữ liệu

Xem danh sách bảng

SHOW TABLES;

Xem cấu trúc bảng

DESCRIBE users;

Hoặc:

DESC users;

Tạo bảng mới

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    fullname VARCHAR(100),
    email VARCHAR(150),
    age INT,
    created_at DATETIME
);

Đổi tên bảng

RENAME TABLE users TO customers;

Xóa bảng

DROP TABLE users;

Xóa nếu tồn tại

DROP TABLE IF EXISTS users;

Làm rỗng bảng

TRUNCATE TABLE users;

Thao tác với cột trong bảng

Thêm cột mới

ALTER TABLE users
ADD phone VARCHAR(20);

Xóa cột

ALTER TABLE users
DROP COLUMN phone;

Đổi tên cột

ALTER TABLE users
RENAME COLUMN fullname TO full_name;

Thay đổi kiểu dữ liệu

ALTER TABLE users
MODIFY age SMALLINT;

Thêm dữ liệu

Thêm một bản ghi

INSERT INTO users(fullname,email,age)
VALUES
('Nguyễn Văn A','a@example.com',25);

Thêm nhiều bản ghi

INSERT INTO users(fullname,email,age)
VALUES
('An','an@example.com',20),
('Bình','binh@example.com',22),
('Chi','chi@example.com',30);

Đọc dữ liệu

Lấy toàn bộ dữ liệu

SELECT * FROM users;

Lấy một số cột

SELECT fullname,email
FROM users;

Lấy dữ liệu không trùng lặp

SELECT DISTINCT age
FROM users;

Giới hạn số lượng bản ghi

SELECT *
FROM users
LIMIT 10;

Phân trang

SELECT *
FROM users
LIMIT 10 OFFSET 20;

Cập nhật dữ liệu

Cập nhật một bản ghi

UPDATE users
SET age=30
WHERE id=1;

Cập nhật nhiều cột

UPDATE users
SET
fullname='Nguyễn Văn B',
age=35
WHERE id=2;

Xóa dữ liệu

Xóa theo điều kiện

DELETE FROM users
WHERE id=3;

Xóa toàn bộ dữ liệu

DELETE FROM users;

Mệnh đề WHERE

WHERE giúp lọc dữ liệu theo điều kiện.

So sánh bằng

SELECT *
FROM users
WHERE age=25;

Khác

SELECT *
FROM users
WHERE age<>25;

Lớn hơn

SELECT *
FROM users
WHERE age>18;

Nhỏ hơn

SELECT *
FROM users
WHERE age<60;

Khoảng giá trị

SELECT *
FROM users
WHERE age BETWEEN 20 AND 30;

Danh sách giá trị

SELECT *
FROM users
WHERE age IN (20,25,30);

Tìm kiếm chuỗi

SELECT *
FROM users
WHERE fullname LIKE '%Nguyễn%';

Giá trị NULL

SELECT *
FROM users
WHERE phone IS NULL;

Toán tử logic

AND

SELECT *
FROM users
WHERE age>18
AND age<40;

OR

SELECT *
FROM users
WHERE age=18
OR age=25;

NOT

SELECT *
FROM users
WHERE NOT age=18;

Sắp xếp dữ liệu

Tăng dần

SELECT *
FROM users
ORDER BY age ASC;

Giảm dần

SELECT *
FROM users
ORDER BY age DESC;

Nhóm dữ liệu với GROUP BY

GROUP BY được sử dụng để gom các bản ghi có cùng giá trị lại thành từng nhóm. Thông thường nó sẽ đi cùng các hàm tổng hợp như COUNT(), SUM(), AVG(), MAX()MIN().

Đếm số lượng bản ghi theo độ tuổi

SELECT age, COUNT(*) AS total
FROM users
GROUP BY age;

Đếm số lượng người dùng theo thành phố

SELECT city, COUNT(*) AS total_users
FROM users
GROUP BY city;

Tính tổng doanh thu

SELECT customer_id, SUM(total_amount) AS total_sales
FROM orders
GROUP BY customer_id;

Tính giá trị trung bình

SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id;

Tìm giá trị lớn nhất

SELECT MAX(price)
FROM products;

Tìm giá trị nhỏ nhất

SELECT MIN(price)
FROM products;

Lọc kết quả sau khi GROUP BY với HAVING

HAVING hoạt động tương tự WHERE nhưng được áp dụng sau khi dữ liệu đã được nhóm.

Hiển thị các nhóm có trên 10 bản ghi

SELECT city, COUNT(*) AS total
FROM users
GROUP BY city
HAVING COUNT(*) > 10;

Lọc theo tổng doanh thu

SELECT customer_id, SUM(total_amount) AS revenue
FROM orders
GROUP BY customer_id
HAVING SUM(total_amount) > 10000000;

Sử dụng Alias

Alias giúp đặt tên ngắn gọn hơn cho bảng hoặc cột.

Đặt tên cột

SELECT fullname AS name
FROM users;

Đặt tên bảng

SELECT u.fullname
FROM users u;

Các loại JOIN trong MySQL

JOIN dùng để kết hợp dữ liệu từ nhiều bảng khác nhau thông qua khóa liên kết.

INNER JOIN

Chỉ lấy những bản ghi tồn tại ở cả hai bảng.

SELECT u.fullname, o.total_amount
FROM users u
INNER JOIN orders o
ON u.id = o.user_id;

LEFT JOIN

Luôn lấy toàn bộ dữ liệu bên trái.

SELECT u.fullname, o.total_amount
FROM users u
LEFT JOIN orders o
ON u.id = o.user_id;

RIGHT JOIN

SELECT u.fullname, o.total_amount
FROM users u
RIGHT JOIN orders o
ON u.id = o.user_id;

CROSS JOIN

SELECT *
FROM colors
CROSS JOIN sizes;

JOIN nhiều bảng

SELECT
u.fullname,
o.order_date,
p.product_name
FROM users u
INNER JOIN orders o
ON u.id = o.user_id
INNER JOIN products p
ON o.product_id = p.id;

UNION và UNION ALL

UNION dùng để nối kết quả của nhiều câu lệnh SELECT.

UNION

SELECT fullname
FROM customers

UNION

SELECT fullname
FROM employees;

UNION ALL

SELECT fullname
FROM customers

UNION ALL

SELECT fullname
FROM employees;

Subquery (Truy vấn con)

Subquery là câu lệnh SELECT được đặt bên trong một câu lệnh SQL khác.

Subquery trong WHERE

SELECT *
FROM users
WHERE id IN
(
    SELECT user_id
    FROM orders
);

Subquery trong FROM

SELECT *
FROM
(
    SELECT *
    FROM users
) AS temp_users;

Subquery trong SELECT

SELECT
fullname,
(
    SELECT COUNT(*)
    FROM orders
    WHERE orders.user_id = users.id
) AS total_orders
FROM users;

Common Table Expression (CTE)

Từ MySQL 8.0 trở lên, bạn có thể sử dụng WITH để tạo bảng tạm trong một truy vấn.

Ví dụ CTE

WITH user_total AS
(
    SELECT
    user_id,
    COUNT(*) AS total
    FROM orders
    GROUP BY user_id
)

SELECT *
FROM user_total;

Các hàm xử lý chuỗi

Hàm Công dụng
CONCAT() Nối chuỗi
LENGTH() Độ dài chuỗi
LOWER() Chuyển thành chữ thường
UPPER() Chuyển thành chữ hoa
TRIM() Xóa khoảng trắng
SUBSTRING() Cắt chuỗi
REPLACE() Thay thế chuỗi

Nối chuỗi

SELECT CONCAT(first_name,' ',last_name)
FROM users;

Chữ hoa

SELECT UPPER(fullname)
FROM users;

Chữ thường

SELECT LOWER(fullname)
FROM users;

Cắt chuỗi

SELECT SUBSTRING(fullname,1,5)
FROM users;

Thay thế chuỗi

SELECT REPLACE(fullname,'Nguyễn','Mr.')
FROM users;

Các hàm số học

Hàm Ý nghĩa
ROUND() Làm tròn
CEILING() Làm tròn lên
FLOOR() Làm tròn xuống
ABS() Giá trị tuyệt đối
MOD() Phép chia lấy dư
RAND() Số ngẫu nhiên

Làm tròn số

SELECT ROUND(15.678,2);

Giá trị tuyệt đối

SELECT ABS(-100);

Số ngẫu nhiên

SELECT RAND();

Các hàm ngày giờ

Hàm Ý nghĩa
NOW() Ngày giờ hiện tại
CURDATE() Ngày hiện tại
CURTIME() Giờ hiện tại
YEAR() Lấy năm
MONTH() Lấy tháng
DAY() Lấy ngày
DATEDIFF() Khoảng cách giữa hai ngày
DATE_ADD() Cộng thêm thời gian
DATE_SUB() Trừ thời gian

Ngày giờ hiện tại

SELECT NOW();

Lấy năm

SELECT YEAR(NOW());

Lấy tháng

SELECT MONTH(NOW());

Chênh lệch số ngày

SELECT DATEDIFF(NOW(),'2025-01-01');

Cộng thêm 30 ngày

SELECT DATE_ADD(NOW(),INTERVAL 30 DAY);

Trừ 7 ngày

SELECT DATE_SUB(NOW(),INTERVAL 7 DAY);

Tạo và sử dụng View

View là một bảng ảo được tạo từ một hoặc nhiều câu lệnh SELECT. View giúp đơn giản hóa các truy vấn phức tạp, tăng khả năng tái sử dụng và hạn chế việc người dùng truy cập trực tiếp vào bảng gốc.

Tạo View

CREATE VIEW active_users AS
SELECT
id,
fullname,
email
FROM users
WHERE status = 1;

Xem dữ liệu từ View

SELECT *
FROM active_users;

Cập nhật View

CREATE OR REPLACE VIEW active_users AS
SELECT
id,
fullname,
email,
phone
FROM users
WHERE status = 1;

Xóa View

DROP VIEW active_users;

Kiểm tra danh sách View

SHOW FULL TABLES
WHERE TABLE_TYPE = 'VIEW';

Index và tối ưu tìm kiếm

Index giúp MySQL tìm kiếm dữ liệu nhanh hơn, đặc biệt trên các bảng có hàng trăm nghìn hoặc hàng triệu bản ghi. Tuy nhiên, tạo quá nhiều Index sẽ làm chậm thao tác INSERT, UPDATE và DELETE.

Tạo Index

CREATE INDEX idx_email
ON users(email);

Tạo Index nhiều cột

CREATE INDEX idx_name_age
ON users(fullname, age);

Tạo Unique Index

CREATE UNIQUE INDEX idx_username
ON users(username);

Xem Index của bảng

SHOW INDEX
FROM users;

Xóa Index

DROP INDEX idx_email
ON users;

EXPLAIN - Phân tích truy vấn

EXPLAIN là công cụ cực kỳ quan trọng để đánh giá hiệu suất câu lệnh SQL. Nó cho biết MySQL đang quét bảng như thế nào, có sử dụng Index hay không và ước lượng số lượng bản ghi cần đọc.

Kiểm tra truy vấn

EXPLAIN
SELECT *
FROM users
WHERE email = 'admin@example.com';

Phân tích JOIN

EXPLAIN
SELECT
u.fullname,
o.total_amount
FROM users u
INNER JOIN orders o
ON u.id = o.user_id;

Transaction

Transaction đảm bảo nhiều câu lệnh SQL được thực hiện như một khối thống nhất. Nếu có lỗi xảy ra, toàn bộ thay đổi sẽ được hoàn tác.

Bắt đầu Transaction

START TRANSACTION;

Xác nhận thay đổi

COMMIT;

Hủy thay đổi

ROLLBACK;

Ví dụ Transaction

START TRANSACTION;

UPDATE accounts
SET balance = balance - 1000
WHERE id = 1;

UPDATE accounts
SET balance = balance + 1000
WHERE id = 2;

COMMIT;

Savepoint trong Transaction

Savepoint cho phép quay lại một vị trí xác định thay vì hủy toàn bộ Transaction.

Tạo Savepoint

SAVEPOINT step1;

Quay lại Savepoint

ROLLBACK TO step1;

Xóa Savepoint

RELEASE SAVEPOINT step1;

Stored Procedure

Stored Procedure là tập hợp nhiều câu lệnh SQL được lưu trực tiếp trong MySQL Server và có thể gọi lại nhiều lần.

Tạo Procedure

DELIMITER $$

CREATE PROCEDURE GetUsers()
BEGIN
SELECT *
FROM users;
END $$

DELIMITER ;

Thực thi Procedure

CALL GetUsers();

Xóa Procedure

DROP PROCEDURE GetUsers;

Function

Function hoạt động tương tự Procedure nhưng luôn trả về một giá trị.

Tạo Function

DELIMITER $$

CREATE FUNCTION TotalPrice(price DECIMAL(10,2), qty INT)
RETURNS DECIMAL(10,2)

BEGIN
RETURN price * qty;
END $$

DELIMITER ;

Gọi Function

SELECT TotalPrice(100000,3);

Trigger

Trigger tự động thực thi khi xảy ra sự kiện INSERT, UPDATE hoặc DELETE trên bảng.

Tạo Trigger

CREATE TRIGGER before_insert_user
BEFORE INSERT
ON users

FOR EACH ROW

SET NEW.created_at = NOW();

Xem Trigger

SHOW TRIGGERS;

Xóa Trigger

DROP TRIGGER before_insert_user;

Khóa ngoại (Foreign Key)

Foreign Key giúp đảm bảo tính toàn vẹn dữ liệu giữa các bảng.

Tạo Foreign Key

ALTER TABLE orders
ADD CONSTRAINT fk_user
FOREIGN KEY(user_id)
REFERENCES users(id);

Xóa Foreign Key

ALTER TABLE orders
DROP FOREIGN KEY fk_user;

Quản lý User trong MySQL

Tạo User

CREATE USER 'demo'
IDENTIFIED BY '123456';

Đổi mật khẩu

ALTER USER 'demo'
IDENTIFIED BY 'newpassword';

Xóa User

DROP USER 'demo';

Xem danh sách User

SELECT user
FROM mysql.user;

Phân quyền User

Cấp toàn bộ quyền

GRANT ALL PRIVILEGES
ON webmoi.*
TO 'demo';

Chỉ cấp quyền SELECT

GRANT SELECT
ON webmoi.*
TO 'demo';

Thu hồi quyền

REVOKE INSERT
ON webmoi.*
FROM 'demo';

Cập nhật quyền

FLUSH PRIVILEGES;

Xuất dữ liệu (Export)

Xuất toàn bộ Database

mysqldump -u root -p webmoi > backup.sql

Xuất một bảng

mysqldump -u root -p webmoi users > users.sql

Khôi phục dữ liệu (Import)

Import Database

mysql -u root -p webmoi < backup.sql

Import từ dòng lệnh

source backup.sql;

Các kiểu dữ liệu thường dùng trong MySQL

Việc lựa chọn đúng kiểu dữ liệu sẽ giúp tối ưu dung lượng lưu trữ, tăng tốc độ truy vấn và giảm nguy cơ phát sinh lỗi trong quá trình phát triển ứng dụng.

Kiểu số nguyên

Kiểu dữ liệu Mô tả
TINYINT Số nguyên rất nhỏ
SMALLINT Số nguyên nhỏ
MEDIUMINT Số nguyên trung bình
INT Số nguyên phổ biến nhất
BIGINT Số nguyên rất lớn

Kiểu số thực

Kiểu dữ liệu Mục đích
FLOAT Số thực
DOUBLE Số thực độ chính xác cao
DECIMAL Dữ liệu tài chính, tiền tệ

Kiểu chuỗi

Kiểu dữ liệu Mục đích
CHAR Chuỗi có độ dài cố định
VARCHAR Chuỗi có độ dài thay đổi
TEXT Văn bản dài
LONGTEXT Văn bản rất dài

Kiểu ngày giờ

Kiểu dữ liệu Mục đích
DATE Ngày
TIME Giờ
DATETIME Ngày và giờ
TIMESTAMP Dấu thời gian
YEAR Năm

Các toán tử thường gặp trong MySQL

Toán tử Ý nghĩa
= Bằng
Khác
> Lớn hơn
Nhỏ hơn
>= Lớn hơn hoặc bằng
Nhỏ hơn hoặc bằng
LIKE Tìm kiếm chuỗi
IN Nằm trong danh sách
BETWEEN Khoảng giá trị
EXISTS Kiểm tra tồn tại
IS NULL Giá trị NULL

Các hàm tổng hợp phổ biến

Hàm Ý nghĩa
COUNT() Đếm số lượng
SUM() Tính tổng
AVG() Trung bình
MAX() Lớn nhất
MIN() Nhỏ nhất

Đếm số lượng người dùng

SELECT COUNT(*)
FROM users;

Tổng doanh thu

SELECT SUM(total_amount)
FROM orders;

Doanh thu trung bình

SELECT AVG(total_amount)
FROM orders;

Các lệnh SHOW hữu ích

Nhóm lệnh SHOW giúp kiểm tra nhanh cấu hình và trạng thái của MySQL.

Hiển thị Database

SHOW DATABASES;

Hiển thị bảng

SHOW TABLES;

Hiển thị cột

SHOW COLUMNS
FROM users;

Hiển thị Index

SHOW INDEX
FROM users;

Hiển thị Engine

SHOW ENGINES;

Hiển thị Charset

SHOW CHARACTER SET;

Hiển thị Collation

SHOW COLLATION;

Hiển thị Process

SHOW PROCESSLIST;

Hiển thị biến hệ thống

SHOW VARIABLES;

Hiển thị trạng thái

SHOW STATUS;

Một số mẹo tối ưu truy vấn MySQL

Cheat Sheet sẽ chưa thật sự đầy đủ nếu thiếu các kinh nghiệm tối ưu hiệu năng. Đây là những nguyên tắc được áp dụng trong rất nhiều dự án thực tế.

  • Chỉ SELECT những cột cần sử dụng, hạn chế dùng SELECT *.
  • Tạo Index cho các cột thường xuyên tìm kiếm.
  • Không tạo quá nhiều Index không cần thiết.
  • Sử dụng LIMIT khi chỉ cần một phần dữ liệu.
  • Dùng EXPLAIN để kiểm tra kế hoạch thực thi.
  • Đặt điều kiện WHERE càng cụ thể càng tốt.
  • Ưu tiên VARCHAR thay vì CHAR nếu dữ liệu có độ dài thay đổi.
  • Không lưu dữ liệu trùng lặp ở nhiều bảng.
  • Chuẩn hóa cơ sở dữ liệu trước khi tối ưu truy vấn.
  • Sử dụng Transaction khi cập nhật nhiều bảng.
  • Thường xuyên sao lưu dữ liệu.
  • Định kỳ tối ưu và phân tích bảng lớn.

Bảng MySQL Cheat Sheet tổng hợp nhanh

Thao tác Câu lệnh
Tạo Database CREATE DATABASE
Xóa Database DROP DATABASE
Tạo bảng CREATE TABLE
Xóa bảng DROP TABLE
Thêm dữ liệu INSERT INTO
Truy vấn dữ liệu SELECT
Cập nhật dữ liệu UPDATE
Xóa dữ liệu DELETE
Nhóm dữ liệu GROUP BY
Lọc sau khi nhóm HAVING
Sắp xếp ORDER BY
Giới hạn bản ghi LIMIT
Kết hợp bảng JOIN
Gộp kết quả UNION
Tạo View CREATE VIEW
Tạo Index CREATE INDEX
Phân tích truy vấn EXPLAIN
Bắt đầu Transaction START TRANSACTION
Lưu thay đổi COMMIT
Hoàn tác ROLLBACK

Kết luận

Một MySQL Cheat Sheet đầy đủ không chỉ giúp bạn tra cứu cú pháp nhanh mà còn đóng vai trò như một tài liệu tham khảo hữu ích trong quá trình học tập, phát triển phần mềm và quản trị cơ sở dữ liệu. Khi nắm vững các nhóm lệnh từ cơ bản đến nâng cao như thao tác với Database, Table, JOIN, Subquery, Transaction, View, Index, Trigger, Stored Procedure hay quản lý người dùng, bạn sẽ làm việc với MySQL hiệu quả hơn rất nhiều.

Để đạt hiệu suất tối ưu, ngoài việc ghi nhớ cú pháp, hãy kết hợp sử dụng EXPLAIN để phân tích truy vấn, xây dựng Index hợp lý, chuẩn hóa cơ sở dữ liệu và thường xuyên sao lưu dữ liệu. Đây là những kinh nghiệm thực tế giúp hệ thống MySQL hoạt động ổn định, an toàn và có khả năng mở rộng tốt trong các dự án từ nhỏ đến lớn.

  • 0 Bình luận
Trần Thị Vân | Content Creator Web Mới
Trần Thị Vân
Trần Thị Vân là Content Creator tại Web Mới, phụ trách nghiên cứu, biên soạn nội dung và chia sẻ kiến thức về website, SEO, lập trình cùng các xu hướng công nghệ
Chia sẻ nội dung đánh giá của bạn về MySQL Cheat Sheet đầy đủ (Bảng tổng hợp câu lệnh MySQL)
Email, Điện thoại của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *
Đánh giá của bạn
Tên *
Email
Số điện thoại *
Bình luận, Hỏi đáp
Đăng ký tư vấn thiết kế website
Tìm hiểu 1 năm không bằng lắng nghe 1 câu tư vấn