오늘은 MYSQL의 ANY, ALL, 서브쿼리에 대해 정리를 해보겠다.
1. 서브쿼리
서브쿼리라는 것은 쿼리문 안에 또 쿼리문이 들어있는 것을 말하는 것이다.
이런 테이블이 있다고 가정해보자.
여기서 키가 180cm이상인 사람의 데이터를 조회해보자
그럼 이렇게 이순신, 광개토대왕, 장수왕 총 세명의 데이터가 조회가 되는 것을 볼 수 있다.
그런데 서브쿼리는 이 180이라는 값을 직접 쓰는것이 아니라 이 180 자체를 쿼리를 통해서 사용하는 것이다
후반부의 서브 쿼리가 180이라는 값을 돌려주기 때문에 결과는 위와 아래와 똑같다는 것을 알 수 있다.
2. ANY, ALL
이 쿼리는 결과 값이 어떻게 나올까? 맨 위에 있는 전체 데이터를 보고 한번 생각해보자
addr이 경남인 사람의 키는 180, 185이다.
그래서 우리가 기대하는 결과는 height>=180, height>=185이다.
그렇기 때문에 ' height >= ' 이 부분에서 에러가 나게 되는 것이다.
그렇다면 에러가 나는 위 쿼리를 아래 쿼리처럼 ANY 를 추가해보자.
ANY 키워드 하나만 추가했을 뿐인데 에러가 나지 않고 데이터를 조회해오는 것을 알 수 있다.
예상한대로 키가 180보다 크거나 같은 사람, 또는 키가 185보다 크거나 같은 사람 모두 출력이 될 것이다.
결국 키가 180보다 크거나 같은 사람이 해당되는 것이다.
이번에는 ANY를 ALL로 바꿔서 쿼리를 실행해보자
이번에는 결과가 2개인 것을 알 수 있다.
그 이유는 키가 180과 같거나 큰 사람 또는 185과 같거나 커야 하기 때문이다.
결국 키가 185와 같거나 큰 사람만 해당이 된다.
즉 ANY는 둘 중 하나라도 만족이 되면 true를 반환을 하는 것이고
ALL은 두개 모두 결과를 만족시켜야 하는 것이다
'데이터베이스' 카테고리의 다른 글
SQL의 분류 (DML, DDL, DCL) (0) | 2022.07.11 |
---|---|
[MYSQL] Unique Key에 대해서 (0) | 2022.06.19 |
[MYSQL] Primary Key에 대해서 (0) | 2022.06.15 |