DB
특정 기업이나 조직 또는 개인이 필요에 의해 데이터를 일정한 형태로 저장해 놓은 것을 의미한다.
DBMS
효율적인 데이터 관리뿐만 아니라 예기치 못한 사건으로 인한 데이터의 손상을 피하고 필요시 필요한 데이터를 복구하기 위한 강력한 기능의 소프트웨어(SW)이다.
SQL
관계형 DB에서 데이터 정의, 조작, 제어를 위해 사용하는 언어이다.
SQL 문장들의 종류
명령어의 종류 | 명령어 | 설명 |
데이터 조작어 (DML: Data Manipulation Language) |
SELECT | 데이터베이스에 들어 있는 데이터를 조회하거나 검색하기 위한 명령어를 말하는 것으로 RETRIEVE 라고도 한다. |
INSERT UPDATE DELETE |
데이터베이스의 테이블에 들어 있는 데이터 변형을 가하는 종류의 명령어들을 말한다. 예를 들어 데이터를 테이블에 새로운 행을 집어 넣거나, 원하지 않는 데이터를 삭제하거나 수정하는 것들의 명령어를 DML이라고 부른다. | |
데이터 정의어 (DDL: Data Definition Language) |
CREATE ALTER DROP RENAME |
테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어들로 그러한 구조를 생성하거나 변경하거나 삭제하거나 이름을 바꾸는 데이터 구조와 관련된 명령어들을 DDL이라고 부른다. |
데이터 제어어 (DCL: Data Control Language) |
GRANT REVOKE |
데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어를 DCL이라고 부른다. |
트랜잭션 제어어 (TCL: Transaction Control Language) |
COMMIT ROLLBACK |
논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업 단위(트랜잭션) 별로 제어하는 명령어를 말한다. |
테이블
DB 기본 단위이며, 데이터를 저장하는 객체이다.
- 가로 = 행 = 로우 = 튜플 = 인스턴스
- 세로 = 열 = 칼럼
정규화
데이터의 정합성 확보와 데이터 입력/수정/삭제 시 발생할 수 있는 이상현상을 방지하기 위해 중복을 제거하는 것이다.
기본키
테이블에 존재하는 각 행을 한 가지 의미로 특정할 수 있는 한 개 이상의 칼럼이다.
외부 키
다른 테이블의 기본 키로 사용되고 있는 관계를 연결하는 칼럼이다.
DDL(Data Definition Language)
데이터 정의 언어로 객체(Object)를 만들고(CREATE), 수정하고(ALTER), 삭제(DROP)하는 구문을 말한다.
오라클 객체 종류
테이블(TABLE), 뷰(VIEW), 시퀀스(SEQUENCE), 인덱스(INDEX), 패키지(PACKAGE), 프로시저(PROCEDUAL), 함수(FUNCTION), 트리거(TRIGGER), 동의어(SYNONYM), 사용자(USER)
데이터 유형
데이터 형 | 설명 |
CHAR(크기) | 고정 길이 문자 데이터 |
VARCHAR2(크기) | 가변 길이 문자 데이터(최대 2,000 BYTE) |
NUMBER | 숫자 데이터(최대 40자리) |
NUMBER(길이) | 숫자 데이터로, 길이 지정 가능(최대 38자리) |
DATE | 날짜 데이터(BC 4712년 1월 1일 ~ AD 4712년 12월 31일) |
LONG | 가변 길이 문자형 데이터(최대 2GB) |
LOB | 2GB까지의 가변 길이 바이너리 데이터 저장 가능(이미지, 실행 파일 등 저장 가능) |
ROWID | DB에 저장되지 않는 행을 식별할 수 있는 고유 값 |
BFILE | 대용량의 바이너리 데이터 저장 가능(최대 4GB) |
TIMESTAMP | DATE형의 확장된 형태 |
INTERVAL YEAR TO MONTH | 년과 월을 이용하여 기간 저장 |
INTERVAL DAY TO SECOND | 일, 시, 분, 초를 이용하여 기간 저장 |
CHAR와 VARCHAR2의 차이점
- CHAR(크기): 고정 길이 문자열 정보이며 최대 길이만큼 공간을 채운다. EX) 'AA' = 'AA '
- VARCHAR2(크기): 가변 길이 문자열 정보이며 할당된 변수 값의 바이트만 적용한다. EX) 'AA'!= 'AA '
- 테이블 명은 다른 테이블의 이름과 중복되면 안 된다.
- 테이블 내의 칼럼 명은 중복될 수 없다.
- 각 칼럼들은 , (콤마)로 구분되고 ;(세미콜론)으로 끝난다.
- 칼럼 뒤에 데이터 유형은 반드시 지정되어야 한다.
- 테이블 명과 칼럼 명은 반드시 문자로 시작해야 한다. (A-Z, a-z, 0-9, _, $, #만 사용 가능)
제약 조건(CONSTRAINTS)
테이블 작성 시 각 칼럼에 기록될 데이터에 대해 제약 조건을 설정할 수 있는데, 이는 데이터 무결성 보장을 주목적으로 한다. 즉 입력 데이터에 문제가 없는지에 대한 검사와 데이터 수정/삭제 가능 여부 검사 등을 위해 사용하는 것이다.
- PRIMARY KEY(기본키): UNIQUE & NOT NULL(칼럼의 고유 식별자로 사용하기 위함)
- UNIQUE KEY(고유키): 중복된 값을 허용하지 않음.
- NOT NULL: 데이터에 NULL 값 입력 금지
- CHECK: 저장 가능한 입력 값 범위 제한
- FOREIGN KEY(외래 키): NULL 가능, 여러 속성 가능
테이블 생성(CREATE)
테이블이나 인덱스, 뷰 등 데이터베이스 객체를 생성하는 구문이다.
표현식
CREATE TABLE 테이블 명( 칼럼 명 자료형(크기),
칼럼 명 자료형(크기),...);
CREATE TABLE MEMBER (
MEMBER_ID VARCHAR2(30) NOT NULL,
MEMBER_NAME VARCHAR2(20) NOT NULL
CREATE_DATE DATE);
테이블 구조 변경(ALTER, DROP)
ALTER
테이블에 정의된 내용을 수정할 때 사용하는 데이터 정의어로 칼럼의 추가/삭제, 제약조건의 추가/삭제, 칼럼의 자료형 변경, DEFAULT 값 변경, 테이블 명/칼럼 명/제약 조건 명 변경 등을 할 수 있다.
- 칼럼 추가: ALTER TABLE MEMBER ADD (ADDRESS VARCHAR2(100));
- 칼럼 수정: ALTER TABLE MEMBER MODIFY CREATE_DATE DEFAULT SYSDATE;
- 칼럼 삭제 1: ALTER TABLE MEMBER DROP COLUMN ADDRESS;
* 칼럼 삭제 시 참조하고 있는 칼럼이 있다면 칼럼 삭제 불가능
- 칼럼 삭제 2: ALTER TABLE MEMBER DROP COLUMN ADDRESS CASCADE CONSTRAINT;
- 칼럼 명 변경: ALTER TABLE MEMBER_COPY RENAME COLUMN MCOPY_ID TO M_ID;
- 제약 조건 추가: ALTER TABLE MEMBER ADD CONSTRAINT MCOPY_ID PRIMARY KEY(MEMBER_ID);
- 제약 조건 삭제: ALTER TABLE MEMBER_COPY DROP CONSTRAINT MCOPY_ID;
- 테이블 명 변경: ALTER TABLE MEMBER_COPY RENAME TO USER;
DROP
데이터베이스 객체를 삭제하는 구문이다.
DROP TABLE USER CASECADE CONSTRAINT;
DML(Data Manipulation Language)
데이터 조작 언어로 테이블에 값을 삽입(INSERT), 수정(UPDATE), 삭제(DELETE)하는 구문을 말한다.
DDL 명령어의 경우 실행 시 AUTO COMMIT 되지만, DML의 경우 COMMIT을 입력해야 한다.
SELECT
데이터를 조회한 결과를 Result Set이라고 하는데, SELECT 구문에 의해 반환된 행들의 집합을 의미한다.
Result Set은 0개 이상의 행이 포함될 수 있고 특정 기준에 의해 정렬 가능한 테이블의 특정 칼럼, 행, 행/칼럼 또는 여러 테이블의 특정 행/칼럼을 조회 가능하다.
작성법
SELECT 칼럼 명 [, 칼럼 명,...]
FROM 테이블 명
WHERE 조건식;
칼럼 값 산술 연산
칼럼 값에 대해 산술 연산한 결과 조회가 가능하다.
칼럼 별칭
'AS 별칭'이나 "별칭" 또는 'AS "별칭"'을 기술하여 칼럼 별칭을 지을 수 있다.
리터럴
임의로 지정한 문자열을 SELECT 절에 사용하면 테이블에 존재하는 데이터처럼 활용이 가능하다.
문자나 날짜 리터럴은 ' ' 기호를 사용하고, 리터럴은 Result Set의 모든 행에 반복 표시된다.
DISTINCT
칼럼에 포함된 데이터 중 중복 값을 제외하고 한 번씩만 표시하고자 할 때 사용한다.
SELECT 절에 1회만 기술 가능하다.
INSERT
테이블에 새로운 행을 추가하여 테이블의 행 개수를 증가시키는 구문이다.
INSERT 예시
INSERT INTO MEMBER VALUES ('LINDA', 'ADMIN', DEFAULT);
* 모든 칼럼에 INSERT 하고 싶은 경우 칼럼 명 생략이 가능하다. 단, 칼럼의 순서를 지켜서 VALUES에 값을 기입해야 한다.
INSERT ALL
INSERT 시 서브 쿼리가 사용하는 테이블이 같은 경우 두 개 이상의 테이블에 INSERT ALL을 이용하여 한 번에 삽입 가능하다. 단, 각 서브 쿼리의 조건절이 같아야 한다.
UPDATE
테이블에 기록된 칼럼 값을 수정하는 구문으로 테이블 전체 행 기수는 변화가 없다.
UPDATE 예시
UPDATE MEMBER_COPY
SET MEMBER_NAME = '다연'
WHERE MEMBER_ID = 'LINDA';
* WHERE 조건을 설정하지 않으면 모든 행의 칼럼 값이 변경된다.
DELETE
테이블의 행을 삭제하는 구문으로 테이블의 행 개수가 줄어든다.
DELETE 예시 1
DELETE FROM MEMBER
WHERE MEMBER_ID = 'LINDA'
* WHERE 조건을 설정하지 않으면 모든 행이 삭제된다.
* FOREIGN KEY 제약 조건이 설정되어 있는 경우 참조되고 있는 값에 대해선 삭제가 불가능하다.
삭제 시 FOREIGN KEY 제약 조건으로 칼럼 삭제가 불가능한 경우, 제약 조건을 비활성화할 수 있다.
DELETE 예시 2
DELETE FROM MEMBER_COPY
DISABLE CONSTRAINT DEPT_ID CASECADE;
TRUNCATE
테이블 전체 행 삭제 시 사용하며 DELETE 보다 수행 속도가 빠르고 ROLLBACK을 통해 복구가 불가능하다.
또한 DELETE와 마찬가지로 FOREIGN KEY 제약 조건일 때는 적용이 불가능하기 때문에 제약 조건을 비활성화해야 삭제할 수 있다.
TRUNCATE 예시
TRUNCATE TABLE MEMBER;
* 모든 칼럼이 삭제되긴 하나 테이블 구조는 남아있다.
TCL(Transaction Control Language)
트랜잭션이란 밀접히 관련되어 분리될 수 없는 1개 이상의 DB 조작이며 논리적 연산 단위이다.
COMMIT: 올바르게 반영된 데이터를 DB에 반영한다.
ROLLBACK: 트랜잭션 시작 이전의 상태로 되돌린다. 즉 COMMIT 되지 않은 모든 트랜잭션을 ROLLBACK 한다.
SAVEPOINT: 저장 지점이다.
트랜잭션의 특성
- 원자성(atomicity): 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않아야 한다.
- 일관성(consistency): 트랜잭션 실행 전 DB 내용이 잘못되지 않으면 실행 후도 잘못되지 않아야 한다.
- 고립성(isolation): 트랜잭션 실행 도중 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어선 안된다.
- 지속성(durability): 트랜잭션이 성공적으로 수행되면 DB의 내용은 영구적으로 저장된다.
연산자의 종류
연결 연산자
'||'를 사용하여 여러 칼럼을 하나의 칼럼인 것처럼 연결하거나 칼럼과 리터럴을 연결한다.
논리 연산자
여러 개의 제한 조건 결과를 하나의 논리 결과로 만들어 준다.
연산자 | 설명 |
AND | 여러 조건이 동시에 TRUE일 경우에만 TRUE 값을 반환 |
OR | 여러 조건들 중에 어느 하나의 조건만 TRUE이면 TRUE값 반환 |
NOT | 조건에 대한 반대 값으로 반환(NULL 제외) |
비교 연산자
표현식 사이의 관계를 비교하기 위해 사용하고 비교 결과는 논리 결과(TRUE/FALSE/NULL) 중 하나가 된다.
단, 비교하는 두 칼럼 값/표현식은 서로 동일한 데이터 타입이어야 한다.
연산자 | 설명 |
= | 같다 |
>,< | 크다 / 작다 |
>=, =< | 크거나 같다 / 작거나 같다 |
<>, !=, ^= | 같지 않다 |
BETWEEN A AND B | 비교하려는 값이 지정한 범위에 포함되면 TRUE를 리턴하는 연산자이며, 상한 값과 하한 값의 경계도 포함된다. |
LIKE / NOT LIKE | 비교하려는 값이 지정한 특정 패턴을 만족하면 TRUE를 리턴하는 연산자이며, '%', '_'를 와일드 카드로 사용한다. |
IS NULL / IS NOT NULL | NULL 여부를 비교하는 연산자이다. |
IN / NOT IN | 비교 값 목록에 포함 / 미포함 되는지 여부 비교 |
NULL 값과의 수치 연산은 NULL 값을 리턴한다.
NULL 값과의 비교 연산은 거짓(FALSE)을 리턴한다.
와일드카드
* : 모든
% : 모든
- : 한 글자
연산자 우선순위
우선순위 | 연산자 |
1 | 산술 연산자 |
2 | 연결 연산자 |
3 | 비교 연산자 |
4 | IS NULL / IS NOT NULL, LIKE, IN / NOT IN |
5 | BETWEEN AND / NOT BETWEEN AND |
6 | 논리 연산자 - NOT |
7 | 논리 연산자 - AND |
8 | 논리 연산자 - OR |
ROWNUM
원하는 만큼의 행을 가져올 때 사용한다.
SELECT * MEMBER_ID FROM MEMBER
WHERE ROWNUM = 1;
함수(Function)
하나의 큰 프로그램에서 반복적으로 사용되는 부분들을 분리하여 작성해 놓은 작은 서브 프로그램이다.
호출하여 값을 전달하면 결과를 리턴하는 방식으로 사용된다.
유형
여러 개 값 전달 → 단일행 함수 → 결과 값 여러 개 | 여러 개 값 전달 → 그룹 함수 → 결과 값 1개 |
단일 행 함수 | 그룹 함수 |
각 행마다 반복적으로 적용되어 입력받은 행의 개수만큼 결과를 반환한다. | 특정 행들의 집합으로 그룹이 형성되어 적용된다. 그룹 당 1개의 결과를 반환한다. |
문자형 함수
LENGTH
주어진 칼럼 값/문자열의 길이(문자 개수)를 반환한다.
작성법 | 리턴 값 타입 |
LENGTH(CHAR|STRING) | CHARACTER |
INSTR
지정한 위치부터 지정한 숫자 번째로 나타나는 문자의 시작 위치를 반환한다.
작성법 | 리턴 값 타입 |
INSTR(STIRNG, STR, [POSITION,[OCCURRENCE]]) | NUMBER |
* STRING: 문자 타입 칼럼 또는 문자열
* STR: 찾으려고 하는 문자열
* POSITION: 찾을 위치의 시작 값(기본 값 1)
* OCCURRENCE: SUBSTRING이 반복될 때 지정하는 빈도(기본 값 1), 음수 사용 불가
LTRIM/RTRIM
주어진 칼럼, 문자열의 왼쪽/오른쪽에서 지정한 STR에 포함된 모든 문자를 제거한 나머지를 반환한다.
작성법 | 리턴 값 타입 |
LTRIM(STRING, STR) / RTRIM(STRING, STR) | CHARACTER |
* STRING: 문자 타입 칼럼 또는 문자열
* STR: 제거하려는 문자(열), 생략 시 공백 문자
TRIM
주어진 칼럼, 문자열의 앞/뒤/양쪽에 있는 지정한 문자를 제거한 나머지를 반환한다.
작성법 | 리턴 값 타입 |
TRIM(STRING) TRIM(CHAR FROM STRING) TRIM(LEADING | TRAILING | BOTH [CHAR] FROM STRING) |
CHARACTER |
* STRING: 문자 타입 칼럼 또는 문자열
* CHAR: 제거하려는 문자여(열), 생략 시 공백 문자
* LEADING: TRIM 할 CHAR의 위치 지정, 앞(LEADING)/뒤(TRAILING)/양쪽(BOTH) 지정 가능
→ 기본 값은 양쪽
SUBSTR
칼럼이나 문자열에서 지정한 위치부터 지정한 개수의 문자열을 잘라내어 반환한다.
작성법 | 리턴 값 타입 |
SUBSTR(STRING, POSITION, [LENGTH]) | CHARARTER |
LOWER / UPPER/ INITCAP
칼럼의 문자 혹은 문자열을 소문자/대문자/첫 글자만 대문자로 변환하여 반환한다.
작성법 | 리턴 값 타입 |
LOWER(STRING) / UPPER(STRING) / INICAP(STRING) | CHARACTER |
CONCAT
칼럼의 문자 혹은 문자열을 두 개 전달받아 하나로 합친 후 반환한다.
작성법 | 리턴 값 타입 |
CONCAT(STRING, STRING) | CHARACTER |
REPLACE
칼럼의 문자 혹은 문자열에서 특정 문자(열)를 지정한 문자(열)로 바꾼 후 반환한다.
작성법 | 리턴 값 타입 |
REPLACE(STRING, STR1, STR2) | CHARACTER |
* STRING: 문자 타입 칼럼 또는 문자열
* STR1: 변경하려고 하는 문자 혹은 문자열
* STR2: 변경하고자 하는 문자 혹은 문자열
숫자형 함수
구분 | 입력 값 타입 | 리턴 값 타입 | 설명 |
ABS | NUMBER | NUMBER | 절대 값 리턴 |
MOD | 입력 받은 수를 나눈 나머지 값 반환 | ||
ROUND | 특정 자릿수에서 반올림 | ||
FLOOR | 버림(소수점 아래를 잘라냄) | ||
TRUNC | 특정 자릿수에서 잘라냄 | ||
CEIL | 올림(소숫점 아래에서 올림) |
날짜형 함수
구분 | 입력 값 타입 | 리턴 값 타입 | 설명 |
SYSDATE | DATE | 시스템에 저장된 현재 날짜 반환 | |
MONTHS_BETWEEN | DATE | NUMBER | 두 날짜를 전달받아 몇 개월 차이인지 계산하여 반환 |
ADD_MONTHS | DATE | 특정 날짜에 개월 수를 더하여 반환 | |
NEXT_DAY | 특정 날짜에서 인자로 받은 요일이 최초로 다가오는 날짜 반환 | ||
LAST_DAY | 해당 달의 마지막 날짜 반환 | ||
EXTRACT | 년, 월, 일 정보를 추출하여 반환 |
1 = 하루, 1/24 = 1시간, 1/24/60 = 1분
형 변환 함수
구분 | 입력 값 타입 | 리턴 값 타입 | 설명 |
TO_CHAR | DATE / NUMBER | CHARACTER | 날짜형 혹은 숫자형을 문자형으로 변환 |
TO_DATE | CHARACTER / NUMBER | DATE | 문자형 혹은 숫자형을 날짜형으로 변환 |
TO_NUMBER | CHARACTER | NUMBER | 문자형을 숫자형으로 변환 |
NULL 관련 함수(NULL은 0 또는 공백이 아님)
NVL
NULL로 되어 있는 칼럼의 값을 인자로 지정한 숫자 혹은 문자로 변경하여 반환한다.
작성법 | 리턴 값 타입 |
NVL(P1, P2) | NUMBER / CHARACTER |
* P1: NULL 데이터를 처리할 칼럼 명 혹은 값
* P2: NULL 값을 대체하고자 하는 값
단, 공집합을 바꿔주진 않는다.
SQL Server 함수
NULLIF(표현식 1, 표현식 2): 표현식 1이 표현식 2와 같으면 NULL을 반환하고 아니면 표현식 1을 출력한다
COALESCE(표현식 1, 표현식 2): NULL이 아닌 최초의 표현식을 반환한다. 모두 NULL이면 NULL을 반환한다.
EX) COALSECE(NULL, NULL, 'A') → 'A'
선택 함수
DECODE
비교하고자 하는 값 또는 칼럼이 조건식과 같으면 결과 값을 반환한다.
작성법 | 리턴 값 타입 |
DECODE(표현식, 조건1, 결과1, 조건2, 결과2, ..., DEFAULT) | 결과 |
* 표현식: 값에 따라 선택을 다르게 할 칼럼 혹은 값
* 조건: 해당 값이 참인지 거짓인지 여부 판단
* 결과: 해당 조건과 일치하는 경우 반환할 값
* DEFAULT: 모든 조건이 불일치 시 반환할 값
CASE
비교하고자 하는 값 또는 칼럼이 조건식과 같으면 결과 값을 반환한다.
작성법 | 리턴 값 타입 |
CASE WHEN 조건1 THEN 결과1 WHEN 조건2 THEN 결과2 ... ELSE 결과N END |
결과 |
* 조건: 해당 값이 참인지 거짓인지 여부 판단
* 결과: 해당 조건과 일치하는 경우 반환할 값
다중행 집계 함수
다중행 집계 함수란 여러 행들의 그룹이 모여서 그룹 당 단 하나의 결과를 돌려주는 함수이다.
GROUP BY 절은 행들의 소그룹화 한다.
SELECT, HAVING, ORDER BY 절에 사용 가능하다.
- ALL: DEFAULT 옵션, 생략 가능
- DISTINCT: 같은 값을 하나의 데이터로 간주하는 옵션
구분 | 설명 |
SUM | NULL 값을 제외한 그룹의 누적 합계 반환 |
AVG | NULL 값을 제외한 그룹의 평균 반환 |
COUNT(*) | NULL 값을 포함한 그룹의 총 개수 반환 |
COUNT(표현 식) | NULL값을 제외한 테이블 조건을 만족하는 행의 개수 반환 |
MAX | 그룹의 최대 값 반환 |
MIN | 그룹의 최소 값 반환 |
STDDEV | 그룹의 표준 편차 반환 |
VARIAN | 그룹의 분산 반환 |
GROUP BY, HAVING 절의 특징
- GROUP BY 절을 통해 소그룹별 기준을 정한 후, SELECT 절에 집계 함수를 사용한다.
- 집계 함수의 통계 정보는 NULL 값을 가진 행을 제외하고 수행한다.
- GROUP BY 절에선 ALIAS 사용이 불가하다.
- 집계 함수는 WHERE 절에 올 수 없다.
- HAVING 절에는 집계 함수를 이용하여 조건 표시가 가능하다.
- HAVING 절은 일반적으로 GROUP BY 절 뒤에 위치한다.
SEARCHED_CASE_EXPRESSION
CASE WHEN LOC = 'A' THEN 'B'
SIMPLE_CASE_EXPRESSION
CASE LOC WHEN 'A' THEN 'B' = DECODE(LOC, 'A', 'B')
ELSE NULL이 생략되어 있다.
ORDER BY 특징
- SQL 문장으로 조회된 데이터들을 다양한 목적에 맞게 특정한 칼럼을 기준으로 정렬하여 출력하는 데 사용한다.
- ORDER BY 절에 칼럼 명 대신 ALIAS 명이나 칼럼 순서를 나타내는 정수도 사용 가능하다.
- DEFAULT 값으로 오름차순(ASC)이 적용되며, DESC 옵션을 통해 내림차순으로 정렬이 가능하다.
- SQL 문장의 제일 마지막에 위치한다.
- SELECT 절에서 정의하지 않은 칼럼 사용이 가능하다.
표현식
SELECT 칼럼 명 [, 칼럼 명,...]
FROM 테이블 명
WHERE 조건식
ORDER BY 칼럼 명 | 별칭 | 칼럼 순번 정렬 방식 [NULLS FIRST | LAST];
ORACLE에선 NULL을 가장 큰 값으로 취급하며, SQL Server에선 NULL을 가장 작은 값으로 취급한다.
SELECT 문장 실행 순서
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
- 발췌 대상 테이블을 참조한다. (FROM)
- 발췌 대상 데이터가 아닌 것은 제거한다. (WHERE)
- 행들을 소그룹화 한다. (GROUP BY)
- 그룹핑된 값의 조건에 맞는 것만 출력한다. (HAVING)
- 데이터 값을 출력/계산한다. (SELECT)
- 데이터를 정렬한다. (ORDER BY)
메모리에 모든 칼럼을 올림으로 ORDER BY에서 SELECT에 정의 안 된 칼럼을 작성해도 된다.
SQL Server의 WITH TIES
SQL Server의 Top N 질의문에서 N에 해당하는 값이 동일한 경우 함께 출력되도록 하는 WITH TIES 옵션을 ORDER BY 절과 함께 사용해야 한다.
SELECT TOP(2) WITH TIES ENAME, SAL
FROM EMP
ORDER BY SAL DESC;
급여가 높은 2명을 내림차순으로 출력하는데, 같은 급여를 받는 사원은 같이 출력한다.
JOIN
하나 이상의 테이블에서 데이터를 조회하기 위해 사용하고 수행 결과는 하나의 RESULT SET으로 나온다.
일반적으로 행들은 PK나 FK 값의 연관에 의해 JOIN이 성립된다. 어떤 경우에는 PK, FK의 관계가 없어도 논리적인 값들의 연관만으로 JOIN 성립이 가능하다.
여러 테이블로부터 원하는 데이터를 조회하기 위해선 전체 테이블 개수에서 최소 N-1개 만큼의 JOIN 조건이 필요하다.
EQUI JOIN
2개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하는 경우에 사용하며, 대부분 PK, FK의 관계를 기반으로 한다.
EQUI JOIN 문장
SELECT 테이블1.칼럼명, 테이블2.칼럼명, ...
FROM 테이블1, 테이블2
WHERE 테이블1.칼럼명1, 테이블2.칼럼명2;
→ WHERE 절에 JOIN 조건을 넣는다.
ANSI/ISO SQL 표준 EQUI JOIN 문장
SELECT 테이블1.칼럼명, 테이블2.칼럼명, ...
FROM 테이블 1 INNER JOIN 테이블
ON 테이블1.칼럼명1 = 테이블2.칼럼명2;
→ ON 절에 JOIN조건을 넣는다.
NON EQUI JOIN
2개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하지 않는 경우에 사용하며, '=' 연산자가 아닌 BETWEEN, >, <= 등의 연산자를 사용한다.
'🥴 SQLD' 카테고리의 다른 글
[과목 II] 제 3장 SQL 최적화 기본 원리 (0) | 2022.08.27 |
---|---|
[과목 II] 제 2장 SQL 활용 (0) | 2022.08.27 |
[과목 I] 제 2장 데이터 모델과 성능 (0) | 2022.08.18 |
[과목 I] 제 1장 데이터 모델링의 이해 (0) | 2022.08.18 |