데이터 공부를 기록하는 공간

[MySQL] 기본문법 코딩테스트 본문

STUDY/SQL_HACKERRANK

[MySQL] 기본문법 코딩테스트

BOTTLE6 2021. 10. 20. 18:01

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

예제)

  1. 셀러별 상품수, 주문건수, 주문금액, 취소수량, 취소율
  2. 모니터링대상건수, 모니터링건수, 리뷰건수, 리뷰율
  3. 셀러별 상품준비중, 출고, 배송중, 배송완료, 리드타임, 리드타임5일이상 카운트 — 날짜가 박혀있으면 카운트하는 방식

'STUDY > SQL_HACKERRANK' 카테고리의 다른 글

[HackerRank][SQL][Advanced Join] Interviews ☆☆  (0) 2021.10.19
[hackerrank][SQL][Advanced]  (0) 2021.10.19
[hackerrank][SQL][Intermediate]#3  (0) 2021.10.18
[hackerrank][SQL][Intermediate]#2  (0) 2021.10.18
[hackerrank][SQL][Intermediate]  (0) 2021.10.18
Comments