ilovechoonsik
[STARTERS 4기 TIL] SQL 다양한 문법 및 활용 (230216) 본문
📖 오늘 내가 배운 것
1. 조건 지정과 논리, 비교연산자, 패턴매칭 이해
1.1 WHERE? 조건 구문
- WHERE?
: 테이블 질의 시 조건을 지정 -> 질의 결과에 필터를 검
- WHERE 구문에 사용 가능한 술어 구문
1.2 WHERE 조건과 패턴매칭
- LIKE 절
- LIKE 절 일치 조건 지정
1.3 NULL / LIMIT
- NULL?
: 아직 지정되지 않은 값 (0과는 다름)
1.4 ORDER BY
- ORDER BY?
: 쿼리 결과를 주어진 컬럼의 오름차순, 내림차순으로 정렬해 출력
ASC : 오름차순
DESC : 내림차순
1.5 DISTINCT
- DISTINCT 연산자
: 조회된 결과에서 중복된 데이터를 제외하고 출력
1.6. 조건제어
- CASE WHEN
조회된 결과에서 중복된 데이터 제외하고 출력
CASE는 내장 함수는 아니며 연산자(Operator)로 분류
- IF
: 조건에 따라 분기
참/거짓 두 가지만 있기에 2중 분기
• 형식
SELECT IF (100>200, ‘참이다’, ‘거짓이다‘);
IFNULL(수식1, 수식2)
수식1이 NULL이 아니면 수식1이 반환되고, 수식1이 NULL이면 수식2가 반환
2. 내장 함수와 문자-숫자-날짜 연산
2.1 산술 연산자
기본 산술
사칙연산 : + - * /
몫 : div
나머지 : %, MOD, MOD(값, divisor)
제곱 : POW(값, 지수), POWER(값, 지수)
제곱근 : SQRT(값)
근삿값
반올림 : ROUND(값, [소수점자릿수])
올림 : CEIL(값, [소수점자릿수]), CEILING(값, [소수점자릿수])
버림 : FLOOR(값, [소수점자릿수]), TRUNCATE(값, 소수점자릿수)
기타
절댓값 : ABS(값)
난수 생성 : RAND()
SELECT FLOOR(RAND() * 10); -- 0 ~ 9
2.2 논리 연산자
모두 참이면 참 : AND &&
하나라도 참이면 참 : OR ||
서로 다르면 참 : XOR
대입 연산 : :=
삼항 연산 : IF(조건식, 참의 반환값, 거짓의 반환값)
값이 null일 때 반환값 : IFNULL(값, 반환값)
2.3 날짜 다루기
현재 날짜와 시간 : NOW(), CURRENT_TIMESTAMP()
일 차이 : DATEDIFF(date1, date2)
날짜 및 시간 차이 : TIMESTAMP(단위, date2, date1)
-- (date1 - date2) 계산
SELECT TIMESTAMPDIFF(HOUR, '2022-12-31', '2023-01-01'); -- 24
원하는 값만 추출 : YEAR(날짜), MONTH(날짜), DAYOFMONTH(날짜),DAYOFWEEK(날짜) HOUR(시간), MINUTE(시간), SECOND(시간)
SELECT DAYOFWEEK('2022-12-31'); -- 7 (토요일)
SELECT DAYOFWEEK('2023-01-01'); -- 1 (일요일)
형식 변경 : DATE_FORMAT(col, '날짜형식')
2.4 문자열 다루기
아스키 코드값
문자 → 아스키 코드값 : ASCII('C')
아스키 코드값 → 문자 : CHAR(정수)
문자열 수정
합치기 : CONCAT(str,...), CONCAT_WS('구분자', str,...)
대체 : REPLACE(str, 기존문자, 대체문자)
자르기 : SUBSTR(str, start, length)
SELECT SUBSTRING('12345', 3, 2); -- '34'
기타
문자열 길이 : 바이트수 LENGTH(str), 문자수 CHAR_LENGTH(str)
문자열 검색 : INSTR(str, 검색문자)
문자열 포함 확인 : LIKE '%', NOT LIKE '_'
wildcard (대체 문자) : 단일문자 대체 _, 복수문자 대체 %
→ wildcard 검색 시, 앞에 역슬래시\를 추가
3. 서브쿼리, 인라인뷰
3.1 서브쿼리
사용 위치
|
명칭
|
SELECT 절
|
스칼라 서브쿼리 (Scalar Subquery)
|
FROM 절
|
인라인 뷰 (Inline View)
|
WHERE 절
|
중첩 서브쿼리 or 서브쿼리
|
1. 스칼라 서브쿼리 (Scalar Subquery)
- select 절에서 사용하는 서브쿼리다.
- scalar는 '한번에 한 가지만 처리하는' 이라는 뜻을 가지고 있다. 즉, scalar subquery에 의해 나오는 결과는 '하나의 행'이어야 한다.
2. 인라인 뷰 (Inline View)
- 인라인 뷰는 FROM 절에 사용되는 서브 쿼리다.
- 인라인 뷰는 하나의 임시 테이블이라고 생각하면 된다.
- 메인 쿼리에서는 인라인 뷰에서 select한 컬럼만 사용 가능하다.
3. 서브 쿼리
- 서브 쿼리는 WHERE 절에서 사용하는 쿼리다.
- 서브 쿼리의 결과가 단일행이면 단일행 서브쿼리, 복수행이면 복수행 서브쿼리라 부른다.
4. join으로 표현하기
- 서브 쿼리를 사용하는 것보다는 join을 사용하는게 일반적으로 성능이 더 좋다.
4. 집계 함수, 그룹 바이
4.1 집계 함수
종류 | 의미 |
count() | null 값이 아닌 레코드의 수 |
sum() | 필드명의 값들의 합계 |
avg() | 필드명의 값들의 평균 |
max() | 필드명의 값들 중 가장 큰 값 |
main() | 필드명의 값들 중 가장 작 값 |
count(*) *은 모든것을 의미 |
레코드의 개수 |
4.2 GROUP BY
1. group by?
💡 현업에서 분석을 하게 되면 테이블 전체로 집계하는 경우가 거의 없음. 특정 카테고리로 나눠서 구하게 됨.
- 서울에서 얼마, 대전에서 얼마
- 20대한테 얼마, 30대 한테 얼마!
이런 식으로 패턴을 찾을 때 사용하는 게 바로 GROUP BY
2. 실행 순서
: WHERE → GROUP BY → HAVING
3. 사용법
SELECT 컬럼 FROM 테이블 GROUP BY 그룹화할 컬럼;
5. JOIN
5.1 JOIN?
JOIN : 관련성이 있는 두 개 이상의 테이블을 이어 붙이는 것!
서브쿼리랑 차이?
서브쿼리 → 임의의 결과 데이터 메인 쿼리에 전달
조인 → 테이블-테이블 결합
5.2 JOIN 종류
5.3 사용법
참고 자료 출처
[1] 내장함수 및 함수 연산
[2] 서브쿼리
https://blog.naver.com/PostView.naver?blogId=writer0713&logNo=222277186069&parentCategoryNo=&categoryNo=68&viewDate=&isShowPopularPosts=true&from=search
[3] JOIN Visualizer
https://sql-joins.leopard.in.ua/
[4] JOIN Visualizer 2
https://www.devkuma.com/docs/sql/join/
💪🏻 좋았던 점, 앞으로 개선해야 할 점 (추가로 배워야 할 점)
📌 이전에 공부했던 내용이었던 만큼 전체적으로 복습하는 느낌으로 강의를 수강했다!
JOIN은 계속 봐왔음에도 헷갈리는 부분이 존재했는데 금일 학습을 통해 리마인드 할 수 있어서 좋았다!!🦭
#유데미, #유데미코리아, #유데미부트캠프, #취업부트캠프, #부트캠프후기, #스타터스부트캠프, #데이터시각화 #데이터분석 #태블로
'STARTERS 4기 🚉 > TIL 👶🏻' 카테고리의 다른 글
[STARTERS 4기 TIL] R (230220) (1) | 2023.02.20 |
---|---|
[STARTERS 4기 TIL] SQL 집계, VIEW, 통계, 순위 (230217) (0) | 2023.02.18 |
[STARTERS 4기 TIL] 데이터 베이스 배경, SQL 활용 조작 (230215) (0) | 2023.02.16 |
[STARTERS 4기 TIL] 공공 데이터 분석 #2 (230214) (0) | 2023.02.14 |
[STARTERS 4기 TIL] 데이터 시각화 #2 (230213) (0) | 2023.02.13 |