kyejin0412 님의 블로그
[TIL] Week 2-1 SQL 라이브세션 - SQL 작성 시 유의사항, TRUNCATE() 본문
두번째 주가 밝았다. 주말동안 나들이가고, 친구랑 수다떨고 했더니 리프레시가 됐다.
이번주에는 라이브세션과 문제풀이, 복습 위주로 진행할 예정이다.
오늘은 라이브세션에서 SELECT, 논리연산자, CASE WHEN 구문 등을 배웠다.
CASE WHEN 구문은 다중조건일 때 조건식1의 결과값, 조건식2의 결과값 ... 을 가지고 연산한다는 것을 알게 됐다.
SQL 작성시 관습이 궁금해서 튜터님께 질문해보았다. 좋은 질문에 뽑혀서 기분이 좋았다!
오늘은 해답 안 보고 문제 풀어보기 하려고 했는데, 영 안 풀려서 몇 개는 정답을 봤다. 생각 못했던 방식들이라 오히려 조금 보고서 푸는게 나을 것 같았다. 잘 안 풀리니 집중도 안 되고..진도도 안 나갔다ㅜ
내일은 좀 더 많이 풀어보자!
1. WHERE절에서는 집계함수를 사용할 수 없다.
WHERE 절에서는 행 단위에서 필터링 중이기 때문에, 전체를 집계하여 통계를 낼 수 없다.
HAVING, SELECT 문에서 사용가능하므로, 필요 시 SUBQUERY를 사용해야 한다.
SELECT *
from tips
where total_bill > avg(total_bill) -- 쿼리 오류가 뜸
SELECT *
FROM tips
WHERE total_bill > (
SELECT avg(total_bill)
FROM tips
) -- 정상쿼리. 서브쿼리로 먼저 집계함
2. DISTINCT는 SELECT 문에서만 사용!!
SELECT 집계함수(DISTINCT + 컬럼명)
SELECT DISTINCT 컬럼명
3. CASE WHEN 구문은 내가 원하는 조건으로 결과값을 나눠서 '새로운 컬럼' 을 만든다.
컬럼을 만드는 것이기 때문에, SELECT 문에서만 사용!!!
CASE WHEN 조건식1 THEN 결과1
WHEN 조건식 2 THEN 결과2
ELSE 결과3
END AS 새로운 컬럼이름
작동순서 :
조건식 1로 한번 걸러짐, 그 다음, 걸러진 나머지를 가지고 조건식 2 시작.
그 다음, 조건식2로 걸러진 나머지가 ELSE -- 기억하기!!
4. 조건 여러 개 작성시 유의사항
select *
from basic.users
where 컬럼1 =’sohyun’ and 컬럼2=’과자’ or 컬럼3≥30 and 과자 in ('썬칩' ,'칸쵸')
--> AND, OR 조건의 우선순위가 같기 때문에, 마음대로 계산함. 에러!
select *
from basic.users
where 컬럼1 =’sohyun’ and (컬럼2=’과자’ or 컬럼3≥30) and (과자 in ('썬칩' ,'칸쵸'))
--> 위와 같이 내가 먼저 실행하고 싶은 조건에 소괄호하기. 필수!!
SQL에서 조건연산에 최적화 된 구문은 CASE WHEN. IF문은 이런게 있다라고만 알고 있기. 잘 쓰지 않음.
다중조건에서 IF문은 가독성 하락, 복잡해짐. IF안에 IF, IF안에 IF...
IN 연산자 안에는 다른 연산자 넣지 않는다. 무조건 소괄호가 따라 붙는다.
5. CAST(컬럼명 AS 데이터타입)
숫자처럼 보이는데 문자열인 경우가 많이 있음.
이럴 경우, 타입을 바꾸고 싶은 컬럼명과 바꿀 데이터 타입을 적어준다. 보통 INT, CHAR가 많다.
6. ORDER BY, GROUP BY 에서 숫자 사용 지양!
데이터분석가는 크로스체크를 해야 하므로, 이를 위해 컬럼명을 직접 적어주자.
7. TRUNCATE() - MYSQL, TRUNC()-ORACLE
위 두 함수는 원하는 숫자를 원하는 소숫점 자리 아래부터 잘라버리는 역할을 한다. (올림,내림X)
SELECT TRUNCATE(SUM(LAT_N),4) -- 소수점 4째 자리 아래부터 잘라버림 -> 4째 자리까지 결과나옴.
FROM STATION
WHERE LAT_N >38.7880 AND LAT_N<137.2345
;
8. 날짜 타입의 데이터 표시
'2023-01-01' 과 같이 작은 따옴표 안에 표시한다.
MYSQL에선 괜찮지만, 따옴표를 안 쓰면 오류가 날 수 있다.
9. SQL 관습/규칙
- 별칭 작성 : 별칭 만들 때 ' ' 작은 따옴표 쓰지 않기, 영어로 만들기
- 날짜 타입 데이터 : 무조건 작은 따옴표 안에 작성한다.
- 한 쿼리 안에 개행 허용X : 하나의 쿼리 안에 개행,공백은 불허한다. ex) select 와 from 사이 한 줄 공백 X
- 예약어 대소문자 : 대소문자 상관 없음. 개인 기호에 따라 하면 됨.
- 조건은 괄호 안에 쓰도록 하자.
- != 와 <> 둘 다 같지 않다는 뜻. 현업에서는 !=를 쓴다.
10. 조건절 쓸 때 주의할 점
SELECT COUNT(ID) AS 'FISH_COUNT'
FROM FISH_INFO
WHERE FISH_TYPE = 0 OR 1 -- 논리연산자 양 옆은 조건식이 나와야 함.
-- 1만 쓰면 항상 TRUE로 인식해서 전체 행을 세어버림.
;
SELECT COUNT(ID) AS 'FISH_COUNT'
FROM FISH_INFO
WHERE FISH_TYPE = 0 OR FISH_TYPE = 1 -- 의도한 코드
;