Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- Kaggle
- system hacking
- C++
- Algorithm
- 영상처리
- Stream
- BAEKJOON
- pytorch
- Got
- PCA
- BFS
- 백준
- DART
- bloc
- llm을 활용 단어장 앱 개발일지
- Flutter
- ARM
- fastapi를 사용한 파이썬 웹 개발
- FastAPI
- BOF
- Widget
- ML
- rao
- study book
- Image Processing
- MATLAB
- Computer Architecture
- MDP
- Dreamhack
- 파이토치 트랜스포머를 활용한 자연어 처리와 컴퓨터비전 심층학습
Archives
- Today
- Total
Bull
[SQL] 서브 쿼리 본문
서브쿼리(Subquery)는 다른 SQL 쿼리문 내에 포함되는 쿼리문을 말한다. 데이터베이스에서 데이터를 선택, 삽입, 수정, 삭제하는 데 사용되며, 주로 복잡한 데이터 추출 요구를 충족시키기 위해 사용된다. 서브쿼리는 메인 쿼리의 WHERE 절, SELECT 절, FROM 절 등에 위치할 수 있다.
- 단일 행 서브쿼리: 결과로 단일 행을 반환한다. 이 서브쿼리는 일반적으로 연산자와 함께 사용되며, 예를 들어
=나<>같은 비교 연산자를 사용할 때 사용된다. - 다중 행 서브쿼리: 결과로 여러 행을 반환한다. 이 경우에는
IN,ANY,ALL과 같은 연산자를 사용해야 한다. 예를 들어, 주어진 목록 중 하나와 일치하는 모든 레코드를 찾을 때IN을 사용할 수 있다. - 상호 연관 서브쿼리: 메인 쿼리의 결과에 따라 실행 결과가 달라지는 서브쿼리다. 이들은 보통 메인 쿼리의 컬럼을 참조하며, 각 행에 대해 다시 계산이 이루어진다.
단일 서브쿼리와 다중 행 서브 쿼리를 실습해보겠다.
-- 학생 테이블 생성
CREATE TABLE 학생 (
학번 INT PRIMARY KEY,
이름 VARCHAR(50),
성적 INT
);
-- 학생 테이블에 데이터 삽입
INSERT INTO 학생 (학번, 이름, 성적) VALUES (1, '김학생', 85);
INSERT INTO 학생 (학번, 이름, 성적) VALUES (2, '이학생', 92);
INSERT INTO 학생 (학번, 이름, 성적) VALUES (3, '박학생', 78);
INSERT INTO 학생 (학번, 이름, 성적) VALUES (4, '최학생', 95);
-- 서브쿼리를 사용하여 최고 성적을 받은 학생의 이름 조회
SELECT 이름
FROM 학생
WHERE 성적 = (SELECT MAX(성적) FROM 학생);
-- 서브쿼리를 사용하여 90점 이상의 성적을 받은 학생들의 학번을 조회하고, 그 학번에 해당하는 이름을 조회
SELECT 이름
FROM 학생
WHERE 학번 IN (SELECT 학번 FROM 학생 WHERE 성적 >= 90);
첫 번째 단일 서브쿼리 예제는 학생 중에 MAX 성적인 95를 가져오고 다시 메인 쿼리에서 그 95인 성적인 이름을 가져오는 것이다.

두 번째 다중 서브쿼리 예제는 학생 중에 90 이상인 학생을 가져온다. 그러면 [이학생,최학생]의 학번이 불러와지는데, 이 조건의 학번의 이름을 다시 메인쿼리에서 가져오는 것이다. 단일 서브쿼리와 차이점은 WHERE 조건에 조건의 개수가 여러 개라는 것이다. 말이 좀 이상하긴한데 직관적으로 보자면 그렇다. 그 조건에 포함된 것을 가져오는 것을 IN이라 칭하여 가져올 수 있다.
