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

SQL SELECT cho người mới bắt đầu

SELECT hầu như không có nghi ngờ gì, câu lệnh được sử dụng phổ biến nhất trong SQL.

SELECT câu lệnh được sử dụng để truy xuất dữ liệu từ cơ sở dữ liệu. Bạn có thể chỉ định hàng nào bạn muốn trả về và cột nào.

Ví dụ

Đây là một ví dụ để chứng minh SELECT tuyên bố.

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

Trong ví dụ này, chúng tôi đã sử dụng dấu hoa thị (* ) ký tự đại diện để trả về tất cả các cột. Chúng tôi cũng đã sử dụng FROM để chỉ định bảng lấy dữ liệu từ.

Vì vậy, truy vấn này trả về tất cả các hàng và tất cả các cột từ Pets bảng.

Chỉ định các cột

Bạn có thể chỉ định các cột bạn muốn trả lại.

Để thực hiện việc này, hãy thay thế ký tự đại diện dấu hoa thị bằng các tên cột, mỗi tên được phân tách bằng dấu phẩy, theo thứ tự bạn muốn chúng được trả lại.

SELECT PetId, PetName, DOB 
FROM Pets;

Kết quả:

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

Thường được coi là phương pháp hay để làm theo cách này và chỉ trả lại những cột mà bạn thực sự cần. Việc sử dụng ký tự đại diện dấu hoa thị để trả về tất cả các cột có thể có tác động xấu đến hiệu suất, đặc biệt là trong cơ sở dữ liệu lớn hơn.

Chỉ định hàng

Có nhiều cách để lọc kết quả theo những hàng bạn quan tâm. Cách phổ biến nhất là sử dụng WHERE mệnh đề. Điều khoản này cho phép bạn chỉ định điều kiện mà một hàng phải đáp ứng để đủ điều kiện.

Đây là một ví dụ để chứng minh.

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

Kết quả:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 6       | Fluffy    | 2020-09-17 |
+---------+-----------+------------+

Trong trường hợp của chúng tôi, có hai hàng thỏa mãn điều kiện tìm kiếm của chúng tôi.

Điều kiện tìm kiếm của chúng tôi sử dụng toán tử bằng (= ) để chỉ định rằng giá trị của PetName cột phải khớp với giá trị được chỉ định (Fluffy ) chính xác.

Có nhiều toán tử khác mà bạn có thể sử dụng trong các điều kiện tìm kiếm của mình. Ví dụ:bạn có thể sử dụng LIKE toán tử để trả lại vật nuôi có tên bắt đầu bằng F hoặc Fluff hay bất cứ cái gì.

Bạn có thể thêm các điều kiện khác vào WHERE mệnh đề bằng cách sử dụng các toán tử như ANDOR toán tử.

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

SELECT PetId, PetName, DOB 
FROM Pets
WHERE PetName = 'Fluffy'
OR DOB < '2020-01-01';

Kết quả:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 2       | Fetch     | 2019-08-16 |
| 3       | Scratch   | 2018-10-01 |
| 6       | Fluffy    | 2020-09-17 |
+---------+-----------+------------+

Trong ví dụ này, chúng tôi đã trả lại tất cả các hàng có tên của thú cưng là Fluffy hoặc nơi sinh của thú cưng (được chỉ định trong DOB cột) nhỏ hơn một ngày nhất định. Chúng tôi đã sử dụng toán tử less than (< ) để xác định điều đó.

Trả về dữ liệu ngoài bảng

SELECT câu lệnh cũng có thể được sử dụng để trả về dữ liệu không được lưu trữ trong bảng. Ví dụ:hoàn toàn hợp pháp khi làm điều này:

SELECT 'Hey there!';

Kết quả:

+--------------------+
| (No column name)   |
|--------------------|
| Hey there!         |
+--------------------+

Lưu ý rằng khi chúng ta làm điều đó, cột không có tên. Chúng tôi có thể sử dụng một bí danh để đặt tên cho trường kết quả.

Dưới đây là một số ví dụ khác về việc chọn dữ liệu không phải bảng và cung cấp bí danh cho mỗi trường được trả về:

SELECT 
    2 + 3 AS "2 + 3",
    'Fluffy' + ' ' + 'Smith' AS FullName,
    SYSDATETIME() AS "Date/time";

Kết quả:

+---------+--------------+-----------------------------+
| 2 + 3   | FullName     | Date/time                   |
|---------+--------------+-----------------------------|
| 5       | Fluffy Smith | 2020-12-04 23:58:55.8483734 |
+---------+--------------+-----------------------------+

