admin
  •  admin
  • Advanced Member Topic Starter
2024-09-12T01:23:51Z
Truy cập dữ liệu trong SQL (MySQL và MSSQL)

Truy cập dữ liệu trong SQL là một phần quan trọng trong công việc xử lý dữ liệu trong hệ quản trị cơ sở dữ liệu (DBMS). SQL (Structured Query Language) là ngôn ngữ được sử dụng rộng rãi để tương tác với cơ sở dữ liệu. Câu lệnh chính để truy cập dữ liệu trong SQL là SELECT.
Câu lệnh SELECT

Câu lệnh SELECT được sử dụng để truy vấn dữ liệu từ một hoặc nhiều bảng trong cơ sở dữ liệu. Dưới đây là cú pháp cơ bản của câu lệnh SELECT:

MySQL:

SELECT column1, column2, ...
FROM table_name;

MSSQL:

SELECT column1, column2, ...
FROM table_name;

SELECT: Từ khóa bắt đầu câu lệnh truy vấn.
column1, column2, ...: Danh sách các cột mà bạn muốn lấy dữ liệu.
FROM table_name: Tên của bảng mà bạn muốn truy vấn dữ liệu từ đó.

Ví dụ:

MySQL:

SELECT first_name, last_name
FROM employees;

MSSQL:

SELECT first_name, last_name
FROM employees;

Trong ví dụ này, chúng ta truy vấn tất cả các cột first_name và last_name từ bảng employees.
Giải thích biểu thức với câu lệnh SELECT

Biểu thức có thể được sử dụng trong câu lệnh SELECT để tính toán dữ liệu hoặc biểu thức mới từ dữ liệu hiện có. Các biểu thức có thể bao gồm các phép tính cơ bản, hàm toán học và hàm xây dựng sẵn trong SQL.
Ví dụ:

MySQL:

SELECT first_name, last_name, salary * 12 AS annual_salary
FROM employees;

MSSQL:

SELECT first_name, last_name, salary * 12 AS annual_salary
FROM employees;

Trong ví dụ này, chúng ta sử dụng biểu thức salary * 12 để tính toán thu nhập hàng năm của mỗi nhân viên và đặt tên cho cột kết quả là annual_salary bằng cách sử dụng AS.
Các mệnh đề khác nhau được sử dụng với SELECT

Các mệnh đề khác nhau như WHERE, DISTINCT, LIMIT, và OFFSET có thể được sử dụng cùng với câu lệnh SELECT để tùy chỉnh kết quả truy vấn.
Mệnh đề WHERE

MySQL:

SELECT first_name, last_name
FROM employees
WHERE department = 'HR';

MSSQL:

SELECT first_name, last_name
FROM employees
WHERE department = 'HR';

Mệnh đề WHERE được sử dụng để lọc dữ liệu dựa trên điều kiện cụ thể. Trong ví dụ này, chúng ta chỉ truy vấn nhân viên thuộc phòng ban 'HR'.
Mệnh đề DISTINCT

MySQL:

SELECT DISTINCT department
FROM employees;

MSSQL:

SELECT DISTINCT department
FROM employees;

Mệnh đề DISTINCT được sử dụng để loại bỏ các giá trị trùng lặp trong kết quả truy vấn. Trong ví dụ này, chúng ta truy vấn danh sách các phòng ban duy nhất trong bảng employees.
Mệnh đề LIMIT và OFFSET

MySQL:

SELECT first_name, last_name
FROM employees
LIMIT 10
OFFSET 20;

MSSQL:

SELECT first_name, last_name
FROM employees
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;

Mệnh đề LIMIT (MySQL) và OFFSET (MSSQL) được sử dụng để giới hạn số lượng hàng được trả về trong kết quả và bỏ qua một số hàng từ kết quả đầu tiên. Trong ví dụ này, chúng ta truy vấn 10 nhân viên bắt đầu từ hàng thứ 21.
Mệnh đề ORDER BY

