。゚(*´□`)゚。

코딩의 즐거움과 도전, 그리고 일상의 소소한 순간들이 어우러진 블로그

업무 24

[MyBatis] #{}과 ${}

#{} 쿼리문을 작성할 때 #{}을 사용하는 경우 PreparedStatement를 생성하게 되는데 ?에 파라미터가 바인딩되어 수행된다. 이렇게 파싱된 쿼리문은 재활용(캐싱)되기 때문에 효율적이다. 그리고 변수에 작은 따옴표(‘)가 자동으로 붙여 쿼리가 수행되기 때문에 '#{id}'와 같은 식으로 쿼리문을 작성하지 않아도 된다. ${} 값이 넣어진 채로 쿼리문이 수행된다. 그렇기 때문에 파라미터의 값이 바뀔 때마다 항상 쿼리문 파싱을 진행해야 하며 성능상의 단점이 존재한다. 그리고 쿼리문에 #{}을 사용한 것과 다르게 작은 따옴표(‘)가 붙지 않기 때문에 아래처럼 테이블 이름이나 컬럼 이름을 동적으로 결정할 때 사용할 수 있고 SQL 인젝션에 취약하다. SQL Injection 문제 SELECT * FR..

업무 2024.01.24

[SQL] SELECT 쿼리 실행 순서 처리 과정

FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY FROM 전체 테이블 결과 WHERE 조건에 맞는 결과만 갖도록 간추림 GROUP BY 선택한 컬럼으로 GROUPING 작업 HAVING WHERE과 기능은 동일하지만 GROUP BY 뒤에 오며 GROUP BY로 그룹화된 새로운 테이블에 조건 지정가능. => 전체 테이블 자체에서 쿼리를 수행하고 싶다면 where를, 전체 테이블을 그룹화 한뒤, 그 해당 그룹에서 어떠한 조건을 걸어 가져오고 싶다면 having을 사용한다. SELECT 어떤 열을 출력할지 선택 ORDER BY 행의 순서 정렬

업무 2024.01.22

[MyBatis] 설정파일

MyBatis 데이터 CRUD를 보다 편하게 하기 위해 xml로 구조화하여 Mapper 설정파일을 통해 JDBC를 구현한 영속성 프레임 워크 mybatis-config.xml mybatis에서 사용될 DB를 연동하기 위한 설정값들과 mapper.xml을 등록하기 위한 xml typeAliases: 매칭할 mapper의 sql태그의 parameter Type 별칭 설정 environments: DB 연결 설정 mappers: mapper.xml파일 연결 mybatis-mapper.xml mybatis에서 사용될 SQL구문을 담고 있는 xml XML 과 DTD 선언 mapper 태그의 namespace 속성 설정 (Mapper 인터페이스이름과 동일하게 설정) sql문을 담은 태그 설정 id 속성 parame..

업무 2024.01.22

[ORACLE 함수] EXISTS & IN

EXISTS() SELECT * FROM EXAMPLE E1 WHERE EXISTS (SELECT * FROM EXAMPLE2 E2 WHERE E1.NAME=E2.NAME); 논리연산자 중의 하나로 후행 조건절로 서브 쿼리 형태만 올 수 있음 서브 쿼리의 결과가 "한 건이라도 존재하면" TRUE 없으면 FALSE를 리턴 NULL에 대해 TRUE 리턴 처리순서: 메인쿼리 => 서브쿼리 서브쿼리의 결과가 존재하는지 여부만을 확인 IN() SELECT * FROM EXAMPLE E1 WHERE E1.NAME IN (SELECT * FROM EXAMPLE2 E2 WHERE E1.NAME=E2.NAME); ()안에 특정 값이나 서브쿼리가 올 수 있음 처리순서: 서브쿼리 => 메인쿼리 NULL에 대해 FALSE 리..

업무 2024.01.19

[ORACLE 함수] SYSDATE

오늘 날짜 구하기 SELECT SYSDATE FORM DAUL; 원하는 포맷으로 데이터 가져오기 / TO_CHAR 사용 SELECT TO_CHAR(SYSDATE, 'YYYY') AS 연도 FROM DUAL; SELECT TO_CHAR(SYSDATE, 'MM') AS 월 FROM DUAL; SELECT TO_CHAR(SYSDATE, 'DD') AS 일 FROM DUAL; SELECT TO_CHAR(SYSDATE, 'HH24') AS 시간 FROM DUAL; SELECT TO_CHAR(SYSDATE, 'MI') AS 분 FROM DUAL; SELECT TO_CHAR(SYSDATE, 'SS') AS 초 FROM DUAL; SELECT TO_CHAR(SYSDAE, 'YYYYMMDDHH24MISS') AS 전체날..

업무 2024.01.18

[ORACLE 함수] DECODE / CASE

if else와 비슷한 기능 수행 DECODE(컬럼, 조건1, 결과1, 조건2, 결과2, 조건3, 결과3,default) => ELSE 부분 생략 가능; 해당 조건이 없으면 NULL SELECT GENDER ,DECODE(GENDER, 'M', '남자', 'F', '여자') GENDER2 FORM TEMP => NULL 값 체크 가능 SELECT ENAME , COMM , DECODE(COMM, NULL, 'N', 'Y') COMM_UN FORM SCHOOL => DECODE 내부에 또 다른 DECODE 함수 사용 가능 => 조건이 많은 경우 줄바꿈을 하여 쿼리 작성 권장 [CASE] 1. If 문 방식 CASE WHEN city='seoul' THEN 'KOREA' WHEN city='tokyo' TH..

업무 2024.01.18

[ORACLE 함수] MERGE INTO

테이블에 데이터가 이미 있으면 업데이트를 실행하고, 없을 경우 값을 넣어줘야 하는 경우 MERGE INTO 테이블명 별칭 USING 대상테이블 별칭 ON JOIN할조건 WHEN MATCHED THEN UPDATE/DELETE SET ....WHEN WHEN NOT MATCHED THEN INSERT ...... 예제1 서로 다른 테이블 비교 후 MERGE INTO -1 MERGE INTO SUPER_SCORE S USING TOY_SCORE T ON (S.COURSE_ID = T.COURSE_ID AND S.STUDENT_ID = T.STUDENT_ID) WHEN MATCHED THEN UPDATE SET S.SCORE = T.SCORE WHEN NOT MATCHED THEN INSERT (S.COURS..

업무 2024.01.18