Dưới đây là tóm tắt nhanh:

  • Cột đầu tiên chỉ cần thêm hai số.
  • Cột thứ hai nối ba chuỗi (bao gồm một ký tự khoảng trắng). Bạn cũng có thể nối chuỗi với số nếu cần.
  • Cột thứ ba sử dụng SYSDATETIME() chức năng trả về ngày và giờ hiện tại. Chức năng này có sẵn trong SQL Server. Các DBMS khác có các chức năng ngày và giờ riêng. Xem Hàm ngày / giờ của SQLite, Hàm ngày / giờ của SQL Server và Hàm ngày / giờ của PostgreSQL để biết danh sách các hàm ngày và giờ có sẵn trong các DBMS đó.

Truy vấn con

Có thể có nhiều SELECT các câu lệnh trong một truy vấn. Chúng tôi có thể thực hiện việc này bằng cách sử dụng một truy vấn con.

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

Kết quả:

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

Trong ví dụ này, chúng tôi đã sử dụng IN toán tử để chỉ định một truy vấn con. Truy vấn con đó đã chọn dữ liệu từ một bảng khác và IN toán tử liên quan nó trở lại truy vấn bên ngoài.

Sắp xếp kết quả

Bạn có thể sử dụng ORDER BY mệnh đề sắp xếp kết quả.

Ví dụ:chúng tôi có thể sắp xếp các kết quả trước đó theo PetTypeId cột theo thứ tự giảm dần:

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

Kết quả:

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

Xem SQL ORDER BY Mệnh đề dành cho người mới bắt đầu để có thêm ví dụ và giải thích chi tiết.

Nâng cao hơn SELECT Tuyên bố

SELECT Câu lệnh là một câu lệnh rất đơn giản, nhưng nó có thể được sử dụng để tạo các truy vấn rất phức tạp.

Đây là một truy vấn hơi phức tạp hơn những câu trước.

SELECT 
    PetTypes.PetType,
    COUNT(Pets.PetTypeId) AS Count
FROM Pets 
LEFT JOIN PetTypes 
ON Pets.PetTypeId = PetTypes.PetTypeId
GROUP BY PetTypes.PetType
ORDER BY Count DESC;

Kết quả:

+-----------+---------+
| PetType   | Count   |
|-----------+---------|
| Dog       | 4       |
| Cat       | 3       |
| Bird      | 1       |
+-----------+---------+

Trong thế giới của các truy vấn SQL, điều này vẫn còn khá đơn giản, tuy nhiên, nó chứa nhiều phần tử thường thấy trong các truy vấn phức tạp hơn.

Ví dụ:truy vấn này sử dụng một phép nối để lấy dữ liệu từ nhiều bảng. Nó cũng sử dụng GROUP BY mệnh đề để chia các hàng thành các nhóm.

Xem SQL GROUP BY Mệnh đề dành cho người mới bắt đầu để biết thêm ví dụ về GROUP BY mệnh đề.

Xem Hướng dẫn tham gia SQL để biết cách truy xuất dữ liệu từ nhiều bảng và trả lại chúng dưới dạng một tập kết quả.

SELECT INTO Tuyên bố

Một số DBMS hỗ trợ SELECT INTO tuyên bố. Điều này hơi khác so với các ví dụ trước, ở chỗ nó ảnh hưởng đến dữ liệu trong cơ sở dữ liệu.

SELECT INTO câu lệnh tạo một bảng mới và chèn dữ liệu vào bảng đó từ một bảng khác.

Về cơ bản, nó diễn ra như thế này:

SELECT * INTO Table2
FROM Table1;

Trong ví dụ này, chúng tôi tạo một bảng mới có tên là Table2 và chèn tất cả dữ liệu từ Table1 vào nó. Table2 sẽ có định nghĩa giống như Table1 .

Xem SQL SELECT INTO Tuyên bố để biết thêm ví dụ.

Như tôi đã ám chỉ, không phải tất cả các DBMS đều hỗ trợ tuyên bố này. Nếu DBMS của bạn không hỗ trợ SELECT INTO , hãy thử sử dụng CREATE TABLE ... AS SELECT tuyên bố thay thế.

Các câu lệnh đó tạo một bảng mới như một phần của hoạt động của chúng. Để chèn dữ liệu vào một bảng đã tồn tại, hãy thử sử dụng INSERT INTO ... SELECT tuyên bố thay thế.


  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ục tiêu hàng, Phần 3:Chống tham gia

  2. Toán tử SQL Equals (=) cho người mới bắt đầu

  3. Cách trở thành nhà thiết kế cơ sở dữ liệu

  4. SQL ngoại trừ

  5. Sự kiện mở rộng cho SSAS