Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

하위 쿼리에서 사용하는 동안 MySQL EXISTS와 IN 중 어느 것이 선호됩니까?

<시간/>

EXISTS는 쿼리가 결과를 반환했는지 여부를 알려주고 IN은 한 값을 다른 값과 비교하는 데 사용할 수 있습니다. IN은 리터럴 값을 사용합니다.

참고 - IN은 부질의 결과가 매우 작을 때 부질의에서 선호된다. 하위 쿼리 결과가 매우 크면 EXISTS가 사용됩니다.

IN은 더 작은 하위 쿼리 결과에 대해 선호되는 선택이므로 IN의 예를 고려하고 있습니다.

표를 만들려면.

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

테이블에 레코드 삽입하기.

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)

모든 기록을 표시합니다.

mysql> select *from InSubQueryDemo;

다음은 출력입니다.

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

다음은 1보다 큰 "PNumber"를 가져오는 하위 쿼리를 포함하는 IN의 구문입니다.

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

다음은 출력입니다.

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