728x90
★ SQL 문장들의 종류
데이터 조작어 (DML) |
SELECT | 데이터베이스에 들어있는 데이터를 조회하거나 검색하기 위한 명령어를 말하는 것으로 RETRIEVE 라고도 한다. |
INSERT UPDATE DELETE |
데이터베이스의 테이블에 들어 있는 데이터에 변형을 가하는 종류의 명령어들을 말한다. 예를 들어 데이터를 테이블에 새로운 행을 집어넣거나, 원하지 않는 데이터를 삭제하거나 수정하는 것들의 멸영어를 DML이라고 부른다. | |
데이터 정의어 (DDL) |
CREATE ALTER DROP RENAME |
테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어들로 그러한 구조를 생성하거나 변경하거나 삭제하거나 이름을 바꾸는 데이터 구조와 관련된 명령어들을 DDL 이라고 부른다. |
데이터 제어어 (DCL) |
GRANT REVOKE |
데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어를 DCL이라고 부른다. |
트랜잭션 제어어 (TCL) |
COMMIT ROLLBACK |
논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위(트랜잭션) 별로 제어하는 명령어를 말한다. |
★ 테이블 칼럼에 대한 정의 변경
- [Oracle]
- ALTER TABLE 테이블명
- MODIFY (칼럼명1 데이터 유형 [DEFAULT 식] [NOT NULL], 칼럼명2 데이터 유형 ..)
- [SQL Server]
- ALTER TABLE 테이블명
- ALTER (칼럼명1 데이터 유형 [DEFAULT 식] [NOT NULL], 칼럼명2 데이휴 유형 ..)
- NULL
- 공백과 숫자0과는 전혀 다른값.
- 공집합과도 다르다.
- 아직 정의되지 않은 미지의 값
- 현재 데이터를 입력하지 못하는 경우
★ 제약조건의 종류
- PRIMARY KEY(기본키)
- UNIQUE KEY(고유키)
- NOT NULL
- CHECK
- FOREIGN KEY(외래키)
★ 테이블 생성의 주의사항
- 테이블명은 객체를 의미할 수 있는 적절한 이름을 사용한다. 가능한 단수형을 권고한다.
- 테이블 명은 다른 테이블의 이름과 중복되지 않아야 한다.
- 한 테이블 내에서는 칼럼명이 중복되게 지정될 수 없다.
- 테이블 이름을 지정하고 각 칼럼들은 괄호"()"로 묶어 지정한다.
- 각 컬럼들은 콤마 ","로 구분되고, 테이블 생성문의 끝은 항상 세미콜론 ";"으로 끝난다.
- 칼럼에 대해서는 다른 테이블까지 고려하여 데이터베이스 내에서는 일관성 있게 사용하는 것이 좋다
- 칼럼 뒤에 데이터 유형은 꼭 지정되어야한다.
- 테이블명과 칼럼명은 반드시 문자로 시작해야 하고, 벤더별로 길이에 대한 한계가 있다.
- 벤더에서 사전에 정의한 예약어는 쓸 수 없다.
- A-Z, a-z, 0-9, _, $, # 문자만 허용된다.
★ 테이블의 불필요한 칼럼 삭제
- ALTER TABLE 테이블명
- DROP COLUMN 삭제할 칼럼명;
★ 테이블에 데이터를 입력하는 두 가지 유형
- INSERT INTO 테이블명 (COLUMN_LIST) VALUES (COLUMN_LIST에 넣을 VALUE_LIST);
- INSERT INTO 테이블명 VALUES
★입력된 데이터의 수정
- UPDATE 테이블명
- SET 수정되어야할 칼럼명 = 수정되기를 원하는 새로운 값;
★ 테이블에 입력된 데이터 조회
- SELECT
- [All/DISTINCT] (DISTINCT : 중복된 데이터가 있는 경우 1건으로 처리해서 출력)
- 보고 싶은 칼럼명, ...
- FROM
- 해당 칼럼들이 있는 테이블명
★ TRUNCATE TABLE
- 테이블 자체가 삭제되는 것이 아니고, 해당 테이블에 들어있던 모든 행들이 제거되고 저장 공간을 재사용 가능하도록 해제한다.
★ 트랜잭션의 특성
- 원자성
- 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아있어야 함
- 일관성
- 트랜잭션이 실행되기전의 데이터베이스 내용이 잘못되어 있지 않다면 트랜잭션이 실행된이후에도 데이터베이스의 내용에 잘못이 있으면 안된다
- 고립성
- 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다.
- 지속성
- 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.
★ 롤백(ROLLBACK)
- 데이터 변경 사항이 취소되어 데이터의 이전 상태로 복구되며, 관련된 행에 대한 잠금이 풀리고 다른 사용자들이 데이터 변경을 할 수 있게 된다.
- 저장점을 정의하면 롤백 할 때 트랜잭션에 포함된 전체 작업을 롤백하는 것이 아니라 현 시점에서 SAVEPOINT까지 트랜잭션의 일부만 롤백할 수 있다.
- Oracle
- SAVEPOINT SVPT1;
- ...
- ROLLBACK TO SVPT1
- SQL Server
- SAVE TRANSACTION
- SVTR1;
- ROLLBACK
- TRANSACTION SVTR1;
★ BEGIN TRANSACTION
- 트랜잭션을 시작하고 COMMIT TRANSACTION 또는 ROLLBACK TRANSCATION으로 트랜잭션을 종료한다.
- ROLLBACK 구문을 만나면 최초의 BEGIN TRANSACTION 시점까지 모두 ROLLBACK이 된다
★ WHERE
- FROM절 다음에 위치하며, 조건식은 아래 내용으로 구성된다.
- 칼럼명(보통 조건식의 좌측에 위치)
- 비교 연산자
- 문자, 숫자, 표현식(보통 조건식의 우측에 위치)
- 비교 칼럼명(JOIN 사용시)
★ 연산자의 우선순위
- 괄호로 묶은 연산
- 부정 연산자(NOT)
- 비교 연산자(=, >, >=, <, <=)와 SQL 비교 연산자(BETWEEN..)
- 논리 연산자 중 AND,OR의 순으로 처리
★ NULL의 연산
- NULL 값과의 연산(+,-,*,/등)은 NULL값을 리턴
- NULL 값과의 비교연산은 거짓을 리턴
- 특정 값보다 크다, 적다라고 표현할 수 없음.
★ 부정 비교 연산자
- != : 같지 않다.
- ^= 같지 않다.
- <> : 같지 않다.
- NOT 칼럼명 = : ~와 같지 않다.
- NOT 칼럼명 > : ~보다 크지 않다.
★ BETWEEN a AND b
- a와 b의 값 사이에 있으면 된다.
★ IN(list)
- 리스트에 있는 값 중에서 어느 하나라도 일치하면 된다.
★ 내장함수
- 함수는 벤더에서 제공하는 이 내장함수와 사용자 정의함수로 나눌 수 있다.
- 내장 함수 종류
- 단일행 함수
- 다중행 함수
- 집계 함수
- 그룹 함수
- 윈도우 함수
★ 연산자의 종류
구분 | 연산자 | 연산자의 의미 |
비교 연산자 |
= | 같다. |
> | 보다 크다. | |
>= | 보다 크거나 같다. | |
< | 보다 작다. | |
<= | 보다 작거나 같다. | |
SQL 연산자 |
BETWEEN a AND b | a와 b의 값 사이에 있으면 된다. |
IN (list) | 리스트에 있는 값 중에서 어느 하나라도 일치하면 된다. | |
LIKE '비교문자열' | 비교문자열과 형태가 일치하면 된다. | |
IS NULL | NULL 값인 경우 | |
논리 연산자 |
AND | 앞에 있는 조건과 뒤에 오는 조건이 참이 되면 결과도 참이 된다. 즉, 앞뒤의 조건 동시에 만족하여야 한다. |
OR | 앞의 조건이 참이거나 뒤의 조건이 참이되어야 결과도 참이 된다. 즉, 앞뒤의 조건 중 하나만 참이면 된다. | |
NOT | 뒤에 오는 조건에 반대되는 결과를 돌려준다. | |
부정 비교 연산자 |
!= | 같지 않다. |
^= | 같지 않다. | |
<> | 같지 않다. | |
NOT 칼럼명 = | ~와 같지 않다. | |
NOT 칼럼명 > | ~보다 크지 않다. | |
부정 SQL 연산자 |
NOT BETWEEN a AND b |
a와 b의 값 사이에 있지 않다. |
NOT IN (list) | list 값과 일치하지 않는다. | |
IS NOT NULL | NULL 값을 갖지 않는다. |
★ DUAL 테이블의 특성
- 사용자 SYS가 소유하며, 모든 사용자가 액세스 가능한 테이블이다.
- SELECT ~ FROM ~ 의 형식을 갖추기 위한 DUMMY 테이블이다.
- DUMMY 라는 문자열 유형의 칼럼에 'X'라는 값이 들어 있는 행을 1건 포함하고 있다.
★단일행 함수의 종류
종류 | 내용 | 함수의 예 |
문자형 함수 | 문자를 입력하면 문자나 숫자 값을 반환 | LOWER, UPPER, SUBSTR 등 |
숫자형 함수 | 숫자를 입력하면 숫자 값을 반환 | ABS, MOD, ROUND, TRUNC 등 |
날짜형 함수 | DATE 타입의 값을 연산한다. | SYSDATE/GETDATE 등 |
변환형 함수 | 문자, 숫자, 날짜형 값의 데이터 타입을 변환한다. | CAST, CONVERT 등 |
NULL 관련 함수 | NULL을 처리하기 위한 함수 | NVL, MULLIF 등 |
★ Null의 특성
- 널 값은 아직 정의되지 않은 값으로 0또는 공백과 다르다.
- 테이블을 생성할 때 NOT NULL또는 PRIMARY KEY로 정의되지 않은 모든 데이터 유형은 널 값을 포함 가능
- 널값을 포함하는 연산의 경우 결과 값도 널 값이다.
- 결과값을 NULL이 아닌 다른 값을 얻고자 할 때, NVL/ISNULL 함수를 사용한다.
★ 집계 함수의 종류
집계 함수 | 사용 목적 |
COUNT(*) | NULL 값을 포함한 행의 수를 출력한다. |
COUNT(표현식) | 표현식의 값이 NULL 값인 것을 제외한 행의 수를 출력한다. |
SUM | 표현식의 NULL값을 제외한 합계를 출력한다. |
AVG | 표현식의 NULL 값을 제외한 평균을 출력한다. |
MAX | 표현식의 최대값을 출력한다. |
MIN | 표현식의 최소값을 출력한다. |
STDDEV | 표현식의 표준 편차를 출력한다. |
VARIAN | 표현식의 분산을 출력한다. |
기타 통계 함수 | 벤더별로 다양한 통계식을 제공한다. |
★ GROUP BY 문장
- SELECT [Distinct] 칼럼명 FROM 테이블명 [WHERE 조건식] [GROUP BY 칼럼이나 표현식] [HAVING 그룹조건식];
- GROUP BY 절을 통해 소그룹별 기준을 정한 후, SELECT 절에 집계 함수를 사용한다.
- 집계 함수의 통계정보는 NULL 값을 가진 행을 제외하고 수행한다.
- SELECT 절과는 달리 ALIAS명령어를 사용할 수 없다.
- 집계 함수는 WHRER절에 올수 없다.
- 전체 데이터를 GROUP으로 나누기 전에 행들을 미리 제거시킨다.
- HAVING 절은 GROUP BY절에 의한 소그룹별로 만들어진 집계 데이터 중, HAVING 절에서 제한 조건을 두어 조건을 만족하는 내용만 출력한다.
- HAVING 절은 일반적으로 GROUP BY절 뒤에 위치한다.
★ ORDER BY 문장
- SELECT 칼럼명 [ALIAS명]
- FROM 테이블명
- [WHERE 조건식]
- [GROUP BY 칼럼이나 표현식]
- [HAVING 그룹조건식]
- [ORDER BY 칼럼이나 표현식 [ASC 또는 DESC]]
- ASC : 오름차순 정렬
- DESC : 내림차순 정렬
- 기본적으로 오름차순 정렬임.
- 숫자형 데이터 타입은 오름차순으로 정렬했을 경우에 가장 적은 값부터 출력된다.
★ SELECT 문장 실행 순서
- 발췌 대상 테이블을 참조한다 (FROM)
- 발췌 대상 데이터가 아닌 것은 제거한다. (WHERE)
- 행들을 소그룹화한다. (GROUP BY)
- 그룹핑된 값의 조건에 맞는 것만을 출력한다. (HAVING)
- 데이터 값을 출력/계산한다. (SELECT)
- 데이터를 정렬한다. (ORDER BY)
★ TOP ()예제] 사원
- 테이블에서 급여가 높은 2명을 내림차순으로 출력하는데 같은 급여를 받는 사원이 있으면 같이 출력한다.
- 코드
- SELECT TOP(2) WITH TIES ENAME, SAL
- FROM EMP
- ORDER BY SAL DESC;
★ EQUI JOIN 문장
- SELECT 테이블1.칼럼명, 테이블2.칼럼명, ...
- FROM 테이블1, 테이블2
- WHERE 테이블1.칼럼명1 = 테이블2.칼럼명2;
- -> WHERE 절에 JOIN 조건을 넣는다.
★ 조인(JOIN)
- 두 개 이상의 테이블들을 연결 또는 결합하여 데이터를 출력하는 것을 JOIN이라고 하며, 일반적인 경우 행들은 PRIMARY KEY나 FREIGN KEY 값의 연관에 의해 성립된다.
- 하지만 어떤 경우에는 이러한 PK,FK 관계가 없어도 논리적인 값들의 연관만으로 JOIN이 성립 가능하다.
728x90
'SQLD' 카테고리의 다른 글
1과목 - 2장 데이터 모델과 성능 (0) | 2023.02.10 |
---|---|
1과목 - 1장 데이터 모델링의 이해 (0) | 2023.02.09 |