본문 바로가기

SQLD

[SQLD 암기] SQL 기본

* SQL 종류

 - DML : SELECT, INSERT, UPDATE, DELETE

   절차적 DML : PL/SQL, T-SQL 무슨 데이터를 원하고, 어떻게 접근해야 하는 지

   데이터 부속어 : 호스트 프로그램 속에 삽입되어 사용되는 DML 명령어

 - DDL : CREATE, ALTER, DROP, RENAME

 - DCL : GRANT, REVOKE

 - TCL : COMMIT, ROLLBACK

 

* PK 제약조건

 CONSTRAINT TABLE_NAME PRIMARY KEY (COLUMN) (CREATE문 내부)

 CREATE TABLE TABLE_NAME (COLUMN DATA_TYPE PRIMARY KEY)

 ALTER TABLE TABLE_NAME ADD CONSTRAINT TABLE_PK PRIMARY KEY(COLUMN) (CREATE 외부)

 

* 테이블 컬럼 변경

 ALTER TABLE TABLE_NAME MODIFY (COLUMN DATA_TYPE DEFAULT NOTNULL)

 ALTER TABLE TABLE_NAME ALTER (COLUMN DATA_TYPE DEFAULT NOTNULL)

 

* 물리적 테이블 명

 - 문자로만 시작

 - 소문자, 대문자, _, $, #만 허용

 

* 외부 키

 - 테이블 생성 시 설정할 수 있음

 - 외래 키 값은 널 값을 가질 수 있음

 - 외래 키 값은 참조 무결성 제약을 받을 수 있음

 

* 테이블 제약조건

 - CHECK CONSTRAINT는 데이터베이스에서 데이터의 무결성을 위해 테이블의 특정 컬럼에 설정하는 제약

 - 기본 키는 반드시 테이블 당 하나의 제약만을 정의할 수 있음

 - 고유 키로 지정된 컬럼은 NULL 값이 있어도 됨

 - 외래 키는 테이블 간의 관계를 정의하기 위해 기본 키를 다른 테이블의 외래키가 참조

 

* 컬럼 삭제

 ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME

 

* 테이블 이름 변경

 RENAME TABLE_NAME TO NEW_NAME

 

* DELETE/MODIFY

 - CASCADE : MASTER 삭제 시 CHILD 삭제

 - SET NULL : MASTER 삭제 시 CHILD 해당 필드 NULL

 - SET DEFAULT : MASTER 삭제 시 CHILD 해당 필드 DEFAULT 값 설정

 - RESTRICT : CHILD 테이블에 PK 값이 없는 경우에만 MASTER 삭제 허용

 - NO ACTION : 참조 무결성을 위반하는 삭제/ 수정 액션을 취하지 않음

 

* INSERT

 - AUTOMATIC : MASTER 테이블에 PK가 없는 경우 MASTER PK 생성 후 CHILD 입력

 - SET NULL : MASTER 테이블에 PK 가 없는 경우 CHILD 외부 키를 NULL 값으로 처리

 - SET DEFAULT : MASTER 테이블에 PK가 없는 경우 CHILD 외부 키를 기본 값으로 입력

 - DEPENDENT : MASTER 테이블에 PK 가 존재할 때만 CHILD 입력 허용

 - NO ACTION : 참조 무결성을 위반하는 입력 액션을 취하지 않음

 

* 삽입

 INSERT INTO TABLE_NAME(COLUMN_NAME) VALUES(VALUE)

 INSERT INTO TABLE_NAME VALUES(VALUE)

 

* 수정

 UPDATE TABLE_NAME SET COLUMN = NEW_VALUE (WHERE)

 

* 삭제

 TRUNCATE TABLE TABLE_NAME : 스키마 정의 유지, 디스크 사용량 초기화, DDL, AUTO COMMIT

 DELETE FROM TABLE_NAME : 스키마 정의 유지, 디스크 사용량 초기화X, DML, 사용자 COMMIT

 DROP TABLE TABLE_NAME : 스키마 제거, 디스크 사용량 초기화, DDL, AUTO COMMIT

 DROP명령어는 테이블 삭제, TRUNCATE는 테이블을 초기상태로 만듦

 TRUNCATEUNDO를 위한 데이터를 생성하지 않아DELETE 보다 빠름

 

* 트랜잭션 특징

 - 원자성 : 모두 성공하든지 아니면 전혀 실행되지 않은 상태

 - 일관성 : 트랜잭션 실행 전 잘못되지 않으면 실행 후에도 잘못된 내용이 있으면 안됨

 - 고립성 : 트랜잭션 실행 도중에 다른 트랜잭션 영향 받으면 안됨

 - 지속성 : 성공적으로 수행되면 갱신한 데이터베이스 내용은 영구적으로 저장

 

* SAVEPOINT

 SAVE TRANSACTION SVPT1; ROLLBACK TRANSACTION SVPT1; (SQL server)

 SAVEPOINT SVPT1; ROLLBACK TO SVPT1; (ORACLE)

 

* NULL 연산

 - NULL과 연산하면 NULL 반환

 - NULL과 비교 연산하면 FALSE 반환

 

