SQL QUERY 정리 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