<aside> 💡
FROM: 데이터베이스에서 데이터를 가져올 테이블을 지정합니다. 이 단계에서 조인(Join)도 수행됩니다. WHERE: FROM 절에서 선택된 데이터에 대해 조건을 적용하여 필터링합니다. 이 단계에서 조건에 맞지 않는 행은 제외됩니다. GROUP BY: WHERE 절에서 필터링된 결과를 그룹화합니다. 동일한 값의 행들이 하나의 그룹으로 묶입니다. HAVING: GROUP BY로 생성된 그룹에 대해 조건을 적용합니다. 이 절은 집계 함수와 함께 사용되며, 그룹화된 결과에 대한 필터링을 수행합니다. SELECT: 최종적으로 선택할 열을 지정합니다. 이 단계에서 집계 함수도 적용됩니다. ORDER BY: 결과 집합을 정렬합니다. 이 절은 결과를 특정 열에 따라 오름차순 또는 내림차순으로 정렬합니다
</aside>
<aside> 💡
SQL절 작동 순서
- FROM>WHERE>GROUP BY>HAVING>SELECT>ORDER BY
SQL절 작성 순서
- SELECT>FROM>WHERE>GROUP BY>HAVING>ORDER BY </aside>
기본 함수
SELECT 컬럼
FROM 테이블
-
- : 모든 컬럼을 가져와준다는 의미
- WHERE : 특정 테이터의 조건을 필터링 할때 사용
- 같음,큼,작음의 조건비교연산자 의미 예시
= 같다 age = 21 gender=’female’ <> 같지 않다(다르다) age<> > 크다 age> >= 크거나 같다 age>= < 작다 age< <= 작거나 같다 age<= - 다양한 조건
- BETWEEN : A와 B 사이
- 기본 문법: beween a and b
- 예시: 나이가 30에서 40 사이
WHERE age between 30 and 40
- IN : ‘포함’하는 조건
- 기본 문법 : in (A, B, C)
- 예시: 나이가 10,27,43 세인 경우
age in (10, 27, 43
- 예시: 음식 종류가 한식, 일식 일 경우
cuisine_type in ('Korean', 'Japanese')
- LIKE : 완전히 똑같진 않지만 비슷한 조건
- 특정한 문자로 시작하는 경우
- 기본문법 : like ‘시작문자%’
- 예시 : ‘김’으로 시작하는 이름
- 특정한 문자를 포함하는 경우
- 기본문법: like ’%포함문자%’
- 예시 : 식당이름에 ‘Next’를 포함하는 경우
- 특정한 문자로 끝나는 경우
- 기본문법 : like ‘%끝나는 문자’
- 예시 : ‘임’으로 끝나는 이름
- 특정한 문자로 시작하는 경우
- BETWEEN : A와 B 사이
- WHERE 절에 여러 조건 적용하기
- 논리연산 종류
논리연산자 | 의미 | 예시 |
AND | 그리고 | age>20 and gender=’female’ →나이가 20세 이상이고, 여성 |
OR | 또는 | age>20 or gender=’female’ →나이가 20세 이상이거나, 여성 |
NOT | 아닌 | not gender=’female’ →여성이 아닌 |
집계 함수
- 기본 연산, 합계와 평균
- 함수종류
- 합계 : SUM(컬럼)
- 평균 : AVG(컬럼)
- 예시
- [코드스니펫] 합계와 평균
SELECT sum(food_preparation_time) as total_food_preparation_time, avg(delivery_time) avg_food_delivery_time FROM food_orders
- 함수종류
- 전체 데이터의 갯수
- 함수 종류
- 데이터 갯수 : COUNT(컬럼) // 컬렴명 대신 1 혹은 * 사용가능
- 중복없이 하고 싶은 경우 : COUNT(DISTINCT 컬럼)
- 사용예시
- [코드스니펫]
- SELECT count(1) count_of_orders, count(distnct customer_id) as count_of_customers FROM food_orders
- 함수 종류
- 데이터의 범위, 최솟값 최댓값 구하기
- 함수종류
- 최솟값 : MIN(컬럼)
- 최댓값 : MAX(컬럼)
- 사용예시
- [코드스니펫]
- SELECT min(price) min_price, max(price) max_price FROM food_orders
- 함수종류
- GROUP BY
- 여러 Query없이 컬럼을 지정해 함수로 연산가능
- 일반적으로 sum,avg,max,min 등의 집계 함수를 사용할 때 사용
- 기본구조
- SELECT 컬럼, sum FROM GROUP BY 컬럼
- 사용예시
- SELECT cuisine_type, sum(price) sum_of_price FROM food_orders GROUP BY cuisine_type
- 여러 Query없이 컬럼을 지정해 함수로 연산가능
- ORDER BY
- 출력값들의 순서를 원하는 컬럼을 기준으로 하여 내림차순이든 올림차순이든 지정하는 코드?
- 오름차순 : 숫자가 점점 커지는 정렬
- 내림차순 : 숫자가 점점 작아지는 정렬
- 기본적으로 오름차순이며 내림차순으로 작성시 [order by 컬럼 desc]
- 기본구조
- 기본적으로 from 뒤에 작성하며 group by뒤에 작성한다
SELECT 컬럼, sum FROM GROUP BY 카테고리 컬럼 ORDER BY 정렬컬럼
- 사용 예시
- select cuisine_type, sum(price) sum_of_price from food_orders group by cuisine_type order by sum(price)
- 출력값들의 순서를 원하는 컬럼을 기준으로 하여 내림차순이든 올림차순이든 지정하는 코드?
- HAVING
- 그룹핑한 뒤 조건별로 출력하고 싶을 때 사용where과 having의 역할 적인 차이는 없다.
- </aside>
- <aside> 💡
변형 함수
- replace
- 특정 문자를 다른 것으로 바꾸는 함수
replace(바꿀 컬럼, 현재 값, 바꿀 값)
select addr "원래 주소", replace(addr, '문곡리', '문가리') "바뀐 주소" from food_orders where addr like '%문곡리%'
- substring
- 문자의 특정부분만 조회하는 함수
substr(조회 할 컬럼, 시작 위치, 글자 수)
select addr "원래 주소", substr(addr, 1, 2) "시도" from food_orders where addr like '%서울특별시%'
- concat
- 여러문자를 합치는 함수
concat(붙이고 싶은 값1, 붙이고 싶은 값2,......)
select restaurant_name "원래 이름", addr "원래 주소", concat('[', substring(addr, 1, 2), '] ', restaurant_name) "바뀐 이름" from food_orders where addr like '%서울%'
- 붙일 수 있는 문자 종류(’ ‘붙여서 입력)
- 컬럼
- 한글
- 영어
- 숫자
- 기타 특수 문자
조건 함수
- IF
select restaurant_name, cuisine_type "원래 음식 타입", if(cuisine_type='Korean', '한식', '기타') "음식 타입" from food_orders
- if(조건, 조건을 충족할 때, 조건을 충족하지 못할 때)
- case
- 조건별로 적용값을 지정할 때 사용
case when 조건1 then 값(수식)1 when 조건2 then 값(수식)2 else 값(수식)3 end
select restaurant_name, cuisine_type AS "원래 음식 타입", case when (cuisine_type='Korean') then '한식' else '기타' end as " 음식 타입" from food_orders
다중 연산(Subquery)
- Subquery가 필요한 경우
- 여러번의 연산을 수행해야 할 때→ 수수료를 부과할 수 있는 시간을 구하고 → 구해진 시간에 주문 금액별로 가중치를 주고 → 가중치를 적용한 결과로 최종 예상 배달비를 계산할 때
- </aside>
- <aside> 💡
- 조건문에 연산 결과를 사용해야 할 때→ 음식 타입별 평균 음식 주문금액 따라 음식비 상/중/하 를 나누고 싶을 때
- </aside>
- <aside> 💡
- 조건에 Query결과를 사용하고 싶을 때→ 음식 타입별 평균 음식 주문금액 따라 음식비 상/중/하를 나누고 싶을 때
- </aside>
- <aside> 💡
- Subquery의 기본 구조
- 서브쿼리와 함께 사용하는 연산자
- IN, NOT IN
- EXISTS
- ANY
- ALL
- 서브쿼리와 함께 사용하는 연산자
- 장 단점
- 장점
- 편리성 : SQL 구문 안에서 유연하게 또 다른 SQL문을 만들어 활용 할수 있어 코딩 시 편리함을 준다
- 단점
- 추가적인 연산 비용 발생 : 서브쿼리에 접글할 때마다 SELECT구문에 접근하여 데이터를 만들어 연산비용 증가
- 최적화 문제 : 서브쿼리엔 메타정보(인덱스, 명시적인 제약)가 담겨있지 않아, 내부적으로 복잡한 연산이나 큰 서브쿼리는 성능문제 발생
- 복잡한 쿼리 : 내용이 복잡해지면 가독성 하락
- 장점
기타 함수
- TOP
- UNION
- INSERT
- UPDATE
- DELETE
- SET
- DO
- LIMIT
- limit 시작, 개수
- limit 뒤에 하나의 숫자만 입력 시 처음부터 N개 까지의 데이터만 조회
- limit과 offset조합으로도 출력 개수 제한 가능
- SELECT * FROM Account LIMIT 3, 2; -- 3번째 데이터부터 2개만 조회 LIMIT 2 OFFSET 3; -- 위와 동일
- IS NOT NULL : 키워드를 이용해 특정 컬럼의 값이 null이 아닌지를 비교
- IS NULL : 키워드를 통해 특정 컬럼의 값이 null 값인지를 비교
- JOIN
'내일배움캠프 > TIL' 카테고리의 다른 글
[Java]_연산자 (0) | 2024.12.18 |
---|---|
[java]_변수와 타입 (0) | 2024.12.16 |
[내일배움캠프]_사전캠 SQL 5일차 (0) | 2024.11.26 |
[내일배움캠프]_사전캠 SQL 4일차 (0) | 2024.11.25 |
[내일배움캠프]_사전캠 SQL 3일차 (0) | 2024.11.22 |