SQL 에서는 query를 다른 query에 위치할 수 있습니다. 다음은 예시입니다.
SELECT *
FROM Customers
WHERE age = (
SELECT MIN(age)
FROM Customers
);
subquery의 실행 순서는 다음과 같습니다.
1. Subquery를 실행해 가장 어린 나이를 선택합니다.
2. Outer query(Subquery를 포함하고 있는 query) 를 실행해 Subquery에서 얻은 나이와 같은 행들을 선택합니다.
다음의 사이트에서 예제를 실행할 수 있습니다.
sql 연습을 하며 다음의 문제를 풀게 되었습니다.
자력으로 해결이 어려워 검색을 해보니 되게 간결하게 푼 풀이가 있더라구요.
변수를 선언해서 테이블을 만드는 방식으로, 처음에는 좋아보였으나 예외를 발견했습니다.
-- create
CREATE TABLE EMPLOYEE (
empId INTEGER PRIMARY KEY,
name TEXT NOT NULL,
dept TEXT NOT NULL
);
-- insert
INSERT INTO EMPLOYEE VALUES (0001, 'Clark', 'Sales');
INSERT INTO EMPLOYEE VALUES (0002, 'Dave', 'Accounting');
INSERT INTO EMPLOYEE VALUES (0003, 'Ava', 'Sales');
-- fetch
SELECT * FROM EMPLOYEE WHERE dept = 'Sales';
SET @TEMP := -1;
SELECT (@TEMP := @TEMP + 1) AS HOUR
FROM EMPLOYEE
WHERE @TEMP < 23
EMPLOYEE 테이블의 row가 3개 이므로 3개의 행 밖에 만들어지지 않습니다.
따라서 반복문으로 풀어야 할 거 같습니다.
다음의 사이트에서 테스트했습니다.