* 부정 비교 연산자

 !=, ^=, <> : 같지  않다

 NOT COLUMN = : 같지 않다

 NOT COLUMN > : 크지 않다

 

* NULL

 - ORACLE 에서는 IS NULL 사용

 - SQL server 에서는 =’’ 사용

 

* 내장함수

 - 함수의 입력 행수에 따라 단일 행 함수와 다중 행 함수로 나눔

 - 단일 행 함수는 SELECT, WHERE, ORDER BY, UPDATESET 절에 사용 가능

 - 1:M 관계의 두 테이블을 조인할 경우 M 쪽에 단일 행이 출력되어 단일 행 함수 사용 불가능

 

* 단일 행 함수

 - LOWER(STRING), UPPER(STRING), ASCII(CHAR), CHAR(ASCII), LENGTH(STRING)

 - CONCAT(STRING1, STRING2) : 문자열12를 연결, 오라클에서는 ||, SQLserver에서는 +도 사용

 - SUBSTRING(STRING, M, N) : M부터 N까지의 문자열 반환, N 생략 가능

 - LTRIM(STRING, CHAR) : 문자열 중 CHAR를 모두 제거, SQLserver에서는 지정문자 사용불가 공백제거 가능

 - RTRIM(STRING, CHAR) : CHAR가 나타날 때까지 문자열 모두 제거, SQLserver에서는 지정문자 사용불가

 - TRIM(leading|trailing|both CHAR FROM STRING) : 문자열에서 머리말, 꼬리말, 양쪽에 있는 지정 문자 제거

 - 날짜형 함수 : 1/24/601, 1/24/(60/10)10

 - NVL, ISNULL(A,B) : ANULL이면 B출력

 - NULLIF(A,B) : AB가 같으면 NULL을 같지 않으면 A 반환

 - COALESCE(A,B,…) : 임의의 개수 표현식에서 NULL이 아닌 최초의 표현식을 반환, 모두 NULL이면 NULL 반환

 

* 집계함수

 - COUNT(*) : NULL 포함한 행 수

 - COUNT(표현식), SUM(표현식), AVG(표현식) : NULL 제외한 행 수, , 평균

 

* GROUP BYHAVING

 - GROUP BY 절로 소그룹별 기준을 정하고, SELECT 절에 집계함수 사용

 - 집계함수의 통계정보는 NULL 값을 가진 행을 제외하고 수행

 - GROUP BY 절에서 SELECT 절과 달리 ALIAS 사용할 수 없음

 - 집계함수는 WHERE 절에 올 수 없음, WHERE절 수행 후 집계함수를 사용할 수 있는 GROUP BY

 - WHERE절은 전체 데이터를 GROUP으로 나누기 전에 행 미리 제거

 - HAVING GROUP BY 절의 기준 항목이나 소그룹의 집계함수를 이용한 조건을 표시할 수 있음

 - GROUP BY절에 의한 소그룹별로 만들어진 집계 데이터 중, HAVING절에서 제한 조건을 만족하는 내용만 출력

 - HAVING 절은 일반적으로 GROUP BY절 뒤에 위치

 

* ORDER BY

 - 기본적인 정렬 순서는 오름차순

 - 날짜형 데이터 타입을 오름차순으로 정렬하면 옛날 얘기가 더 먼저 출력

 - ORACLE에서는 NULL 값을 가장 큰 값으로 간주, SQLserver에서는 가장 작은 값으로 간주

 - SQL 문장으로 조회된 데이터들을 다양한 목적에 맞게 특정 컬럼을 기준으로 정렬

 - 컬럼명 대신 ALIAS 명이나 컬럼 순서를 나타내는 정수 사용 가능, 혼용 가능

 - GROUP BY 절을 사용하는 경우 ORDER BY 절에 집계함수를 사용할 수도 있음

 

* SELECT 절 실행 순서

 FROM – WHERE – GROUP BY – HAVING – SELECT – ORDER BY

 

*WITH TIES

 해당 값이 동일한 경우 함께 출력되도록 함, ORDER BY절과 함께 사용되어야 함

 

* JOIN

 - 여러 테이블에서 원하는 데이터 조회를 위해 N개의 테이블 중 최소 N-1개의 JOIN 조건 필요

 - 일반적으로 PKFK 연관성에 의해 성립

 - DBMS 옵티마이저는 FROM 절에 나열된 테이블들을 임의로 2개 정도씩 묶어서 JOIN

 - EQUI JOINJOIN에 관여하는 테이블 간 컬럼 값들이 일치하는 경우 사용

 - EQUI JOIN‘=’연산자에 의해서만 사용, 비교연산자는 NON EQUI JOIN

 - 대부분 NON EQUI JOIN을 수행할 수 있지만, 때로는 설계 상의 이유로 수행 불가능한 경우도 있음

'SQLD' 카테고리의 다른 글

38회 SQLD 합격  (0) 2020.10.06
[SQLD 암기] SQL 활용  (0) 2020.09.02
[SQLD 암기] 최적화 기본원리  (0) 2020.09.01
[SQLD 암기] 데이터 모델과 성능  (0) 2020.09.01
[SQLD 암기] 데이터 모델링의 이해  (0) 2020.08.31