Mệnh đề ORDER BY được sử dụng để sắp xếp kết quả truy vấn theo một hoặc nhiều cột cụ thể theo thứ tự tăng dần hoặc giảm dần.

MySQL:

SELECT first_name, last_name, salary
FROM employees
ORDER BY salary DESC;

MSSQL:

SELECT first_name, last_name, salary
FROM employees
ORDER BY salary DESC;

column1, column2, ...: Các cột bạn muốn sắp xếp theo.
ASC: Sắp xếp theo thứ tự tăng dần (mặc định).
DESC: Sắp xếp theo thứ tự giảm dần.

Trong ví dụ này, chúng ta sắp xếp danh sách nhân viên theo mức lương giảm dần.
Mệnh đề GROUP BY và HAVING

Mệnh đề GROUP BY và HAVING được sử dụng để nhóm các hàng có giá trị cột giống nhau lại với nhau và lọc

dữ liệu sau khi đã được nhóm.
Mệnh đề GROUP BY

MySQL:

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

MSSQL:

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

column1: Cột mà bạn muốn nhóm.
aggregate_function(column2): Hàm tổng hợp (như SUM, COUNT, AVG) được áp dụng cho cột column2.

Trong ví dụ này, chúng ta nhóm các nhân viên theo phòng ban và tính mức lương trung bình cho từng phòng ban.
Mệnh đề HAVING

MySQL:

SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 50000;

MSSQL:

SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 50000;

Mệnh đề HAVING được sử dụng để lọc dữ liệu sau khi đã nhóm. Trong ví dụ này, chúng ta chỉ hiển thị các phòng ban có mức lương trung bình lớn hơn 50,000 đô la Mỹ.

Trong mệnh đề WHERE của SQL, cả MySQL và Microsoft SQL Server (MSSQL) hỗ trợ nhiều toán tử khác nhau để thực hiện các phép so sánh và lọc dữ liệu dựa trên điều kiện cụ thể. Dưới đây là một số toán tử phổ biến mà bạn có thể sử dụng trong mệnh đề WHERE của cả MySQL và MSSQL:
Toán tử So sánh

Toán tử bằng nhau (=): So sánh giá trị của hai biểu thức, và nếu chúng bằng nhau, điều kiện là đúng.

Ví dụ:

SELECT * FROM employees WHERE department = 'HR';

Toán tử Không bằng (!= hoặc <>): So sánh giá trị của hai biểu thức, và nếu chúng không bằng nhau, điều kiện là đúng.

Ví dụ:

SELECT * FROM products WHERE category <> 'Electronics';

Toán tử Lớn hơn (>) và Toán tử Nhỏ hơn (<): So sánh giá trị của hai biểu thức, và nếu biểu thức bên trái lớn hơn (hoặc nhỏ hơn) biểu thức bên phải, điều kiện là đúng.

Ví dụ:

SELECT * FROM orders WHERE order_date > '2023-01-01';

Toán tử Lớn hơn hoặc bằng (>=) và Toán tử Nhỏ hơn hoặc bằng (<=): So sánh giá trị của hai biểu thức, và nếu biểu thức bên trái lớn hơn hoặc bằng (hoặc nhỏ hơn hoặc bằng) biểu thức bên phải, điều kiện là đúng.

Ví dụ:

SELECT * FROM products WHERE price >= 50;

Toán tử Logic

Toán tử AND: Kết hợp nhiều điều kiện và chỉ trả về kết quả đúng nếu tất cả các điều kiện là đúng.

Ví dụ:

SELECT * FROM employees WHERE department = 'HR' AND salary > 50000;

Toán tử OR: Kết hợp nhiều điều kiện và trả về kết quả đúng nếu ít nhất một trong các điều kiện là đúng.

Ví dụ:

SELECT * FROM employees WHERE department = 'HR' OR department = 'Finance';

Toán tử NOT: Đảo ngược giá trị của một điều kiện, nếu điều kiện ban đầu là đúng, thì sau khi sử dụng toán tử NOT sẽ trở thành sai, và ngược lại.

Ví dụ:

SELECT * FROM products WHERE NOT (price >= 50);

