Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Truy vấn SQL cơ bản

Bài viết này chứa các ví dụ về truy vấn SQL cơ bản mà người mới bắt đầu có thể sử dụng để truy xuất dữ liệu từ cơ sở dữ liệu của họ.

SELECT cơ bản Truy vấn

Dưới đây là một ví dụ về truy vấn có thể, được sử dụng phổ biến nhất trong SQL:

SELECT * 
FROM Pets;

Kết quả:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+

Truy vấn này chọn tất cả các hàng và tất cả các cột từ Pets bàn. Điều này là do dấu hoa thị (* ) ký tự đại diện chọn tất cả các cột.

Chọn tên cột

Vì lý do hiệu suất, tốt nhất bạn nên tránh chọn tất cả các cột trừ khi bạn thực sự cần chúng. Thông thường tốt hơn là chỉ chọn các cột bạn cần.

Đây là một ví dụ.

SELECT PetId, PetName
FROM Pets;

Kết quả:

+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 1       | Fluffy    |
| 2       | Fetch     |
| 3       | Scratch   |
| 4       | Wag       |
| 5       | Tweet     |
| 6       | Fluffy    |
| 7       | Bark      |
| 8       | Meow      |
+---------+-----------+

Lọc kết quả

Bạn có thể thêm WHERE để lọc kết quả thành những hàng bạn cần.

SELECT PetId, PetName
FROM Pets
WHERE PetName = 'Fluffy';

Kết quả:

+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 1       | Fluffy    |
| 6       | Fluffy    |
+---------+-----------+

Đây là một ví dụ khác về lọc kết quả. Lần này chúng tôi sử dụng toán tử lớn hơn (> ) để lọc nó theo ngày.

SELECT PetName, DOB 
FROM Pets
WHERE DOB > '2020-01-01';

Kết quả:

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fluffy    | 2020-11-20 |
| Wag       | 2020-03-15 |
| Tweet     | 2020-11-28 |
| Fluffy    | 2020-09-17 |
+-----------+------------+

Bạn có thể hoán đổi toán tử lớn hơn thành các toán tử khác, chẳng hạn như toán tử lớn hơn hoặc bằng với toán tử (>= ), nhỏ hơn toán tử (< ), hoặc nhỏ hơn hoặc bằng toán tử (<= ).

Bạn cũng có thể sử dụng BETWEEN toán tử để lọc kết quả cho một phạm vi cụ thể (ví dụ:giữa hai ngày).

SELECT
    PetName,
    DOB
FROM Pets
WHERE DOB BETWEEN '2018-01-01' AND '2020-01-01';

Kết quả:

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fetch     | 2019-08-16 |
| Scratch   | 2018-10-01 |
+-----------+------------+

Sắp xếp kết quả

Bạn có thể thêm ORDER BY mệnh đề để sắp xếp các hàng được trả về bởi truy vấn.

Thứ tự tăng dần

Sử dụng ASC từ khóa để sắp xếp các kết quả theo thứ tự tăng dần. Đây là giá trị mặc định, vì vậy bạn cũng có thể bỏ qua từ khóa này nếu bạn muốn kết quả theo thứ tự tăng dần.

SELECT PetId, PetName
FROM Pets
ORDER BY PetName ASC;

Hoặc:

SELECT PetId, PetName
FROM Pets
ORDER BY PetName;

Kết quả:

+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 7       | Bark      |
| 2       | Fetch     |
| 1       | Fluffy    |
| 6       | Fluffy    |
| 8       | Meow      |
| 3       | Scratch   |
| 5       | Tweet     |
| 4       | Wag       |
+---------+-----------+

Thứ tự giảm dần

Sử dụng DESC từ khóa để sắp xếp kết quả theo thứ tự giảm dần.

SELECT PetId, PetName
FROM Pets
ORDER BY PetName DESC;

Kết quả:

+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 4       | Wag       |
| 5       | Tweet     |
| 3       | Scratch   |
| 8       | Meow      |
| 1       | Fluffy    |
| 6       | Fluffy    |
| 2       | Fetch     |
| 7       | Bark      |
+---------+-----------+

Sắp xếp theo nhiều cột

Bạn có thể sắp xếp theo nhiều cột bằng cách liệt kê từng cột, được phân tách bằng dấu phẩy.

