3절 DML
INSERT: 데이터 입력
SQL>> INSERT INTO 테이블명 (칼럼명, …) VALUES (필드값, …);
SQL>> INSERT INTO 테이블명 VALUES (필드값, …);
UPDATE: 데이터 수정
SQL>> UPDATE 테이블명 SET 칼럼명=필드값;
DELETE: 데이터 삭제
SQL>> DELETE FROM 테이블명 WHERE 조건절;
SQL>> DELETE FROM 테이블명;
⦁ DELETE로 데이터를 삭제해도 테이블 용량은 초기화되지 않음 (↔ TRUNCATE로 삭제하면 초기화됨)
⦁ ↔ DROP은 객체 삭제 명령어
SELECT
⦁ 칼럼 별 데이터 선택
SQL>> SELECT 칼럼명 FROM 테이블명;
⦁ 데이터 중복 없이 선택
SQL>> SELECT DISTINCT 칼럼명 FROM 테이블명;
⦁ 전체 칼럼의 데이터 선택
SQL>> SELECT * FROM 테이블명;
※ 앨리어스(Alias)
⦁ SELECT 칼럼명 AS “별명” : 출력되는 칼럼명 설정
⦁ FROM 테이블명 별명 : 쿼리 내에서 사용할 테이블명 설정, 칼럼명이 중복될 경우 SELECT절에서 앨리어스 필수
문자열의 합성 연산자: ‘+’(플러스), CONCAT 함수로도 2개 문자열 합성 가능, Oracle에서는 ‘||’(수직선 2개)도 가능
DUAL : Oracle의 기본 더미 테이블, 연산 수행을 위해 사용됨
4절 TCL
트랜잭션: DB의 논리적 연산 단위, 하나 이상의 SQL문을 포함함
⦁ 특성 ACID/원일고영
⦁ 원자성(Atomicity): 전부 실행되거나 전혀 실행되지 않음 (All or Nothing)
⦁ 일관성(Consistency): 트랜잭션으로 인한 DB 상태의 모순이 없음
⦁ 고립성(Isolation): 부분적인 실행 결과에 다른 트랜잭션이 접근할 수 없음, LOCKING으로 고립성 보장
⦁ 영속성(Durability): 트랜잭션의 결과는 영구적으로 저장됨
TCL: 데이터 무결성 보장을 목적으로 함, 1) 영구 변경 전 확인과 2) 연관 작업 동시처리 가능
⦁ Oracle은 1) SQL 문장을 실행하면 트랜잭션이 시작되고 2) TCL을 실행하면 트랜잭션이 종료됨
⦁ DDL을 실행하면 자동 커밋 (DML 이후 커밋 없이 DDL을 실행해도 자동 커밋)
⦁ DB를 정상적으로 종료하면 자동 커밋, 애플리케이션 등의 이상으로 DB 접속이 단절되면 자동 롤백
COMMIT: 데이터를 DB에 영구적으로 반영하는 명령어, 커밋 시 트랜잭션이 완료되어 LOCKING이 해제됨, SQL Server은 기본적으로 자동 커밋
⦁ COMMIT 전
⦁ 데이터 변경이 메모리 버퍼에만 영향을 받았기 때문에 복구 가능 (NOLOGGING 옵션 사용 시 버퍼 캐시의 기록을 생략하여 입력 성능이 향상됨)
⦁ 사용자는 SELECT절로 결과를 확인할 수 있으나 다른 사용자는 현재 결과를 볼 수 없음
⦁ 변경된 행에 LOCKING이 설정되어 다른 사용자가 변경할 수 없음 (LOCKING이 안 걸린 상태일 때 여러 사용자가 데이터를 변경하면 상관없음)
⦁ COMMIT 후
⦁ 변경 사항이 DB에 반영되고 이전 데이터는 복구 불가
⦁ 모든 사용자가 결과를 볼 수 있음
⦁ LOCKING이 해제되어 다른 사용자가 행을 조작할 수 있음
ROLLBACK: 트랜잭션 시작 이전의 상태로 되돌리는 명령어, COMMIT 이전 상태로 돌려줌, ROLLBACK 시 LOCKING이 해제됨
⦁ SAVEPOINT: 트랜잭션 일부만 롤백 할 수 있도록 중간상태를 저장하는 명령어, ‘ROLLBACK TO 저장점명’ 시
해당 저장점 상태로 돌려줌, 동일한 저장점명이 있으면 나중 저장점이 유효함
⦁ SQL Server에서는 ’BEGIN TRAN’으로 명시해야 가능함
5절 WHERE절
WHERE
SQL>> SELECT 칼럼명 FROM 테이블명 WHERE 조건절;
연산자
- 종류
비교 연산자: =, >, >=, <, <=
⦁ 비교 대상 데이터 타입에 따라 자동으로 형 변환되는 경우도 있음
부정 비교 연산자: ‘NOT 칼럼명 비교연산자’와 동일
⦁ 부등호: !=, ^=, <> (ISO 표준)
SQL 연산자 입력값을 비교하여 논리값 출력
⦁ BETWEEN A AND B : A와 B 사잇값
⦁ IN (리스트) : 리스트 내의 값
⦁ LIKE ‘문자열’ : 문자열의 형태와 일치하는 값
※ 와일드카드: 1) ‘%’(퍼센트)는 0개 이상의 문자 2) ‘_’(언더바)는 1개의 단일 문자
⦁ IS NULL : NULL은 등호로 판단 불가 어떤 상황에서도
⦁ NOT BETWEEN A AND B, NOT IN (리스트), IS NOT NULL
논리 연산자: AND, OR, NOT
우선순위: 부정 연산자 > 비교 연산자 > 논리 연산자
⦁ ‘()’(괄호)
⦁ NOT
⦁ 비교 연산자 및 SQL 연산자
⦁ AND
⦁ OR
문자열 비교방법
⦁ CHAR vs CHAR : 첫 서로 다른 문자열 값으로 비교 (뒤 순서가 더 큰 값),
길이가 다를 때 공백을 추가하여 길이 맞춤 (공백 수만 다르면 같은 값)
⦁ CHAR vs VARCHAR : 첫 서로 다른 문자열 값으로 비교, 길이가 다르면 길이가 긴 값이 크다고 판단,
VARCHAR의 공백도 문자로 판단, TRIM 함수로 VARCHAR의 공백 제거하고 판단할 수 있음
⦁ CHAR vs 상수 : 상수를 변수 타입으로 바꿔 비교
부분 범위 처리
⦁ ROWNUM (Oracle): SQL 처리 결과 집합의 각 행에 임시로 부여되는 번호,
조건절 내에서 행의 개수를 제한하는 목적으로 사용함
⦁ TOP (SQL Server): 출력 행의 수 제한 함수, ’TOP (N)’로 N개 행 출력, 개수 대신 비율로도 제한 가능
※ ORDER BY절이 없으면 ROWNUM과 TOP의 기능이 같음
'Structured Query Language > SQLD' 카테고리의 다른 글
SQLD_2과목_2장 SQL 활용_1절 표준조인, 2절 집합 연산자, 3절 계층형 질의와 셀프 조인 (0) | 2023.05.30 |
---|---|
SQLD_2과목_1장 SQL 기본_6절 함수, 7절 GROUP BY, HAVING절, 8절 ORDER BY절, 9절 조인 (0) | 2023.05.30 |
SQLD_2과목_1장 SQL 기본_1절 관계형 DB 개요, 2절 DDL (0) | 2023.05.30 |
SQLD_1과목_2장 데이터 모델과 성능_6절 분산 DB 데이터에 따른 성능 (0) | 2023.05.30 |
SQLD_1과목_2장 데이터 모델과 성능_3절 반정규화와 성능, 4절 대용량 데이터에 따른 성능, 5절 DB 구조와 성능 (0) | 2023.05.30 |