SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS
ORDER BY NAME, DATETIME DESC;
SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1
LIMIT
사용SELECT COUNT(DISTINCT NAME) AS "count"
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
DISTINCT
를 붙인 후 COUNT
IS NOT NULL
SELECT NAME, COUNT(NAME) as "COUNT"
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT(NAME)>=2
ORDER BY NAME
HAVING
은 GROUP BY
이후에 실행 됨SELECT HOUR(DATETIME) HOUR, COUNT(DATETIME) COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)
HAVING HOUR>=9 AND HOUR<=19
ORDER BY HOUR
HOUR(DATETIME)
을 이용해 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
처음 보는 개념이라 솔루션 찾았다.
SET
을 이용해 변수명과 초기값 설정;
세미콜론 붙여줘야 함@
: 프로시저가 종료되어도 유지되므로 값을 누적할 수 있음@hour
의 초기값을 -1로 설정:=
대입 연산자SELECT (@hour := @hour + 1)
@hour 값을 1씩 증가시키면서 SELECT문 전체를 실행WHERE @hour<23
일 때까지 @hour 값이 1씩 증가SELECT ANIMAL_TYPE, IFNULL(NAME, "No name"), SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
IFNULL
을 이용해서 NULL
값일 경우 "No name" 출력
ISNULL
(칼럼,칼럼이 NULL일경우 대체할 값)
OUT
에는 있는데 INS
에는 없는 것을 찾아야 하므로
OUT
을 기준으로 INS
와 LEFT OUTER JOIN
을 하면 (ANIMAL_ID기준), OUT
의 데이터들은 무조건 가져오고 INS
에 동일한 ANIMAL_ID가 없는 경우엔 INS 필드관련한 것들은 모두 NULL
값으로 나온다.
SELECT OUTS.ANIMAL_ID ANIMAL_ID, OUTS.NAME NAME
FROM ANIMAL_OUTS OUTS LEFT OUTER JOIN ANIMAL_INS INS ON OUTS.ANIMAL_ID=INS.ANIMAL_ID
WHERE INS.ANIMAL_ID IS NULL
ORDER BY ANIMAL_ID
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME IN ("Lucy", "Ella", "Pickle", "Rogan", "Sabrina", "Mitty")
WHERE 절 내에서 ✨IN
을 이용해 특정값 여러개를 선택하는 것이 가능하다!
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE NAME LIKE '%EL%' AND ANIMAL_TYPE="Dog"
ORDER BY NAME
'-' : 글자숫자를 정해줌(ex 컬럼명 LIKE '홍_동')
'%' : 글자숫자를 정해주지않음(ex 컬럼명 LIKE '홍%')
CASE
문법CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
WHEN conditionN THEN resultN
ELSE result
END;
CASE
WHEN
THEN
END
기억!
SELECT ANIMAL_ID, NAME,
CASE
WHEN SEX_UPON_INTAKE LIKE '%Neutered%' OR
SEX_UPON_INTAKE LIKE '%Spayed%'
THEN 'O'
ELSE 'X'
END AS 중성화
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
SEX_UPON_INTAKE IN ('%Neutered%' ,'%Spayed%')
이건 안 된다. %, _을 쓰려면LIKE
가 있어야 함!
DATE_FORMAT(DATETIME, '%Y-%m-%d')
SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME, '%Y-%m-%d') as '날짜'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
SELECT empNo, empName, salary,
RANK() OVER (ORDER BY salary DESC) RANK등수
FROM employee;
SELECT empNo, empName, salary,
DENSE_RANK() OVER (ORDER BY salary DESC) DENSE_RANK등수
FROM employee;
SELECT empNo, empName, salary,
ROW_NUMBER() OVER (ORDER BY salary DESC) ROW_NUMBER등수
FROM employee;
SELECT empName, job, salary,
RANK() OVER (PARTITION BY job ORDER BY salary DESC) RANK등수
FROM employee;
-> job 별로 구분 해서 순위 매기기.