SQL 4

[Oracle] 오라클로 LIMIT 구현 하기

MySQL에서는 상위 n개의 검색 결과를 반환하기 위해 limit n 을 사용했는데 oracle에서는 limit 함수를 사용할 수 없다. 그렇다면 어떤 방법으로 상위 n개의 검색 결과를 조회할 수 있을까? 바로 rownum 을 이용하는 것이다. rownum은 조회된 순서대로 순번을 매기는 것으로, where 절에서 rownum = 1 을 사용하면 상위 1개의 열을 조회할 수 있다. 이 외에도 다양한 연산자를 이용해 원하는 위치의 검색 결과를 받을 수 있다. 그러나 rownum은 order by 등이 적용되지 않은 상태의 rownum을 가지고 있으므로 이것이 적용된 검색 결과를 조회하고 싶다면 subquery를 이용해야 한다. select * from ( select * from table order by..

데이터베이스 2022.03.16

[프로그래머스] 입양 시각 구하기(2)

0시부터 23시까지 시간대 별로 입양이 몇 건이 발생했는지 조회해야 한다. 실제 테이블에는 9시부터 17시까지의 기록밖에 없기 때문에 쿼리문에서 로컬 변수를 활용해야 한다. 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; 1. SET @변수명 := 초기값; 으로 변수를 선언한다. @가 붙은 변수는 프로시저가 종료되어도 유지된다. 2. SELECT (@hour := @hour + 1) 은 @hour을 1씩 증가하며 전체 SELECT 문을 실행하며 WHERE 문으로 인해..

데이터베이스 2021.11.28

[SQL] WHERE 과 HAVING 의 차이

WHERE SELECT * FROM 테이블 WHERE 조건절; WHERE 은 기본적인 조건절로 항상 FROM 뒤에 위치하며 다양한 비교 연산자로 구체적인 조건을 줄 수 있다. HAVING SELECT * FROM 테이블 GROUP BY 필드 HAVING 조건절; 항상 GROUP BY 뒤에 위치하며 WHERE 과 마찬가지로 다양한 비교 연산자로 조건을 줄 수 있다. 둘다 필드에 조건을 줄 수 있다는 것은 동일하나, WHERE은 기본적으로 모든 필드에 조건을 둘 수 있지만 HAVING은 GROUP BY로 그룹화 된 필드에 조건을 줄 수 있다. 또한, HAVING에서 조건을 줄 필드는 SELECT에 반드시 명시되어 있어야 한다. 만약 두 조건절을 함께 사용한다면 아래와 같은 형태가 된다. SELECT * FR..

데이터베이스 2021.11.27