Hướng dẫn what are mysql database queries - truy vấn cơ sở dữ liệu mysql là gì

Giới thiệu

Cơ sở dữ liệu là một thành phần chính của nhiều trang web và ứng dụng, và là cốt lõi của cách dữ liệu được lưu trữ và trao đổi trên internet. Một trong những khía cạnh quan trọng nhất của quản lý cơ sở dữ liệu là thực tiễn lấy dữ liệu từ cơ sở dữ liệu, cho dù đó là trên cơ sở ad hoc hay một phần của quy trình mà đã được mã hóa vào một ứng dụng. Có một số cách để truy xuất thông tin từ cơ sở dữ liệu, nhưng một trong những phương thức được sử dụng phổ biến nhất được thực hiện thông qua việc gửi truy vấn thông qua dòng lệnh.

Trong các hệ thống quản lý cơ sở dữ liệu quan hệ, một truy vấn là bất kỳ lệnh nào được sử dụng để truy xuất dữ liệu từ bảng. Trong ngôn ngữ truy vấn có cấu trúc (SQL), các truy vấn hầu như luôn được thực hiện bằng cách sử dụng câu lệnh

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
5.

Trong hướng dẫn này, chúng tôi sẽ thảo luận về cú pháp cơ bản của các truy vấn SQL cũng như một số chức năng và toán tử thường xuyên hơn. Chúng tôi cũng sẽ thực hành thực hiện các truy vấn SQL bằng cách sử dụng một số dữ liệu mẫu trong cơ sở dữ liệu MySQL.

MySQL là một hệ thống quản lý cơ sở dữ liệu quan hệ nguồn mở. Một trong những cơ sở dữ liệu SQL được triển khai rộng rãi nhất, MySQL ưu tiên tốc độ, độ tin cậy và khả năng sử dụng. Nó thường tuân theo tiêu chuẩn ANSI SQL, mặc dù có một vài trường hợp MySQL thực hiện các hoạt động khác với tiêu chuẩn được công nhận.

Điều kiện tiên quyết

Nói chung, các lệnh và khái niệm được trình bày trong hướng dẫn này có thể được sử dụng trên bất kỳ hệ điều hành dựa trên Linux nào chạy bất kỳ phần mềm cơ sở dữ liệu SQL nào. Tuy nhiên, nó được viết riêng với máy chủ Ubuntu 18.04 chạy MYSQL trong tâm trí. Để thiết lập điều này, bạn sẽ cần những điều sau:

  • Máy Ubuntu 18.04 với người dùng không root có đặc quyền sudo. Điều này có thể được thiết lập bằng cách sử dụng Hướng dẫn thiết lập máy chủ ban đầu của chúng tôi cho Ubuntu 18.04.
  • MySQL được cài đặt trên máy. Hướng dẫn của chúng tôi về cách cài đặt MySQL trên Ubuntu 18.04 có thể giúp bạn thiết lập điều này.

Với thiết lập này tại chỗ, chúng tôi có thể bắt đầu hướng dẫn.

Tạo cơ sở dữ liệu mẫu

Trước khi chúng tôi có thể bắt đầu thực hiện các truy vấn trong SQL, trước tiên chúng tôi sẽ tạo một cơ sở dữ liệu và một vài bảng, sau đó điền vào các bảng này với một số dữ liệu mẫu. Điều này sẽ cho phép bạn có được một số kinh nghiệm thực hành khi bạn bắt đầu thực hiện các truy vấn sau này.

Đối với cơ sở dữ liệu mẫu mà chúng tôi sẽ sử dụng trong suốt hướng dẫn này, hãy tưởng tượng kịch bản sau:

Bạn và một vài người bạn của bạn đều ăn mừng sinh nhật của bạn với nhau. Mỗi lần, các thành viên của nhóm đi đến sân chơi bowling địa phương, tham gia một giải đấu thân thiện, và sau đó mọi người đều đi đến nơi bạn chuẩn bị bữa ăn yêu thích sinh nhật.

Bây giờ truyền thống này đã diễn ra trong một thời gian, bạn đã quyết định bắt đầu theo dõi các hồ sơ từ các giải đấu này. Ngoài ra, để làm cho bữa tối lập kế hoạch dễ dàng hơn, bạn quyết định tạo ra một hồ sơ về sinh nhật bạn bè của bạn và các món ăn, bên và món tráng miệng yêu thích của họ. Thay vì giữ thông tin này trong một sổ cái vật lý, bạn quyết định thực hiện các kỹ năng cơ sở dữ liệu của mình bằng cách ghi nó trong cơ sở dữ liệu MySQL.

Để bắt đầu, hãy mở một lời nhắc MySQL làm người dùng MySQL gốc của bạn:root MySQL user:

  1. sudo mysql

Lưu ý: Nếu bạn đã làm theo điều kiện tiên quyết hướng dẫn về việc cài đặt MySQL trên Ubuntu 18.04, bạn có thể đã cấu hình người dùng gốc của mình để xác thực bằng cách sử dụng mật khẩu. Trong trường hợp này, bạn sẽ kết nối với lời nhắc MySQL với lệnh sau: If you followed the prerequisite the tutorial on Installing MySQL on Ubuntu 18.04, you may have configured your root user to authenticate using a password. In this case, you will connect to the MySQL prompt with the following command:

  1. mysql -u root -p

Tiếp theo, tạo cơ sở dữ liệu bằng cách chạy:

  1. CREATE DATABASE `birthdays`;

