관리 메뉴

ilovechoonsik

[STARTERS 4기 TIL] SQL 다양한 문법 및 활용 (230216) 본문

STARTERS 4기 🚉/TIL 👶🏻

[STARTERS 4기 TIL] SQL 다양한 문법 및 활용 (230216)

춘시기좋아 2023. 2. 18. 14:01

 

📖 오늘 내가 배운 것

 

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] 내장함수 및 함수 연산

https://velog.io/@sua_ahn/MySQL-%EB%82%B4%EC%9E%A5-%ED%95%A8%EC%88%98-%EC%97%B0%EC%82%B0%EC%9E%90-%EC%A0%95%EB%A6%AC

[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은 계속 봐왔음에도 헷갈리는 부분이 존재했는데 금일 학습을 통해 리마인드 할 수 있어서 좋았다!!🦭

 

 

#유데미, #유데미코리아, #유데미부트캠프, #취업부트캠프, #부트캠프후기, #스타터스부트캠프, #데이터시각화 #데이터분석 #태블로

Comments