DB/오라클 SQL

[기술면접 대비] 데이터 베이스

joah.k 2021. 5. 7. 06:47
728x90

www.notion.so/d6c1d4ec83044a27b3e169e7b6ce1abb

-- 추가 중 

#DB

Database의 약자로 데이터 집합 또는 저장소

  • 종류 : MySql, Oracle, MongoDB 등

#쿼리

DB에 정보를 조회 요청하는 것

#데이터베이스의 정의, 장단점

여러 사람에 의해 공유되어 사용될 목적으로 통합하여 관리되는 데이터의 집합

  • 장점 : 데이터의 중복 최소화, 데이터 공유, 데이터 일관성 유지, 데이터 무결성 유지, 데이터 보안
  • 단점 : 예산의 증가, 전문적인 기술 필요

#SQL

관계형 DB에 정보를 관리(등록/삭제/변경/조회) 하기 위한 언어를 SQL(Structured Query Language 구조적 질의 언어)로 부른다.

단순한 질의 기능뿐만 아니라 완전한 데이터 정의 기능과 조작 기능을 갖추고 있다.

#SQL 기본 문법

  • SELECT - 데이터베이스로 부터 데이터를 추출
  • UPDATE - 데이터베이스의 데이터를 갱신
  • DELETE - 데이터베이스로 부터 데이터를 삭제
  • INSERT INTO - 데이터베이스로 새로운 데이터를 삽입
  • CREATE DATABASE - 새로운 데이터베이스를 생성
  • ALTER DATABASE - 데이터베이스를 수정
  • CREATE TABLE - 새로운 테이블을 생성
  • ALTER TABLE - 테이블을 수정
  • DROP TABLE - 테이블을 삭제
  • CREATE INDEX - 검색 키(search key) 같은 인덱스를 생성
  • DROP INDEX - 인덱스를 삭제

#데이터 베이스 언어

  • 정의어(DDL : Data Definition Language) : 데이터베이스 구조를 정의,수정,삭제하는 언어. (create, alter, drop)
  • 조작어(DML : Data Manipulation Language) : 데이터베이스 내의 자료 검색, 삽입, 갱신, 삭제를 위한 언어. (select, delete, update, insert)
  • 제어어(DCL : Data Control Language) : 데이터에 대해 무결성 유지, 병행 수행 제어, 보호와 관리를 위한 언어.(commit, rollback, grant, revoke)Commit : 하나의 논리적 단위(트랜잭션)에 대한 작업이 성공적으로 끝났을 때, 이 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산Q. 데이터 베이스 언어의 종류 3가지를 나열해 보시오
  • Rollback : 하나의 트랜잭션 처리가 비정상적으로 종료되어 DB의 일관성을 깨뜨렸을 때, 모든 연산을 취소시키는 연산
  • [참고] Commit과 Rollback이란?

Commit : 하나의 논리적 단위(트랜잭션)에 대한 작업이 성공적으로 끝났을 때, 이 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산

Rollback : 하나의 트랜잭션 처리가 비정상적으로 종료되어 DB의 일관성을 깨뜨렸을 때, 모든 연산을 취소시키는 연산

#서브쿼리(subquery)

하나의 쿼리문 안에 포함되어 있는 또 하나의 쿼리문

여러번의 쿼리를 수행해야만 얻을 수 있는 결과를 하나의 중첩된 SQL문장으로 간편하게 결과를 얻을 수 있게 해준다.

 

#조인(JOIN)

하나 이상의 테이블로부터 연관된 데이터를 검색해오는 방법

Q. JOIN과 OUTER JOIN의 차이 ? (이 질문에서 JOIN은 90퍼 INNER JOIN을 얘기하는 것)

 

#유니온(UNION)

조회한 다수의 SELECT 문을 하나로 합치고싶을 때 유니온(UNION) 을 사용. 결과를 합칠 때 중복되는 행은 하나만 표시. 단, 컬럼의 개수가 같아야하고, 각 컬럼의 데이터타입이 같아야 한다.

SELECT * FROM A

UNION (ALL)

SELECT * FROM B

Q. UNION 과 UNION ALL 차이?

UNION은 중복된 행은 하나만 표시하지만, UNION ALL 은 중복제거를 하지 않고 모두 합쳐서 보여줌

#데이터베이스 무결성

