Máy chủ Mysql chọn truy vấn

Bài viết này là một phần trong loạt bài tiếp theo của Robert Sheldon về Học MySQL. Để xem tất cả 11 mục trong sê-ri, hãy nhấp vào đây

Cho đến thời điểm này trong loạt bài này, tôi chủ yếu tập trung vào việc tạo các đối tượng lược đồ trong cơ sở dữ liệu MySQL. Các câu lệnh SQL được sử dụng để tạo các đối tượng này thường được phân loại là ngôn ngữ định nghĩa dữ liệu [DDL]. Chúng bao gồm các câu như CREATE TABLE, CREATE VIEW, và CREATE PROCEDURE

Bắt đầu với bài viết này, tôi đang chuyển sự chú ý của mình sang ngôn ngữ thao tác dữ liệu [DML], bao gồm các câu lệnh được sử dụng để truy vấn và sửa đổi dữ liệu. Bốn trong số các câu lệnh DML phổ biến nhất là SELECT, INSERT, UPDATEDELETE. Bạn có thể sử dụng câu lệnh SELECT để truy xuất dữ liệu, câu lệnh INSERT để thêm dữ liệu, câu lệnh UPDATE để sửa đổi dữ liệu và câu lệnh DELETE để xóa dữ liệu

Trong bài viết này, tôi tập trung vào câu lệnh SELECT, được sử dụng nhiều khi làm việc với cơ sở dữ liệu quan hệ. Bạn có thể sử dụng câu lệnh SELECT để trả về dữ liệu từ một hoặc nhiều bảng MySQL, cũng như để truy xuất thông tin về máy chủ và môi trường cơ sở dữ liệu. Câu lệnh SELECT là một trong những câu lệnh SQL được sử dụng phổ biến nhất trong MySQL. Nó cũng là một trong những phức tạp nhất

Bạn đã biết về câu lệnh SELECT trong các bài viết trước của loạt bài này, nhưng nó chỉ được đưa vào để hỗ trợ các ví dụ DDL trong các bài viết đó. Bài viết này chỉ tập trung vào câu lệnh SELECT và các yếu tố cơ bản để xây dựng một câu lệnh. Tôi sẽ đề cập đến các câu lệnh DML khác sau trong loạt bài này

Chuẩn bị môi trường MySQL của bạn

Đối với các ví dụ trong bài viết này, tôi đã sử dụng cùng một cơ sở dữ liệu [_______1_______9] mà bạn đã thấy trong các bài viết trước và hai bảng giống nhau [CREATE0 và CREATE1]. Tuy nhiên, tôi đã thêm nhiều dữ liệu hơn vào khoảng thời gian này. Nếu muốn tự mình thử các ví dụ, bạn có thể tải xuống tệp MySQL_06_setup và chạy nó với phiên bản MySQL của bạn. SQL trong tệp tạo cơ sở dữ liệu, thêm hai bảng và chèn dữ liệu vào cả hai bảng

Để thuận tiện cho bạn, tôi đã bao gồm hai định nghĩa bảng ở đây để bạn có thể tham khảo chúng khi thử các câu lệnh SELECT trong các ví dụ sau của bài viết

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

TẠO BẢNG nhà sản xuất [

  manufacturer_id INT CHƯA KÝ KHÔNG NULL AUTO_INCREMENT,

  nhà sản xuất VARCHAR[50] NOT NULL,

  create_date DẤU THỜI GIAN NOT NULL DEFAULT CURRENT_TIMESTAMP,

  last_update DẤU THỜI GIAN NOT NULL

    MẶC ĐỊNH CURRENT_TIMESTAMP BẬT CẬP NHẬT CURRENT_TIMESTAMP,

  CHÍNH CHÍNH KEY [manufacturer_id] ]

ENGINE=InnoDB AUTO_INCREMENT=1001;

TẠO BẢNG máy bay [

  plane_id INT KHÔNG ĐƯỢC KÝ KHÔNG NULL AUTO_INCREMENT,

  máy bay VARCHAR[50] NOT NULL,

  manufacturer_id INT CHƯA KÝ KHÔNG NULL,

  engine_type VARCHAR[50] NOT NULL,

  engine_count TINYINT NOT NULL,

  max_weight VỪA KHÔNG ĐƯỢC KÝ KHÔNG NULL,

  sải cánh THẬP PHÂN[5,2] NOT NULL,

  plane_length DECIMAL[5,2] NOT NULL,

  parking_area INT ĐƯỢC TẠO LUÔN LUÔN AS [[wingspan * plane_length]] STORED,

  icao_code CHAR[4] NOT NULL,

  create_date DẤU THỜI GIAN NOT NULL DEFAULT CURRENT_TIMESTAMP,

  last_update DẤU THỜI GIAN NOT NULL

    MẶC ĐỊNH CURRENT_TIMESTAMP BẬT CẬP NHẬT CURRENT_TIMESTAMP,

  CHÍNH CHÍNH KEY [plane_id],

  HÀNG CHẾ fk_manufacturer_id FOREIGN KEY [manufacturer_id]

    TÀI LIỆU THAM KHẢO nhà sản xuất [manufacturer_id] ]

