Làm cách nào để sử dụng vòng lặp trong truy vấn MySQL SELECT?

Nếu bạn đã từng muốn tìm hiểu cách viết con trỏ MySQL hoặc vòng lặp MySQL, bạn đã đến đúng nơi. Hãy lặp đi lặp lại

một năm trước   •   4 phút đọc

Làm cách nào để sử dụng vòng lặp trong truy vấn MySQL SELECT?
Bởi Oluwatomisin Bamimore

Làm cách nào để sử dụng vòng lặp trong truy vấn MySQL SELECT?
Sử dụng con trỏ và vòng lặp for trong Arctype có thể giúp bạn tận dụng tối đa khả năng nhập SQL của mình

Mục lục

Nếu bạn đã từng muốn tìm hiểu cách viết con trỏ MySQL hoặc vòng lặp MySQL, bạn đã đến đúng nơi. Hãy lặp đi lặp lại

Xem xét các vòng lặp trong lập trình chung. Chúng giúp bạn thực hiện lặp đi lặp lại một chuỗi lệnh cụ thể cho đến khi một điều kiện cụ thể phá vỡ vòng lặp. MySQL cũng cung cấp một cách để thực hiện các lệnh trên các hàng riêng lẻ bằng cách sử dụng con trỏ. Các con trỏ trong MySQL sẽ thực thi một tập hợp các hướng dẫn trên các hàng được trả về từ các truy vấn SQL

Thuộc tính của con trỏ MySQL

  • Không thể cuộn. Bạn chỉ có thể lặp qua các hàng theo một hướng. Bạn không thể bỏ qua một hàng;
  • Chỉ đọc. Bạn không thể cập nhật hoặc xóa hàng bằng con trỏ
  • nhạy cảm. Con trỏ MySQL trỏ đến dữ liệu cơ bản. Nó chạy nhanh hơn một con trỏ không nhạy. Con trỏ không nhạy trỏ đến ảnh chụp nhanh của dữ liệu cơ bản, làm cho dữ liệu chậm hơn so với con trỏ không nhạy
Tạo một con trỏ MySQL

Để tạo một con trỏ MySQL, bạn sẽ cần làm việc với các câu lệnh

DECLARE  CURSOR FOR 
0,
DECLARE  CURSOR FOR 
1,
DECLARE  CURSOR FOR 
2 và
DECLARE  CURSOR FOR 
3

Tuyên bố tuyên bố

Câu lệnh

DECLARE  CURSOR FOR 
0 có thể khai báo biến, con trỏ và trình xử lý. Có một chuỗi các khai báo cần được tuân thủ

  • Biến
  • con trỏ
  • xử lý

Trước tiên, bạn phải khai báo ít nhất một biến để sử dụng sau này với câu lệnh

DECLARE  CURSOR FOR 
2 sau này

DECLARE   
Khai báo một biến

Khi khai báo (các) con trỏ phải kèm theo câu lệnh

DECLARE  CURSOR FOR 
6. Bất kỳ câu lệnh
DECLARE  CURSOR FOR 
6 hợp lệ nào cũng sẽ hoạt động. Bạn cũng phải khai báo ít nhất một con trỏ

DECLARE  CURSOR FOR 
Khai báo con trỏ cho câu lệnh
DECLARE  CURSOR FOR 
6

Bạn cũng phải khai báo một trình xử lý

DECLARE  CURSOR FOR 
9. Khi con trỏ lặp lại và đến hàng cuối cùng, nó sẽ đưa ra một điều kiện sẽ được xử lý bằng trình xử lý
DECLARE  CURSOR FOR 
9. Bạn cũng có thể khai báo các trình xử lý khác tùy theo nhu cầu của bạn. Ví dụ

DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;
Sử dụng trình xử lý
DECLARE  CURSOR FOR 
9

Tuyên bố mở

Câu lệnh

DECLARE  CURSOR FOR 
1 khởi tạo kết quả từ câu lệnh con trỏ
DECLARE  CURSOR FOR 
0

OPEN 
Cú pháp câu lệnh
DECLARE  CURSOR FOR 
1

Tuyên bố tìm nạp

Câu lệnh

DECLARE  CURSOR FOR 
2 hoạt động như một trình vòng lặp. Nó tìm nạp hàng tiếp theo từ các hàng được liên kết với câu lệnh
DECLARE  CURSOR FOR 
6 trong phần khai báo con trỏ

FETCH  INTO 
Cú pháp câu lệnh
DECLARE  CURSOR FOR 
2

DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;
8 là một hoặc nhiều biến từ các biến đã khai báo trước đó

FETCH  INTO a, b, c
Danh sách biến ví dụ

Nếu hàng tiếp theo tồn tại, các biến sẽ lưu trữ nó; . Bạn có thể sử dụng trình xử lý NOT FOUND để xử lý SQLSTATE này

Tuyên bố Đóng

Câu lệnh này đóng con trỏ được mở trong câu lệnh `OPEN`

CLOSE 
Cú pháp câu lệnh
DECLARE  CURSOR FOR 
3Sử dụng con trỏ MySQL

Sẵn sàng để bắt đầu sử dụng con trỏ MySQL? . Trong bản trình diễn này, chúng tôi sẽ điền vào một bảng có dữ liệu từ tệp CSV này

Làm cách nào để sử dụng vòng lặp trong truy vấn MySQL SELECT?
Sử dụng Arctype để thử một số con trỏ MySQL