테이블에 있는 모든 행들이 유일한 식별자를 가질 것을 요구함 (같은 값 X)

외래키 값은 NULL이거나 참조 테이블의 PK값이어야 함

한 컬럼에 대해 NULL 허용 여부와 자료형, 규칙으로 타당한 데이터 값 지정

Q. 무결성 보장 방법은?

데이터를 조작하는 프로그램 내에서 데이터 생성, 수정, 삭제 시 무결성 조건을 검증한다.

트리거 이벤트 시 저장 SQL을 실행하고 무결성 조건을 실행한다.

DB제약조건 기능을 선언한다.

#제약 사항(constraints)

데이터의 무결성을 보장받기 위해 사용된다.

  • not null
  • unique
  • pk
  • fk
  • check

#인덱스(index)

인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 만약 우리가 책에서 원하는 내용을 찾는다고 하면, 책의 모든 페이지를 찾아 보는것은 오랜 시간이 걸린다. 그렇기 때문에 책의 저자들은 책의 맨 앞 또는 맨 뒤에 색인을 추가하는데, 데이터베이스의 index는 책의 색인과 같다.

데이터베이스에서도 테이블의 모든 데이터를 검색하면 시간이 오래 걸리기 때문에 데이터와 데이터의 위치를 포함한 자료구조를 생성하여 빠르게 조회할 수 있도록 돕고 있다.

#data dictionary

데이터 베이스를 운영하기 위한 정보들을 모두 특정한 테이블에 모아두고 관리 하는데 그 테이블을 Data dictionary 라고 한다. (사용자에 대한 정보, 메모리 구조, 제약조건 정보 등을 담고 있음)

#PL/SQL

  • Procedural Language/Structured Query Language의 줄임말로 데이터베이스 응용 프로그램을 작성하는 데 사용하는 오라클의 SQL 전용 언어
  • SQL 전용 언어로 SQL 문에 변수, 제어, 입출력 등의 프로그래밍 기능을 추가하여 SQL 만으로 처 리하기 어려운 문제를 해결함
  • PL/SQL은 SQL Developer에서 바로 작성하고 컴파일한 후 결과를 실행함

 

#PL/SQL 의 제어문

 

#프로시저 (Procedure)

오라클에서의 프로시저는 PL/SQL을 통해 만들어진다. 자주 사용하는 SQL을 프로시저로 만든 뒤 필요 할때마다 호출,사용하여 작업 효율을 늘릴 수 있다. 함수는 특정 연산을 수행한 뒤 결과 값을 반환하지만 프로시저는 특정한 로직을 처리하기만 하고 결과 값은 반환하지 않는 서브 프로그램이다.