Sau đó chọn cơ sở dữ liệu này bằng cách nhập:

  1. USE birthdays;

Tiếp theo, tạo hai bảng trong cơ sở dữ liệu này. Chúng tôi sẽ sử dụng bảng đầu tiên để theo dõi hồ sơ của bạn bè của bạn tại sân chơi bowling. Lệnh sau đây sẽ tạo ra một bảng có tên

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
6 với các cột cho

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
7 của mỗi người bạn của bạn, số lượng giải đấu mà họ đã giành được (

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
8), điểm

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
9 mọi thời đại của họ và giày bowling có kích thước nào họ mang (
  1. CREATE TABLE dinners (
  2. name varchar(30),
  3. birthdate date,
  4. entree varchar(30),
  5. side varchar(30),
  6. dessert varchar(30)
  7. );
0):

  1. CREATE TABLE tourneys (
  2. name varchar(30),
  3. wins real,
  4. best real,
  5. size real
  6. );

Khi bạn chạy lệnh

  1. CREATE TABLE dinners (
  2. name varchar(30),
  3. birthdate date,
  4. entree varchar(30),
  5. side varchar(30),
  6. dessert varchar(30)
  7. );
1 và điền vào các tiêu đề cột, bạn sẽ nhận được đầu ra sau:

Output

Query OK, 0 rows affected (0.00 sec)

Xóa bảng bảng

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
6 với một số dữ liệu mẫu:

  1. INSERT INTO tourneys (name, wins, best, size)
  2. VALUES ('Dolly', '7', '245', '8.5'),
  3. ('Etta', '4', '283', '9'),
  4. ('Irma', '9', '266', '7'),
  5. ('Barbara', '2', '197', '7.5'),
  6. ('Gladys', '13', '273', '8');

Bạn sẽ nhận được một đầu ra như thế này:

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0

Sau đó, hãy tạo một bảng khác trong cùng một cơ sở dữ liệu mà chúng tôi sẽ sử dụng để lưu trữ thông tin về những bữa ăn sinh nhật yêu thích của bạn bè của bạn. Lệnh sau đây tạo ra một bảng có tên

  1. CREATE TABLE dinners (
  2. name varchar(30),
  3. birthdate date,
  4. entree varchar(30),
  5. side varchar(30),
  6. dessert varchar(30)
  7. );
3 với các cột cho

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
7 của mỗi người bạn của bạn,
  1. CREATE TABLE dinners (
  2. name varchar(30),
  3. birthdate date,
  4. entree varchar(30),
  5. side varchar(30),
  6. dessert varchar(30)
  7. );
5 của họ,
  1. CREATE TABLE dinners (
  2. name varchar(30),
  3. birthdate date,
  4. entree varchar(30),
  5. side varchar(30),
  6. dessert varchar(30)
  7. );
6 yêu thích của họ, món ăn
  1. CREATE TABLE dinners (
  2. name varchar(30),
  3. birthdate date,
  4. entree varchar(30),
  5. side varchar(30),
  6. dessert varchar(30)
  7. );
7 ưa thích của họ và
  1. CREATE TABLE dinners (
  2. name varchar(30),
  3. birthdate date,
  4. entree varchar(30),
  5. side varchar(30),
  6. dessert varchar(30)
  7. );
8 yêu thích của họ:

  1. CREATE TABLE dinners (
  2. name varchar(30),
  3. birthdate date,
  4. entree varchar(30),
  5. side varchar(30),
  6. dessert varchar(30)
  7. );

Tương tự đối với bảng này, bạn sẽ nhận được phản hồi xác nhận rằng lệnh đã chạy thành công:

Output

Query OK, 0 rows affected (0.01 sec)

Xả bảng này với một số dữ liệu mẫu:

  1. mysql -u root -p
0
  1. mysql -u root -p
1

Khi lệnh đó hoàn thành thành công, bạn đã hoàn thành việc thiết lập cơ sở dữ liệu của mình. Tiếp theo, chúng tôi sẽ đi qua cấu trúc lệnh cơ bản của các truy vấn

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
5.

Hiểu các câu lệnh chọn

Như đã đề cập trong phần giới thiệu, các truy vấn SQL hầu như luôn bắt đầu với câu lệnh

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
5.

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
5 được sử dụng trong các truy vấn để chỉ định cột nào từ bảng phải được trả về trong tập kết quả. Các truy vấn cũng hầu như luôn luôn bao gồm

Output

Query OK, 0 rows affected (0.01 sec)
2, được sử dụng để chỉ định bảng nào câu lệnh sẽ truy vấn.

Nói chung, các truy vấn SQL tuân theo cú pháp này:

  1. mysql -u root -p
2

Ví dụ, câu lệnh sau đây sẽ trả về toàn bộ cột

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
7 từ bảng
  1. CREATE TABLE dinners (
  2. name varchar(30),
  3. birthdate date,
  4. entree varchar(30),
  5. side varchar(30),
  6. dessert varchar(30)
  7. );
3:

  1. mysql -u root -p
3
  1. mysql -u root -p
4

Bạn có thể chọn nhiều cột từ cùng một bảng bằng cách tách tên của họ bằng dấu phẩy, như thế này:

  1. mysql -u root -p
5
  1. mysql -u root -p
6

Thay vì đặt tên cho một cột hoặc tập hợp các cột cụ thể, bạn có thể theo dõi toán tử

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
5 bằng dấu hoa thị (

Output

Query OK, 0 rows affected (0.01 sec)
6) đóng vai trò là người giữ chỗ đại diện cho tất cả các cột trong bảng. Lệnh sau trả về mọi cột từ bảng

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
6:

  1. mysql -u root -p