Toán tử BETWEEN: Kiểm tra xem một giá trị có nằm trong một khoảng giá trị nào đó không. Nó được sử dụng với toán tử AND.

Ví dụ:

SELECT * FROM orders WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31';

Toán tử LIKE: Sử dụng để kiểm tra xem một chuỗi có khớp với một biểu thức chính quy (regular expression) hay không. Thường được sử dụng với % để đại diện cho một chuỗi bất kỳ.

Ví dụ:

SELECT * FROM products WHERE product_name LIKE 'Laptop%';

Toán tử IN: Kiểm tra xem một giá trị có trong danh sách giá trị cho trước không.

Ví dụ:

SELECT * FROM employees WHERE department IN ('HR', 'Finance', 'Marketing');

Nhớ rằng cú pháp và cách sử dụng có thể thay đổi một chút giữa MySQL và MSSQL, nhưng ý nghĩa và chức năng của các toán tử là tương tự. Bạn có thể sử dụng các toán tử này để xây dựng điều kiện phù hợp với nhu cầu truy vấn cụ thể của bạn trong cả hai hệ quản trị cơ sở dữ liệu này.

Mệnh đề GROUP BY trong SQL được sử dụng để nhóm các hàng dữ liệu dựa trên giá trị của một hoặc nhiều cột cụ thể. Sau khi các hàng đã được nhóm lại, bạn có thể áp dụng các hàm tính toán để tính toán tổng, trung bình, số lượng, tối đa, tối thiểu hoặc thậm chí tự định nghĩa hàm cho từng nhóm. Đây là một số hàm tính toán phổ biến được sử dụng cùng với mệnh đề GROUP BY:

COUNT: Hàm này được sử dụng để đếm số lượng hàng trong từng nhóm.

SUM: Hàm này tính tổng giá trị của một cột trong từng nhóm.

AVG: Hàm này tính giá trị trung bình của một cột trong từng nhóm.

MAX: Hàm này tìm giá trị lớn nhất của một cột trong từng nhóm.

MIN: Hàm này tìm giá trị nhỏ nhất của một cột trong từng nhóm.

Dưới đây là một ví dụ cụ thể về cách sử dụng mệnh đề GROUP BY và các hàm tính toán trong SQL:

Giả sử bạn có một bảng orders lưu trữ thông tin về các đơn hàng của khách hàng và bạn muốn tính tổng số tiền đã chi tiêu cho mỗi khách hàng trong năm 2023.

SELECT customer_id, SUM(order_amount) AS total_spent
FROM orders
WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31'
GROUP BY customer_id;

Trong ví dụ này:

Chúng ta sử dụng GROUP BY customer_id để nhóm các đơn hàng theo customer_id. Điều này có nghĩa là tất cả các đơn hàng có cùng customer_id sẽ được nhóm lại thành một nhóm.

Sau đó, chúng ta sử dụng hàm SUM(order_amount) để tính tổng số tiền đã chi tiêu bởi mỗi khách hàng trong từng nhóm.

Kết quả truy vấn sẽ trả về một danh sách các khách hàng (customer_id) và tổng số tiền đã chi tiêu (total_spent) cho mỗi khách hàng trong năm 2023. Điều này giúp bạn thấy được khách hàng nào đã chi tiêu nhiều nhất trong khoảng thời gian cụ thể này.

Sử dụng mệnh đề GROUP BY và các hàm tính toán là cách mạnh mẽ để phân tích dữ liệu tổng hợp trong SQL, và chúng rất hữu ích trong việc trả lời các câu hỏi liên quan đến tổng hợp dữ liệu từ nhiều hàng trong cơ sở dữ liệu của bạn.

Dưới đây là một số điểm giống và khác nhau trong cấu trúc T-SQL của MySQL và MSSQL:

Điểm Giống:

Ngôn ngữ T-SQL: Cả MySQL và MSSQL đều sử dụng T-SQL (Transact-SQL) làm ngôn ngữ truy vấn chính.

