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

Truy vấn MySQL

Cho đến nay, chúng tôi đã tạo một cơ sở dữ liệu, thêm hai bảng và chèn dữ liệu vào cả hai bảng. Bây giờ chúng ta sẽ xem xét cách truy xuất dữ liệu đó. Nhưng không chỉ truy xuất dữ liệu, nhưng để truy vấn cơ sở dữ liệu cho nó.

SQL là viết tắt của Ngôn ngữ truy vấn có cấu trúc . Đó là Truy vấn bit làm cho SQL trở nên mạnh mẽ như vậy. SQL là ngôn ngữ cho phép bạn chạy truy vấn chống lại cơ sở dữ liệu của bạn. Nó cho phép bạn truy vấn cơ sở dữ liệu cho dữ liệu mà bạn muốn.

SQL SELECT Tuyên bố

Khi nói đến truy vấn cơ sở dữ liệu MySQL của bạn, SQL SELECT tuyên bố làm cho tất cả có thể. Đây có thể là câu lệnh SQL được sử dụng thường xuyên nhất của bạn khi làm việc với MySQL. SELECT câu lệnh cho phép bạn mô tả cho MySQL chính xác dữ liệu mà bạn muốn nó truy xuất.

Hãy xem xét câu lệnh SQL sau:

SELECT * FROM Fruit;

Đây là kết quả:

Đây là SELECT câu lệnh đơn giản nhất. Câu lệnh SQL trên truy xuất tất cả các bản ghi từ Fruit bảng.

Dấu hoa thị (* ) yêu cầu MySQL trả về tất cả các cột. Điều này giúp chúng tôi tiết kiệm thời gian và công sức. Nếu không có điều này, chúng tôi cần viết tên của tất cả các cột mà chúng tôi muốn trả về.

Nói như vậy, bạn cũng có thể yêu cầu MySQL chỉ trả về những cột mà bạn muốn trả lại. Điều này được thực hiện bằng cách chỉ đặt tên cho những cột mà bạn muốn trả về. Như thế này:

SELECT FruitId, FruitName 
FROM Fruit;

Đây là kết quả:

Câu lệnh SQL trên chọn FruitId FruitName các cột từ Fruit bảng.

Làm điều này có thể giảm bớt sự lộn xộn để bạn chỉ thấy những cột mà bạn quan tâm. Nó cũng có thể tăng hiệu suất vì MySQL (và bất kỳ ứng dụng nào bạn sử dụng) không cần sử dụng các tài nguyên có giá trị để trả về dữ liệu không cần thiết.

Một lần nữa, truy vấn này truy xuất lại tất cả bản ghi từ bảng - MySQL sẽ trả về tất cả các bản ghi trừ khi được chỉ định khác.

WHERE Mệnh đề

Bạn có thể thêm WHERE để thu hẹp kết quả được đặt thành chỉ những bản ghi mà bạn quan tâm. Như thế này:

SELECT * FROM Fruit
WHERE UnitId = 1;

Kết quả:

Truy vấn trên trả về tất cả các bản ghi từ Fruit bảng trong đó UnitId cột có giá trị là 1 .

Truy vấn con - SELECT lồng nhau Tuyên bố

Điều gì sẽ xảy ra nếu chúng ta không biết UnitId ? Điều gì sẽ xảy ra nếu chúng ta chỉ biết tìm kiếm những bản ghi đó với tên đơn vị là Piece ?

Dễ dàng! Chúng ta có thể viết lại ví dụ trên để sử dụng SELECT lồng nhau câu lệnh (hay còn gọi là một truy vấn con ) truy vấn một bảng khác ( Đơn vị bàn). Làm điều này sẽ cho phép chúng tôi sử dụng đơn vị thực tế name (thay vì ID của nó) vì bảng thứ hai chứa cái này trong UnitName lĩnh vực:

SELECT * FROM Fruit
WHERE UnitId = 
	(SELECT UnitId 
    FROM Units 
    WHERE UnitName = 'Piece');

Kết quả:

Ở đây chúng tôi sử dụng SELECT lồng nhau câu lệnh (tức là một SELECT câu lệnh trong SELECT câu lệnh) để truy vấn Đơn vị bảng cho UnitId của bản ghi có chứa Piece dưới dạng UnitName của nó giá trị. Chúng tôi có thể làm điều này vì Fruit.UnitId là một khóa ngoại đối với Units.UnitId cột.

Dưới đây là các ví dụ khác về truy vấn phụ nếu bạn quan tâm.

Sử dụng JOIN trong SQL

Tiến thêm một bước nữa, chúng tôi có thể viết lại SELECT lồng nhau của chúng tôi câu lệnh thành một INNER JOIN .

Trong SQL, một JOIN cho phép bạn truy vấn nhiều bảng chia sẻ dữ liệu. Trong trường hợp của chúng tôi, cả hai bảng đều chia sẻ UnitId vì vậy bạn có thể nói rằng chúng được trường này "tham gia".

Có nhiều kiểu nối khác nhau trong SQL, tuy nhiên, chúng tôi chủ yếu quan tâm đến INNER JOIN bây giờ.

INNER JOIN cú pháp như sau:

SELECT * FROM table_name_1
INNER JOIN table_name_2
ON table_name_1.column_name = table_name_2.column_name

Vì vậy, chúng tôi có thể viết lại truy vấn con của mình từ ví dụ trước thành sau:

SELECT Fruit.* FROM Fruit
INNER JOIN Units
ON Fruit.UnitId = Units.UnitId
WHERE Units.UnitName = 'Piece';