7
  1. mysql -u root -p
8

Output

Query OK, 0 rows affected (0.01 sec)
8 được sử dụng trong các truy vấn để lọc các bản ghi đáp ứng một điều kiện được chỉ định và bất kỳ hàng nào không đáp ứng điều kiện đó đều được loại bỏ khỏi kết quả. Một mệnh đề

Output

Query OK, 0 rows affected (0.01 sec)
8 thường tuân theo cú pháp này:

  1. mysql -u root -p
9

Toán tử so sánh trong mệnh đề

Output

Query OK, 0 rows affected (0.01 sec)
8 xác định cách so sánh cột được chỉ định với giá trị. Dưới đây là một số toán tử so sánh SQL phổ biến:

Nhà điều hànhNhững gì nó làm
  1. mysql -u root -p
01
Các bài kiểm tra cho sự bình đẳng
  1. mysql -u root -p
02
Các xét nghiệm cho sự bất bình đẳng
  1. mysql -u root -p
03
Các xét nghiệm cho ít hơn
  1. mysql -u root -p
04
Các xét nghiệm cho lớn hơn
  1. mysql -u root -p
05
các bài kiểm tra cho ít hơn hoặc bằng
  1. mysql -u root -p
06
các bài kiểm tra cho lớn hơn hoặc bằng nhau
  1. mysql -u root -p
07
kiểm tra xem một giá trị có nằm trong một phạm vi nhất định không
  1. mysql -u root -p
08
kiểm tra xem giá trị hàng của một hàng có chứa trong một tập hợp các giá trị được chỉ định
  1. mysql -u root -p
09
Các kiểm tra xem các hàng có tồn tại hay không, với các điều kiện được chỉ định
  1. mysql -u root -p
10
kiểm tra xem giá trị có khớp với một chuỗi được chỉ định không
  1. mysql -u root -p
11
Các thử nghiệm cho các giá trị
  1. mysql -u root -p
12
  1. mysql -u root -p
13
Các thử nghiệm cho tất cả các giá trị khác ngoài
  1. mysql -u root -p
12

Ví dụ: nếu bạn muốn tìm kích thước giày Irma, bạn có thể sử dụng truy vấn sau:

  1. CREATE DATABASE `birthdays`;
0
  1. CREATE DATABASE `birthdays`;
1

SQL cho phép sử dụng các ký tự ký tự đại diện và chúng đặc biệt tiện dụng khi được sử dụng trong các mệnh đề

Output

Query OK, 0 rows affected (0.01 sec)
8. Các dấu hiệu phần trăm (
  1. mysql -u root -p
16) đại diện cho các ký tự không xác định hoặc nhiều hơn và nhấn mạnh (
  1. mysql -u root -p
17) đại diện cho một ký tự chưa biết duy nhất. Chúng rất hữu ích nếu bạn đang cố gắng tìm một mục cụ thể trong một bảng, nhưng không chắc chắn về mục nhập đó là chính xác. Để minh họa, hãy để Lừa nói rằng bạn đã quên mất mục đích yêu thích của một vài người bạn của bạn, nhưng bạn chắc chắn rằng món khai vị đặc biệt này bắt đầu với một T T. Bạn có thể tìm thấy tên của nó bằng cách chạy truy vấn sau:

  1. CREATE DATABASE `birthdays`;
2
  1. CREATE DATABASE `birthdays`;
3

Dựa trên đầu ra ở trên, chúng tôi thấy rằng các giao dịch mà chúng tôi đã quên là

  1. mysql -u root -p
18.

Có thể đôi khi bạn làm việc với các cơ sở dữ liệu có các cột hoặc bảng có tên tương đối dài hoặc khó đọc. Trong những trường hợp này, bạn có thể làm cho các tên này dễ đọc hơn bằng cách tạo một bí danh với từ khóa

  1. mysql -u root -p
19. Các bí danh được tạo ra với
  1. mysql -u root -p
19 là tạm thời và chỉ tồn tại trong suốt thời gian truy vấn mà họ đã tạo ra:

  1. CREATE DATABASE `birthdays`;
4
  1. CREATE DATABASE `birthdays`;
5

Ở đây, chúng tôi đã nói với SQL hiển thị cột

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
7 là
  1. mysql -u root -p
22, cột
  1. CREATE TABLE dinners (
  2. name varchar(30),
  3. birthdate date,
  4. entree varchar(30),
  5. side varchar(30),
  6. dessert varchar(30)
  7. );
5 là
  1. mysql -u root -p
24 và cột
  1. CREATE TABLE dinners (
  2. name varchar(30),
  3. birthdate date,
  4. entree varchar(30),
  5. side varchar(30),
  6. dessert varchar(30)
  7. );
8 là
  1. mysql -u root -p
26.

Các ví dụ mà chúng tôi đã trải qua cho đến thời điểm này bao gồm một số từ khóa và mệnh đề được sử dụng thường xuyên hơn trong các truy vấn SQL. Chúng rất hữu ích cho các truy vấn cơ bản, nhưng chúng không hữu ích nếu bạn đang cố gắng thực hiện tính toán hoặc lấy giá trị vô hướng (một giá trị duy nhất, trái ngược với một tập hợp nhiều giá trị khác nhau) dựa trên dữ liệu của bạn. Đây là nơi các chức năng tổng hợp đi vào chơi.

Chức năng tổng hợp

