SQL QUERY 정리 2

2 분 소요

sql 쿼리 지문 정리

중복값 제거 COUNT

SELECT COUNT(DISTINCT NAME) FROM ANIMAL_INS ;
  • COUNT(*)은 NULL 을 허용한다

AVG, SUM, MIN, MAX

--테이블 (MY_TABLE)의 평균나이(AGE) 조회--
SELECT AVG(AGE) AS 평균나이 FROM MY_TABLE

--테이블(MY_TABLE)의 수량(QT)의 전체 평균(AS 평균수량)조회--
SELECT AVG(QT) AS 평균수량 FROM MY_TABLE

이름이 두 번 이상 쓰인 경우를 이름순으로 조회

SELECT NAME, COUNT(NAME) AS `count` FROM ANIMAL_INS GROUP BY NAME HAVING `count` >= 2 ORDER BY NAME ASC

09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문

SELECT HOUR(DATETIME) AS `HOUR`, COUNT(HOUR(DATETIME)) AS `COUNT`
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)
HAVING `HOUR` >= 9 AND `HOUR` <= 19
ORDER BY `HOUR` ASC;

0시부터 23시까지 시간대별로 입양 건 (변수를 활용하여 존재하지 않는 datetime까지 표시)

SET @hour = -1;
SELECT (@hour := @hour + 1) as `HOUR`, (SELECT COUNT(*) FROM ANIMAL_OUTS WHERE HOUR(DATETIME) = @hour) AS `COUNT`
FROM ANIMAL_OUTS
WHERE @hour < 23

IS NULL

SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NULL

왼쪽에만 있는 콜럼 값이 있는 데이터 출력

SELECT L.ANIMAL_ID, L.NAME
FROM ANIMAL_OUTS L
LEFT JOIN ANIMAL_INS R ON L.ANIMAL_ID = R.ANIMAL_ID
WHERE R.ANIMAL_ID IS NULL
ORDER BY R.ANIMAL_ID ASC;

LIKE 예제

--A로 시작하는 문자를 찾기--
SELECT 컬럼명 FROM 테이블 WHERE 컬럼명 LIKE 'A%'

--A로 끝나는 문자 찾기--
SELECT 컬럼명 FROM 테이블 WHERE 컬럼명 LIKE '%A'

--A를 포함하는 문자 찾기--
SELECT 컬럼명 FROM 테이블 WHERE 컬럼명 LIKE '%A%'

--A로 시작하는 두글자 문자 찾기--
SELECT 컬럼명 FROM 테이블 WHERE 컬럼명 LIKE 'A_'

--첫번째 문자가 'A''가 아닌 모든 문자열 찾기--
SELECT 컬럼명 FROM 테이블 WHERE 컬럼명 LIKE'[^A]'

--첫번째 문자가 'A'또는'B'또는'C'인 문자열 찾기--
SELECT 컬럼명 FROM 테이블 WHERE 컬럼명 LIKE '[ABC]'
SELECT 컬럼명 FROM 테이블 WHERE 컬럼명 LIKE '[A-C]'

IN(‘STIRNG1’, …)

SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME IN('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')
ORDER BY ANIMAL_ID

IN(SELECT STATEMENT)

SELECT * FROM Customers
WHERE Country IN (SELECT Country FROM Suppliers);

대소문자 구분없이 LIKE

SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE LOWER(NAME) LIKE '%el%' AND ANIMAL_TYPE = 'DOG'
ORDER BY NAME ASC

IF()

SELECT ANIMAL_ID, NAME,
IF(SEX_UPON_INTAKE REGEXP 'Neutered|Spayed', 'O', 'X') AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

WHEN

SELECT ANIMAL_ID, NAME,
  CASE
    WHEN SEX_UPON_INTAKE REGEXP 'Neutered|Spayed' THEN 'O'
    ELSE 'X'
  END AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

DATEDIFF()

SELECT L.ANIMAL_ID, L.NAME
FROM ANIMAL_INS L
JOIN ANIMAL_OUTS R
ON L.ANIMAL_ID = R.ANIMAL_ID
ORDER BY DATEDIFF(L.DATETIME, R.DATETIME) ASC
LIMIT 2

-- DATEDIFF(L.DATETIME, R.DATETIME) 대신 L.DATETIME - R.DATETIME 사용가능.

DATE_FORMAT()

SELECT DATE_FORMAT("2017-06-15", "%W %M %e %Y");
-- Thursday June 15 2017

%Y%y는 다름 직접 써보기 위에는 영어로 나오지만 아래는 숫자로 나온다.

-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME, DATE_FORMAT(`DATETIME`, '%Y-%m-%d') AS '날짜'
FROM ANIMAL_INS
Refernce
  • https://www.w3schools.com/sql/
  • https://programmers.co.kr/learn/challenges?tab=sql_practice_kit