데이터베이스 7

DB 커넥션 풀 (Connection Pool)

사용 배경 실제 서비스 운영 환경에서는 우리가 개발한 자바 프로그램(웹 애플리케이션)과 데이터베이스는 서로 다른 시스템이다. 따라서 DB를 사용하기 위해 데이터베이스 드라이버와 URL을 이용해 커넥션을 생성한다. 이때, 자바 프로그램에서 DBMS로 커넥션을 생성하는 시간은 컴퓨터 입장에서는 매우 길기 때문에 DB 커넥션 생성은 전체 성능에 영향을 줄 수 있으며, 동시에 접속하는 사용자수가 많으면 사용자마다 DB 커넥션을 생성해서 DBMS에 부하를 준다. DB 커넥션 획득 과정 1. 사용자가 WAS에 요청 2. 애플리케이션 로직이 DB 드라이버를 통해 커넥션 조회 요청 3. DB 드라이버가 DB에 TCP/IP 커넥션 연결 4. DB에 ID/PW와 같은 부가정보 전달(인증정보 전달) 5. 인증완료 시, DB..

데이터베이스 2023.11.04

[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