[MySQL] 기본문법 코딩테스트
LIKE
- where절과 함께 특정 패턴을 검색할 때 사용
SELECT *
FROM EMPLOYEE
WHERE EMPLOYYE LIKE 'a%';
LIKE 'a%' // a로 시작 되는 모든 것
LIKE 'a_%_%' // a로 시작되고 최소 3이상의 길이를 가진 것
LIKE '_a%' // 두번째 자리에 a가 들어가는 모든 것
IN
- where절 내 여러값을 설정하고 할 때 사용
- 연산 속도가 빠름
- or 연산과 유사
SELECT *
FROM EMPLOYEE
WHERE COUNTRY in ('UK', 'KOREA') // country가 UK나 KOREA 인 경우
BETWEEN
- WHERE절 내 검색 조건으로 범위 지정하고자 할때 사용
- between A and B, A이상 B이하
SELECT *
FROM EMPLOYEES
WHERE SALARY BETWEEN 100 AND 200
AND ID NOT IN (2,3);
NULL
- IFNULL(A,B) : A가 NULL이 라면 B를 출력
SELECT IFNULL(EMPLOYEE_ID, "No ID")
FROM EMPLOYEEs
- COALESCE(A,B,C,D,E) : A~E중 NULL이 아닌 첫번째 값 출력 , ex) A=B=NULL라면 C를 출력
SELECT COALESCE(EMPLOYEE_ID, "NO ID") AS ID
FROM EMPLOYEE
CASE
- CASE
WHEN 조건1 THEN '조건1 반환값'
WHEN 조건2 THEN '조건2 반환값'
ELSE '그외 반환값'
END
- SELECT(주로), WHERE, ORDER BY절에서 사용
- ELSE 생략하면 결과값이 NULL로 나옴
SELECT
a,
CASE
WHEN (table.a BETWEEN 1 AND 3) THEN
CASE
WHEN (table.enabled IS TRUE) THEN 'A+'
ELSE 'A0'
END
WHEN (table.a BETWEEN 4 AND 6) THEN
CASE
WHEN (table.enabled IS TRUE) THEN "B+"
ELSE "B0"
END
ELSE "C+"
END AS result
FROM table
LIMIT
SELECT a
FROM table
WHERE 조건식
LIMIT 1
//
SELECT a
FROM table
LIMIT 0, 3; // 0번부터 3개 출력
GROUP BY
- 집계함수와 함꼐 사용. 지정칼럼에 따라 그룹으로 묶고자 할때 사용
MIN, MAX, COUNT, AVG, SUM
- 집계함수
- null은 계산에서 제외
- 집계 후에는 having 조건으로 필터링
SELECT branch_name, AVG(balance)
FROM account
GROUP BY branch_name
HAVING AVG(balance) >= 7000;
UNION
- SELECT의 칼럼 리스트를 기준으로 두개 이상의 결과를 하나의 테이블로 합치고자 할때 사용
- 기본적으로 중복값을 제거함
- 중복값을 포함하고 싶은 경우, UNION ALL 사용
SELECT CITY
FROM CUSTOMERS
UNION
SELECT CITY
FROM ORDERS
ORDER BY CITY
INNER JOIN
- 교집합
- 우유와 요거트를 동시에 구입한 장바구니 아이디 조회시도 사용
SELECT test1.number
FROM test1 JOIN test2 ON test1.number = test2.number;
SELECT DISTINCT c.cart_id
FROM cart_products c INNER JOIN cart_products P ON (c.cart_id = p.cart_id)
WHERE (c.name='우유' AND p.name='요거트')
OR (c.name='요거트' AND p.name='우유')
ORDER BY c.cart_id;
LEFT JOIN / RIGHT JOIN
- 왼쪽 기준 / 오른쪽 기준
- 왼쪽 기준으로 매챙되는 값 출력 / 오른쪽 기준으로 매칭되는 값 출력
-- LEFT JOIN
SELECT teset1.number
FROM test1 LEFT JOIN test2 ON test1.number = test2.number
-- RIGHT JOIN
SELECT test2.number
FROM test1 LEFT JOIN test2 ON test1.number = test2.number
OUTER JOIN
- 매칭 되는 값이 없어도 출력
- 조건에 부합하지 않는 경우에는 null을 출력
DATE_FORMAT
- DATE_FORMAT( date, "형식" )
SELECT DATE_FORMAT(NOW(), "%Y-%m-%d") // 2021-10-20
SELECT DATE_FORMAT(NOW(), "%d") // 20
date_format(a.date, ‘%Y%m%d’) between ‘20210101’ and ‘20210131’
CAST
- 데이터 타입 변경
CAST(칼럼 AS 타입)
CONVERT(칼럼, 타입)
-- 현재 시간을 SIGNED타입으로 SELECT CAST(NOW() AS SIGNED); SELECT CONVERT(NOW(), SIGNED); // 20211020202020 -- 숫자를 날짜 타입으로 SELECT CAST(20200101 AS DATE); SELECT CONVERT(20200101, DATE); // 2020-01-01 -- 숫자를 문자열 타입으로 SELECT CAST(20200101030330 AS CHAR); SELECT CONVERT(20200101030330, CHAR); // 20200101030330
SUBSTR
- SUBSTRING(컬럼 또는 문자열 , 시작위치, 길이);
SELECT SUBSTR("chongmoa.com", 3, 5)
// 결과 : ongmo
- LEFT(컬럼 또는 문자열 , 길이)
- RIGHT(컬럼 또는 문자열, 길이)
SELECT LEFT("chongmoa.com", 3)
// 결과 : cho
SELECT RIGHT("chongmoa.com",4)
// 결과 : .com
- SUBSTRING_INDEX(컬럼 또는 문자열 , 구분자 , 구분자 개수)
SELECT SUBSTRING_INDEX("www.abc.com", ".", 2);
// 결과 : abc
SELECT SUBSTRING_INDEX("www.abc.com", ".", -2);
// 결과 : abc.com
SELECT SUBSRING_INDEX("admin@abc.com", "@", -1);
// 결과 : abc.com
SELECT SUBSTRING_INDEX("admin@abc.com", "@", 1);
// 결과 : admin
예제)
- 셀러별 상품수, 주문건수, 주문금액, 취소수량, 취소율
- 모니터링대상건수, 모니터링건수, 리뷰건수, 리뷰율
- 셀러별 상품준비중, 출고, 배송중, 배송완료, 리드타임, 리드타임5일이상 카운트 — 날짜가 박혀있으면 카운트하는 방식