to do list 📋
✅ ~SQL 3강 까지
✅ 블로그 TIL 템플릿/서식 만들기
✅ 블로그 스킨 바꾸기 - 코드블럭 적용
✅ 깃허브 1커밋
오늘의 순공부시간 🕰️
8시간 53분
Today I Learned 👨💻
<1>. 개념정리
📕 SQL 기본 명령어
select *
from
select : 데이터를 가져오는 기본 조회 명령어 (데이터를 조회하는 모든 Query에 사용된다.)
from : 어디서 데이터를 조회할까? - 데이터를 가져올 테이블을 특정하는 명령어
* : 모든 컬럼을 가져와준다는 의미
📗 별명
- 별명 지정 방법
방법 1) 컬럼 as 별명
방법 2) 컬럼 별명
- 별명 지을 때 유의사항
| 구분 | 영문, 언더바 | 특수문자, 한글 |
| 방법 | 별명만 적음 | “별명” 으로, 큰 따옴표 안에 적어줌 |
| 예시 | ord_no | “ord no” ”주문번호” |
서브쿼리, 컬럼, 테이블 다 지을 수 있음 ( 옆에 붙여주면 된다)
📘 where과 비교 연산(between, in, like)
- where : 조건을 지정해주는 구문
select *
from 테이블
where 필터링 조건 -- 문자열인 경우 작은 따옴표(')로 묶기
-- >=, <= (같지 않다는 <>로 표현)
- 비교 연산 (between, in, like)
between : A와 B사이 (예 : between a and b)
in : '포함' 하는 조건 주기 (예 : in(A, B, C))
like : 완전히 똑같진 않지만 비슷한 값을 조건으로 주기
1. 특정 문자로 시작할 때 : like '문자%'
2. 특정 문자로 끝날 때 : like '%문자'
3. 특정 문자를 중간에 포함하는 경우 : like '%문자%'
📙 논리연산 (and, or, not)
and : age>20 and gender=’female’ → 나이가 20세 이상이고, 여성
or : age>20 or gender=’female’ → 나이가 20세 이상이거나, 여성
not : not gender=’female’ → 여성이 아닌
📕 합계/평균, 최소/최대
합계 : sum(컬럼)
평균 : avg(컬럼)
전체 데이터 개수 구하기 : COUNT(컬럼) - 컬럼명 대신 1 혹은 * 사용 가능 - 1일 경우 각 행의 숫자가 나옴
+) 특정 컬럼의 데이터 개수 : COUNT(DISTINCT 컬럼)
최소 : min(컬럼)
최대 : max(컬럼)
📗 group by - 범주별 연산 한 번에 하기
select 카테고리컬럼(원하는컬럼 아무거나),
sum(계산 컬럼),
from
group by 카테고리컬럼(원하는컬럼 아무거나) -> group by 1 (이런 식도 괜찮다 - 첫번 째줄 컬럼을 쓰겠다는 뜻)
-> 범주별로 계산해주는 것은 반드시 group by 붙여줘야 한다
select cuisine_type,
sum(price) sum_of_price
from food_orders
group by cuisine_type
📘 order by - 결과를 정렬하기
select 카테고리컬럼(원하는컬럼 아무거나),
sum(계산 컬럼),
from
group by 카테고리컬럼(원하는컬럼 아무거나)
order by 정렬을 원하는 컬럼 (카테고리컬럼(원하는컬럼 아무거나), sum(계산 컬럼) 둘 다 가능)
select restaurant_name,
max(price) "최대 주문금액"
from food_orders
group by restaurant_name
order by max(price) -- 기본세팅이 오름차순 (내림차순으로 보고싶을 경우 뒤에 desc 붙이기)
+) 정렬된 값에서 또 소그룹으로 정렬하는 방법
예시 : 이름 순서대로 정렬하는데 남/여로도 정렬하고 싶을 때
order by gender, name
📙 SQL 데이터 가공하기 (replace, substring, concat)
1) replace : 특정 문자를 다른 것으로 바꾸기
replace(바꿀 칼럼, 현재 값, 바꿀 값)
select restaurant_name "원래 상점명",
replace(restaurant_name, 'Blue', 'Pink') "바뀐 상점명"
from food_orders
where restaurant_name like '%Blue Ribbon%' -- like문(~가 들어간 문자 찾아주기)
2) substring : 원하는 문자만 남기기
substring(조회 할 컬럼, 시작 위치, 글자 수) -> 마지막 글자까지 불러오겠다! 하면 글자수 부분은 생략 가능
select addr "원래 주소",
substring(addr, 1, 2) "시도"
from food_orders
where addr like '%서울특별시%'
3) concat : 여러 컬럼의 문자를 합치기
concat(붙이고 싶은 값1, 붙이고 싶은 값2, 붙이고 싶은 값3, .....)
select restaurant_name "원래 이름",
addr "원래 주소",
concat('[', substring(addr, 1, 2), '] ', restaurant_name) "바뀐 이름"
from food_orders
where addr like '%서울%'
📕 조건에 따라 포맷을 다르게 변경해야 할 때..? - user Segmentation (if, case)
1) if : 조건에 따라 다른 방법을 적용하고 싶을 때 사용
if(조건, 조건을 충족할 때, 조건을 충족하지 못할 때) ---- 값이나 수식이 될 수 있음
select restaurant_name,
cuisine_type "원래 음식 타입",
if(cuisine_type='Korean', '한식', '기타') "음식 타입" -- Korean일때 한식으로 써주고 아니면 기타로
from food_orders
2) case : 조건을 여러 가지 지정하고 싶을 때 사용
case when 조건1 then 값(수식)1
when 조건2 then 값(수식)2
else 값(수식)3 -----> else의 경우, 위에서 모든 종류가 다 부합되면 생략 가능
end
--예시 1)
select case when cuisine type=’Korean’ then ‘한식’
when cuisine type in (‘Japanese’, Chinese’) then ‘아시아’
else ‘기타’ end “음식타입”,
cuisine type -- 확인 위해서 일단 소환
from food_orders
--예시 2) 10~30세 고객 대상, 나이와 성별로 그룹 나누기
select name,
age,
gender,
case when (age between 10 and 19) and gender='male' then "10대 남자" -- 이런 식으로 조건이 길 때 괄호( )로 보기 쉽게 영역을 나눠도 괜찮다
when (age between 10 and 19) and gender='female' then "10대 여자"
when (age between 20 and 29) and gender='male' then "20대 남자"
when (age between 20 and 29) and gender='female' then "20대 여자" end "그룹" -- 조건문 닫을 때 end문 사용(그룹으로 rename)
from customers
where age between 10 and 29
--예시 3) 배달시간 기반 배달수수료 구하기
-- (지역 : 서울, 기타 / 서울일때는 수수료 계산*1.1, 기타일때는 해당 없음 / 시간 : 25분 초과 - 음식 가격의 5% 추가, 30분 초과 - 음식 가격의 10% 추가)
select restaurant_name,
order_id,
delivery_time,
price,
addr,
case when delivery_time>25 and delivery_time<=30 then price*1.05*(if(addr like '%서울%', 1.1, 1)) -- 또한 서울일 때 1.1 곱해주는 것
when delivery_time>30 then price*1.1*(if(addr like '%서울%', 1.1, 1))
else 0 end "수수료"
from food_orders
+) 범위를 지정해줄 때 아래와 같이 범위를 정확하게 between 26 and 29라고 적지 않아도 위에서 먼저 걸러진 다음에 밑으로 내려오기 때문에 이렇게 적어도 된다 (between형식으로 적어도 무방)
when 컬럼>30 then
when 컬럼>25 then
<2>. 짤막한 정리
▶ ctrl + enter : Dbeaver 코드 실행 단축키
오늘의 회고 💭
- SQL의 코드실행해보니 데이터를 쌓는 방법에 대한 궁금증
오늘은 데이터를 어떤 식으로 효율적으로 찾는지에 대해 간단히 알아보았는데 raw data를 어떤 식으로 분류해놓는지에 대해 명확하게 알고싶어졌다. 학부생때 cs 자료구조 재밌게 공부했어서 스스로 요점정리해둔 자료가 있는데 나중에 raw data를 효율적으로 쌍는 방법을 배울 때 유용하게 쓰일 것 같다.
- 마음이 안 좋아서 집중이 안됐다 :(
뭔가를 배우거나 코드에 적용할 때 집중력이 떨어졌거나 오늘같이 마음이 힘들 때 단걸 먹거나 10분 알람 맞춰두고 잠깐 자니 좀 괜찮아졌다. 전에는 잠에만 해당이 됐었는데 단걸 먹는 방법도 자주 사용해야겠다.
다음 계획 🌈
✅ ~SQL 5강 까지
✅ Java 복기 (3/4지점까지)
✅ 깃허브 1커밋
'mySQL' 카테고리의 다른 글
| [TIL] SQL기능의 이모저모 (2) (1) | 2023.12.27 |
|---|