Computer >> Máy Tính >  >> Lập trình >> MySQL

MySQL có loại bỏ các biểu thức con phổ biến giữa mệnh đề SELECT và HAVING / GROUP BY không? Làm thế nào để kiểm tra nó?

Để kiểm tra, hãy sử dụng hàm sleep ().

Trường hợp 1 -

Cú pháp như sau -

SELECT yourColumnName+sleep(yourIntegerValue)
FROM yourTableName
GROUP BY yourColumnName+sleep(yourIntegerValue);;

Trường hợp 2 - Bạn có thể sử dụng một cú pháp khác như sau -

SELECT yourColumnName+sleep(yourIntegerValue) As anyAliasName
FROM yourTableName
GROUP BY yourAliasName;

Để hiểu các cú pháp trên, chúng ta hãy tạo một bảng. Truy vấn để tạo bảng như sau -

mysql> create table sleepDemo
   -> (
   -> value int
   -> );
Query OK, 0 rows affected (1.25 sec)

Chèn một số bản ghi trong bảng bằng lệnh chèn. Truy vấn như sau -

mysql> insert into sleepDemo values(40);
Query OK, 1 row affected (0.18 sec)
mysql> insert into sleepDemo values(60);
Query OK, 1 row affected (0.19 sec)
mysql> insert into sleepDemo values(60);
Query OK, 1 row affected (0.10 sec)

Hiển thị tất cả các bản ghi từ bảng bằng cách sử dụng câu lệnh select. Truy vấn như sau -

mysql> select *from sleepDemo;

Đây là kết quả -

+-------+
| value |
+-------+
| 40    |
| 60    |
| 60    |
+-------+
3 rows in set (0.00 sec)

Đây là truy vấn để loại bỏ các biểu thức con phổ biến giữa mệnh đề SELECT và HAVING / GROUP BY.

Trường hợp 1 - Truy vấn như sau -

mysql> SELECT value+sleep(3)
   -> FROM sleepDemo
   -> GROUP BY value+sleep(3);

Kết quả như sau -

+----------------+
| value+sleep(3) |
+----------------+
| 40             |
| 60             |
+----------------+
2 rows in set (9.00 sec)

Truy vấn trên mất 9 giây cho mỗi giá trị (40 trong 3 giây, 60 trong 3 giây, 60 trong 3 giây).

Trường hợp 2 - Truy vấn như sau -

mysql> SELECT value+sleep(3) As v
   -> FROM sleepDemo
   -> GROUP BY v;

Kết quả như sau -

+------+
| v    |
+------+
| 40   |
| 60   |
+------+
2 rows in set (9.00 sec)