SELECT PetId, PetName
FROM Pets
ORDER BY PetName ASC, PetId ASC;

SELECT PetId, PetName
FROM Pets
ORDER BY PetName ASC, PetId DESC;

Kết quả:

+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 7       | Bark      |
| 2       | Fetch     |
| 1       | Fluffy    |
| 6       | Fluffy    |
| 8       | Meow      |
| 3       | Scratch   |
| 5       | Tweet     |
| 4       | Wag       |
+---------+-----------+
(8 rows affected)
+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 7       | Bark      |
| 2       | Fetch     |
| 6       | Fluffy    |
| 1       | Fluffy    |
| 8       | Meow      |
| 3       | Scratch   |
| 5       | Tweet     |
| 4       | Wag       |
+---------+-----------+
(8 rows affected)

Chúng ta có thể thấy rằng hai Fluffys có thứ tự khác nhau trong mỗi kết quả (chúng ta có thể biết bằng cách xem PetId của chúng giá trị). Điều này là do PetName cột được sắp xếp đầu tiên, sau đó đến PetId đã sắp xếp mọi bản sao từ lần sắp xếp đầu tiên.

Sắp xếp theo các cột ẩn

Bạn có thể sắp xếp theo các cột không có trong SELECT danh sách.

SELECT PetId, PetName
FROM Pets
ORDER BY DOB DESC;

Kết quả:

+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 5       | Tweet     |
| 1       | Fluffy    |
| 6       | Fluffy    |
| 4       | Wag       |
| 2       | Fetch     |
| 3       | Scratch   |
| 7       | Bark      |
| 8       | Meow      |
+---------+-----------+

Trong trường hợp này, chúng tôi có thể suy ra từ các kết quả này rằng Tweet là vật nuôi nhỏ tuổi nhất và Meow là người già nhất. Điều này là do chúng tôi sắp xếp theo ngày sinh của họ (DOB ) theo thứ tự giảm dần.

Chỉ để chắc chắn, đây là một lần nữa với DOB được bao gồm trong SELECT danh sách.

SELECT PetId, PetName, DOB
FROM Pets
ORDER BY DOB DESC;

Kết quả:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 5       | Tweet     | 2020-11-28 |
| 1       | Fluffy    | 2020-11-20 |
| 6       | Fluffy    | 2020-09-17 |
| 4       | Wag       | 2020-03-15 |
| 2       | Fetch     | 2019-08-16 |
| 3       | Scratch   | 2018-10-01 |
| 7       | Bark      | NULL       |
| 8       | Meow      | NULL       |
+---------+-----------+------------+

Trên thực tế, bây giờ chúng ta có thể thấy rằng Meow và Bark có NULL các giá trị trong DOB cột. Do đó, chúng tôi không biết họ thực sự lớn hơn hay trẻ hơn.

Nhưng điều này chứng tỏ rằng NULL giá trị được coi là giá trị thấp nhất có thể. Hãy lưu ý đến NULL giá trị khi chạy truy vấn.

Khớp mẫu

Bạn có thể sử dụng LIKE để sử dụng đối sánh mẫu.

SELECT PetId, PetName
FROM Pets
WHERE PetName LIKE 'F%';

Kết quả:

+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 1       | Fluffy    |
| 2       | Fetch     |
| 6       | Fluffy    |
+---------+-----------+

Trong ví dụ này, chúng tôi tìm kiếm tất cả vật nuôi có tên bắt đầu bằng chữ cái F . Dấu phần trăm (% ) là một ký tự đại diện khớp với bất kỳ chuỗi nào không hoặc nhiều ký tự. Nó có thể được sử dụng như một tiền tố hoặc một hậu tố, và nó cũng có thể được sử dụng ở giữa một chuỗi.

Đây là một ví dụ khác.

SELECT FirstName, LastName, Email
FROM Owners
WHERE Email LIKE '%@example.%';

Kết quả:

+-------------+------------+-------------------+
| FirstName   | LastName   | Email             |
|-------------+------------+-------------------|
| Homer       | Connery    | [email protected] |
| Bart        | Pitt       | [email protected]  |
+-------------+------------+-------------------+

Chọn từ danh sách