Thông thường, khi làm việc với dữ liệu, bạn không nhất thiết muốn xem dữ liệu. Thay vào đó, bạn muốn thông tin về dữ liệu. Cú pháp SQL bao gồm một số chức năng cho phép bạn diễn giải hoặc chạy tính toán trên dữ liệu của bạn chỉ bằng cách phát hành truy vấn

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
5. Chúng được gọi là chức năng tổng hợp.

Hàm

  1. mysql -u root -p
28 đếm và trả về số lượng hàng phù hợp với một tiêu chí nhất định. Ví dụ: nếu bạn muốn biết có bao nhiêu người bạn thích đậu phụ cho món khai vị sinh nhật của họ, bạn có thể phát hành truy vấn này:

  1. CREATE DATABASE `birthdays`;
6
  1. CREATE DATABASE `birthdays`;
7

Hàm

  1. mysql -u root -p
29 trả về giá trị trung bình (trung bình) của một cột. Sử dụng bảng ví dụ của chúng tôi, bạn có thể tìm thấy điểm trung bình tốt nhất trong số bạn bè của bạn với truy vấn này:

  1. CREATE DATABASE `birthdays`;
8
  1. CREATE DATABASE `birthdays`;
9

  1. mysql -u root -p
30 được sử dụng để tìm tổng số của một cột đã cho. Chẳng hạn, nếu bạn muốn xem có bao nhiêu trò chơi mà bạn và bạn bè của bạn đã cúi đầu trong nhiều năm qua, bạn có thể chạy truy vấn này:

  1. USE birthdays;
0
  1. USE birthdays;
1

Lưu ý rằng các hàm

  1. mysql -u root -p
29 và
  1. mysql -u root -p
30 sẽ chỉ hoạt động chính xác khi được sử dụng với dữ liệu số. Nếu bạn cố gắng sử dụng chúng trên dữ liệu phi hình số, nó sẽ dẫn đến lỗi hoặc chỉ
  1. mysql -u root -p
33, tùy thuộc vào RDBM mà bạn sử dụng:

  1. USE birthdays;
2
  1. USE birthdays;
3

  1. mysql -u root -p
34 được sử dụng để tìm giá trị nhỏ nhất trong một cột được chỉ định. Bạn có thể sử dụng truy vấn này để xem bản ghi bowling tổng thể tồi tệ nhất là gì (về số lượng chiến thắng):

  1. USE birthdays;
4
  1. USE birthdays;
5

Tương tự,

  1. mysql -u root -p
35 được sử dụng để tìm giá trị số lớn nhất trong một cột nhất định. Truy vấn sau đây sẽ hiển thị hồ sơ bowling tổng thể tốt nhất:

  1. USE birthdays;
6
  1. USE birthdays;
7

Không giống như

  1. mysql -u root -p
30 và
  1. mysql -u root -p
29, các hàm
  1. mysql -u root -p
34 và
  1. mysql -u root -p
35 có thể được sử dụng cho cả các loại dữ liệu số và chữ cái. Khi chạy trên một cột chứa các giá trị chuỗi, hàm
  1. mysql -u root -p
34 sẽ hiển thị giá trị đầu tiên theo thứ tự bảng chữ cái:

  1. USE birthdays;
8
  1. USE birthdays;
9

Tương tự như vậy, khi chạy trên một cột chứa các giá trị chuỗi, hàm

  1. mysql -u root -p
35 sẽ hiển thị giá trị cuối cùng theo thứ tự bảng chữ cái:

  1. CREATE TABLE tourneys (
  2. name varchar(30),
  3. wins real,
  4. best real,
  5. size real
  6. );
0
  1. CREATE TABLE tourneys (
  2. name varchar(30),
  3. wins real,
  4. best real,
  5. size real
  6. );
1

Các chức năng tổng hợp có nhiều cách sử dụng ngoài những gì được mô tả trong phần này. Chúng đặc biệt hữu ích khi được sử dụng với mệnh đề

  1. mysql -u root -p
42, được đề cập trong phần tiếp theo cùng với một số điều khoản truy vấn khác ảnh hưởng đến cách sắp xếp các bộ kết quả.

Thao tác đầu ra truy vấn

Ngoài các mệnh đề

Output

Query OK, 0 rows affected (0.01 sec)
2 và

Output

Query OK, 0 rows affected (0.01 sec)
8, có một số mệnh đề khác được sử dụng để thao tác kết quả của truy vấn

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
5. Trong phần này, chúng tôi sẽ giải thích và cung cấp các ví dụ cho một số điều khoản truy vấn được sử dụng phổ biến hơn.

Một trong những điều khoản truy vấn được sử dụng thường xuyên nhất, ngoài

Output

Query OK, 0 rows affected (0.01 sec)
2 và

Output

Query OK, 0 rows affected (0.01 sec)
8, là mệnh đề
  1. mysql -u root -p
42. Nó thường được sử dụng khi bạn thực hiện một hàm tổng hợp trên một cột, nhưng liên quan đến các giá trị khớp trong một cột khác.

Ví dụ, hãy để nói rằng bạn muốn biết có bao nhiêu người bạn của bạn thích mỗi ba người trong số ba món bạn làm. Bạn có thể tìm thấy thông tin này với truy vấn sau:

  1. CREATE TABLE tourneys (
  2. name varchar(30),
  3. wins real,
  4. best real,
  5. size real
  6. );
2
  1. CREATE TABLE tourneys (
  2. name varchar(30),
  3. wins real,
  4. best real,
  5. size real
  6. );
