Database

Database/MySQL

[MySQL] 칼럼 값 null, 공백 체크

컬럼 값 null, 공백 체크 NULLIF IS NOT NULL을 사용하여 NULL 값을 체크했으나 아무런 값이 존재하지 않는 칼럼이 그대로 출력되는 경우가 있다. 아마 칼럼 자료형이 문자열일 것이고, 이 경우는 값에 공백이 들어있기 때문이다.. NULLIF() 함수를 사용하여 공백을 먼저 제거한 뒤 NULL 체크를 할 수 있다. NULLIF(A, B) 일 때 A == B이면 True를 NULL을 반환하고, 아니면 A를 반환한다. SELECT * FROM [table] WHERE NULLIF([column], '') IS NOT NULL; ''로 공백을 비교할 수 있으니 해당 칼럼에 저장된 값이 공백인 경우 NULL을 반환한다. TRIM() 함수를 사용해서 공백을 제거하여 확인하는 방법도 있겠지만 그럼 ..

Database

동일한 테이블을 두 번 조인해야 할 때 (join, subquery)

동일한 테이블을 두 번 참조해야 할 때 예를 들어, 다음과 같은 두 개의 테이블이 있다고 가정한다. create table board ( -- 게시글 정보 저장 uid int not null auto_increment comment 'pk', -- uid b_cate_th1_cd varchar(10) not null comment '공통코드 1차', -- 카테고리 1 b_cate_th2_cd varchar(10) not null comment '공통코드 2차', -- 카테고리 2 title varchar(100) not null comment '제목', content text comment '내용', regdt date default (current_date) comment '등록일자' writer va..

Database/MySQL

MySQL Server 연결 시 localhost와 127.0.0.1 차이

MySQL Server 연결 시 localhost와 127.0.0.1 차이 리눅스에서 MySQL 서버 연결 시 host 속성으로 localhost와 127.0.0.1은 차이가 존재한다. > mysql -uroot -p --host=localhost --socket=/tmp/mysql.sock MySQL 소켓 파일을 이용해 접속한다. 이때 호스트를 localhost로 지정하면 Unix domain socket을 이용하여 유닉스의 프로세스 간 통신(IPC, Inter Process Communication)을 하는 것이다. > mysql -uroot -p --host=127.0.0.1 --port=3306 TCP/IP를 통해 127.0.0.1(로컬 호스트)에 접속한다. 이도 자기 서버를 가리키는 루프백 IP..

Database/MySQL

[MySQL] 이번 달 데이터만 가져오기

이번 달 데이터 가져오기 데이터 출력 시 단순 한 달 전 기준이 아닌, 이번 달에 생성된 데이터만 가져와야 하는 경우가 있다. 이전 달 마지막 날짜를 구하여 계산해도 되고, 이번 달의 첫째 날짜를 구하여 계산해도 된다. MySQL에서는 last_day() 함수는 존재하지만 first_day() 함수는 존재하지 않는다. 대체 왜... 이번 달 첫째 날짜 구하기 해당 방법은 날짜 포맷이 정해져 있는 경우에 사용한다. 신나서 쿼리를 작성했으나 그리 좋은 방법은 아니라고 생각된다. 이전 달 마지막 날짜를 구하여 이번 달 데이터만 출력하는 것이 좋아 보인다. select date_format(now(), '%Y-%m-01') from dual; 데이터 포맷 형식이 % Y-%m-%d라고 가정하였을 때의 쿼리이다. ..

Database/Oracle

[Oracle] PL/SQL

PL/SQL Oracle's Procedural Language extension to SQL의 약자로, SQL 문장에서 변수 정의, 조건 처리(IF), 반복 처리(LOOP, WHILE, FOR) 등을 지원한다. 오라클 자체에 내장된 Procedure Language이다. PL/SQL 자신이 컴파일 엔진을 가지고 있으며 PL/SQL의 모든 요소는 하나 또는 두 개 이상의 블록으로 구성하여 모듈화가 가능하다. PL/SQL 문은 블록 구조로 되어 있어 다수의 SQL 문을 한 번에 Oracle DB로 보내어 수행 속도를 향상할 수 있다. 하지만 Procedure를 잘못 작성하게 되면 수행 속도를 저하시킬 수도 한다. 큰 블록(BEGIN~END) 안에 소블록(BEGIN~END)이 여러 개 들어갈 수 있다. 테이..

Database/Oracle

[Oracle SQL] UNION 과 UNION ALL 차이

UNION과 UNION ALL 차이 UNION과 UNION ALL은 합집합을 표현할 때 사용한다. -- UNION 사용 SELECT 10 data FROM tb UNION SELECT 10 data FROM tb UNION SELECT 20 data FROM tb -- UNION ALL 사용 SELECT 10 data FROM tb UNION ALL SELECT 10 data FROM tb UNION ALL SELECT 20 data FROM tb 위의 경우에서 결과 값은 다르게 나온다. UNION을 사용한 경우에는 10과 20 2개만 출력되지만 UNION ALL을 사용하면 10, 10, 20으로 총 3개의 데이터가 출력된다. UNION을 사용하면 중복을 제거해준다. 중복을 제거해야하거나 제거하지 않아야..

Database

[ERMaster] ERMaster에서 1:1 관계 표현하기

ERMaster에서 1:1 관계 표현하기 ERMaster에는 1:N 관계와 N:N 관계밖에 없다. 1:1 관계도 1:N 관계에 포함되기 때문에 1:N 관계를 먼저 설정해준 뒤 키 값에 수정을 주면 된다. Foreign Key로 받아온 TEAM_ID 칼럼도 Primary Key로 설정하여 1:1 관계를 나타낼 수 있다. 사실상 1:1 관계면 굳이 entity로 설정할 필요가 없고, 단순히 칼럼 값으로만 추가해줘도 된다. 만약 테이블 분리를 해야 하는 상황이 발생하면 위와 같은 방식으로 설정하는 것이다.

Database/Oracle

[Oracle SQL] LAG() 함수 이용해서 증감 표현하기

LAG() 함수를 이용하여 증감 표현하기 간단한 증감 표현을 예시로 들 거라서 데이터 삽입은 하지 않고, inline view를 사용하였다. 우선 데이터를 살펴보면 다음과 같다. 1일부터 5일까지 총 5일간의 주문수(ord_cnt)를 표현하였다. 이전 날짜와 비교하여 증감을 나타내고, 주문수 순위와 누적 주문수를 출력한다. 조건 이전 날짜와 현재 날짜의 주문수가 동일한 값(또는 이전 날짜의 데이터가 없음) 일 때 증감 부분은 - 로 나타낸다. 이전 날짜보다 현재 날짜의 주문수가 적은 경우 ▼로 표현하고, 이전 날짜보다 현재 날짜의 주문수가 많은 경우에는 ▲로 표현한다. 주문수 순위 부분에서 주문수가 동일한 경우 동일 순위로 표시하고, 다음 순위는 중복 순위와 상관없이 그대로 이어진다. 코드 WITH or..

Database/Oracle

[Oracle SQL] 제약 조건 (Constraint)

제약 조건(Constraint) Oracle에서는 제약 조건을 사용하여 유효하지 않은 Data가 입력되는 것을 방지한다. 제약 조건은 Table 생성 시 또는 생성 후에 정의한다. Column 또는 Table 레벨 별로 제약 조건을 적용하고, 종속된 Table의 삭제를 방지한다. 제약 조건 이름을 지정할 수 있는데, 지정하지 않은 경우 SYS_Cn 형식의 이름을 생성한다. USER_CONSTRAINTS View에서 부여된 제약 조건을 확인할 수 있다. USER_CONS_COLUMNS View에서 제약 조건과 연관된 Column을 확인할 수 있다. 유형 NOT NULL : 칼럼에 Null 값을 포함하지 않도록 지정한다. UNIQUE : Table의 모든 행에 대해 고유한 값을 갖는 칼럼 또는 칼럼의 조합을..

Database/Oracle

[Oracle SQL] DDL (Data Definition Language)

DDL(Data Definition Language) CREATE CREATE [GLOBAL TEMPORARY] TABLE [schema.]table (colunm datatype [DEFAULT expr][, ...,]); Table을 생성한다. GLOBAL TEMPORARY : 임시 Table을 생성하고, 모든 Session에서 볼 수 있다. (입력된 Data는 해당 Session에서만 확인 가능) schema : 소유자 이름과 동일하다. table, column : table 이름, column 이름 DEFAULT expr : INSERT 문에서 값을 생략했을 때 해당 Column에 사용될 기본 값 datatype : Column Data Type 및 길이 DEFAULT 옵션 데이터 insert 시..

Database/Oracle

[Oracle SQL] 트랜잭션 (Transaction)

트랜잭션(Transaction) 논리 작업 단위를 형성하는 모음을 Transaction이라 한다. 트랜잭션은 Data를 일관성 있게 변경하는 DML(Data Manipulation Language) 문, 하나의 DDL(Data Definition Language) 문, 하나의 DCL(Data Control Language) 문 중 하나로 구성된다. 트랜잭션은 실행 가능한 첫 번째 SQL문이 실행되면 시작된다. COMMIT 또는 ROLLBACK 실행 시 종료되고, DDL 또는 DCL 문 실행 시 자동으로 Commit 되므로 이때도 종료된다. 또한 사용자 종료 또는 시스템에 의한 비정상적인 종료 시에도 종료된다. 특징 원자성(Atomicity) : Data 처리의 최소 단위 일관성(Consistency) :..

Database

관계 데이터 모델, 릴레이션(Relation)과 키(Key)

관계 데이터 모델(Relational data model) 개념적 구조를 논리적 구조로 표현하는 논리적 데이터 모델이다. 하나의 개체에 대한 데이터를 하나의 릴레이션(테이블)에 저장한다. 바탕이 되는 데이터 구조로서 간단한 릴레이션(테이블)을 사용한다. 이는 곧 중첩된 복잡한 구조가 없다는 뜻이고 다른 데이터 모델에 비해 이해가 쉽다. 다른 데이터 모델에 비해 이론적인 토대가 잘 만들어져 있고, 실제 적용한 사례가 매우 풍부하여 안정적이고 좋은 성능을 보인다. 용어 릴레이션(relation) 행과 열로 구성된 테이블 행(row) 튜플(tuple) 열(column) 속성(attribute, 애트리뷰트) 도메인(domain) 하나의 속성이 가질 수 있는 모든 값의 집합으로, 속성 값을 입력 및 수정할 때 적..

밈아
'Database' 카테고리의 글 목록