SQL의 명령어 익히기
· 특정 문자를 다를 문자로 바꾸고 싶다면 replace를 사용하면 된다.
ex)
· 원하는 문자만 남기고 싶다면 substr(=substring)를 사용하면 된다.
ex)
· 여러 컬럼의 문자를 합치고 싶다면 concat을 사용하면 된다.
ex)
→ concat은 원하는 만큼 붙일 수 있다.
· 실습
- 서울 지역의 음식 타입별 평균 음식 주문 금액 구하기
→ 출력 : 서울, 타입, 평균 금액
→ 내 쿼리문 및 수정사항
→ group by에 사용된 1, 2는 select에 있는 컬럼을 의미한다.
1은 첫번째 컬럼, 2는 두 번째 컬럼이다. 컬럼의 이름을 쓰지 않고 숫자로도 표현할 수 있다.
· 실습
- 이메일 도메인별 고객 수와 평균 연령 구하기
→ 내 쿼리문 및 수정사항
→ substr을 사용할 때 ()안에 컬럼과 글자 시작 위치, 글자 수를 써야 하지만 만일 글자 시작 위치부터 끝까지 가져오고 싶다면 글자 시작 위치만 사용하고 글자 수는 적지 않은 상태로 괄호를 닫으면 된다.
· 실습
- '[지역(시도)] 음식점 이름(음식 종류)' 컬럼을 만들고, 총 주문 건수 구하기
→ 내 쿼리문 및 수정사항
· 조건에 따라 다른 방법은 적용하고 싶다면 if를 사용하면 된다.
→ if는 if(조건, 조건 충족 시, 조건 미 충족시)로 사용하면 된다.
ex)
→ if는 다른 수식과 결합하여 사용할 수 있다.
· 조건을 여러가지 지정하고 싶다면 case를 사용하면 된다.
→ case문은 case when 컬럼 = 조건 then 조건처럼 사용하면 된다.
→ 위의 수식 중 when은 이런 경우에, then은 이렇게 해주세요를 뜻한다.
→ case문은 조건별로 조건을 지정할 수 있다.
ex)
→ 위 쿼리문에서 else 는 when으로 지정한 조건들에 부합하지 않은 경우를 말하며, 없는 경우 생략이 가능하다.
→ 위 쿼리문에서 end는 case를 끝낸다는 의미다. case문을 사용할 때 end를 꼭 써야 수식이 완료된다.
ex) case 문에 다른 수식을 합쳐서 사용하는 경우
→ 중간에 적인 in은 조건이 2개 이상 포함한 경우 사용한다.
→ 위 쿼리문의 예시처럼 in외에도 다양한 수식을 포함하여 사용할 수 있다.
· 실습
- 10세 이상, 30세 미만 고객의 나이와 성별로 그룹 나누기(이름도 같이 출력)
→ 내 쿼리문 및 수정사항
→ 쿼리문에서의 궁금증 : 왜 group by절이 아닌 where절을 사용하는 걸까?
→ 이유 : 문제에 10세 이상 30세 미만으로 조건이 정해져 있기 때문에 조건에 맞는 데이터만 가져오는 where절을 사용하는 것이다. group by절은 컬럼을 범주로 묶는 것이기 때문에 위 쿼리문처럼 작성된다면 case문 기준별로 묶어서 조회가 되기도 하지만, 10세 이상 30대 미만 외의 나이도 조회되기 때문에 문제의 의도와 다르게 결과가 나온다.
· 실습
- 음식 단가, 음식 종류별로 음식점 나누기
→ 음식 종류
① korean = 한식
② japanese, chinese, thai, vietnamese, indian = 아시아식
③ 그 외 = 기타
→ 가격
① 5,000
② 15,000
③ 그 이상
→ 내 쿼리문 및 수정사항
· 실습
- 지역과 배달 시간을 기반으로 배달수수료 구하기(식당 이름, 주문 번호도 함께 출력)
→ 지역 : 서울, 기타 / 서울일 때는 수수료 *1.1, 기타일 때는 곱하기 없음.
→ 시간 : 25분, 30분 / 25분 초과하면 음식 가격의 5%, 30분 초과하면 음식 가격의 10%
→ 내 쿼리문 및 수정사항
· 실습
- 주문 시기와 음식 수를 기반으로 배달할증료 구하기
→ 주문 시기 : 평일 기본료 = 3,000 / 주말 기본료 = 3,500
→ 음식 수 : 3개 이하면 할증 없음 / 3개 초과면 기본료 * 1.2
→ 내 쿼리문 및 수정사항
→ 쿼리문에서의 궁금증 1 : then 뒤에 price를 쓰지 않으면 기본료를 더하는 곳이 지정되지 않아서 오류가 날 것이라고 생각했는데 오히려 써서 오류가 났다. 어떻게 어떤 컬럼인지 지정하지 않아도 price에 기본료가 더해지는 걸까?
→ 쿼리문에서의 궁금증 2 : 사칙연산을 써야 원하는 결과가 날 줄 알았는데 오히려 사칙연산을 써서 오류가 났다. 사칙연산에도 종류가 있는데 어떻게 지정하지 않아도 원하는 사칙연산이 적용되는 걸까?
→ 쿼리문에서의 궁금증 3 : if 앞에 *가 아닌 다른 사칙연산을 사용하면 사용한 사칙연산이 if절에 적용되는 걸까?
→ 궁금증 3의 해결 : 그렇다!! if 앞에 *가 아닌 다른 사칙연산을 적용하면 적용한 사칙연산으로 if절의 모든 내용이 반영된다. 그래서 if절 () 안에 사칙연산을 쓰지 않고 그 앞에 사용하는 것이다.
· 숫자 컬럼 혹은 문자 컬럼을 바꾸고 싶다면 cast를 사용하면 된다.
→ 숫자에서 문자로 바꾸는 수식 : cast (컬럼 as char)
→ 문자에서 숫자로 바꾸는 수식 : cast (컬럼 as decimal)
· 3주 차 숙제
- 다음의 조건으로 배달 시간이 늦었는지 판단하는 값을 만들기
→ 주중 : 25분 이상 / 주말 : 30분 이상
→ 내 쿼리문과 결괏값
→ 정답 쿼리문과 결괏값
·3주 차 소감
- 배운 수식들을 활용해 실습을 하면서 생각과 다른 점과 사용했을 때의 모습 등을 경험할 수 있어서 좋았다.
그리고 역시나 1주 차와 2주 차는 아무것도 아니었다. 3주 차부터 배운 내용들은 실습 및 복습을 하면서도 '이게 맞나?'라는 의문을 가지고 쿼리를 작성하게 됐고, 작성한 후에 오류가 많이 나서 실습 하나당 많은 시간을 소요하게 됐다.
그래도 이해가 안 되는 부분은 다양한 방법으로 시도해보기도 하고, 궁금한 부분은 직접 풀어가는 재미도 있어서 시간 가는 줄 모르고 강의를 들을 수 있었다.
강의를 들으면서 가장 중요하다고 느낀 부분은 복습이었다.
내가 이해를 잘해도 복습하지 않으면 기억이 잘 안 나고 그럼 쿼리문을 쓸 때 막혀서 시간이 오래 걸리게 되기 때문이다.
남은 강의들을 들으면서 복습도 철저히 해야겠다는 것을 느낀 주차였다.
'공부일기 > 엑셀보다 쉬운 SQL' 카테고리의 다른 글
엑셀보다 쉬운 SQL 5주차 개발일지 (0) | 2023.11.13 |
---|---|
엑셀보다 쉬운 SQL 4주차 개발일지 (0) | 2023.11.10 |
엑셀보다 쉬운 SQL 2주차 개발일지 (3) | 2023.11.09 |
엑셀보다 쉬운 SQL 1주차 개발일지 (1) | 2023.11.09 |