일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- INSERT
- 순열
- 스터디노트
- tree.fit
- 등차수열
- pandas 메소드
- maplotlib
- Machine Learning
- pandas filter
- 통계학
- 자료구조
- plt
- numpy
- 조합
- Slicing
- 등비수열
- matplotlib
- 기계학습
- 머신러닝
- pandas
- DataFrame
- 재귀함수
- barh
- 리스트
- MacOS
- Folium
- SQL
- 문제풀이
- python
- 파이썬
Archives
- Today
- Total
코딩하는 타코야끼
[스터디 노트] Week9_4일차 [심화_8 ~ 10] - SQL 본문
728x90
반응형
1. Scalar Functions (스칼라 함수)
📍 UCASE
- 영문을 대문자로 반환하는 함수
SELECT UCASE('This Is ucase Test.');
# $15 가 넘는 메뉴를 대문자로 조회
SELECT UCASE(menu) FROM sandwich WHERE price > 15;
📍 LCASE
- 영문을 소문자로 변환하는 함수
SELECT LCASE('This Is LCASE Test');
📍 MID
- 문자열 부분을 반환하는 함수
# 6번 위치에서 5글자를 조회
SELECT MID('this is mid test', 6, 5);
# -8번 위치 (뒤에서 8번째 위치) 에서 3글자를 조회
SELECT MID('this is mid test', -8, 3);
📍 LENGTH
- 문자열의 길이를 반환하는 함수
SELECT LENGTH('this is len test');
SELECT LENGTH('');
SELECT LENGTH(' ');
SELECT LENGTH(NULL);
📍 ROUND
- 지정한 자리에서 숫자를 반올림하는 함수
# 반올림할 위치를 지정하지 않을 경우, 소수점 자리 (0) 에서 반올림
SELECT ROUND(315.625);
# 십단위 위치는 -2
SELECT ROUND(315.625, -2);
📍 NOW
- 현재 날짜 및 시간을 반환하는 함수
📍 FORMAT
- 숫자를 천단위 콤마가 있는 형식으로 반환하는 함수
# 소수점을 표시하지 않을 경우 0
SELECT FORMAT(12345.6789, 0);
SELECT FORMAT(12345.6789, 2);
📍 예제)
# oil_price 테이블에서 가격을 십원단위에서 반올림해서 조회하세요.
SELECT 상호, ROUND(가격, -2) FROM oil_price;
2. Subquery
- 하나의 SQL 문 안에 포함되어 있는 또 다른 SQL 문을 말한다.
- 메인쿼리가 서브쿼리를 포함하는 종속적인 관계이다.
- 서브쿼리는 메인쿼리의 칼럼 사용 가능
- 메인쿼리는 서브쿼리의 칼럼 사용 불가
📍 Subquery 사용시 주의
- Subquery 는 괄호로 묶어서 사용
- 단일 행 혹은 복수 행 비교 연산자와 함께 사용 가능
- subquery 에서는 order by 를 사용X
📍 Subquery 종류
- 스카라 서브쿼리 (Scalar Subquery) - SELECT 절에 사용
- 인라인 뷰 (Inline View) - FROM 절에 사용
- 중첩 서브쿼리 (Nested Subquery) - WHERE 절에 사용
📍 Scalar Subquery (스칼라 서브쿼리)
- SELECT 절에서 사용하는 서브쿼리. 결과는 하나의 Column 이어야 한다.
# 서울은평경찰서의 강도 검거 건수와 서울시 경찰서 전체의 평균 강도 검거 건수를 조회
SELECT case_number,
(SELECT AVG(case_number) FROM crime_status
WHERE crime_type = '강도' AND status_type = '검거') avg
FROM crime_status
WHERE police_station = '은평'
AND crime_type = '강도'
AND status_type = '검거';
📍 Inline View (인라인 뷰)
- FROM 절에 사용하는 서브쿼리. 메인쿼리에서는 인라인 뷰에서 조회한 Column 만 사용가능하다.
# 경찰서 별로 가장 많이 발생한 범죄 건수와 범죄 유형을 조회
SELECT c.police_station, c.crime_type, c.case_number
FROM crime_status c,
(SELECT police_station, max(case_number) count
FROM crime_status
WHERE status_type = '발생'
GROUP BY police_station
) m
WHERE c.police_station = m.police_station
AND c.case_number = m.count;
📍 Nested Subquery (중첩 서브쿼리)
- WHERE 절에서 사용하는 서브쿼리.
- Single Row - 하나의 열을 검색하는 서브쿼리
- Multiple Row - 하나 이상의 열을 검색하는 서브쿼리
- Multiple Column - 하나 이상의 행을 검색하는 서브쿼리
- 서브쿼리가 비교연산자( =, >, >=, <, <=, <>, !=)와 사용되는 경우,
- 서브쿼리의 검색 결과는 한 개의 결과값을 가져야 한다. (두개 이상인 경우 에러)
SELECT name FROM celeb
WHERE name = (SELECT hot FROM snl_show WHERE id = 1);
⚡️ IN
- 서브쿼리 결과 중에 포함 될때
# SNL 에 출연한 영화배우를 조회
SELECT host
FROM snl_show
WHERE host IN (SELECT name
FROM celeb
WHERE JOB_TITLE LIKE '%영화배우%');
⚡️ EXIST
- 서브쿼리 결과에 값이 있으면 반환
# 범죄 검거 혹은 발생 건수가 2000건 보다 큰 경찰서 조회
SELECT name
FROM police_station p
WHERE EXISTS (SELECT police_station
FROM crime_status c
WHERE p.name = c.reference AND case_number > 2000);
⚡️ ANY
- 서브쿼리 결과 중에 최소한 하나라도 만족하면 (비교연산자 사용)
# SNL 에 출연한 적이 있는 연예인 이름 조회
SELECT name
FROM celeb
WHERE name = ANY (SELECT host
FROM snl_show);
⚡️ ALL
- 서브쿼리 결과를 모두 만족하면 (비교 연산자 사용)
SELECT name
FROM celeb
WHERE name = ALL (SELECT host
FROM snl_show
WHERE id = 1);
⚡️ Multi Column Subquery
- 서브쿼리 내에 메인쿼리 컬럼이 같이 사용되는 경우.
SELECT name, sex, agency
FROM celeb
WHERE (sex, agency) IN (SELECT sex, agency FROM celeb WHERE name = '강동원');
반응형
'zero-base 데이터 취업 스쿨 > 스터디 노트' 카테고리의 다른 글
[스터디 노트] Week10_2일차 [기본] - 통계학 (0) | 2023.09.11 |
---|---|
[스터디 노트] Week10_1일차 [기본] - 통계학 (2) | 2023.09.11 |
[스터디 노트] Week9_3일차 [심화_5 ~ 7] - SQL (2) | 2023.09.04 |
[스터디 노트] Week9_2일차 [심화_3 ~ 4] - SQL (0) | 2023.09.04 |
[스터디 노트] Week9_1일차 [심화_1 ~ 2] - SQL (0) | 2023.09.04 |