본문 바로가기
관리자

Programming-[Backend]

(394)
[SQLD]10. SQL 기본 6 - UNION UNION ALL 차이, MINUS(EXCEPT), Connect by, 서브쿼리 inline view, scalar subquery 1. UNION 과 UNION ALL의 차이 UNION은 두 개의 테이블을 하나로 만드는 연산이다. 두 개 테이블의 컬럼 수, 컬럼 데이터 형식이 모두 일치해야한다. UNION 연산은 두 개의 테이블을 하나로 합치면서 중복된 데이터를 제거한다. 그래서 UNION은 정렬을 발생시킨다. UNION ALL은 중복을 제거하거나 정렬을 유발하지 않는다. ALL 이니까 중복제거 없이 전부 보여준다고 기억하면 좋을 것 같다. SELECT * FROM DEPT; UNION SELECT * FROM DEPT; 2. MINUS(EXCEPT) MINUS는 두 개의 테이블의 차집합을 구하는 연산이다. 선행 SELECT문에는 있고, 후행 SELECT 문에는 없는 집합을 조회한다. MSSQL에서는 EXCEPT로 쓴다. SELEC..
[SQLD] 9. SQL 기본 5 - WITH, GRANT, SAVEPOINT, HASH JOIN, INTERSECT, CROSS JOIN 1. WITH 구문 WITH 구문은 서브쿼리를 사용해서 임시 테이블이나 뷰처럼 사용할 수 있는 구문이다. WITH로 지정하는 서브쿼리에 별칭을 지정할 수 있으며, 옵티마이저는 SQL을 인라인 뷰나 임시 테이블로 판단한다. 주로 서브쿼리문의 재사용성을 높이기 위해 사용한다. 특정 조건이나 데이터를 반복적으로 조회해야할 때, WITH 구문을 통해서 저장해놓고 사용하면 편리하다. 예제 ) WITH W_EMP AS (SELECT * FROM EMP WHERE DEPTNO = 30) SELECT * FROM W_EMP; 2. DCL 문 : GRANT, REVOKE DCL(Data Control Language)는 보통 잘 사용하지 않는다. 실무에서 사용하는 클라우드 서비스에서는 이를 한 단계 더 추상화한 형태로 ..
[TIL] JPA Expressions Date 오늘 날짜 또는 상수 값 넣기 : dateTemplate, SQL function(내장함수) 목표 JPA의 select 구문에 내장함수(SQL function)이나 상수값을 넣는다. 코드 다음과 같이 넣어주면 된다. return jpaQueryFactory .select(Projections.constructor(XXXDto.class, Expressions.as(Expressions.dateTemplate(Date.class, "function('current_date')"), "약어"), Expressions.as(Expressions.asNumber(0).intValue(), "약어"), Expressions.as(Expressions.asString("-"), "약어"), ... 중략 해석 & 배울점 1. Select 구문에는 Expressions로 내장함수, 상수값을 적을 수 있고, E..
[SQLD] 8. SQL 기본 4 - NULL, 형변환, 내장형 함수, ROWNUM/ROWID 1. NULL의 특징 및 관련 함수 Null의 특징 NULL과 숫자 혹은 날짜를 더하면 NULL이 된다. NULL과 어떤 값을 비교할 때, '알 수 없음'이 반환된다. Null 관련 함수(Oracle DB) NVL Null이면 다른 값으로 바꾼다. NVL(age, 99)는 age 컬럼이 null값을 가지면 99로 바꾼다. NVL2 NVL + DECODE라고 할 수 있다. NVL2(age, 1, 0)은 age 컬럼이 null이 아니면 1, null이면 0을 반환한다. NULLIF 두 값이 같으면 null, 아니면 첫 번째 값을 반환한다. NULLIF(exp1, exp2)는 exp1 = exp2이면 null, 아니면 exp1을 반환한다. COALESCE(합치다) NULL이 아닌 최초의 인자값을 반환한다. C..
[TIL] INSERT INTO 여러 개 한 번에 넣기!(bulk insert, table insert) 1. 기존 DB에 있는 값들을 바탕으로 여러 인스턴스들을 한 번에 삽입하고 싶을 때 INSERT INTO (필드값1, 필드값2, ...) SELECT col1, col2, ... FROM ... WHERE ... INSERT INTO 뒤에 그냥 SELECT문으로 시작하여 삽입을 원하는 값들을 테이블로 만들어주면 된다! 그림 1대로 하지말고, 그림 2처럼 하면 된다. 2. insert into 자체를 정말 여러 개(수 백개 수준) 넣어야할 때 뭔가 초기값을 수백개 수준으로 넣고 싶다면 (위에서 그림 1대로 하고 싶다면), 열편집 기능을 사용한다. 1. 정제되지 않은 데이터를 메모장에 붙여넣는다. (뒤에서 notepad ++ 프로그램 사용할 것임) 2. 전체 복사해서 엑셀에 붙여넣고, 데이터 -> 텍스트 나..
[SQLD] 7. SQL 기본 3 - 데이터베이스 로그, TRUNCATE, Order by와 index 힌트, like문 underscore 1. 데이터베이스 로그 데이터 베이스는 트랜잭션이 발생하면 데이터베이스의 무결성을 확보하기 위해서 로그 파일을 남긴다. 트랜잭션이 일어나는 도중에 정전이나 예기치 못한 특별한 상황이 발생하여 시스템이 다운될수도 있다. 따라서 데이터베이스와 관련된 로그파일을 남겨두어 트랜잭션의 원자성이 깨진 부분 등을 복구할 수 있도록 한다. 다만 로그는 모든 정보를 남기는 것이 아니라, insert나 update 등 데이터의 변화가 생길 때만 기록을 남긴다. select 처럼 조회하는 부분은 로그 파일에 기록하지 않는다. MSSQL의 로그파일 관리(참조1) MSSQL은 3가지 타입의 로그파일을 남긴다. Primary Data File : 주 데이터 파일이며 데이터베이스의 나머지 파일들을 가리키고 있는 파일이다. 모든 데..
[SQLD] 6. SQL 기본 2 - CASCADE, 테이블-컬럼 변경, 뷰(VIEW) SQL 기본 문법에 대해서는 대부분 알고 있고, 문서로 읽고 기억하는 것보다는 실제로 SQL문을 작성 및 실행해보는 것이 훨씬 빠르고, 이해에도 유리하다고 생각한다. 이 글 뒤부터의 내용은 내가 실무에서 잘 사용 안 해본 내용 또는 이론적인 내용들만 요약하여 기록해놓는다. CASCADE 옵션 CASCADE에 대해서는 JPA를 학습할때 배웠는데, SQL 자체의 DDL 문법중 하나이다. 책에서 나오는 예시는 다음과 같다. //부서 DEPT 테이블 생성 Create Table DEPT ( deptno varchar2(4) primary key, deptname varchar2(20) ); INSERT INTO DEPT VALUES ('1000', '인사팀'); INSERT INTO DEPT VALUES ('1..
[SQLD] 5. SQL 기본 1 - 관계형 데이터베이스, 기본 용어, SQL 종류, 실행순서 1. 관계형 데이터베이스(Relation Databse)와 기본 용어 관계형 데이터베이스는 1970년대 E.F. Codd 박사의 논문에서 처음 소개된 데이터베이스이다. 테이블끼리 조인 연산을 하여 수학적 합집합, 교집합, 차집합 등의 개념을 도입한다. 데이터 베이스 종류 데이터 베이스의 종류에는 계층형, 네트워크형, 관계형 데이터베이스가 있다. 일반적인 데이터베이스는 관계형으로 릴레이션을 사용해서 집합, 관계 연산을 한다. 계층형 데이터베이스는 트리(Tree) 형태의 자료구조에 데이터를 저장하고 관리하며, 네트워크형 데이터베이스는 Owner와 Member 형태로 데이터를 저장한다. 계층형은 1대N의 구조, 네트워크형은 1대N 뿐만 아니라 M대N의 관계도 표현이 가능하다. -> 릴레이션은 행과 열의 관계를..