3

Điều khoản

  1. mysql -u root -p
49 được sử dụng để sắp xếp kết quả truy vấn. Theo mặc định, các giá trị số được sắp xếp theo thứ tự tăng dần và các giá trị văn bản được sắp xếp theo thứ tự bảng chữ cái. Để minh họa, các truy vấn sau đây liệt kê các cột

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
7 và
  1. CREATE TABLE dinners (
  2. name varchar(30),
  3. birthdate date,
  4. entree varchar(30),
  5. side varchar(30),
  6. dessert varchar(30)
  7. );
5, nhưng sắp xếp các kết quả theo ngày sinh:

  1. CREATE TABLE tourneys (
  2. name varchar(30),
  3. wins real,
  4. best real,
  5. size real
  6. );
4
  1. CREATE TABLE tourneys (
  2. name varchar(30),
  3. wins real,
  4. best real,
  5. size real
  6. );
5

Lưu ý rằng hành vi mặc định của

  1. mysql -u root -p
49 là sắp xếp kết quả được đặt theo thứ tự tăng dần. Để đảo ngược điều này và có kết quả được sắp xếp theo thứ tự giảm dần, hãy đóng truy vấn bằng
  1. mysql -u root -p
53:

  1. CREATE TABLE tourneys (
  2. name varchar(30),
  3. wins real,
  4. best real,
  5. size real
  6. );
6
  1. CREATE TABLE tourneys (
  2. name varchar(30),
  3. wins real,
  4. best real,
  5. size real
  6. );
7

Như đã đề cập trước đây, mệnh đề

Output

Query OK, 0 rows affected (0.01 sec)
8 được sử dụng để lọc kết quả dựa trên các điều kiện cụ thể. Tuy nhiên, nếu bạn sử dụng mệnh đề

Output

Query OK, 0 rows affected (0.01 sec)
8 với hàm tổng hợp, nó sẽ trả lại một lỗi, như trường hợp với nỗ lực sau đây để tìm bên nào là bên trong ít nhất ba người bạn của bạn:

  1. CREATE TABLE tourneys (
  2. name varchar(30),
  3. wins real,
  4. best real,
  5. size real
  6. );
8
  1. CREATE TABLE tourneys (
  2. name varchar(30),
  3. wins real,
  4. best real,
  5. size real
  6. );
9

Điều khoản

  1. mysql -u root -p
56 đã được thêm vào SQL để cung cấp chức năng tương tự như mệnh đề

Output

Query OK, 0 rows affected (0.01 sec)
8 trong khi cũng tương thích với các hàm tổng hợp. Thật hữu ích khi nghĩ về sự khác biệt giữa hai điều khoản này là

Output

Query OK, 0 rows affected (0.01 sec)
8 áp dụng cho các hồ sơ riêng lẻ, trong khi
  1. mysql -u root -p
56 áp dụng cho các hồ sơ nhóm. Để kết thúc này, bất cứ khi nào bạn đưa ra mệnh đề
  1. mysql -u root -p
56, mệnh đề
  1. mysql -u root -p
42 cũng phải có mặt.

Ví dụ sau đây là một nỗ lực khác để tìm ra món ăn phụ nào là yêu thích của ít nhất ba người bạn của bạn, mặc dù cái này sẽ trả về kết quả mà không có lỗi:

Output

Query OK, 0 rows affected (0.00 sec)
0

Output

Query OK, 0 rows affected (0.00 sec)
1

Các chức năng tổng hợp rất hữu ích để tóm tắt kết quả của một cột cụ thể trong một bảng nhất định. Tuy nhiên, có nhiều trường hợp cần thiết để truy vấn nội dung của nhiều hơn một bảng. Chúng tôi sẽ đi qua một vài cách bạn có thể làm điều này trong phần tiếp theo.

Truy vấn nhiều bảng

Thường xuyên hơn không, một cơ sở dữ liệu chứa nhiều bảng, mỗi bảng giữ các bộ dữ liệu khác nhau. SQL cung cấp một vài cách khác nhau để chạy một truy vấn duy nhất trên nhiều bảng.

Điều khoản

  1. mysql -u root -p
62 có thể được sử dụng để kết hợp các hàng từ hai hoặc nhiều bảng trong một kết quả truy vấn. Nó thực hiện điều này bằng cách tìm một cột liên quan giữa các bảng và sắp xếp các kết quả một cách thích hợp trong đầu ra.

Các câu lệnh bao gồm mệnh đề

  1. mysql -u root -p
62 thường tuân theo cú pháp này:

Output

Query OK, 0 rows affected (0.00 sec)
2

Lưu ý rằng vì các mệnh đề

  1. mysql -u root -p
62 so sánh nội dung của nhiều hơn một bảng, ví dụ trước đó chỉ định bảng nào để chọn từng cột từ trước tên của cột với tên của bảng và một khoảng thời gian. Bạn có thể chỉ định bảng nào một cột nên được chọn từ như thế này cho bất kỳ truy vấn nào, mặc dù nó không cần thiết khi chọn từ một bảng, như chúng tôi đã thực hiện trong các phần trước. Hãy cùng đi qua một ví dụ bằng cách sử dụng dữ liệu mẫu của chúng tôi.

Hãy tưởng tượng rằng bạn muốn mua mỗi người bạn của bạn một đôi giày bowling như một món quà sinh nhật. Bởi vì thông tin về bạn bè của bạn ngày sinh và kích thước giày được giữ trong các bảng riêng biệt, bạn có thể truy vấn cả hai bảng một cách riêng biệt sau đó so sánh kết quả từ mỗi bảng. Tuy nhiên, với một điều khoản

  1. mysql -u root -p
