Các lệnh SQL cơ bản - Danh sách các câu lệnh và truy vấn cơ sở dữ liệu mà bạn nên biết

SQL là viết tắt của Ngôn ngữ truy vấn có cấu trúc. Lệnh SQL là các lệnh được sử dụng để giao tiếp với cơ sở dữ liệu để thực hiện các tác vụ, chức năng và truy vấn với dữ liệu.

Các lệnh SQL có thể được sử dụng để tìm kiếm cơ sở dữ liệu và thực hiện các chức năng khác như tạo bảng, thêm dữ liệu vào bảng, sửa đổi dữ liệu và xóa bảng.

Dưới đây là danh sách các lệnh SQL cơ bản (đôi khi được gọi là mệnh đề) bạn nên biết nếu bạn định làm việc với SQL.

CHỌN và TỪ

Phần SELECTcủa truy vấn xác định cột dữ liệu nào sẽ hiển thị trong kết quả. Cũng có các tùy chọn bạn có thể áp dụng để hiển thị dữ liệu không phải là một cột bảng.

Ví dụ dưới đây cho thấy ba cột SELECTed FROMcác “sinh viên” bảng và một cột tính toán. Cơ sở dữ liệu lưu trữ studentID, FirstName và LastName của học sinh. Chúng ta có thể kết hợp cột Họ và Tên để tạo ra cột được tính FullName.

SELECT studentID, FirstName, LastName, FirstName + ' ' + LastName AS FullName FROM student;
+-----------+-------------------+------------+------------------------+ | studentID | FirstName | LastName | FullName | +-----------+-------------------+------------+------------------------+ | 1 | Monique | Davis | Monique Davis | | 2 | Teri | Gutierrez | Teri Gutierrez | | 3 | Spencer | Pautier | Spencer Pautier | | 4 | Louis | Ramsey | Louis Ramsey | | 5 | Alvin | Greene | Alvin Greene | | 6 | Sophie | Freeman | Sophie Freeman | | 7 | Edgar Frank "Ted" | Codd | Edgar Frank "Ted" Codd | | 8 | Donald D. | Chamberlin | Donald D. Chamberlin | | 9 | Raymond F. | Boyce | Raymond F. Boyce | +-----------+-------------------+------------+------------------------+ 9 rows in set (0.00 sec)

TẠO BẢNG

CREATE TABLEnó giống như âm thanh: nó tạo một bảng trong cơ sở dữ liệu. Bạn có thể chỉ định tên của bảng và các cột sẽ có trong bảng.

CREATE TABLE table_name ( column_1 datatype, column_2 datatype, column_3 datatype );

BẢNG ALTER

ALTER TABLEthay đổi cấu trúc của một bảng. Đây là cách bạn thêm một cột vào cơ sở dữ liệu:

ALTER TABLE table_name ADD column_name datatype;

KIỂM TRA

Các CHECKhạn chế được sử dụng để giới hạn phạm vi giá trị có thể được đặt trong một cột.

Nếu bạn xác định một CHECKràng buộc trên một cột duy nhất, nó chỉ cho phép một số giá trị nhất định cho cột này. Nếu bạn xác định một CHECKràng buộc trên một bảng, nó có thể giới hạn các giá trị trong các cột nhất định dựa trên các giá trị trong các cột khác trong hàng.

SQL sau đây tạo ra một CHECKràng buộc đối với cột "Tuổi" khi bảng "Người" được tạo. Các CHECKĐảm bảo hạn chế là bạn không thể có bất kỳ người nào dưới 18 tuổi.

CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, CHECK (Age>=18) );

Để cho phép đặt tên cho một CHECKràng buộc và để xác định một CHECKràng buộc trên nhiều cột, hãy sử dụng cú pháp SQL sau:

CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, City varchar(255), CONSTRAINT CHK_Person CHECK (Age>=18 AND City="Sandnes") );

Ở ĐÂU

(AND ,OR , IN, BETWEEN, Và LIKE)

Các WHEREkhoản được sử dụng để hạn chế số lượng hàng trả lại.

Như một ví dụ, đầu tiên chúng tôi sẽ cho bạn thấy một SELECTtuyên bố và kết quả mà không một WHEREtuyên bố. Sau đó, chúng tôi sẽ thêm một WHEREcâu lệnh sử dụng tất cả năm điều kiện ở trên.

SELECT studentID, FullName, sat_score, rcd_updated FROM student;
+-----------+------------------------+-----------+---------------------+ | studentID | FullName | sat_score | rcd_updated | +-----------+------------------------+-----------+---------------------+ | 1 | Monique Davis | 400 | 2017-08-16 15:34:50 | | 2 | Teri Gutierrez | 800 | 2017-08-16 15:34:50 | | 3 | Spencer Pautier | 1000 | 2017-08-16 15:34:50 | | 4 | Louis Ramsey | 1200 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 | | 6 | Sophie Freeman | 1200 | 2017-08-16 15:34:50 | | 7 | Edgar Frank "Ted" Codd | 2400 | 2017-08-16 15:35:33 | | 8 | Donald D. Chamberlin | 2400 | 2017-08-16 15:35:33 | | 9 | Raymond F. Boyce | 2400 | 2017-08-16 15:35:33 | +-----------+------------------------+-----------+---------------------+ 9 rows in set (0.00 sec)

