[SQL] SQLD 2과목 - SQL 기본 및 활용
업데이트:
ALTER구문
- SQLServer에서는 여러개의 컬럼을 동시에 수정하는 구문은 지원하지 않는다.
- Oracle에서는 여러개의 컬름을 ()로 묶어 동시에 수정할 수 있다.
- 기존에 NOT NULL 조건이 지정되었다면, 수정시에도 NOT NULL 구문을 지정해야 한다.
- 테이블 생성 문장에 이미 PRIMARY KEY를 지정한 후, ALTER 명령으로 다시 PRIMARY KEY를 지정하면 에러가 발생한다.
DELETE(/MODIFY) Action
- Casecade : Master 삭제 시 Child 같이 삭제
- Set Null : Master 삭제 시 Child 해당 필드 Null
- Set Default : Master 삭제 시 Child 해당 필드 Default값으로 설정
- Restrict : Child테이블에 PK값이 없는 경우만 Master 삭제 허용
- No Action : 참조무결성을 위반하는 삭제/수정 액션을 취하지 않음
INSERT Action
- Automatic : Master 테이블에 PK가 없는 경우 Master PK를 생성 후 Child 입력
- Set Null : Master 테이블에 PK가 없는 경우 Child 외부 키를 Null 값으로 처리
- Set Default : Master 테이블에 PK가 없는 경우 Child 외부키를 지정된 기본값으로 입력
- Dependent : Master 테이블에 PK가 존재할 때만 Child 입력 허용
- No Action : 참조무결성을 위반하는 입력 액션을 취하지 않음
DELETE, TRUNCATE, DROP
- DELETE : 모든 데이터 삭제 가능하지만 디스크 사용량 초기화 안됨
- TRUNCATE : 모든 데이터를 삭제하고, 디스크 사용량 초기화 됨
- DROP : 모든 데이터 삭제 가능, 디스크 사용량 초기화 가능, 테이블의 스키마 정의도 삭제 됨
- TRUNCATE TABLE과 DROP TABLE은 삭제 데이터에 대한 로그를 남기지 않는다.
- TRUNCTATE, DROP : Auto Commit
- DELETE : 사용자 Commit
Oracle, SQLserver = ‘’
VARCHAR2 자료형에 (‘‘)로 INSERT하면 ORACLE에서는 NULL로 입력된다.
SQLServer에서 (‘‘)로 INSERT된 자료를 조회하려면 WHERE=’‘로 조회해야 한다.
내장함수
- 함수의 입력 행수에 따라 단일행 함수와 다중행 함수로 구분할 수 있다.
- 단일행 함수는 SELECT, WHERE, ORDER BY, UPDATE의 Set절에 사용 가능하다.
- 1:M 조인이라 하더라도 M쪽에서 출력된 행이 하나씩 단일행 함수의 입력값으로 상요되므로 단일행 함수가 사용 가능하다.
- 다중행 함수도 단일행 함수와 동일하게 단일값만을 반환한다.
ORACLE 시간
오라클에서 날짜의 연산은 숫자의 연산과 같으며, 틀정 날짜에 1을 더하면 하루를 더한것과 같다.
1/24/60 = 하루를 24시간으로 나누고, 60분으로 나누면 1시간
1/24/(60/10) = 1분
NULL값 치환
- NVL(표현식1,표현식2)/ISNULL(표현식1,표현식2) : 표현식1 결과값이 NULL이면 표현식2의 값 출력
- NULLIF(표현식1,표현식2) : 표현식1과 표현식2의 값이 같으면 NULL 출력, 같지 않으면 표현식1 출력
- COALESCE(표현식1,표현식2,…) : 임의의 개수 표현식에서 NULL이 아닌 최초의 표현식을 나타냄
JOIN
- 일반적으로 JOIN은 PK와 FK값의 연관성에 의해 성립된다.
- DBMS 옵티마이저는 FROM절에 나열된 테이블이 아무리 많아도 항상 2개의 테이블씩 짝을 지어 JOIN을 수행한다.
- 대부분 NON EQUI JOIN을 수행할 수 있지만, 때로는 설계상의 이유로 수행이 불가능한 경우도 있다.
순수관계연산자
순수관계연산자에는 SELECT, PROJECT, JOIN, DEVIDE가 있다.
USING 조건절
USING 조건절을 이용한 EQUI JOIN에서도 NATURAL JOIN과 마찬가지로 JOIN컬럼에 대해서는 별칭이나 테이블 이름과 같은 접두사를 붙일 수 없다.
EX
USING T.MEMBER = C.MEMBER(X) -> USING(MEMBER)
CROSS JOIN
테이블간 JOIN조건이 없는 경우 생길 수 있는 모든 데이터의 조합을 말한다.
CROSS JOIN = CARTESIAN PRODUCT (M*N)
ORACLE OUTER JOIN
오라클에서는 OUTER JOIN을 (+) 기호를 사용해서 처리할 수 있다.
이를 ANSI문장으로 변경하기 위해서는 Inner쪽 테이블에 조건절을 ON절에 함께 위치시켜야 정상적인 OUTER JOIN을 수행할 수 있다.
EX
FROM A,B WHERE A = B(+) AND B(+) =’N’
FROM A LEFT JOIN B ON (A=B AND B=N)
EXCEPT/MINUS
차집합에 대한 연산.
NOT IN, NOT EXISTS로 대체 가능하다.
앞의 SQL문의 결과에서 뒤의 SQL문의 결과에 대한 차집합.
중복된 행은 하나의 행으로 만든다.
INTERSECT
여러개의 SQL문의 결과에 대한 교집합
중복된 행은 하나의 행으로 만든다.
UNION ALL
UNION ALL을 사용하는 경우 칼럼 ALIAS는 첫번째 SQL을 기준으로 하고, 정렬 기준은 마지막 SQL 모듈에 표시한다.
계층형 질의문
- SQL Server에서 계층형 질의문은 CTE를 재귀호출함으로써 계층 구조를 전개한다.
- SQL Server에서 계층형 질의문은 앵커 멤버를 실행하여 기본결과 집합을 만들고 이후 재귀 멤버를 지속적으로 실행한다.
- 오라클은 계층형 질의문에서 WHERE절은 모든 전개를 진행한 이후 필터조건으로 만족하는 데이터만을 추출하는데 사용된다.
- 오라클 계층형 질의문에서 PRIOR 자식 = 부모 형태로 사용하면 순방향 전개로 수행된다.
PRIOR 키워드는 CONNECT BY, SELECT, WHERE절에서 사용가능하다.
서브쿼리
- 단일행 서브쿼리 비교연산자 : =, <,<=,>,>=,<>
- 다중행 서브쿼리 비교연산자 : IN, ALL, ANY 등
- 단일행 서브쿼리의 비교연산자는 다중행 서브쿼리 비교연산자로 사용 가능하다.
- 다중행 서브쿼리의 비교연산자는 단일행 서브쿼리 비교연산자로 사용할 수 없다.
- 비연관 서브쿼리는 주로 메인 쿼리에 값을 제공하기 위한 목적으로 사용한다.
- 메인 쿼리의 결과가 서브쿼리로 제공될 수도, 서브쿼리의 결과가 메인 쿼리로 제공될 수도 있다.
- 서브쿼리는 단일행 또는 복수행 비교 연산자와 함께 사용할 수 있다.
- 서브쿼리는 SELECT절, FROM절, HAVING절, ORDER BY절등에서 사용이 가능하다.
- 서브쿼리의 결과가 복수행 결과를 반환하는 경우에는 IN,ALL,ANY등의 복수행 비교 연산자와 사용해야 된다.
- 연관 서브쿼리는 서브쿼리가 메인쿼리 컬럼을 포함하고 있는 형태의 서브쿼리이다.
- 다중 컬럼 서브쿼리는 서브쿼리의 결과로 여러개의 컬럼이 반환되어 메인 쿼리의 조건과 비교되는데, SQLServer에서는 현재 지원하지 않는다.
VIEW
- 뷰는 단지 정의만을 가지고 있으며, 실행 시점에 질의를 재작성하여 수행한다.
- 테이블 구조가 변경되어도 뷰를 사용하는 응용프로그램은 변경하지 않아도 된다.(독립성)
- 뷰는 보안을 강화하기 위한 목적으로도 활용할 수 있다.
- 실제 데이터를 저장하고 있는 뷰를 생성하는 기능을 지원하는 DBMS도 있다.
공유하기
Twitter Google+ LinkedIn
댓글남기기