ENGINE=InnoDB AUTO_INCREMENT=101;

Nếu bạn đã có cơ sở dữ liệu và bảng trên phiên bản MySQL của mình và không muốn tạo lại chúng, bạn chỉ có thể chạy các câu lệnh INSERT trong MySQL_06_setup. tập lệnh sql. Tuy nhiên, trước tiên bạn nên xóa mọi dữ liệu trong bảng vì dữ liệu được thêm vào bảng CREATE1 tham chiếu đến các giá trị cụ thể trong bảng CREATE0. Bắt đầu với các bảng trống cũng sẽ đảm bảo rằng bạn đang thấy kết quả giống như trong ví dụ của tôi. Khi bạn chạy các câu lệnh INSERT, hãy đảm bảo thực hiện chúng theo thứ tự được chỉ định trong tệp

Cú pháp câu lệnh CREATE7

Câu lệnh MySQL SELECT thường được sử dụng để truy xuất dữ liệu từ một bảng hoặc từ nhiều bảng. Câu lệnh được tạo thành từ một hoặc nhiều mệnh đề cùng nhau cung cấp logic cần thiết để truy xuất dữ liệu cần thiết. Cú pháp của câu lệnh khá phức tạp, nhưng để giúp bạn bắt đầu, tôi đã thu hẹp nó xuống các yếu tố cơ bản nhất

1

2

3

4

5

6

CHỌN [TẤT CẢ . PHÂN BIỆT] select_list

[TỪ table_ref]

[WHERE where_condition]

[GROUP BY group_list]

[ có_điều kiện]

[ĐẶT HÀNG BỞI order_list]

Năm mệnh đề được hiển thị trong cú pháp rất linh hoạt và có thể được sử dụng để xây dựng nhiều loại câu lệnh

  • Mệnh đề SELECT là mệnh đề bắt buộc duy nhất trong câu lệnh SELECT. Mệnh đề thường chỉ định các cột để truy xuất dữ liệu từ bảng hoặc nhiều bảng mục tiêu, nhưng nó cũng có thể được sử dụng để trả về kết quả của một biểu thức, chẳng hạn như hàm hệ thống hoặc phép tính
  • Mệnh đề VIEW1 chỉ định bảng mục tiêu hoặc các bảng để truy xuất dữ liệu. Nếu bạn chỉ định nhiều bảng, bạn đang thực hiện nối
  • Mệnh đề VIEW2 hoạt động như một bộ lọc giới hạn các hàng được trả về bởi truy vấn. Mệnh đề xác định một hoặc nhiều điều kiện tìm kiếm phải được đánh giá là đúng đối với một hàng được trả về. Nhiều điều kiện tìm kiếm được liên kết với nhau bằng các toán tử logic xác định cách áp dụng các điều kiện đó
  • Mệnh đề VIEW3 VIEW4 nhóm dữ liệu dựa trên một hoặc nhiều biểu thức được chỉ định, thường là các cột trong bảng mục tiêu
  • Mệnh đề VIEW5 tương tự như mệnh đề VIEW2 vì nó xác định một hoặc nhiều điều kiện tìm kiếm giới hạn kết quả. Tuy nhiên, mệnh đề VIEW5 dành riêng cho dữ liệu được nhóm và được xử lý sau mệnh đề VIEW3 VIEW9
  • Mệnh đề CREATE0 VIEW4 sắp xếp dữ liệu dựa trên một hoặc nhiều biểu thức được chỉ định, thường là các cột trong bảng mục tiêu

Có một số mệnh đề và tùy chọn khác mà tôi chưa đưa vào đây và chúng cũng rất quan trọng để hiểu, nhưng hiện tại, năm mệnh đề này cung cấp một điểm khởi đầu tốt để học cách sử dụng câu lệnh SELECT để truy vấn cơ sở dữ liệu

Mệnh đề CREATE7

Ở mức tối thiểu, mệnh đề SELECT yêu cầu từ khóa SELECT và danh sách lựa chọn, được tạo thành từ một hoặc nhiều biểu thức. Một biểu thức có thể là tên cột, phép tính, hàm, truy vấn con, giá trị bằng chữ hoặc cấu trúc khác. Danh sách lựa chọn thường bao gồm các cột từ các bảng được tham chiếu trong mệnh đề VIEW1 [nếu có một bảng]