Bây giờ, chúng ta sẽ lặp lại SELECTtruy vấn nhưng chúng ta sẽ giới hạn các hàng được trả về bằng cách sử dụng một WHEREcâu lệnh.

STUDENT studentID, FullName, sat_score, recordUpdated FROM student WHERE (studentID BETWEEN 1 AND 5 OR studentID = 8) AND sat_score NOT IN (1000, 1400);
+-----------+----------------------+-----------+---------------------+ | studentID | FullName | sat_score | rcd_updated | +-----------+----------------------+-----------+---------------------+ | 1 | Monique Davis | 400 | 2017-08-16 15:34:50 | | 2 | Teri Gutierrez | 800 | 2017-08-16 15:34:50 | | 4 | Louis Ramsey | 1200 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 | | 8 | Donald D. Chamberlin | 2400 | 2017-08-16 15:35:33 | +-----------+----------------------+-----------+---------------------+ 5 rows in set (0.00 sec)

CẬP NHẬT

Để cập nhật bản ghi trong bảng, bạn sử dụng UPDATEcâu lệnh.

Sử dụng WHEREđiều kiện để chỉ định bản ghi nào bạn muốn cập nhật. Có thể cập nhật một hoặc nhiều cột cùng một lúc. Cú pháp là:

UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;

Đây là một ví dụ cập nhật Tên của bản ghi có Id 4:

UPDATE Person SET Name = “Elton John” WHERE Id = 4;

Bạn cũng có thể cập nhật các cột trong bảng bằng cách sử dụng các giá trị từ các bảng khác. Sử dụng JOINmệnh đề để lấy dữ liệu từ nhiều bảng. Cú pháp là:

UPDATE table_name1 SET table_name1.column1 = table_name2.columnA table_name1.column2 = table_name2.columnB FROM table_name1 JOIN table_name2 ON table_name1.ForeignKey = table_name2.Key

Đây là một ví dụ về cập nhật Trình quản lý của tất cả các bản ghi:

UPDATE Person SET Person.Manager = Department.Manager FROM Person JOIN Department ON Person.DepartmentID = Department.ID

NHÓM THEO

GROUP BY cho phép bạn kết hợp các hàng và tổng hợp dữ liệu.

Đây là cú pháp của GROUP BY:

SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name;

ĐANG CÓ

HAVINGcho phép bạn lọc dữ liệu được tổng hợp theo GROUP BYmệnh đề để người dùng nhận được một bộ hồ sơ giới hạn để xem.

Đây là cú pháp của HAVING:

SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name HAVING COUNT(*) > value;

AVG ()

"Trung bình" được sử dụng để tính giá trị trung bình của một cột số từ tập hợp các hàng được trả về bởi một câu lệnh SQL.

Đây là cú pháp để sử dụng hàm:

SELECT groupingField, AVG(num_field) FROM table1 GROUP BY groupingField

Đây là một ví dụ sử dụng bảng sinh viên:

SELECT studentID, FullName, AVG(sat_score) FROM student GROUP BY studentID, FullName;

NHƯ

AS cho phép bạn đổi tên cột hoặc bảng bằng bí danh.

SELECT user_only_num1 AS AgeOfServer, (user_only_num1 - warranty_period) AS NonWarrantyPeriod FROM server_table

Điều này dẫn đến kết quả như bên dưới.

+-------------+------------------------+ | AgeOfServer | NonWarrantyPeriod | +-------------+------------------------+ | 36 | 24 | | 24 | 12 | | 61 | 49 | | 12 | 0 | | 6 | -6 | | 0 | -12 | | 36 | 24 | | 36 | 24 | | 24 | 12 | +-------------+------------------------+

Bạn cũng có thể sử dụng AS để gán tên cho một bảng nhằm giúp dễ dàng tham chiếu hơn trong các phép nối.

SELECT ord.product, ord.ord_number, ord.price, cust.cust_name, cust.cust_number FROM customer_table AS cust JOIN order_table AS ord ON cust.cust_number = ord.cust_number

Điều này dẫn đến kết quả như bên dưới.