Các loại dữ liệu: Cả hai hệ thống đều hỗ trợ các loại dữ liệu cơ bản như INT, VARCHAR, DATE, và TEXT.

Tạo bảng: Cách tạo bảng cơ bản trong cả hai hệ thống là tương tự, sử dụng câu lệnh CREATE TABLE.

Ràng buộc: Cả hai hệ thống đều hỗ trợ ràng buộc khóa ngoại (FOREIGN KEY) và ràng buộc duy nhất (UNIQUE CONSTRAINT).

Câu lệnh SELECT: Các câu lệnh SELECT để truy vấn dữ liệu cũng tương tự nhau, bao gồm các phần như SELECT, FROM, WHERE, GROUP BY, HAVING và ORDER BY.

Điểm Khác Nhau:

Cú pháp Câu lệnh LIMIT/OFFSET: Trong MySQL, bạn sử dụng LIMIT để giới hạn số hàng kết quả, còn trong MSSQL, bạn sử dụng OFFSET FETCH hoặc TOP.

MySQL:

SELECT * FROM table_name LIMIT 10;

MSSQL:

SELECT TOP 10 * FROM table_name;

Kiểu dữ liệu: Một số kiểu dữ liệu có thể khác nhau giữa hai hệ thống, ví dụ, kiểu dữ liệu DATETIME trong MSSQL có thể được thay thế bằng kiểu dữ liệu TIMESTAMP trong MySQL.

Câu lệnh AUTO_INCREMENT/IDENTITY: MySQL sử dụng AUTO_INCREMENT để tạo cột tự động tăng giá trị, trong khi MSSQL sử dụng IDENTITY.

MySQL:

id INT AUTO_INCREMENT PRIMARY KEY

MSSQL:

id INT IDENTITY(1,1) PRIMARY KEY

Câu lệnh nối chuỗi: Cách nối chuỗi có thể khác nhau. MySQL sử dụng hàm CONCAT(), trong khi MSSQL sử dụng dấu '+'.

MySQL:

CONCAT(first_name, ' ', last_name)

MSSQL:

first_name + ' ' + last_name

Quyền truy cập và bảo mật: Cách quản lý quyền truy cập và bảo mật dữ liệu có thể khác nhau giữa MySQL và MSSQL.

Dưới đây là một số điểm giống và khác nhau về kiểu dữ liệu trong Microsoft SQL Server (MSSQL):

Điểm Giống:

Kiểu dữ liệu cơ bản: MSSQL và MySQL đều hỗ trợ các kiểu dữ liệu cơ bản như INT, VARCHAR, CHAR, DATE, TIME, DATETIME, FLOAT, BOOLEAN (bit trong MSSQL và tinyint trong MySQL), và TEXT.

Kiểu dữ liệu nhị phân: Cả hai hệ thống hỗ trợ kiểu dữ liệu nhị phân như BINARY và VARBINARY.

Kiểu dữ liệu ngày tháng: MSSQL và MySQL đều cung cấp kiểu dữ liệu để lưu trữ ngày và thời gian, chẳng hạn như DATETIME hoặc DATE.

Điểm Khác Nhau:

Kiểu dữ liệu chuỗi ký tự: Trong MSSQL, kiểu dữ liệu VARCHAR tương đương với NVARCHAR trong khi trong MySQL, VARCHAR là chuỗi ký tự không Unicode và NVARCHAR là chuỗi ký tự Unicode. MySQL sử dụng CHAR để lưu trữ chuỗi ký tự không Unicode, và UTF-8 là mặc định từ phiên bản 8.0 trở đi.

Kiểu dữ liệu nguyên bản: MSSQL cung cấp kiểu dữ liệu UNIQUEIDENTIFIER để lưu trữ GUIDs, trong khi MySQL không có kiểu dữ liệu tương tự.

Kiểu dữ liệu tự động tăng giá trị: Trong MSSQL, bạn sử dụng kiểu dữ liệu IDENTITY để tạo cột tự động tăng giá trị, trong khi MySQL sử dụng AUTO_INCREMENT.