Chúng ta sẽ tạo một con trỏ

  • Vòng qua bàn bóng đá
  • Tính số bàn thắng trung bình mà một đội chủ nhà đã thắng trong một trận đấu được ghi vào giờ nghỉ giải lao

Đây là quy trình MySQL sẽ như thế nào để thực hiện điều này

Thủ tục MySQL

DELIMITER $$ CREATE PROCEDURE cursordemo(INOUT average_goals FLOAT)
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE matches int DEFAULT(0);
DECLARE goals int DEFAULT(0);
DECLARE half_time_goals INT;
DECLARE team_cursor CURSOR FOR
SELECT
    HTHG
FROM
    epl.football
WHERE
    (FTR = "H");
    
DECLARE
    CONTINUE HANDLER FOR NOT FOUND
SET
    done = TRUE;

OPEN team_cursor;
teams_loop:
LOOP
    FETCH team_cursor INTO half_time_goals;
IF done THEN LEAVE teams_loop;
END IF;
SET
    goals = goals + half_time_goals;
SET
    matches = matches + 1;
END
LOOP
    teams_loop;
SET
    average_goals = goals / matches;
CLOSE team_cursor;

END $$ DELIMITER;
Thủ tục MySQL

Một thủ tục trong MySQL giống như một thùng chứa một chuỗi các hướng dẫn. Các thủ tục được viết bằng MySQL và được lưu trữ trong cơ sở dữ liệu. Chúng tôi đang xác định con trỏ bên trong một thủ tục vì các thủ tục có thể tái sử dụng. Việc thực thi thủ tục SQL trên sẽ lưu trữ thủ tục trong cơ sở dữ liệu. Chúng ta có thể gọi thủ tục bằng tên của nó, như hình bên dưới

SET @average_goals = 0.0;
CALL cursordemo(@average_goals);
SELECT @average_goals;
Thực hiện thủ tục chúng tôi vừa tạo

Đầu ra của hoạt động này là

1.080954670906067
Làm cách nào để sử dụng vòng lặp trong truy vấn MySQL SELECT?
Xem kết quả trong ArctypeCaveats của con trỏ MySQL

Nhìn kỹ vào ví dụ sẽ thấy rằng một truy vấn SQL như

OPEN 
0 sẽ đạt được kết quả tương tự. Sẽ là tốt nhất nếu bạn chỉ sử dụng con trỏ khi xử lý một hàng tại một thời điểm. Ví dụ là kiểm tra tính toàn vẹn, xây dựng lại chỉ mục. Lưu ý rằng mỗi khi con trỏ tìm nạp một hàng, nó sẽ dẫn đến các chuyến đi vòng quanh mạng. Vì vậy, nó có thể làm chậm máy chủ MySQL của bạn tùy thuộc vào quy mô của hoạt động

Phần kết luận

Trong bài viết này, chúng ta đã thấy cách sử dụng con trỏ MySQL và vòng lặp for, có chức năng giống như vòng lặp lặp trong lập trình nói chung. Chúng tôi cũng đề cập đến khai báo biến, con trỏ và trình xử lý

Sử dụng con trỏ có thể tốn kém về mặt tính toán. Tốt nhất là chỉ sử dụng chúng khi MySQL không cung cấp bất kỳ cách nào khác để đạt được kết quả tương tự bằng cách sử dụng các truy vấn tiêu chuẩn hoặc các hàm do người dùng xác định. Nhưng, nếu đúng như vậy, chúng là những công cụ rất mạnh

Bạn đã sẵn sàng để thử con trỏ cho chính mình chưa?

Làm cách nào để lặp một truy vấn trong MySQL?

LOOP thực hiện một cấu trúc vòng lặp đơn giản, cho phép thực hiện lặp lại danh sách câu lệnh, bao gồm một hoặc nhiều câu lệnh, mỗi câu lệnh được kết thúc bằng dấu chấm phẩy ( ; ) dấu phân cách câu lệnh. Các câu lệnh trong vòng lặp được lặp lại cho đến khi vòng lặp kết thúc. Thông thường, điều này được thực hiện với câu lệnh LEAVE

Làm thế nào để sử dụng vòng lặp trong truy vấn SQL?

Vòng lặp trong SQL Server .
Thí dụ. Trong khi lặp lại. KHAI BÁO @i INT = 10;
Thí dụ. WHILE với BREAK. KHAI BÁO @i INT = 10;
Thí dụ. WHILE với TIẾP TỤC. .
Thí dụ. Vòng lặp lồng nhau

Làm thế nào để sử dụng câu lệnh SELECT với vòng lặp while trong SQL?

Cú pháp vòng lặp While SQL . e. Đúng hay Sai The while loop in SQL begins with the WHILE keyword followed by the condition which returns a Boolean value i.e. True or False . Phần thân của vòng lặp while tiếp tục thực thi trừ khi điều kiện trả về false. Phần thân của vòng lặp while trong SQL bắt đầu bằng khối BEGIN và kết thúc bằng khối END.

Chúng ta có thể sử dụng vòng lặp for trong truy vấn SQL không?

Câu lệnh FOR là một loại câu lệnh lặp đặc biệt, bởi vì chúng được sử dụng để lặp qua các hàng trong tập kết quả chỉ đọc đã xác định . Khi một câu lệnh FOR được thực thi, một con trỏ được khai báo ngầm sao cho với mỗi lần lặp của vòng lặp FOR, hàng tiếp theo là tập kết quả nếu được tìm nạp.