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

Cái nào được ưu tiên trong giữa MySQL EXISTS và IN khi sử dụng trong Truy vấn con?

EXISTS cho biết truy vấn có trả về kết quả hay không trong khi IN có thể được sử dụng để so sánh một giá trị với giá trị khác. IN sử dụng các giá trị theo nghĩa đen.

Lưu ý - IN được ưu tiên trong truy vấn con bất cứ khi nào kết quả truy vấn con rất nhỏ. Nếu kết quả truy vấn con rất lớn thì EXISTS được sử dụng.

Vì IN là lựa chọn ưu tiên cho các kết quả truy vấn con nhỏ hơn, nên chúng tôi đang xem xét một ví dụ về IN.

Để tạo một bảng.

mysql> create table InSubQueryDemo
   -> (
   -> PNumber int,
   -> PName varchar(100)
   -> );
Query OK, 0 rows affected (0.60 sec)

Chèn các bản ghi vào bảng.

mysql> insert into InSubQueryDemo values(1,'Laptop');
Query OK, 1 row affected (0.17 sec)

mysql>  insert into InSubQueryDemo values(2,'WirelessKeyboard');
Query OK, 1 row affected (0.21 sec)

mysql>  insert into InSubQueryDemo values(3,'WirelessMouse');
Query OK, 1 row affected (0.12 sec)

Hiển thị tất cả các bản ghi.

mysql> select *from InSubQueryDemo;

Sau đây là kết quả.

+---------+------------------+
| PNumber | PName            |
+---------+------------------+
|       1 | Laptop           |
|       2 | WirelessKeyboard |
|       3 | WirelessMouse    |
+---------+------------------+
3 rows in set (0.00 sec)

Sau đây là cú pháp cho IN, bao gồm một truy vấn con để tìm nạp “PNumber” lớn hơn 1.

mysql> select *from InSubQueryDemo
   -> where PNumber IN (select PNumber from InSubQueryDemo  WHERE PNumber > 1);

Đây là kết quả đầu ra.

+---------+------------------+
| PNumber | PName            |
+---------+------------------+
|       2 | WirelessKeyboard |
|       3 | WirelessMouse    |
+---------+------------------+
2 rows in set (0.04 sec)