SQLD

2과목 - 1장 SQL 기본

IT의 큰손 2023. 2. 13. 16:41
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