개요

SQL 의 기본 개념및 실행순서와, 주로 사용되는 쿼리들을 모아정리해보았다.

메모

SQL 개념

SQL ( Structured Query Language )

사용자와 관계형 데이터베이스를 연결시켜주는 표준 검색언어 오라클에서만 사용가능한 SQL 문과 모든DBMS에서 사용 가능한 ANSI SQL 문으로 구분됨

SQL 문장의 종류 5가지와 각각의 명령문

  1. DQL : 질의어 - SELECT(데이터검색)

  2. DML : 데이터조작어

    • INSERT(데이터입력)
    • UPDATE(데이터수정)
    • DELETE(데이터삭제)
    • MERGE(데이터병합)
  3. DDL : 데이터정의어

    • CREATE(데이터베이스 객체 생성)
    • ALTER(데이터베이스 객체 변경)
    • DROP(데이터베이스 객체 삭제)
    • RENAME(데이터베이스 객체이름 변경)
    • TRUNCATE(객체 정보 절삭)
  4. TCL : 트랜잭션 처리어

    • COMMIT(트랜잭션 작업 반영)
    • ROLLBACK(트랜잭션 작업 취소)
    • SAVEPOINT(트랜잭션내 책갈피 설정)
  5. DCL : 데이터 제어어

    • GRANT(권한부여)
    • REVOKE(권한취소)
  • SQL 실행순서
    • SELECT 쿼리문을 실행했을때 FROM - WHERE GROUP BY - HAVING - SELECT - ORDER BY 순서대로 실행이 됩니다. (FROM이 가장첫번째)

    • JOIN 이 있을경우 FROM > JOIN의 ON 절과 JOIN절이 실행되고 나서 WHERE 절로 간다

      https://blog.kakaocdn.net/dn/RsvSY/btqCEPbs2Sv/q0kvql0BKJnxitoOFkBbGK/img.png

유용한 쿼리들

시퀀스 넘버 생성

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가 몇만건,몇십만건이상 일 시) 처리방법들

  1. insert해야하는 데이터를 CSV ,엑셀파일 등 외부파일을 Commit Interval = 10000건 정도로 잡고 임포트 합니다.
  2. 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