(참고 예제 https://coding-factory.tistory.com/453)

#함수(Function)

오라클(Oracle)에서 Function이란, 호출 시 Function 내에 작성한 쿼리를 수행해서 특정 값을 반환하는데 사용한다

#패키지(package)

오라클에서 패키지(Package)는 프로시저(Procedure)와 함수(Function) 집합이라고 보면 되는데

한 패키지 안에 프로시저와 함수를 넣어놓고 필요할 때 패키지 내에 있는 프로시저와 함수를 뽑아 사용하는 식이다.

#예외 처리(Exception)

오라클 PL/SQL 에서는 Exception을 사용할 수 있는데 한글로 읽어보면 '예외'라는 뜻이다.

함수나 프로시저 같은 PL/SQL 수행 시 숫자만 들어올 수 있는 컬럼에 문자를 넣는다거나

0으로 나눈다거나, 컬럼 사이즈보다 큰 값을 넣을 경우 등의 에러가 발생할 경우 EXCEPTION을 작성해 두면 에러가 발생하지 않고 EXCEPTION으로 빠지면서 설정한 쿼리를 수행하게 된다

(사용 예 https://wakestand.tistory.com/382)

EXCEPTION WHEN EXCEPTION EXCEPTION명 THEN BEGIN END; WHEN OTHERS THEN (맞는 조건이 없을 경우, 필수 아님) BEGIN END;

#연산자

 

#커서(Cursor)

커서 (Cursor)는 컴퓨터로 문서를 작성해 본 사람이라면 누구나 알고 있는 용어이다. 화면에서 현재 사용자의 위치를 나타내며 깜빡거리는 막대기가 바로 커서이다.

데이터베이스에서의 커서 또한 유사한 개념이다. 방대한 양의 데이터에서 특정 위치, 특정 로우(row)를 가리킬때 커서가 사용된다. 위키피디아에서는 커서에 대해 '많은 로우 중 한 로우를 가리키는 포인터와 같다'고 설명하고 있다.

즉 커서란 현재 작업중인 레코드를 가리키는 오브젝트. 임시 작업장소이다.

 

#관계형 데이터베이스 용어

관계형 데이터베이스는 현재 가장 많이 사용되고 있는 데이터베이스의 한 종류.

관계형 데이터베이스란 테이블(table)로 이루어져 있으며, 이 테이블은 키(key)와 값(value)의 관계를 나타냄. 이처럼 데이터의 종속성을 관계(relationship)로 표현하는 것이 관계형 데이터베이스의 특징.

 

관계형 데이터베이스에 관련된 대표적인 용어는 다음과 같다.

1. 열(column)

각각의 열은 유일한 이름을 가지고 있으며, 자신만의 타입을 가지고 있다.

이러한 열은 필드(field) 또는 속성(attribute)이라고도 불린다.

2. 행(row)

행은 관계된 데이터의 묶음을 의미.

한 테이블의 모든 행은 같은 수의 열을 가지고 있다.

이러한 행은 튜플(tuple) 또는 레코드(record)라고도 불린다.

3. 값(value)

테이블은 각각의 행과 열에 대응하는 값을 가지고 있다.

이러한 값은 열의 타입에 맞는 값이어야 한다.

4. 키(key)

검색, 정렬시 Tuple을 구분할 수 있는 기준이 되는 Attribute.

테이블에서 행의 식별자로 이용되는 열을 키(key) 또는 기본 키(primary key)라고 한다.

즉, 테이블에 저장된 레코드를 고유하게 식별하는 후보 키(candidate key) 중에서 데이터베이스 설계자가 지정한 속성을 의미한다.

5. 관계(relationship)

테이블 간의 관계는 관계를 맺는 테이블의 수에 따라 일대일, 일대다, 다대다 관계로 나뉜다.

관계형 데이터베이스에서는 이러한 관계를 나타내기 위해 외래 키(foreign key)라는 것을 사용함.

#트리거(trigger)

트리거(Trigger)는 특정 테이블에 INSERT, DELETE, UPDATE 같은 DML 문이 수행되었을 때, 데이터베이스에서 자동으로 동작하도록 작성된 프로그램. 즉! 사용자가 직접 호출하는 것이 아니라, 데이터베이스에서 자동적으로 호출하는 것이 가장 큰 특징이다.

(트리거가 적용되는 예 https://limkydev.tistory.com/154)

#이상현상

정규화를 해야하는 이유는 잘못된 테이블 설계로 인해 Anomaly (이상 현상)가 나타나기 때문이다.

예) {Student ID, Course ID, Department, Course ID, Grade}

  1. 삽입 이상 (Insertion Anomaly)굳이 삽입하기 위해서는 '미수강'과 같은 Course ID를 만들어야 함.
    • 불필요한 데이터를 추가해야지, 삽입할 수 있는 상황 = Insertion Anomaly
  2. 기본키가 {Student ID, Course ID} 인 경우 -> Course를 수강하지 않은 학생은 Course ID가 없는 현상이 발생함. 결국 Course ID를 Null로 할 수밖에 없는데, 기본키는 Null이 될 수 없으므로, Table에 추가될 수 없음.
  3. 갱신 이상 (Update Anomaly)모든 Department를 "음악"으로 바꾸어야 함. 그러나 일부를 깜빡하고 바꾸지 못하는 경우, 제대로 파악 못함.
    • 일부만 변경하여, 데이터가 불일치 하는 모순의 문제 = Update Anomaly
  4. 만약 어떤 학생의 전공 (Department) 이 "컴퓨터에서 음악"으로 바뀌는 경우.
  5. 삭제 이상 (Deletion Anomaly)Student ID, Department 와 같은 학생에 대한 정보도 함께 삭제됨.
    • 튜플 삭제로 인해 꼭 필요한 데이터까지 함께 삭제되는 문제 = Deletion Anomaly
  6. 만약 어떤 학생이 수강을 철회하는 경우, {Student ID, Course ID, Department, Course ID, Grade}의 정보 중
728x90