Kết quả:

Chúng tôi đã chỉ định Fruit.* thay vì chỉ * bởi vì chúng tôi chỉ muốn trả về tất cả các cột từ Fruit bàn. Nếu chúng tôi đã sử dụng * , truy vấn sẽ trả về tất cả các cột từ cả hai bảng.

Ngoài ra, hãy xem LEFT JOINRIGHT JOIN để xem bạn có thể nhận được các dữ liệu khác nhau như thế nào tùy thuộc vào loại kết hợp.

Truy vấn con so với JOIN ?

Bây giờ bạn đã thấy hai phương pháp để đạt được cùng một kết quả, có lẽ bạn đang tự hỏi phương pháp nào tốt hơn?

Truy vấn phụ có xu hướng dễ đọc hơn (và có lẽ dễ hiểu hơn), điều này có thể giúp người mới bắt đầu nắm bắt dễ dàng hơn.

Tuy nhiên, nhiều lập trình viên SQL tìm thấy JOIN s hiệu quả hơn và hoạt động tốt hơn. Nếu bạn gặp sự cố về hiệu suất với các truy vấn của mình hoặc ứng dụng, hãy thử chuyển đổi bất kỳ truy vấn con nào thành JOIN s hoặc ngược lại (trong một số trường hợp, một truy vấn phụ có thể hoạt động tốt hơn).

Ngoài ra, có thể có trường hợp truy vấn con là lựa chọn duy nhất của bạn, vì vậy đây cũng là một lựa chọn cần cân nhắc.

Các nhà khai thác khác

Các truy vấn của chúng tôi cho đến nay đều chứa một dấu bằng (= ). Đây được gọi là một toán tử . Cụ thể hơn, đó là một toán tử so sánh vì nó so sánh một biểu thức này với một biểu thức khác.

Có nhiều toán tử khác mà bạn có thể sử dụng trong các truy vấn của mình. Những điều này có thể hỗ trợ rất nhiều trong việc thu hẹp tập hợp kết quả thành chỉ những bản ghi mà bạn yêu cầu. Không có gì lạ khi một cơ sở dữ liệu chứa hàng triệu bản ghi. Ngay cả khi bạn chỉ có hàng nghìn bản ghi, cố gắng tìm một bản ghi (hoặc thậm chí chỉ một số ít) trong số hàng nghìn bản ghi sẽ là một nhiệm vụ rất khó khăn nếu bạn không có các toán tử này theo ý mình.

Dưới đây là một số toán tử SQL được sử dụng phổ biến hơn.

> Nhà điều hành

Bạn có thể sử dụng > toán tử để chọn dữ liệu lớn hơn hơn một giá trị nhất định.

SELECT * FROM Fruit
WHERE Inventory > 10;

< Nhà điều hành

Bạn có thể sử dụng < toán tử để chọn dữ liệu ít hơn hơn một giá trị nhất định.

SELECT * FROM Fruit
WHERE Inventory < 10;

<> Nhà điều hành

Bạn có thể sử dụng <> toán tử để chọn dữ liệu vừa nhỏ hơn lớn hơn một giá trị nhất định.

SELECT * FROM Fruit
WHERE Inventory <> 10;

>= Nhà điều hành

Bạn có thể sử dụng >= toán tử để chọn dữ liệu lớn hơn hoặc bằng một giá trị nhất định.

SELECT * FROM Fruit
WHERE Inventory >= 10;

<= Nhà điều hành

Bạn có thể sử dụng <= toán tử để chọn dữ liệu nhỏ hơn hoặc bằng một giá trị nhất định.

SELECT * FROM Fruit
WHERE Inventory <= 10;

AND Nhà điều hành

Bạn có thể thêm AND toán tử cho WHERE để giới hạn lựa chọn của bạn chỉ với những bản ghi đáp ứng hai điều kiện (hoặc nhiều hơn nếu bạn bao gồm thêm AND toán tử).

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

SELECT * FROM Fruit
WHERE Inventory > 10 
AND DateEntered > '2015-01-15';

OR Nhà điều hành

Bạn có thể sử dụng OR để mở rộng lựa chọn của bạn cho nhiều hơn một tiêu chí. Như tên cho thấy, OR mệnh đề cho phép bạn chọn dữ liệu trong đó tiêu chí là HOẶC điều đó. Vì vậy, AND toán tử giới hạn lựa chọn của bạn và OR toán tử mở rộng nó.

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

SELECT * FROM Fruit
WHERE UnitId = 1 OR UnitId = 2;

BETWEEN Nhà điều hành

Sử dụng BETWEEN toán tử để chọn dữ liệu nằm giữa hai giá trị nhất định.

SELECT * FROM Fruit
WHERE DateEntered 
BETWEEN '2015-01-25' AND '2015-02-25';

NOT Nhà điều hành

Sử dụng NOT toán tử để chọn dữ liệu không tương đương với một điều kiện nhất định.

SELECT * FROM Fruit
WHERE NOT (FruitName = 'Apple');

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PDO tìm nạp một cột từ bảng thành mảng 1 chiều

  2. Cách tìm và thay thế văn bản trong cơ sở dữ liệu MySQL bằng SQL

  3. Tạo và sử dụng thủ tục lưu trữ trong MySQL - Hướng dẫn

  4. Tạo một chuỗi số nguyên trong MySQL

  5. Sự khác biệt giữa cơ sở dữ liệu SQL &NoSQL - So sánh MySQL &MongoDB