성장일기 : 문과생의 개발 여정 (งᐖ)ว ( ᐛ )و

DATABASE 란? 본문

백엔드개발/DATABASE

DATABASE 란?

hyemi_flora 2023. 10. 27. 12:13

    # 데이터베이스 (Database, DB)

    - 데이터 창고

    - 파일에 데이터를 저장하다보니 많은 문제점과 한계들을 만나게 되었고 그것을 극복하고자 만들어진 데이터 저장 프로그램.

    - 데이터를 효율적으로 저장하고 검색할 수 있다.

   

    # 파일 시스템의 문제점

    - 데이터 수정 시 데이터간의 불일치를 유발할 수 있다.

     ( 정보 하나 수정할때 관련된 파일을 모두 찾아서 수정해야 한다 )

    - 다수의 사용자가 하나의 파일에 동시에 접속할 수 없다.

    - 중복데이터를 필요 이상으로 많이 저장하게 된다

    - 보안이 취약하다(보안에 대한 별도 구현이 필요하다)

    - 파일 복구 기능을 따로 구현해야한다.

   

    #DBMS (Database Management System)

    - 데이터베이스를 관리하는 프로그램

    - DB 데이터가 보관되는 장소이고 그 DB를 총괄하는 프로그램을 DBMS라고 한다.  

   

    #RDBMS (Relational DBMS)

    - 관계형 데이터베이스

    - 데이터들간의 관계를 이용해 데이터 중복을 최소화하는 방식의 DBMS

    - 질의문 형식의 명령어(SQL, Query)를 통해 데이터베이스를 관리한다.

    - 기본적인 질의문은 국제 표준을 따라야하기 때문에 RDBMS들의 명령어는 거의 유사하다

    - 데이터를 표 형태로 저장한다.

   

    # 테이블

    - 관계형 데이터베이스에서는 데이터를 표 형태로 저장한다.

    - 필드(열, 컬럼, 속성)     : 한 열에 저장되는 데이터들을 대표하는 이름

                                            (객체지향의 클래스와 맞아떨어지는 단어들)

    - 레코드(행, 로우, 큐플)    : 한 행에 저장되는 하나의 개체를 나타내는 데이터 묶음

                                              (객체지향의 인스턴스 역할)

   

    # SQL  (Structured Query Language) 

    - 관계형 데이터베이스를 관리하기 위한 질문같이 생긴 명령어

    - 쿼리문, 질의문 등으로 불린다.

    - SELECT(검색), INSERT(등록), UPDATE(갱신), DELETE(제거) 4가지 기본 조작에 대응하는 명령어가 있다.

 

-- tab, tabs, user_tables 현재 계정이 가지고 있는 테이블들을 볼 수 있는 테이블

Select * From tab;

Select * From tabs;

Select * From user_tables;

 

 

-- SELECT : 해당 테이블의 내용을 조회할 수 있는 질의문

SELECT * FROM employees;

SELECT * FROM regions;

SELECT * FROM countries;

SELECT * FROM locations;

SELECT * FROM departments;

SELECT * FROM jobs;

SELECT * FROM job_history;

 

 

--연습1> 모든 부서(departments)의 부서번호화 부서명을 조회해보세요

>>> Select department_id, department_name From departments;

--연습2> 모든 사원(employees)의 사번/이름/월급/고용일을 조회해보세요

>>>  Select employee_id, first_name, last_name, salary, hire_date From employees;

 

 

---------------------------------

 

 

 

  # DESC 테이블명

    - 해당 테이블의 컬럼정보를 볼 수 있다.

    - 컬럼명, NULL 허용여부, 컬럼 타입 및 크기 볼 수 있다.

   

    # NUBBER(n), NUMBER(n,m)

    - 숫자데이터를 저장할 수 있는 컬럼 타입

    - 숫자가 하나만 적혀있으면 정수의 길이를 나타낸다

    - 숫자가 두개 적혀있으면 숫자 전체의 길이와 소수점 자리수를 나타낸다

    NUMBER(6)  >> 0~9의 정수가 6개

    NUMBER(8,2) >> 정수 6개 + 소수점 이하 2개

    NUMBER(2,2) >> 0.소수점 이하 2자리

    - 각 컬럼마다 제한이 걸려있다.

   

    # VARCHAR2(n)

    - VARCHAR보다 VARCHAR2 많이 사용~

    - 문자를 저장할 수 있는 타입

    - 저장되는 데이터의 크기에 맞춰 알맞은 공간만 사용하도록 설계되어 있다.

    - 저장 공간을 효율적으로 사용할 수 있다.

   

    # CHAR(n)

    - 문자를 저장할 수 있지만 크기가 자동으로 조절되지 않는 컬럼타입

    - 데이터 크기에 맞추지 않고 항상 일정한 공간을 차지한다

    - 해당 컬럼의 성격에 따라 저장공간의 낭비가 심해질 수 있다.

    - 국가코드 (KR, EN, JP...) 처럼 길이가 고정되어 있는 행만 지닌 컬럼은 CHAR타입이 효율적일 수도 있다.

 

    # DATE

    - 날짜 및 시간 데이터를 저장할 수 있는 컬럼 타입

 

 

-- # 컬럼 조회시 AS를 이용해 해당 컬럼의 이름을 원하는 이름으로 설정하여 조회할 수 있다.

-- AS " " 쌍 따옴표사용

SELECT first_name AS 이름, salary AS 월급 FROM employees;

 

-- # 컬럼에 산술연산자를 활용하여 각 컬럼을 계산한 결과를 조회할 수 있다.

SELECT salary "한달치", salary * 2 "두 달치", salary * 3 AS "세 달치" FROM employees;

-- # 컬럼끼리도 계산 할 수 있다 (자동정렬 Ctrl + F7)

SELECT

    first_name,

    job_id,

    commission_pct * salary AS "건 당 커미션"

FROM

    employees;

 

-- # NVL(column, value) 함수

-- 계산할 떄 해당 컬럼 값이 null 인 경우 대신 사용할 값을 지정해준다.

SELECT

    employee_id,

    first_name,

    job_id,

    nvl(commission_pct, 0) * salary AS "건 당 커미션"

FROM

    employees;

 

null 대신 0을 출력

 

-- #컬럼값 이어 붙여서 출력하기

SELECT first_name || ' ' || last_name AS full_name FROM employees;

SELECT first_name || ':' || last_name FROM employees;

SELECT salary || '/' || nvl(commission_pct, 0) AS "salary" FROM employees;

 

 

 

 

-- # SELECT DISTINCT : 각 데이터를 한 번씩만 조회한다 (한번이라도 출력했던 적이 있는 값 조회. 즉, 등장한적이 있는 값 조회)

SELECT DISTINCT job_id FROM employees;

SELECT DISTINCT department_id FROM employees;

SELECT DISTINCT  first_name, salary FROM employees; -- 같은 이름과 같은 월급을 받아야

SELECT DISTINCT first_name FROM employees;

 

--퀴즈3> 모든 사원들의 사번/풀네임/직책/연봉/건당 커미션금액을 조회하시오

>>>  SELECT

    employee_id,

    first_name

    || ' '

    || last_name                    AS full_name,

    job_id,

    salary * 12                     AS "Annual Income",

    nvl(commission_pct, 0) * salary AS "건 당 커미션"

FROM

    employees;

 

 

   # 주석의 종류 :

1. /*대괄호주석 여기에 내용 입력 */

2. -- 데이터베이스에서 사용하는 주석

   # 명령어 실행 : 

CTRL + ENTER : 명령어 하나 실행

F5 : 이 스크립트의 모든 명령어 실행

   # 정렬 : CTRL + F7