62, bạn có thể tìm thấy tất cả thông tin bạn muốn với một truy vấn duy nhất:

Output

Query OK, 0 rows affected (0.00 sec)
3

Output

Query OK, 0 rows affected (0.00 sec)
4

Mệnh đề

  1. mysql -u root -p
62 được sử dụng trong ví dụ này, không có bất kỳ đối số nào khác, là một mệnh đề
  1. mysql -u root -p
62 bên trong. Điều này có nghĩa là nó chọn tất cả các bản ghi có giá trị phù hợp trong cả hai bảng và in chúng vào bộ kết quả, trong khi bất kỳ bản ghi nào không phù hợp đều được loại trừ. Để minh họa cho ý tưởng này, hãy để thêm một hàng mới vào mỗi bảng không có mục nhập tương ứng khác:

Output

Query OK, 0 rows affected (0.00 sec)
5

Output

Query OK, 0 rows affected (0.00 sec)
6

Sau đó, chạy lại câu lệnh

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
5 trước đó với mệnh đề
  1. mysql -u root -p
62:

Output

Query OK, 0 rows affected (0.00 sec)
3

Output

Query OK, 0 rows affected (0.00 sec)
4

Lưu ý rằng, vì bảng

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
6 không có mục nhập cho Lesley và bảng
  1. CREATE TABLE dinners (
  2. name varchar(30),
  3. birthdate date,
  4. entree varchar(30),
  5. side varchar(30),
  6. dessert varchar(30)
  7. );
3 không có mục nhập cho Bettye, những hồ sơ đó không có trong đầu ra này.

Mặc dù vậy, có thể trả lại tất cả các bản ghi từ một trong các bảng sử dụng mệnh đề

  1. mysql -u root -p
62 bên ngoài. Trong MySQL, các mệnh đề
  1. mysql -u root -p
62 được viết là
  1. mysql -u root -p
75 hoặc
  1. mysql -u root -p
76.

Một điều khoản

  1. mysql -u root -p
75 trả về tất cả các bản ghi từ bảng bên trái bên trái và chỉ các bản ghi phù hợp từ bảng bên phải. Trong bối cảnh của các kết nối bên ngoài, bảng bên trái là bảng được tham chiếu bởi mệnh đề

Output

Query OK, 0 rows affected (0.01 sec)
2 và bảng bên phải là bất kỳ bảng nào khác được tham chiếu sau câu lệnh
  1. mysql -u root -p
62.

Chạy lại truy vấn trước đó, nhưng lần này sử dụng mệnh đề

  1. mysql -u root -p
75:

Output

Query OK, 0 rows affected (0.00 sec)
9

Lệnh này sẽ trả về mọi bản ghi từ bảng bên trái (trong trường hợp này là

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
6) ngay cả khi nó không có bản ghi tương ứng trong bảng bên phải. Bất cứ khi nào có một bản ghi phù hợp từ bảng phù hợp, nó đã được trả lại dưới dạng
  1. mysql -u root -p
12 hoặc chỉ là một giá trị trống, tùy thuộc vào RDBMS của bạn:

  1. INSERT INTO tourneys (name, wins, best, size)
  2. VALUES ('Dolly', '7', '245', '8.5'),
  3. ('Etta', '4', '283', '9'),
  4. ('Irma', '9', '266', '7'),
  5. ('Barbara', '2', '197', '7.5'),
  6. ('Gladys', '13', '273', '8');
0

Bây giờ hãy chạy lại truy vấn, lần này với mệnh đề

  1. mysql -u root -p
76:

  1. INSERT INTO tourneys (name, wins, best, size)
  2. VALUES ('Dolly', '7', '245', '8.5'),
  3. ('Etta', '4', '283', '9'),
  4. ('Irma', '9', '266', '7'),
  5. ('Barbara', '2', '197', '7.5'),
  6. ('Gladys', '13', '273', '8');
1

Điều này sẽ trả về tất cả các bản ghi từ bảng bên phải (

  1. CREATE TABLE dinners (
  2. name varchar(30),
  3. birthdate date,
  4. entree varchar(30),
  5. side varchar(30),
  6. dessert varchar(30)
  7. );
3). Bởi vì ngày sinh của Lesley, được ghi lại trong bảng bên phải, nhưng không có hàng tương ứng nào cho cô ấy trong bảng bên trái, các cột

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
7 và
  1. CREATE TABLE dinners (
  2. name varchar(30),
  3. birthdate date,
  4. entree varchar(30),
  5. side varchar(30),
  6. dessert varchar(30)
  7. );
0 sẽ trở lại như các giá trị
  1. mysql -u root -p
12 trong hàng đó:

  1. INSERT INTO tourneys (name, wins, best, size)
  2. VALUES ('Dolly', '7', '245', '8.5'),
  3. ('Etta', '4', '283', '9'),
  4. ('Irma', '9', '266', '7'),
  5. ('Barbara', '2', '197', '7.5'),
  6. ('Gladys', '13', '273', '8');
2

Lưu ý rằng các kết nối trái và phải có thể được viết là

  1. mysql -u root -p
88 hoặc
  1. mysql -u root -p
89, mặc dù phần
  1. mysql -u root -p
90 của mệnh đề được ngụ ý. Tương tự như vậy, chỉ định
  1. mysql -u root -p