IN toán tử xác định xem một giá trị được chỉ định có khớp với bất kỳ giá trị nào trong một truy vấn con hoặc một danh sách hay không.

Đây là một ví dụ.

SELECT 
    PetId, 
    PetName, 
    DOB 
FROM Pets
WHERE PetName IN ('Fluffy', 'Bark', 'Wag');

Kết quả:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 4       | Wag       | 2020-03-15 |
| 6       | Fluffy    | 2020-09-17 |
| 7       | Bark      | NULL       |
+---------+-----------+------------+

Truy vấn con

Bạn có thể sử dụng IN toán tử khi thực hiện một truy vấn con (một truy vấn được lồng bên trong một truy vấn khác).

Đây là một ví dụ.

SELECT 
    PetTypeId,
    PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );

Kết quả:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 1           | Bird      |
| 2           | Cat       |
| 3           | Dog       |
+-------------+-----------+

Cột này trả về từ một bảng (PetTypes ), nhưng chỉ khi có ít nhất một hàng tương ứng trong một bảng khác (Pets ) khớp với PetTypeId cột.

Để minh chứng thêm cho điều này, nội dung liên quan của hai bảng này được trình bày bên dưới.

PetTypes bảng:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 1           | Bird      |
| 2           | Cat       |
| 3           | Dog       |
| 4           | Rabbit    |
+-------------+-----------+

Pets bảng:

+-------------+-----------+
| PetTypeId   | PetName   |
|-------------+-----------|
| 2           | Fluffy    |
| 3           | Fetch     |
| 2           | Scratch   |
| 3           | Wag       |
| 1           | Tweet     |
| 3           | Fluffy    |
| 3           | Bark      |
| 2           | Meow      |
+-------------+-----------+

Chúng ta có thể thấy rằng PetTypes bảng chứa một loại vật nuôi là Rabbit , nhưng không có vật nuôi nào trong Pets bảng đã được chỉ định loại đó (tức là không có giá trị của 4 trong Pets.PetTypeId cột).

Xem 12 Toán tử SQL thường được sử dụng và danh sách Toán tử SQL này để biết thêm thông tin về các toán tử trong SQL.

Tham gia

Có thể tranh cãi liệu các phép nối SQL có được coi là “các truy vấn SQL cơ bản” hay không, nhưng dù sao thì tôi cũng sẽ đưa vào một phép nối ở đây.

Vì vậy, để kết thúc bài viết này, đây là một ví dụ về liên kết bên trong.

SELECT 
    p.PetName,
    pt.PetType
FROM Pets p
INNER JOIN PetTypes pt
ON p.PetTypeId = pt.PetTypeId;

Kết quả:

+-----------+-----------+
| PetName   | PetType   |
|-----------+-----------|
| Fluffy    | Cat       |
| Fetch     | Dog       |
| Scratch   | Cat       |
| Wag       | Dog       |
| Tweet     | Bird      |
| Fluffy    | Dog       |
| Bark      | Dog       |
| Meow      | Cat       |
+-----------+-----------+

Trong trường hợp này, chúng tôi đã sử dụng INNER JOIN để trả về tất cả các tên vật nuôi với các loại vật nuôi tương ứng của chúng. Chúng tôi đã sử dụng ON mệnh đề để chỉ định vị từ được đánh giá cho mỗi cặp hàng đã nối. Trong trường hợp này, p.PetTypeId là một khóa ngoại của pt.PetTypeId , là khóa chính cho PetTypes bảng.

Trong ví dụ này, tôi cũng sử dụng bí danh trên các bảng, điều này giúp giữ cho mã đẹp và ngắn gọn.

Xem Hướng dẫn tham gia SQL của tôi để biết thêm ví dụ về các phép nối.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mẹo quản lý sao lưu cho TimescaleDB

  2. Cách so sánh hai hàng từ cùng một bảng

  3. Giải thích các câu lệnh về cơ sở dữ liệu DROP trong SQL, Bảng DROP và DROP

  4. Các nguyên tắc cơ bản về biểu thức bảng, Phần 11 - Quan điểm, Cân nhắc sửa đổi

  5. Phân tích hoạt động theo thời gian thực và chỉ mục cửa hàng theo cột không được phân cụm