. REVOKE / 데이터 제어어(DCL)
. 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에 의해 조작된 결과를 작업단위(트랜잭션) 별로 제어하는 명령어를 말한다. |
. GRANT
– 테이블의 구조를 생성, 변경, 삭제하는 등 데이터 구조를 정의하는데 사용하는 명령어
. TCL
– 논리적인 작업의 단위를 묶어 DML에 의해 조작된 결과를 작업단위(Transaction)별로 제어하는 명령어인 Commit, Rollback, Savepoint 등이 여기에 해당하며, 일부에서는 DCL(Data Control Language)로 분류하기도 한다.
. 데이터 언어와 SQL 명령어 설명
– DML은 데이터베이스 사용자가 응용 프로그램이나 질의어를 통하여 저장된 데이터베이스를 실실적으로 접근하는데 사용되며 SELECT, INSERT, DELETE, UPDATE 등이 있다.
– DDL은 스키마, 도메인, 테이블, 뷰, 인덱스를 정의하거나 변경 또는 제거할 때 사용되며 CREATE, ALTER, DROP, RENAME 등이 있다.
– 호스트 프로그램 속에 삽입되어 사용되는 DML 명령어들을 데이터 부속어(Data Sub Language)라고 한다.
. PK 제약조건을 생성하는 DDL 문장
. SQL 적용 문법
. NULL 설명
– 모르는 값을 의미한다.
– 값의 부재를 의미한다.
– NULL과의 모든 비교(IS NULL 제외)는 알 수 없음(Unknow)을 반환한다.
. SQL 실행이후, 테이블 R에 남아있는 데이터 / DELETE FROM T;
– (1, NULL)과 (2, NULL)
. 테이블 생성시, 제약조건(Constraints) 설명
– PK: 주키로 테이블당 1개만 생성이 가능하다.
– FK: 외래키로 테이블당 여러 개 생성이 가능하다.
– NOT NULL: 명시적으로 NULL 입력을 방지한다.
. 입사일자 Index 생성 SQL
. SQL1, SQL2 문장 실행결과
– SQL1, SQL2 문장의 실행 결과는 항상 같다.
. 외래키 설명
– 테이블 생성시 설정할 수 있다.
– 외래키 값은 참조 무결성 제약을 받을 수 있다.
. 테이블 제약조건(Constraint) 설명
– Check 제약조건(Constraint)은 데이터베이스에서 데이터의 무결성을 유지하기 위하여 테이블의 특정 칼럼(Column)에 설정하는 계약이다.
– 기본키(Primary Key)는 반드시 테이블 당 하나의 제약만을 정의할 수 있다.
– 외래키(Foreign Key)는 테이블간의 관계를 정의하기 위해 기본키(Primary Key)를 다른 테이블의 외래키가 참조하도록 생성한다,
. 칼럼 삭제 문법
– ALTER TABLE EMP DROP COLUMN;
. SELECT 문장 수행결과
– 3, 1
. STADIUM 테이블의 이름을 STADIUM_JSC로 변경하는 SQL 작성
– RENAME TABLE STADIUM TO STADIUM_JSC
. DEPENDENT
– 표준SQL(SQL:1999)에서 테이블 생성시 참조관계를 정의하기 위해 외래키(Foreign Key)를 선언하다. 관계형 데이터베이스에서 Child Table의 FK 데이터 생성시 Parent Table에 PK가 없는 경우, Child Table 에디터 입력을 허용하지 않는 참조동작(Referential Action) 인것
. SQL삽입 성공문
– 4,5
. 정상 SQL
. DELETE, TRUNCATE, DROP 비교
– DROP 명령어는 테이블 정의 자체를 삭제하고, TRUNCATE 명령어는 테이블을 초기상태로 만들다.
– TRUNCATE 명령어는 UNDO를 위한 데이터를 생성하지 않기 때문에 동일 데이터량 삭제시 DELETE보다 빠르다.
. 데이터베이스 트랜잭션 설명
– 원자성(atomicity): 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남어야 한다.
– 고립성(isolation): 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다.
. 트랜잭션에 대한 격리성이 낮은 경우
– Non-Repeatable Read: 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 바람에 두 쿼리 결과가 다르게 나타나는 현상을 말한다.
– Phantom Read: 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 첫번째 쿼리에서 없던 유령 레코드가 두번째 쿼리에서 나타나는 현상을 말한다.
. Oracle, SQL Server 차이
– A의 ID ‘001’에 해당하는 VAL의 값이 Oracle 200, SQL Server 100 된 결과에 대한 설명
– ORACLE에서는 CREATE TABLE 문장을 수행한 후, 묵시적으로 COMMIT이 수행되어 VAL값이 200이 된다.
– SQL Server에서는 ROLLBACK 문장에 의해 UPDATE가 취소어 VAL 값은 100이 된다.
– SQL Server에서는 ROLLBACK 실행으로 인하여 UPDATE가 취소되었으며, 최종적으로 B 테이블은 생성되지 않는다.
– Tracsaction은 데이터베이스의 논리적 연산단위로서 밀접히 관련되어 분리될 수 없는 한 개 이상의 데이터베이스 조작을 가리킨다.
– Tracsaction의 종료를 위한 대표적 명령어로서는 데이터에 대한 변경사항을 데이터베이스에 영구적으로 반영하는 Commit과 데이터에 대한 변경사항을
모두 폐기하고 변경전의 상태로 되될리는 Rollback이 있다.
. 단일행 문자형 함수의 종류
문자형 함수 | 함수 설명 |
LOWER(문자열) | 문자열의 알파벳 문자를 소문자로 바꾸어 준다. |
UPPER(문자열) | 문자열의 알파벳 문자를 대문자로 바꾸어준다. |
ASCII(문자) | 문자나 숫자를 ASCII 코드 번호로 바꾸어 준다. |
CHR/CHAR(ASCII번호) | ASCII 코드 번호를 문자나 숫자로 바꾸어 준다. |
CONCAT(문자열1, 문자열2) | Oracle, My SQL에서 유효한 함수이며 문자열1과 문자열2를 연결한다. |
SUBSTR/SUBSTRING(문자열, m[, n]) | 문자열 중 m위치에서 n개의 문자 길이에 해당하는 문자를 돌려준다. N이 생략되면 마지막 문자까지 이다. |
LENGTH/LEN(문자열) | 문자열의 개수를 숫자값을 돌려준다. |
LTRIM(문자열 [, 지정문자]) | 문자열의 첫 문자부터 확인해서 지정 문자가 나타나면 해당 문자를 제거한다.(지정 문자가 생략되면 공백 값이 디폴트) SQL Server에서는 LTRIM 함수에 지정문자를 사용할 수 없다. 즉, 공백만 제거할 수 있다. |
RTRIM(문자열 [, 지정문자]) | 문자열의 마지막 문자부터 확인해서 지정 문자가 나타나는 동안 해당 문자를 제거한다.(지정 문자가 생략되면 공백 값이 디폴트) SQL Server에서는 LTRIM 함수에 지정문자를 사용할 수 없다. 즉, 공백만 제거할 수 있다. |
TRIM([leading | trailing | both] 지정문자 FROM 문자열) | 문자열에서 머리말, 꼬리말, 또는 양쪽에 있는 지정 문자를 제거한다. (leading | trailing | both 가 생략되면 both가 디폴트) SQL Server에서는 TRIM 함수에 지정문자를 사용할 수 없다. 즉, 공백만 제거할 수 있다. |
* 주: Oracle함수/SQL Server함수 표시, ‘/’없는 것은 공통함수 |
. 단일행 함수의 종류
종류 | 내용 | 함수의 예 |
문자형 함수 | 문자를 입력하면 문자나 숫자 값을 반환한다. | LOWER UPPER SUBSTR / SUBSTRING LENGTH / LEN LTRIM RTRIM TRIM, ASCII |
숫자형 함수 | 숫자를 입력하면 숫자 값을 반환한다. | ABS MOD ROUND TRUNC SIGN CHR CHAR CEIL / CEILING FLOOR EXP LOG LN POWER SIN COS TAN |
날짜형 함수 | DATE 타입의 값을 연산한다. | SYSDATE/GETDATE EXTRACT/DATEPART TO_NUMBER(TO_CHAR(d, ‘YYYY’ | ‘MM’ | ‘DD’)) / YEAR|MONTH/DAY |
변환형 함수 | 문자, 숫자, 날짜형 값의 데이터 타입을 변환한다. | TO_NUMBER TO_CHAR TO_DATE / CAST CONVERT |
NULL 관련 함수 | NULL을 처리하기 위한 함수 | NVL / ISNULL NULLIF COALESCE |
. 단일행 NULL 관련 함수의 종류
일반형 함수 | 함수 설명 |
NVL(표현식1, 표현식2) ISNULL(표현식1, 표현식2) |
표현식1의 결과값이 NULL이면 표현식2의 값을 출력한다. 단, 표현식1과 표현식2의 결과 데이터 타입이 같아야 한다. NULL 관련 가장 많이 사용되는 함수이므로 상당히 중요하다. |
NULLIF(표현식1, 표현식2) | 표현식1이 표현식2와 같으면 NULL을, 같지 않으면 표현식1을 리턴한다. |
COALESCE(표현식1, 표현식2) | 임의의 개수 표현식에서 NULL이 아닌 최초의 표현식을 나타낸다. 모든 표현식이 NULL이라면 NULL을 리턴한다. |
. 집계 함수의 종류
집계 함수 | 사용목적 |
COUNT(*) | NULL 값을 포함한 행의 수를 출력한다. |
COUNT(표현식) | 표현식의 값이 NULL 값인 것을 제외한 행의 수를 출력한다. |
SUM([DISTINCT | ALL] 표현식) | 표현식의 NULL 값을 제외한 합계를 출력한다. |
AVG([DISTINCT | ALL] 표현식) | 표현식의 NULL 값을 제외한 평균를 출력한다. |
MAX([DISTINCT | ALL] 표현식) | 표현식의 최대값을 출력한다.(문자, 날짜 데이터 타입도 사용가능) |
MIN([DISTINCT | ALL] 표현식) | 표현식의 최소값을 출력한다.(문자, 날짜 데이터 타입도 사용가능) |
STDDEV([DISTINCT | ALL] 표현식) | 표현식의 표준 편차를 출력한다. |
VARIAN([DISTINCT | ALL] 표현식) | 표현식의 분산을 출력한다. |
기타 통계 함수 | 벤데별로 다양한 통계식을 제공한다. |
. ORDER BY 절 설명
– SQL 문장으로 조회된 데이터들을 다양한 목적에 맞게 특정 컬럼을 기준으로 정렬하는데 사용한다.
– DBMS마다 NULL값에 대한 정렬 순서가 다를 수 있으므로 주의하여야 한다.
– GROUP BY절을 사용하는 경우 ORDER BY 절에 집계 함수를 사용할 수도 있다.
. SELECT 실행 순서
– FROM / WHERE / GROUP BY / HAVING / SELECT / ORDER BY
. 5개의 테이블로부터 필요한 칼럼을 조회하려고 할때, 최소 JOIN 조건 갯수 – 4개