91 sẽ tạo ra kết quả tương tự như chỉ viết
  1. mysql -u root -p
62.

Thay thế cho việc sử dụng

  1. mysql -u root -p
62 để truy vấn các bản ghi từ nhiều bảng, bạn có thể sử dụng mệnh đề
  1. mysql -u root -p
94.

Toán tử

  1. mysql -u root -p
94 hoạt động hơi khác so với mệnh đề
  1. mysql -u root -p
62: Thay vì in kết quả từ nhiều bảng dưới dạng các cột duy nhất sử dụng một câu lệnh

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
5,
  1. mysql -u root -p
94 kết hợp kết quả của hai câu lệnh

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
5 vào một cột duy nhất.

Để minh họa, hãy chạy truy vấn sau:

  1. INSERT INTO tourneys (name, wins, best, size)
  2. VALUES ('Dolly', '7', '245', '8.5'),
  3. ('Etta', '4', '283', '9'),
  4. ('Irma', '9', '266', '7'),
  5. ('Barbara', '2', '197', '7.5'),
  6. ('Gladys', '13', '273', '8');
3

Truy vấn này sẽ xóa bất kỳ mục trùng lặp nào, đó là hành vi mặc định của toán tử

  1. mysql -u root -p
94:

  1. INSERT INTO tourneys (name, wins, best, size)
  2. VALUES ('Dolly', '7', '245', '8.5'),
  3. ('Etta', '4', '283', '9'),
  4. ('Irma', '9', '266', '7'),
  5. ('Barbara', '2', '197', '7.5'),
  6. ('Gladys', '13', '273', '8');
4

Để trả về tất cả các mục (bao gồm cả bản sao), hãy sử dụng toán tử

  1. CREATE DATABASE `birthdays`;
01:

  1. INSERT INTO tourneys (name, wins, best, size)
  2. VALUES ('Dolly', '7', '245', '8.5'),
  3. ('Etta', '4', '283', '9'),
  4. ('Irma', '9', '266', '7'),
  5. ('Barbara', '2', '197', '7.5'),
  6. ('Gladys', '13', '273', '8');
5
  1. INSERT INTO tourneys (name, wins, best, size)
  2. VALUES ('Dolly', '7', '245', '8.5'),
  3. ('Etta', '4', '283', '9'),
  4. ('Irma', '9', '266', '7'),
  5. ('Barbara', '2', '197', '7.5'),
  6. ('Gladys', '13', '273', '8');
6

Tên và số lượng của các cột trong bảng kết quả phản ánh tên và số lượng cột được truy vấn bởi câu lệnh

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
5 đầu tiên. Lưu ý rằng khi sử dụng
  1. mysql -u root -p
94 để truy vấn nhiều cột từ nhiều bảng, mỗi câu lệnh

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
5 phải truy vấn cùng một số cột, các cột tương ứng phải có các loại dữ liệu tương tự và các cột trong mỗi câu lệnh

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
5 phải theo cùng một thứ tự. Ví dụ sau đây cho thấy những gì có thể dẫn đến nếu bạn sử dụng mệnh đề
  1. mysql -u root -p
94 trên hai câu lệnh

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
5 truy vấn một số cột khác nhau:

  1. INSERT INTO tourneys (name, wins, best, size)
  2. VALUES ('Dolly', '7', '245', '8.5'),
  3. ('Etta', '4', '283', '9'),
  4. ('Irma', '9', '266', '7'),
  5. ('Barbara', '2', '197', '7.5'),
  6. ('Gladys', '13', '273', '8');
7
  1. INSERT INTO tourneys (name, wins, best, size)
  2. VALUES ('Dolly', '7', '245', '8.5'),
  3. ('Etta', '4', '283', '9'),
  4. ('Irma', '9', '266', '7'),
  5. ('Barbara', '2', '197', '7.5'),
  6. ('Gladys', '13', '273', '8');
8

Một cách khác để truy vấn nhiều bảng là thông qua việc sử dụng các nhóm con. Các nhóm con (còn được gọi là truy vấn bên trong hoặc lồng nhau) là các truy vấn được đặt trong một truy vấn khác. Chúng rất hữu ích trong các trường hợp mà bạn đang cố gắng lọc kết quả của một truy vấn chống lại kết quả của một hàm tổng hợp riêng biệt.

Để minh họa ý tưởng này, giả sử bạn muốn biết bạn bè nào đã thắng nhiều trận đấu hơn Barbara. Thay vì truy vấn có bao nhiêu trận đấu mà Barbara đã thắng sau đó chạy một truy vấn khác để xem ai đã thắng nhiều trò chơi hơn thế, bạn có thể tính toán cả hai bằng một truy vấn duy nhất:

  1. INSERT INTO tourneys (name, wins, best, size)
  2. VALUES ('Dolly', '7', '245', '8.5'),
  3. ('Etta', '4', '283', '9'),
  4. ('Irma', '9', '266', '7'),
  5. ('Barbara', '2', '197', '7.5'),
  6. ('Gladys', '13', '273', '8');
9

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
0

Các truy vấn con trong tuyên bố này chỉ được chạy một lần; Nó chỉ cần tìm giá trị từ cột

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
8 trong cùng một hàng với
  1. CREATE DATABASE `birthdays`;
09 trong cột

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
7 và dữ liệu được trả về bởi truy vấn phụ và truy vấn bên ngoài độc lập với nhau. Tuy nhiên, có những trường hợp, trong đó truy vấn bên ngoài trước tiên phải đọc từng hàng trong bảng và so sánh các giá trị đó với dữ liệu được trả về bởi trình điều khiển con để trả về dữ liệu mong muốn. Trong trường hợp này, trình điều khiển con được gọi là một trình điều khiển tương quan.