+-------------+------------+-----------+-----------------+--------------+ | product | ord_number | price | cust_name | cust_number | +-------------+------------+-----------+-----------------+--------------+ | RAM | 12345 | 124 | John Smith | 20 | | CPU | 12346 | 212 | Mia X | 22 | | USB | 12347 | 49 | Elise Beth | 21 | | Cable | 12348 | 0 | Paul Fort | 19 | | Mouse | 12349 | 66 | Nats Back | 15 | | Laptop | 12350 | 612 | Mel S | 36 | | Keyboard| 12351 | 24 | George Z | 95 | | Keyboard| 12352 | 24 | Ally B | 55 | | Air | 12353 | 12 | Maria Trust | 11 | +-------------+------------+-----------+-----------------+--------------+

ĐẶT BỞI

ORDER BY gives us a way to sort the result set by one or more of the items in the SELECT section. Here is an SQL sorting the students by FullName in descending order. The default sort order is ascending (ASC) but to sort in the opposite order (descending) you use DESC.

SELECT studentID, FullName, sat_score FROM student ORDER BY FullName DESC;

COUNT

COUNT will count the number of rows and return that count as a column in the result set.

Here are examples of what you would use COUNT for:

  • Counting all rows in a table (no group by required)
  • Counting the totals of subsets of data (requires a Group By section of the statement)

This SQL statement provides a count of all rows. Note that you can give the resulting COUNT column a name using “AS”.

SELECT count(*) AS studentCount FROM student; 

DELETE

DELETE is used to delete a record in a table.

Be careful. You can delete all records of the table or just a few. Use the WHERE condition to specify which records you want to delete. The syntax is:

DELETE FROM table_name WHERE condition;

Here is an example deleting from the table Person the record with Id 3:

DELETE FROM Person WHERE Id = 3;

INNER JOIN

JOIN, also called Inner Join, selects records that have matching values in two tables.

SELECT * FROM A x JOIN B y ON y.aId = x.Id

LEFT JOIN

A LEFT JOIN returns all rows from the left table, and the matched rows from the right table. Rows in the left table will be returned even if there was no match in the right table. The rows from the left table with no match in the right table will have null for right table values.

SELECT * FROM A x LEFT JOIN B y ON y.aId = x.Id

RIGHT JOIN

A RIGHT JOIN returns all rows from the right table, and the matched rows from the left table. Opposite of a left join, this will return all rows from the right table even where there is no match in the left table. Rows in the right table that have no match in the left table will have null values for left table columns.

SELECT * FROM A x RIGHT JOIN B y ON y.aId = x.Id 

FULL OUTER JOIN

A FULL OUTER JOIN returns all rows for which there is a match in either of the tables. So if there are rows in the left table that do not have matches in the right table, those will be included. Also, if there are rows in the right table that do not have matches in the left table, those will be included.

SELECT Customers.CustomerName, Orders.OrderID FROM Customers FULL OUTER JOIN Orders ON Customers.CustomerID=Orders.CustomerID ORDER BY Customers.CustomerName

INSERT

INSERT is a way to insert data into a table.

INSERT INTO table_name (column_1, column_2, column_3) VALUES (value_1, 'value_2', value_3);

LIKE

LIKE  được sử dụng trong một WHEREhoặc HAVING(như một phần của GROUP BY) để giới hạn các hàng đã chọn đối với các mục khi một cột có một mẫu ký tự nhất định chứa trong đó.

SQL này sẽ chọn những sinh viên có FullNamebắt đầu bằng “Monique” hoặc kết thúc bằng “Greene”.

SELECT studentID, FullName, sat_score, rcd_updated FROM student WHERE FullName LIKE 'Monique%' OR FullName LIKE '%Greene'; 
+-----------+---------------+-----------+---------------------+ | studentID | FullName | sat_score | rcd_updated | +-----------+---------------+-----------+---------------------+ | 1 | Monique Davis | 400 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 | +-----------+---------------+-----------+---------------------+ 2 rows in set (0.00 sec)

Bạn có thể đặt NOTtrước LIKEđể loại trừ các hàng có mẫu chuỗi thay vì chọn chúng. SQL này loại trừ các bản ghi có chứa “cer Pau” và “Ted” trong cột FullName.

SELECT studentID, FullName, sat_score, rcd_updated FROM student WHERE FullName NOT LIKE '%cer Pau%' AND FullName NOT LIKE '%"Ted"%';
+-----------+----------------------+-----------+---------------------+ | studentID | FullName | sat_score | rcd_updated | +-----------+----------------------+-----------+---------------------+ | 1 | Monique Davis | 400 | 2017-08-16 15:34:50 | | 2 | Teri Gutierrez | 800 | 2017-08-16 15:34:50 | | 4 | Louis Ramsey | 1200 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 | | 6 | Sophie Freeman | 1200 | 2017-08-16 15:34:50 | | 8 | Donald D. Chamberlin | 2400 | 2017-08-16 15:35:33 | | 9 | Raymond F. Boyce | 2400 | 2017-08-16 15:35:33 | +-----------+----------------------+-----------+---------------------+ 7 rows in set (0.00 sec)