3. SQL 기본 및 활용

 

. 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 문장

CREATE TABLE PRODUCT
(
PROD_ID VARCHAR2(10) NOT NULL
, PROD_NAME VARCHAR2(100) NOT NULL
, REG_DT DATE NOT NULL
, REGR_NO NUMBER(10)
, CONSTRAINT PK_PRODUCT PRIMARY KEY(PROD_ID)
)

15

 

. SQL 적용 문법

ALTER TABLE 기관분류
ALTER COLUMN 분류면 VARCHAR(30) NOT NULL

18

 

. NULL 설명

– 모르는 값을 의미한다.

– 값의 부재를 의미한다.

– NULL과의 모든 비교(IS NULL 제외)는 알 수 없음(Unknow)을 반환한다.

 

. SQL 실행이후, 테이블 R에 남아있는 데이터 / DELETE FROM T;

–  (1, NULL)과 (2, NULL)

a

 

. 테이블 생성시, 제약조건(Constraints) 설명

– PK: 주키로 테이블당 1개만 생성이 가능하다.

– FK: 외래키로 테이블당 여러 개 생성이 가능하다.

– NOT NULL: 명시적으로 NULL 입력을 방지한다.

 

. 입사일자 Index 생성 SQL

CREATE TABLE EMP
(
EMP_NO VARCHAR2(10) PRIMARY KEY
, EMP_NM VARCHAR2(30) NOT NULL
, DEPT_CODE VARCHAR2(4) DEFAULT ‘0000’ NOT NULL
, JOIN_DATE DATE NOT NULL
, REGIST_DATE DATE NULL
);
CREATE INDEX IDX_EMP_01 ON EMP(JOIN_DATE);
CREATE TABLE EMP
(
EMP_NO VARCHAR2(10) PRIMARY KEY
, EMP_NM VARCHAR2(30) NOT NULL
, DEPT_CODE VARCHAR2(4) DEFAULT ‘0000’ NOT NULL
, JOIN_DATE DATE NOT NULL
, REGIST_DATE DATE NULL
);
ALTER TABLE EMP ADD CONSTRAINT EMP_PK PRIMARY KEY(EMP_NO);
CREATE INDEX IDX_EMP_01 ON EMP(JOIN_DATE);

 

00

 

 

. SQL1, SQL2 문장 실행결과

– SQL1, SQL2 문장의 실행 결과는 항상 같다.

aa

 

. 외래키 설명

– 테이블 생성시 설정할 수 있다.

– 외래키 값은 참조 무결성 제약을 받을 수 있다.

 

. 테이블 제약조건(Constraint) 설명

– Check 제약조건(Constraint)은 데이터베이스에서 데이터의 무결성을 유지하기 위하여 테이블의 특정 칼럼(Column)에 설정하는 계약이다.

– 기본키(Primary Key)는 반드시 테이블 당 하나의 제약만을 정의할 수 있다.

– 외래키(Foreign Key)는 테이블간의 관계를 정의하기 위해 기본키(Primary Key)를 다른 테이블의 외래키가 참조하도록 생성한다,

 

. 칼럼 삭제 문법

– ALTER TABLE EMP DROP COLUMN;

b

 

. SELECT 문장 수행결과

– 3, 1

c

 

. 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

d

 

. 정상 SQL 

INSERT INTO 고개 VALUES(‘C003’, ‘강감찬’, ‘2024-01-01’)
DELETE FROM 주문 WHERE 주문번호 IN(‘O001’, ‘O002’)

f

 

. 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 테이블은 생성되지 않는다.

1

 

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개

 

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다