본문으로 바로가기

MySQL EXISTS

category 데이터베이스/MySQL 2018. 12. 23. 15:59

MySQL EXISTS

 

SQL EXISTS 절은 하위 커리에 레코드 있으면 TRUE를 반환합니다.

 

하위 쿼리라 하면 WHERE 절에 밑에 SELECT 구문?? 이 있는걸 말합니다.

존재 구문

SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);

이렇게 WHERE절 밑에 SELECT구문이 있는걸 보실 수 있습니다. SELECT 하위 쿼리가 참이면

TRUE를 반환합니다.

ProductID ProductName SupplierID CategoryID Unit Price
1 Chais 1 1 10 boxes x 20 bags 18
2 Chang 1 1 24 - 12 oz bottles 19
3 Aniseed Syrup 1 2 12 - 550 ml bottles 10
4 Chef Anton's Cajun Seasoning 2 2 48 - 6 oz jars 22
5 Chef Anton's Gumbo Mix 2 2 36 boxes 21.35

 

SupplierID SupplierName ContactName Address City PostalCode Country
1 Exotic Liquid Charlotte Cooper 49 Gilbert St. London EC1 4SD UK
2 New Orleans Cajun Delights Shelley Burke P.O. Box 78934 New Orleans 70117 USA
3 Grandma Kelly's Homestead Regina Murphy 707 Oxford Rd. Ann Arbor 48104 USA
4 Tokyo Traders Yoshi Nagase 9-8 Sekimai Musashino-shi Tokyo 100 Japan

이렇게 두 테이블이 있으면

 

SELECT ProductName FROM Products WHERE SupplierId = Suppliers.supplierId AND Price < 20

 

이 SELECT 구문을 이용하여 EXIST절을 써봅시다.

 

저 하위 쿼리는 Products 테이블 에서 가격이 20 미만(Price<20)인 공급자 테이블 내 SupplierId를 통해 

이게 만약에 TRUE이면

 

SELECT SupplierName
FROM Suppliers
WHERE EXISTS (SELECT ProductName FROM Products WHERE SupplierId = Suppliers.supplierId AND Price < 20);

공급자 테이블에서 공급업체 이름을 나열하겠죠 ??? 위 테이블대로라면

 

현재 하위 쿼리가 참인 형태이고 이에 따라서 공급업체 이름을 나열합니다.

 

SupplierName
Exotic Liquid

 

 

이런 식으로 나열이 될겁니다.

 

만약 가격이 22인 공급업체를 나열 하려면

 

SELECT SupplierName
FROM Suppliers
WHERE EXISTS (SELECT ProductName FROM Products WHERE SupplierId = Suppliers.supplierId AND Price = 22);

이렇게 되겠죠. 즉 생산 테이블 내에서 공급자의 Id와 가격이 22인 것이 존재하면 그 22인 공급업체의 이름을 나열 합니다.

 

결과는

SupplierName
New Orleans Cajun Delights

 

이렇게 나오겠죠.??

 

 

'데이터베이스 > MySQL' 카테고리의 다른 글

MySQL 테이블 복사  (0) 2018.12.24
MySQL ANY/ALL  (1) 2018.12.24
MySQL GROUP BY/HAVING  (0) 2018.12.23
MySQL 자체 조인(self join)  (1) 2018.12.22
MySQL 전체 외부 조인(FULL OUTER JOIN)  (0) 2018.12.22