Không giống như các mệnh đề khác trong câu lệnh SELECT, mệnh đề SELECT có thể tự đứng để tạo ra một câu lệnh rất đơn giản. Ví dụ: câu lệnh SELECT sau chỉ bao gồm mệnh đề SELECT và danh sách lựa chọn trong mệnh đề đó chỉ bao gồm một biểu thức

1

CHỌN CURRENT_TIMESTAMP;

Trong trường hợp này, biểu thức là hàm PROCEDURE1, trả về ngày và giờ hiện tại. Nếu bạn chạy câu lệnh này, MySQL sẽ trả về một giá trị chứa cả ngày và giờ ở định dạng phụ thuộc vào cài đặt máy chủ và vị trí của bạn. Ví dụ: khi tôi chạy câu lệnh, tôi nhận được kết quả sau

1

2022-06-03 15:03. 13

Như bạn có thể thấy, một câu lệnh SELECT có thể khá cơ bản, miễn là nó bao gồm mệnh đề SELECT và một danh sách lựa chọn có ít nhất một biểu thức

Mệnh đề PROCEDURE4

Mệnh đề VIEW1 tham chiếu đến bảng hoặc các bảng chứa dữ liệu nguồn. Mặc dù nó là một mệnh đề tùy chọn, nhưng hầu hết các câu lệnh SELECT đều bao gồm mệnh đề VIEW1. Nếu bạn đang nhắm mục tiêu chỉ một bảng, bạn chỉ cần chỉ định từ khóa VIEW1, theo sau là tên bảng. Ví dụ: câu lệnh SELECT sau đây chỉ truy xuất dữ liệu từ bảng CREATE1

1

CHỌN * TỪ máy bay;

Lưu ý rằng mệnh đề SELECT chỉ xác định dấu hoa thị cho danh sách chọn. Trong MySQL, giống như nhiều hệ thống cơ sở dữ liệu quan hệ, bạn có thể sử dụng dấu hoa thị để chỉ ra rằng tất cả các cột sẽ được trả về từ bảng hoặc các bảng được tham chiếu trong mệnh đề VIEW1, trong trường hợp này, chỉ trỏ tới bảng CREATE1. Hình 1 cho thấy một phần kết quả được trả về bởi câu lệnh này. Tổng cộng, truy vấn sẽ trả về 241 hàng

Hình 1. Truy xuất tất cả các hàng và cột từ bảng CREATE1

Câu lệnh SELECT trong ví dụ trước thể hiện cấu trúc cơ bản cần thiết để trả về tất cả các hàng và cột từ một bảng. Tuy nhiên, bạn có thể thu hẹp mệnh đề SELECT của mình bằng cách chỉ định các cột chính xác để trả về. Ví dụ, câu lệnh SELECT sau đây trả về các cột SELECT8, SELECT9 và INSERT0 từ bảng CREATE1

1

2

CHỌN máy bay, loại_động cơ, engine_count

TỪ máy bay;

Lưu ý rằng các biểu thức [tên cột] trong danh sách lựa chọn được phân tách bằng dấu phẩy, nhưng không có dấu phẩy sau chính mệnh đề SELECT. Câu lệnh SELECT vẫn trả về 241 hàng từ bảng CREATE1;

Hình 2. Truy xuất các cột cụ thể từ bảng CREATE1

Bạn có thể tinh chỉnh danh sách lựa chọn của mình hơn nữa khi truy xuất dữ liệu từ bảng mục tiêu. Ví dụ: danh sách chọn trong câu lệnh SELECT sau đây sử dụng hàm hệ thống INSERT7 để làm tròn giá trị INSERT8 thành số nguyên gần nhất

1

2

CHỌN mặt phẳng, VÒNG[wingspan] AS wingspan_rnd

TỪ máy bay;

Cột INSERT8 được chuyển vào làm đối số cho hàm INSERT7, theo sau là từ khóa UPDATE1 và sau đó là bí danh UPDATE2. Bí danh được gán cho cột đầu ra được tạo bởi hàm INSERT7, như trong Hình 3. Khi chỉ định bí danh cột, bạn có thể bỏ qua từ khóa UPDATE1, nhưng có thể hữu ích nếu giữ lại cho rõ ràng

Hình 3. Sử dụng hàm hệ thống trong biểu thức chọn

