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
- Algorithm
- ARM
- Dreamhack
- Flutter
- Computer Architecture
- fastapi를 사용한 파이썬 웹 개발
- pytorch
- BAEKJOON
- PCA
- system hacking
- 백준
- BOF
- rao
- Kaggle
- llm을 활용 단어장 앱 개발일지
- Got
- 영상처리
- MDP
- Stream
- 파이토치 트랜스포머를 활용한 자연어 처리와 컴퓨터비전 심층학습
- MATLAB
- bloc
- Widget
- study book
- C++
- DART
- ML
- FastAPI
- Image Processing
- BFS
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이라 칭하여 가져올 수 있다.