1. 관계형 데이터베이스
1. 데이터베이스
- 데이터를 일정한 형태로 저장해놓은 것
- 종류
- 계층형 : 트리 자료구조 사용, 1:N 관계 표현
- 네트워크형 : 오너와 멤버 형태, M:N
- 관계형 : 릴레이션(테이블)에 데이터 저장, 집합연산, 관계 연산 가능
2. 관계형 데이터베이스
- 정규화를 통해 이상 현상 및 중복 데이터 제거
- 동시성 관리와 병행 제어를 통해 데이터 동시 조작 가능
- 집합 연산 합집합(union), 차집합(difference), 교집합(intersection), 곱집합(Cartesian Product)
- 관계 연산
- 선택 (Selection) : 조건에 맞는 행(튜플|가로) 조회
- 투영 (Projection) : 조건에 맞는 속성(컬럼|세로) 조회
- 결합 (Join) : 공통 속성(컬럼)을 사용해서 새로운 릴레이션(테이블) 생성
- 나누기 (Division) : 공통 요소를 추출하고 분모 릴레이션의 속성을 삭제한 후 중복된 행 제거
3. SQL 개념
- Structured Query Language
- 데이터 입력, 수정, 삭제, 조회 기능을 위해 RDB에서 사용하는 언어
- 종류
- DML (Data Manipulation Language) : 데이터 조작어 SELECT, INSERT, UPDATE, DELETE
- DDL (Data Definition Language) : 데이터 정의어 CREATE, ALTER, DROP
- DCL (Data Control Language) : 데이터 제어어 데이터베이스 접근 권한 부여 및 회수 GRANT, REVOKE
- TCL (Transaction Control Language) : 트랜잭션 제어어 데이터 조작어로 조작한 결과를 논리적 작업 단위 별로 제어 COMMIT, ROLLBACK
- 테이블 RDB의 기본 단위, 데이터를 저장하는 객체, 칼럼과 행의 2차원 구조
2. DDL (Data Definition Language) 데이터 정의어
1. 데이터 타입 ORACLE(SQL SERVER)
- CHAR (L) : 고정 길이 문자열, 데이터 넣고 남은 공간은 공백으로 채움
- VARCHAR(L) : 가변 길이 문자열,
- NUMBER(L,D) : 숫자형 (D는 소수점 자리수)
- DATE, DATETIME : 날짜형 (데이터 크기 지정 x)
2. CREATE TABLE
- 테이블명과 컬럼명 명명 규칙
- 알파벳, 숫자, _, $, # 만 사용가능
- 대소문자 구별 X
- 단수형 권고
- 데이터 무결성 유지를 위해 제약 조건을 사용함
- 복제 테이블은 원본 테이블의 제약조건중 NOT NULL 만 적용됨
- PRIMARY KEY : 테이블 당 하나의 기본키 존재, 기본키 생성시 DBMS가 자동으로 인덱스 생성, NULL X
- FOREIGN KEY : 참조하는 다른 테이블의 PK
- ALTER TABLE 테이블명 ADD CONSTARINT 컬럼명 FOREIGN KEY 컬럼명 REFERENCES 테이블명(컬럼명);
- UNIQUE KEY : 행(튜플|가로) 식별가능한 컬럼
- DEFAULT : 디폴트 값 설정
- NOT NULL
- CHECK : 입력값의 종류 및 범위 제한
- DESCRIBE 테이블명 : 테이블 구조 확인
3. ALTER TABLE
- 테이블 컬럼(속성|세로) 수정 명령어
- 컬럼 추가
- ALTER TABLE 테이블명 ADD (칼럼명 데이터타입);
- 마지막 컬럼에 추가됨 (위치 지정 불가)
- 컬럼 삭제
- ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
- 삭제 후 복구 불가
- 컬럼 설정 변경
- ALTER TABLE 테이블명 MODIFY (컬럼명 데이터타입 제약조건);
- null 값만 있거나, 튜플이 없는 경우에만 컬럼 크기 변경 가능
- null 값만 있는 경우 데이터 타입 변경 가능
- null 값이 없는 속성의 경우 not null 제약사항 추가 가능
- default 설정해도 이전에 추가된 데이터에는 반영안되고 default 설정 이후에 들어온 데이터에만 기본값이 설정됨
- 컬럼명 변경
- ALTER TABLE 테이블명 RENAME COLUMN 컬럼명;
- 제약조건 추가
- ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건;
- 제약조건 삭제
- ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건;
4. RENAME TABLE
- RENAME 테이블명 TO 새테이블명;
- == ALTER TABLE RENAME TO 테이블명;
5. DROP TABLE
- DROP TABLE 테이블명;
- 테이블 데이트, 구조 삭제 및 복구 불가
- CASECADE CONSTRAINT : 삭제하는 테이블의 제약조건도 모두 삭제 → 참조 무결성 준수
6. TRUNCATE TABLE
- TRUNCATE TABLE 테이블명;
- 테이블 내 데이터 모두 삭제, 구조는 그대로 둠
- ROLLBACK 불가
- 테이블 용량 초기화
3. DML (Data Manipulation Language) 데이터 조작어
1. INSERT
- INSERT INTO 테이블명 (컬럼명,....) VALUES (데이터, ...);
- INSERT INTO 테이블명 VALUES (데이터, .. 모든 컬럼의 데이터, 순서대로);
2. UPDATE
- UPDATE 테이블명 SET 컬렴명 = 데이터;
3. DELETE
- DELETE FROM 테이블명 [WHERE 조건절];
- 테이블 용량 초기화 X
4. SELECT
- SELECT [DINSTINCT] 컬럼명 [AS 별명] FROM 테이블명 [별명]
- distinct : 데이터 중복 X
- 문자열 합성 연산자
- CONCAT
- || (oracle)
- DUAL : 오라클의 기본 더미 테이블, 연산 수행을 위해 사용
4. TCL (Transaction Control Language) 트랜잭션 제어어
1. 트랜잭션
- 데이터베이스의 논리적 연산 단위
- 하나 이상의 sql 문을 포함
2. ACID
- Atomicity 원자성 : 전부 실행되거나 전혀 실행되지 않음. 모든 작업 중 하나라도 잘못되면 모두 롤백(작업 실행 이전 상태로 돌아감)
- Consistency 일관성 : 트랜잭션으로 인한 DB 상태의 모순이 없음, 즉 데이터가 미리 정의된 규칙(예를 들어 데이터타입)을 유지함
- Isolation 고립성 : Locking으로 보장, 서로 다른 트랜잭션의 결과에 서로 접근 불가
- Durability 영속성 : 한번 커밋된 트랜잭션 결과가 영구적으로 저장됨
3. TCL
- 데이터 무결성 보장을 목적으로 함
- 영구 변경 전 확인
- 연관 작업 동시 처리 가능하게 함
- DDL을 실행하면 자동 커밋
- DB를 정상적으로 종료하면 자동 커밋
- 비정상적으로 종료되면 자동 롤백
4. COMMIT
- 데이터를 DB에 영구적으로 반영하는 명령어
- commit → 트랜잭션 종료 + locking 해제
- commit 전
- 복구 가능
- 현재 사용자는 select로 결과 조회 가능, 다른 사용자는 조회 불가능
- 조작된 행(튜플)에 locking 설정하여 다른 사용자는 변경 불가
- commit 후
- 변경사항이 DB에 반영되어 이전으로 복구 불가
- 모든 사용자가 결과 볼 수 있음
- locking이 없어 조작한 행에 다른 사용자들이 접근 가능
5. ROLLBACK
- 트랜잭션 이전 상태로 되돌리는 명령어
- locking 해제 하면서 commit 이전 상태로 돌아감
- savepoint : 트랜잭션 일부만 롤백할 수 있는 중간 지점
- rollback to savepointname
- 중복 savepoint name 있는 경우 뒤에 나온 savepoint가 유효함
5. WHERE
1. 연산자
- 비교연산자 <, = ...
- 부정 비교 연산자 NOT, !=, ^=, <>
- SQL 연산자
- [NOT] BETWEEN A AND B
- [NOT] IN (리스트) : 리스트 내 값
- LIKE ‘문자열’ : 문자열 형태와 일치하는 값
- % : 0개 이상의 문자를 의미
- _ : 1개의 단일 문자를 의미
- [NOT] IS NULL : null은 비교 연산자로 절대! 비교 불가
- 논리연산자 and, or, not
- 우선순위 괄호 > 부정 > 비교 > 논리 (AND > OR)
2. 문자열 비교 방법
- char vs char : 같은 위치의 문자 비교해서 알파벳 순서가 뒤인 경우가 큰 값, 같으면 그 다음 위치 문자 비교, 길이가 다른 경우 짧은 문자열 뒤에 공백을 추가해서 길이를 맞춤, 공백 수만 다르면 같은 값이라고 판단
- char vs varchar : 위와 같은 방식으로 비교, 길이가 다르면 길이가 긴 값이 크다고 판단, varchar에서는 공백도 문자로 판단, TRIM 함수로 공백을 제거하고 판단할 수 있음
- char vs 상수 : 상수를 변수 타입으로 바꿔서 비교
3. 부분 범위 처리
- 오라클 : ROWNUM
- SQL 처리 결과 집합의 각 행에 임시로 부여되는 번호
- 조건절 내에서 행의 개수를 제한하는 목적으로 사용
- SQL Server : TOP
- 출력 행의 수 제한을 위해 사용
- TOP (n) : n개의 행출력, 개수 대신 비율로 제한 가능
6. 함수
1. 단일행함수
- select, where, order by 절에 사용 가능
- 각 행에 개별적으로 작용
- 여러 인자를 입력해도 하나의 결과만 출력
- 문자형 함수
- LOWER : 소문자로 출력
- UPPER : 대문자로 출력
- LENGTH : 길이 출력
- CONCAT : 문자열 결합
- SUBSTR : 문자열 부분 출력
- LTRIM : 왼쪽 공백 제거
- RTRIM : 오른쪽 공백 제거
- TRIM : 양쪽 공백 제거
- ASCII : 아스키 코드 값 출력
- 숫자형 함수
- ABS : 절대값 출력 ↔ SIGN : 1,0,-1 중 하나 출력
- MOD : 나머지 (%으로 대체 가능)
- ROUND : 반올림
- CEIL : 올림
- FLOOR : 버림
- TRUNC : 숫자형 부분 추출
- 날짜형 함수
- SYSDATE : 현재 시간 출력 (년, 월, 일, 시, 분, 초)
- mysql → select sysdate();
- EXTRACT : 날짜형 부분 출력
- select extract(unit from sysdate) from dual;
- +-숫자 : 하루 더하고 뺴기
- +-숫자/24 : 시간 연산
- NEXT_DAY : 지정된 요일의 첫번째 날짜 출력
- SYSDATE : 현재 시간 출력 (년, 월, 일, 시, 분, 초)
- 변환형 함수 : 데이터 타입 변환, 명시적 형 변환
- TO_NUMBER : char to num
- TO_CHAR : num to char
- TO_DATE : char to date
- CAST, CONVERT
- NULL 관련 함수
- NVL(칼럼,값) : NULL값 반환
- NVL2(칼럼, null true일때 출력되는 값, null false일때 출력는 값)
- NULLIF(값,값) : 같으면 null, 다르면 첫번째 인자 출력
- COALESCE(값, 값, .. ): 왼→오 순서대로 탐색하다 NULL이 아닌 첫번째 값을 출력
- ISNULL(컬럼, 값) : NULL이면 값으로 대치, NULL이 아니면 칼럼값을 그대로 출력
2. 데이터 변환
- 명시적 형 변환 : 변환형 함수를 이용해서 데이터 타입 변환
- 암시적 형 변환 : DBMS가 자동으로 변환
3. 조건문
- IF-THEN-ELSE
- CASE WHEN 조건절1 THEN 출력값1 .. ELSE 기본값 END
- 조건절1 일때 출력값1을 출력
- 조건절1이 아닐때 기본값 출력
- else 구문 없는 경우 NULL 출력
- ex) CASE WHEN 컬럼 IS NULL THEN 출력값
- DECODE(칼럼, 기준값1, 출력값1, ... , 기본값)
- 오라클 함수, 표준 X
- 칼럼이 기준값 1이면 출력값1 출력
- 기준값과 출력값이 페어링되어 있음
- 마지막값은 기준값들 중 어떤 것도 아닌 경우 마지막 기본값으로 출력
- ex) DECODE(gender, ‘M’, ‘남자’, ‘F’, ‘여자’, ‘기타)
4. 집계 함수 (다중행함수)
- 그룹별 결과 출력
- GROUP BY와 항상 같이 사용해야 한다. 그렇지 않으면 에러 발생
- WHERE 절에 사용 불가
- 공집합에서도 연산 수행
- ALL : 중복돼도 그냥 전부 출력
- DISTINCT : 중복되는 것 제외하고 출력
- NULL 제외하고 연산
- SUM : 합
- AVG : 평균
- MAX : 최대값
- MIN : 최소값
- VARIAN : 분산
- STDDEV : 표준편차
- COUNT : 행 개수 출력
- COUNT(*) : NULL 인 행도 포함해서 출력
- COUNT(표현식) : null 제외하고 출력
7. GROUP BY, HAVING, ORDER BY
1. GROUP BY
- 그룹핑 기분 설정
- alias 사용 불가
2. HAVING
- GROUP BY 절에 의한 집계 데이터에 출력 조건을 건다
- select 절에 조건을 거는 where 절과 같은 역할 → 여기서 걸러지면 group by 대상에서도 제외된 것
- group by 뒤에 위치함
3. ORDER BY
- 특정 컬럼을 기준으로 조회 결과를 정렬해서 출력
- 기본은 오름차순
- 오라클은 null을 최대값으로 판단하고, sql server는 최소값으로 판단
- 문장의 제일 마지막에 사용!!
- sql 실행 순서
- 테이블에 출력 대상이 아닌 것은 where절에서 걸러지고 남은걸 그룹핑하고 그 값이 조건에 맞는 데이터를 계산하고 정렬해서 출력함
SELECT 칼럼명 AS '별명' 6) 출력 FROM 테이블명 1) 테이블에서 WHERE 조건식 2) 출력 대상을 조건식으로 거르고 GROUP BY 컬럼/표현식 3) 그룹핑해서 HAVING 조건식 4) 그룹핑된 값들을 조건에 맞게 ORDER BY 컬럼/조건식 5) 정렬해서
- 테이블에 출력 대상이 아닌 것은 where절에서 걸러지고 남은걸 그룹핑하고 그 값이 조건에 맞는 데이터를 계산하고 정렬해서 출력함
8. JOIN
1. 개념
- 조인 : 여러 테이블을 연결 또는 결합하여 데이터를 출력
- 등가조인 : 두 테이블의 컬럼값이 정확히 일치하는 경우 결합
- ex) SELECT 칼럼 ... FROM 테이블1 A, 테이블2 B WHERE A.칼럼=B.칼럼;
- select 대상 칼럼이 두 테이블 모두 가지고 있는 경우 반드시 alias 지정 필요!
- 비등가조인 : 두 테이블의 칼럼 값이 정확하게 일치하지 않는 경우 조인
- 부등호나 BETWEEN 연산자로 조인
'기술 > SQL' 카테고리의 다른 글
MySQL/MySQL workbench) error 1175 해결 : update safe mode 끄기 (0) | 2021.12.29 |
---|---|
MySQL/MySQL Workbench/Docker) 원격 서버에서 docker로 mysql 설치하고, 로컬에서 mysql workbench로 접속하기 (0) | 2021.12.28 |