Tuyên bố sau đây là một ví dụ về một truy vấn con tương quan. Truy vấn này tìm cách tìm bạn bè nào của bạn đã thắng nhiều trò chơi hơn mức trung bình cho những người có cùng kích thước giày:

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
1

Để truy vấn hoàn thành, trước tiên nó phải thu thập các cột

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
7 và
  1. CREATE TABLE dinners (
  2. name varchar(30),
  3. birthdate date,
  4. entree varchar(30),
  5. side varchar(30),
  6. dessert varchar(30)
  7. );
0 từ truy vấn bên ngoài. Sau đó, nó so sánh từng hàng từ kết quả đó được đặt so với kết quả của truy vấn bên trong, xác định số lượng chiến thắng trung bình cho các cá nhân có kích thước giày giống hệt nhau. Bởi vì bạn chỉ có hai người bạn có cùng kích thước giày, nên chỉ có thể có một hàng trong tập kết quả:

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
2

Như đã đề cập trước đó, các nhóm con có thể được sử dụng để truy vấn kết quả từ nhiều bảng. Để minh họa điều này với một ví dụ cuối cùng, giả sử bạn muốn ném một bữa tối bất ngờ cho nhóm Bowler tốt nhất mọi thời đại. Bạn có thể tìm thấy bạn bè nào có hồ sơ bowling tốt nhất và trả lại bữa ăn yêu thích của họ với truy vấn sau:

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
3

Output

Query OK, 5 rows affected (0.01 sec) Records: 5 Duplicates: 0 Warnings: 0
4

Lưu ý rằng câu lệnh này không chỉ bao gồm một truy vấn con, mà còn chứa một truy vấn con trong trình điều khiển con đó.

Sự kết luận

Phát hành truy vấn là một trong những nhiệm vụ được thực hiện phổ biến nhất trong lĩnh vực quản lý cơ sở dữ liệu. Có một số công cụ quản trị cơ sở dữ liệu, chẳng hạn như phpmyadmin hoặc pgadmin, cho phép bạn thực hiện các truy vấn và trực quan hóa kết quả, nhưng đưa ra các câu lệnh ____75 từ dòng lệnh vẫn là một quy trình công việc được thực hiện rộng rãi cũng có thể cung cấp cho bạn quyền kiểm soát lớn hơn.

Nếu bạn mới làm việc với SQL, chúng tôi khuyến khích bạn sử dụng bảng cheat SQL của chúng tôi làm tài liệu tham khảo và xem xét tài liệu chính thức của MySQL. Ngoài ra, nếu bạn muốn tìm hiểu thêm về SQL và cơ sở dữ liệu quan hệ, các hướng dẫn sau đây có thể được bạn quan tâm:

  • Hiểu cơ sở dữ liệu SQL và NOQL và các mô hình cơ sở dữ liệu khác nhau
  • Cách tạo cụm MySQL đa nút trên Ubuntu 18.04
  • Cách đặt lại mật khẩu gốc mysql hoặc mariadb của bạn trên Ubuntu 18.04

Các truy vấn MySQL là gì?

Trong các hệ thống quản lý cơ sở dữ liệu quan hệ, một truy vấn là bất kỳ lệnh nào được sử dụng để truy xuất dữ liệu từ bảng. Trong ngôn ngữ truy vấn có cấu trúc (SQL), các truy vấn hầu như luôn được thực hiện bằng cách sử dụng câu lệnh select.any command used to retrieve data from a table. In Structured Query Language (SQL), queries are almost always made using the SELECT statement.

Các truy vấn của cơ sở dữ liệu là gì?

Truy vấn có thể là yêu cầu kết quả dữ liệu từ cơ sở dữ liệu của bạn hoặc hành động trên dữ liệu hoặc cho cả hai. Truy vấn có thể cung cấp cho bạn câu trả lời cho một câu hỏi đơn giản, thực hiện các tính toán, kết hợp dữ liệu từ các bảng khác nhau, thêm, thay đổi hoặc xóa dữ liệu khỏi cơ sở dữ liệu.a request for data results from your database or for action on the data, or for both. A query can give you an answer to a simple question, perform calculations, combine data from different tables, add, change, or delete data from a database.

5 truy vấn SQL cơ bản là gì?

Một số lệnh SQL quan trọng nhất..
Chọn - Trích xuất dữ liệu từ cơ sở dữ liệu ..
Cập nhật - Cập nhật dữ liệu trong cơ sở dữ liệu ..
Xóa - Xóa dữ liệu khỏi cơ sở dữ liệu ..
Chèn vào - Chèn dữ liệu mới vào cơ sở dữ liệu ..
Tạo cơ sở dữ liệu - Tạo cơ sở dữ liệu mới ..
Thay đổi cơ sở dữ liệu - sửa đổi cơ sở dữ liệu ..
Tạo bảng - Tạo một bảng mới ..

4 loại truy vấn cơ bản trong cơ sở dữ liệu là gì?

Trong bài viết này, chúng tôi sẽ giải thích truy vấn cơ sở dữ liệu là gì, các cách khác nhau bạn có thể thực hiện một và các loại truy vấn khác nhau mà bạn có thể sử dụng để cải thiện các quy trình của mình và tận dụng tối đa dữ liệu của mình ...
MySQL..
Oracle SQL ..
NuoDB..