Câu lệnh SELECT vẫn trả về 241 hàng từ bảng CREATE1, nhưng bây giờ nó chỉ bao gồm các cột SELECT8 và UPDATE2. Như bạn có thể thấy từ các ví dụ trong phần này, mệnh đề SELECT hoạt động song song với mệnh đề VIEW1 trong việc xác định dữ liệu cột nào cần trả về. Tuy nhiên, bản thân mệnh đề VIEW1 vẫn không thay đổi trong tất cả các ví dụ này. Khi một mệnh đề VIEW1 được bao gồm trong một câu lệnh SELECT, nó đóng vai trò là nền tảng để xây dựng phần còn lại của câu lệnh SELECT

Mệnh đề DELETE5

Trong phần trước, bạn đã thấy cách sử dụng mệnh đề SELECT để giới hạn các cột được trả về từ bảng được chỉ định trong mệnh đề VIEW1. Mệnh đề VIEW2 tương tự về mặt này, ngoại trừ việc nó được sử dụng để giới hạn các hàng được trả về từ bảng mục tiêu

Khi xác định mệnh đề VIEW2, bạn cần chỉ định ít nhất một điều kiện tìm kiếm, điều kiện này phải có giá trị đúng đối với một hàng được trả về. Ví dụ: câu lệnh SELECT sau bao gồm mệnh đề VIEW2 giới hạn các hàng được trả về ở những hàng có giá trị SELECT9 bằng với TABLE03

1

2

3

CHỌN mặt phẳng, VÒNG[wingspan] AS wingspan_rnd

TỪ máy bay

WHERE engine_type = 'turboprop'; 1000 max_weight > 10000

ĐẶT HÀNG BỞI a. parking_area DESC, m. nhà sản xuất, a. máy bay;

Câu lệnh này tạo ra một liên kết bên trong, như được chỉ ra bởi các từ khóa TABLE62 TABLE63 trong mệnh đề VIEW1 [ở giữa hai tên bảng]. Mệnh đề VIEW1 cũng bao gồm mệnh đề phụ TABLE66, quy định rằng giá trị TABLE61 trong bảng CREATE0 phải bằng giá trị TABLE61 trong bảng CREATE1

Bởi vì đây là phép nối bên trong, MySQL sẽ tìm tất cả các hàng có giá trị TABLE61 phù hợp. Bạn phải đảm bảo rằng các tham chiếu cột của bạn trong bất kỳ mệnh đề câu lệnh SELECT nào không mơ hồ theo bất kỳ cách nào, điều này có thể xảy ra nếu hai bảng chứa các cột có cùng tên, như trong TABLE61. Điều này bao gồm chính mệnh đề VIEW1

Cách dễ nhất để giải quyết bất kỳ sự mơ hồ nào là gán bí danh cho tên bảng và sau đó sử dụng các bí danh đó khi tham chiếu các cột trong phần còn lại của câu lệnh. Ví dụ: mệnh đề VIEW1 gán bí danh TABLE76 cho CREATE1, vì vậy tất cả các tham chiếu cột được đặt trước một ____1_______76, theo sau là dấu chấm và sau đó là tên cột

Hình 9 cho thấy một phần kết quả được trả về bởi câu lệnh SELECT, bao gồm tất cả 152 hàng

Hình 9. Tạo liên kết bên trong giữa hai bảng

Có nhiều thứ để tham gia hơn những gì tôi đã chỉ cho bạn ở đây, nhưng điều này ít nhất sẽ cho bạn cảm giác về cách chúng hoạt động cho đến khi chúng ta có thể dành nhiều thời gian hơn cho chúng. Trong thời gian chờ đợi, bạn có thể muốn xem tài liệu về MySQL khi tham gia. Thông tin có thể hơi khó để lướt qua, nhưng nó có thể giúp bạn hiểu rõ hơn về cách thức hoạt động của chúng

Mệnh đề TABLE80 TABLE29

Một mệnh đề quan trọng khác trong câu lệnh SELECTVIEW3 VIEW4, cho phép nhóm và tổng hợp dữ liệu trong các bảng mục tiêu. Mệnh đề yêu cầu ít nhất một biểu thức ngoài các từ khóa VIEW3 VIEW4. Biểu thức thường là một trong các cột trong bảng đích. Ví dụ: câu lệnh SELECT sau bao gồm mệnh đề VIEW3 VIEW4 nhóm dữ liệu dựa trên cột TABLE61 trong bảng CREATE0

1

2

3

4

5

6

CHỌN m. nhà sản xuất, ĐẾM[*] AS plane_cnt

TỪ máy bay a INNER THAM GIA manufacturers m

  BẬT a. manufacturer_id = m. nhà sản xuất_id

WHERE max_weight

Chủ Đề