DATABASE 12

JDBC, Spring JDBC, MyBatis, JPA 의 DB 접근 방식 알아보기

제일 처음 웹 개발 공부를 할 때 가장 먼저 배웠던 건 JDBC를 사용해 DB와 연결하는 방법이었다. 그 다음 MyBatis, JDBC Template을 사용해 각각 프로젝트를 만들어보며 DB에 접근하는 방법이 어떻게 다른지 공부했고 최근에는 intellij IDE와 JPA를 사용한 Spring Boot 프로젝트를 제작해 보기 전에 DB 접근 기술들을 전체적으로 정리 해보려고 한다. JDBC JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API로 JDBC를 통해서 DBMS의 종류에 상관없이 데이터베이스를 연결하고 작업을 처리할 수 있다. [UserVO.java] public class UserVO { private String userID..

DATABASE 2023.12.13

[MySQL] WITH문 알아보기

쿼리를 작성하다보면 서브쿼리를 사용하는 경우가 많다. 두개 이상 사용하게 되면 가독성이 떨어지고 재사용할 수가 없어서 매번 같은 쿼리를 작성해야한다. 이 때 WITH문을 사용한다. WITH 문 ? 이름을 가진 서브쿼리를 정의한 후 사용하는 구문이다. 쿼리의 전체적인 가독성을 높이고 재사용할 수 있다는 장점이 있다. 대부분의 DBMS에서 지원한다. 계층형 쿼리를 구현할 수 있다. 오라클은 11g 버전부터 계층형 쿼리를 위한 CONNECT BY 절을 지원하는데 오라클에서는 한 번만 사용되면 Inline View, 두 번 이상 사용되면 Masterialize View로 처리한다. 모든 DML에서 사용할 수 있다. 기본 구조 WITH [ 별명1 ] [ (컬럼명1 [,컬럼명2]) ] AS ( SUB QUERY )..

DATABASE 2023.07.20

[MySQL] GROUP BY 와 HAVING 알아보기

GROUP BY GROUP BY문은 동일한 값을 가진 컬럼을 기준으로 그룹별 연산을 적용한다. 그룹화를 하기 위해 집계함수 (COUNT, MAX, MIN, SUM, AVG)와 함께 자주 사용된다. 예시 테이블 BOOK BOOK_NAME CATEGORY PRICE 세이노의 가르침 소설 7000 꿀벌의 예언1 소설 14000 돈의속성 재테크 16000 구의 증명 소설 10800 바다가 들리는 편의점 소설 14000 너무나 많은 여름이 소설 14000 미식가의 수첩 요리 17000 집으로 초대 요리 27000 마음의 자유 에세이 15000 예를들어 위와 같이 BOOK 테이블이 있다고 가정하고 카테고리의 종류와 갯수를 구하고자 한다. 그럼 다음과 같이 SQL문을 작성할 수 있다. SELECT CATEGORY ,..

DATABASE 2023.07.19

[MySQL] 트랜잭션 (Transaction) 알아보기

트랜잭션 (Transaction) 이란 거래라는 사전적 의미가 있고 컴퓨터 과학 분야에선 더이상 분할이 불가능한 업무처리의 논리적인 작업 단위를 의미한다. 데이터베이스 응용 프로그램은 트랜잭션들의 집합으로 정의 가능하며 여러 단계의 처리를 하나의 처리처럼 다루는 기능이다. 여러 개의 명령어 집합이 정상적으로 처리되면 종료되며 하나의 명령어라도 잘못되면 전체 취소된다. 트랜잭션을 쓰는 이유는 일관성을 유지하면서 안정적으로 데이터를 복구하기 위해 사용한다. MySQL에서 트랜잭션은 데이터베이스 상태를 바꾸는 일종의 작업 단위로 사실 우리가 MySQL에 입력하는 모든 쿼리 명령어들은 각각 하나의 트랜잭션이라고 할 수 있다. INSERT, DELETE, UPDATE 등의 SQL명령문을 통해 데이터 상태를 바꿀 ..

DATABASE 2023.07.10

[MySQL] 서브 쿼리 (SubQuery) 알아보기

서브 쿼리 (SubQuery)란 다른 쿼리 내부에 포함되어있는 SELECT문을 말한다. 서브 쿼리를 포함하고 있는 쿼리를 외부 쿼리 (OuterQuery)라고 부르며 서브쿼리는 내부 쿼리 (InnerQuery)라고도 부른다. 서브 쿼리는 괄호 () 로 감싸져 표현된다. 서브 쿼리 실행 순서 1. 서브 쿼리 실행 - > 2. 외부 쿼리 실행 SELECT * FROM MAIN_TABLE WHERE TARGET_ID IN ( SELECT ID FROM SUB_TABLE_INDEX WHERE ID < 500 ); 서브 쿼리는 하나의 SQL문 안에 포함되어있는 또 다른 SQL문을 말하며 (SELECT * FROM TABLE)과 같이 괄호() 안에 있는 쿼리를 서브 쿼리라고 한다. 서브 쿼리(자식 쿼리,내부 쿼리)..

DATABASE 2023.07.08

[MySQL] DATEDIFF(), DATEADD() 함수 알아보기

두 개의 DATETIME 컬럼이 있을 때 두 날짜의 차이를 구하고 싶은 경우 DATE DIFF() 함수를 사용하면 된다. DATEDIFF() 함수 두 날짜의 차이를 계산하는 함수로 시작 날짜에서 종료 날짜까지의 일 수 차를 구한다. SELECT DATEDIFF(날짜형식, 시작날짜, 종료날짜) 예시 1) 두 날짜의 차이 일 수 SELECT DATEDIFF(DAY, '2017-02-13', '2017-03-15') AS '차이 일 수' -- 결과 : 30 2) 두 날짜 비교 DECLARE @Date DATETIME = '2017-02-15' IF DATEDIFF(d, @Date, '2017-02-13') > 0 SELECT '2017-02-13 미만 (미포함)' ELSE IF DATEDIFF(d, @Date..

DATABASE 2023.07.06

[MySQL] SELECT문 작성 순서와 실행 순서 알아보기

SQL 쿼리문을 작성할 때 사용되는 WHERE, GROUP BY, ORDER BY 와 같은 구문을 실행하는데는 순서가 필요하다. 순서에 의해 쿼리가 처리되고 어떻게 쿼리를 작성하느냐에 따라 성능 차이가 발생할 수 있고 쿼리 실행시 최종적으로 는 결과만 확인할 수 있기 때문에 좀 더 정확한 쿼리 작성을 위해 실행 작동 순서를 알아야한다.문법 작성 순서SELECTFROM( JOIN ON )WHEREGROUP BY( HAVING )ORDER BY( LIMIT )1. SELECT columnName 2. FROM tableName 3. JOIN ON 4. WHERE 5. GROUP BY 6. HAVING 7. ORDER BY 8. LIMIT 실행 작동 순서FROM( ON JOIN )WHEREGROUP BY( H..

DATABASE 2023.07.06

[MySQL] CONCAT(), CONCAT_WS() 함수 알아보기

테이블 조회시 여러 문자열 또는 여러 컬럼 값을 조회한 후에 하나의 문자열 또는 하나의 컬럼값으로 반환해야 하는 경우가 있다. Oracle에서는 || 를 사용해 간단하게 처리할 수 있지만 MySQL 에서는 CONCAT(), CONCAT_WS() 함수를 사용해야 한다. CONCAT() 함수 CONCAT() 함수는 둘 이상의 문자열이나 둘 이상의 컬럼값을 순서대로 합쳐서 반환하는 함수이다. 하지만 조회하거나 합쳐지는 문자열 또는 컬럼값에 NULL이 포함되어 있으면 반환되는 값도 NULL로 반환된다. 엑셀의 CONCAT 함수와 같은 기능을 가졌다. SELECT CONCAT(문자열1, 문자열2 [, 문자열3 ...]) FROM [조회 테이블명] 예시 SELECT CONCAT('HE','LL',' ','OOOO'..

DATABASE 2023.07.06

[MySQL] CASE WHEN THEN 구문 알아보기

MySQL에서 CASE문은 조건에 따라 다른 동작을 수행하도록 하는 제어 구조이다. 일반적으로 SELECT문과 함께 사용되며 SELECT문에서 결과값을 처리하거나 검색시 조건부 로직을 사용해야 하는 경우 유용하다. CASE문은 WHEN의 조건을 순차적으로 체크한 후 조건이 만족한다면 그에 해당하는 THEN 뒤의 값을 반환한다. 모든 조건을 충족하지 않는다면 마지막 ELSE에 해당하는 값을 반환한다. 기본 형식 CASE WHEN 조건1 THEN 반환값1 WHEN 조건2 THEN 반환값2 ... ELSE 반환값 END 예시 SELECT STUDENT_CODE, CASE WHEN SCORE >= 90 THEN 'A' WHEN SCORE >= 80 THEN 'B' WHEN SCORE >= 70 THEN 'C' ..

DATABASE 2023.07.06

[MySQL] ROUND(), TRUNCATE(), CEILING(), FLOOR() 함수 알아보기

숫자 데이터를 다룰 때 반올림과 버림을 많이 사용한다. MySQL에서는 반올림과 버림 기능을 제공하기 위해 ROUND() ,TRUNCATE(), CEILING(), FLOOR() 함수를 제공한다. ROUND (반올림) MySQL 쿼리에서 ROUND() 함수를 사용하면 반올림을 할 수 있다. ROUND() 함수는 두 개의 인자를 받는데 "ROUND(숫자,반올림 할 자릿수)" 형태로 사용한다. SELECT ROUND(1234.56789) FROM DUAL -- 1234 소수점 밑으로 모두 없애기 SELECT ROUND(1234.56789 ,1) FROM DUAL -- 1234.6 소수점을 기준으로 오른쪽 +1 왼쪽 -1 SELECT ROUND(1234.56789 ,4) FROM DUAL -- 1234.567..

DATABASE 2023.07.06