Kiểu dữ liệu JSON: MSSQL hỗ trợ kiểu dữ liệu JSON từ SQL Server 2016 trở lên, trong khi MySQL đã hỗ trợ kiểu dữ liệu JSON từ phiên bản 5.7 trở lên.

Kiểu dữ liệu XML: MSSQL hỗ trợ kiểu dữ liệu XML để lưu trữ và truy vấn dữ liệu dưới dạng XML, trong khi MySQL không có kiểu dữ liệu tương tự.

Kiểu dữ liệu địa lý và không gian: MSSQL cung cấp kiểu dữ liệu địa lý và không gian để lưu trữ và truy vấn dữ liệu liên quan đến vị trí và không gian, trong khi MySQL cần sử dụng các thư viện bên ngoài như Spatial Extensions để hỗ trợ tính năng này.

Dưới đây là một so sánh giữa các câu lệnh DDL (Data Definition Language) trong MySQL và Microsoft SQL Server (MSSQL):

Điểm Giống:

Câu lệnh CREATE TABLE: Cả MySQL và MSSQL đều sử dụng câu lệnh CREATE TABLE để tạo bảng trong cơ sở dữ liệu.

Câu lệnh ALTER TABLE: Cả hai hệ thống đều hỗ trợ câu lệnh ALTER TABLE để thay đổi cấu trúc của bảng, bao gồm thêm cột, xóa cột, và sửa đổi ràng buộc.

Câu lệnh DROP TABLE: Cả MySQL và MSSQL cho phép bạn sử dụng câu lệnh DROP TABLE để xóa bảng từ cơ sở dữ liệu.

Câu lệnh CONSTRAINT: Cả hai hệ thống đều hỗ trợ việc định nghĩa ràng buộc khóa ngoại (FOREIGN KEY) và ràng buộc duy nhất (UNIQUE CONSTRAINT) khi tạo bảng hoặc thay đổi cấu trúc bảng.

Điểm Khác Nhau:

Câu lệnh AUTO_INCREMENT/IDENTITY: Trong MySQL, bạn sử dụng AUTO_INCREMENT để tạo cột tự động tăng giá trị, trong khi MSSQL sử dụng IDENTITY.

MySQL:

id INT AUTO_INCREMENT PRIMARY KEY

MSSQL:

id INT IDENTITY(1,1) PRIMARY KEY

Câu lệnh DEFAULT: Cách bạn đặt một giá trị mặc định cho một cột có thể khác nhau. Trong MySQL, bạn sử dụng DEFAULT, trong khi MSSQL sử dụng DEFAULT CONSTRAINT.

MySQL:

column_name INT DEFAULT 0

MSSQL:

column_name INT CONSTRAINT DF_column_name DEFAULT 0

Câu lệnh INDEX: Cả hai hệ thống hỗ trợ tạo index cho cột trong bảng, nhưng cú pháp có thể khác nhau. MySQL sử dụng INDEX, trong khi MSSQL sử dụng CREATE INDEX.

MySQL:

CREATE INDEX index_name ON table_name (column_name)

MSSQL:

CREATE INDEX index_name ON table_name (column_name)

Câu lệnh CHECK CONSTRAINT: MSSQL hỗ trợ ràng buộc kiểm tra (CHECK CONSTRAINT) để kiểm tra giá trị của cột trong khi MySQL không hỗ trợ tính năng này.

MSSQL:

column_name INT CONSTRAINT CHK_column_name CHECK (column_name >= 0)

Câu lệnh COLLATION: Cách bạn đặt thuộc tính Collation cho cột để xác định cách so sánh và sắp xếp chuỗi có thể khác nhau. MySQL và MSSQL có cú pháp riêng để thực hiện điều này.

Nhớ rằng cú pháp và tính năng cụ thể có thể thay đổi theo phiên bản cụ thể của MySQL và MSSQL, vì vậy bạn nên kiểm tra tài liệu của phiên bản bạn đang sử dụng để biết thêm chi tiết.
Privacy Policy | 2.31.16
Thời gian xử lý trang này hết 0,358 giây.