개요
SQL 의 기본 개념및 실행순서와, 주로 사용되는 쿼리들을 모아정리해보았다.
메모
SQL 개념
SQL ( Structured Query Language )
사용자와 관계형 데이터베이스를 연결시켜주는 표준 검색언어 오라클에서만 사용가능한 SQL 문과 모든DBMS에서 사용 가능한 ANSI SQL 문으로 구분됨
SQL 문장의 종류 5가지와 각각의 명령문
-
DQL : 질의어 - SELECT(데이터검색)
-
DML : 데이터조작어
- INSERT(데이터입력)
- UPDATE(데이터수정)
- DELETE(데이터삭제)
- MERGE(데이터병합)
-
DDL : 데이터정의어
- CREATE(데이터베이스 객체 생성)
- ALTER(데이터베이스 객체 변경)
- DROP(데이터베이스 객체 삭제)
- RENAME(데이터베이스 객체이름 변경)
- TRUNCATE(객체 정보 절삭)
-
TCL : 트랜잭션 처리어
- COMMIT(트랜잭션 작업 반영)
- ROLLBACK(트랜잭션 작업 취소)
- SAVEPOINT(트랜잭션내 책갈피 설정)
-
DCL : 데이터 제어어
- GRANT(권한부여)
- REVOKE(권한취소)
- SQL 실행순서
-
SELECT 쿼리문을 실행했을때 FROM - WHERE GROUP BY - HAVING - SELECT - ORDER BY 순서대로 실행이 됩니다. (FROM이 가장첫번째)
-
JOIN 이 있을경우 FROM > JOIN의 ON 절과 JOIN절이 실행되고 나서 WHERE 절로 간다

-
유용한 쿼리들
시퀀스 넘버 생성
SELECT -- MS-SQL
COLUMN1,
COLUMN2,
ROW_NUMBER() OVER(ORDER BY column1) AS SEQNUMBER
FROM RMMK.FRM_SYS_XLS_FORM_DETAIL;가상테이블에서 레벨만들기
-- Oracle
SELECT LEVEL AS LV
FROM DUAL
CONNECT BY LEVEL < 3;
with 문 (가상테이블만들기)
-- MS-SQL
WITH TMP_TABLE AS (
SELECT
COLUMN1,
COLUMN2,
FROM YOUR_SCHEMA.YOUR_TABLE
)
SELECT * FROM TMP_TABLE; --위에서만든 가상테이블을 조회한다.
특정 컬럼가지고있는 테이블 조회
-- Oracle
SELECT * FROM ALL_TAB_COLUMNS
WHERE COLUMN_NAME = 'COLUMN_NAME'; --SCEN_DESC 라는 컬럼이름을 가진 테이블조회
특정 테이블만 분석할 때
-- Oracle
ANALYZE TABLE YOUR_SCHEMA.YOUR_TABLE
COMPUTE STATISTICS;
모든 테이블목록 조회
-- Oracle
SELECT TABLE_NAME, COMMENTS
FROM USER_TAB_COMMENTS
WHERE TABLE_TYPE = 'TABLE';
정규표현식 이용
-- Oracle
SELECT
REGEXP_SUBSTR('STRING', '[^,]+', 1, 1)
FROM DUAL; --조회조건중 (‘D,C,V’). 이렇게 바인딩 변수 가져올 때 문자만 D와 C만 가져오기위해서 이 함수를 사용함
SELECT
REGEXP_SUBSTR('STRING', '[^,]+', 1, LEVEL)
FROM DUAL
CONNECT BY
LEVEL <= REGEXP_COUNT('STRING', ',', 1) + 1;
ORACLE 쿼리 작성 주의사항
- orderby 절은 쿼리속도저하의 원인중하나, 꼭필요할떄만 사용
- or절도 꼭필요할때만사용
대용량 insert
(row가 몇만건,몇십만건이상 일 시) 처리방법들
- insert해야하는 데이터를 CSV ,엑셀파일 등 외부파일을 Commit Interval = 10000건 정도로 잡고 임포트 합니다.
- 2.bulk Insert(ms sql) 벌크인서트를이용한 방법 https://docs.microsoft.com/ko-kr/sql/t-sql/statements/bulk-insert-transact-sql?view=sql-server-ver15
upsert (업서트)
즉, Upsert는 중복되는 값이 있다면 Update를 하고 중복되는 값이 없다면 Insert를 하는 쿼리입니다. 좀 더 정확히 말하면 Unique Key의 값이 중복된다면 Update를 하고, Unique 컬럼의 값이 존재하지 않는다면 INSERT를 하는 것입니다.
INSERT INTO user_refresh_token (user_id, refresh_token)
VALUES (#{userId}, #{refreshToken}) ON DUPLICATE KEY
UPDATE refresh_token = #{refreshToken}유틸쿼리
B_Utill_ALL-SQL.sql B_Utill_MS-SQL.sql B.Util_POSTGRESQL-SQL.sql C_nh_oracle_Util.sql