RDBMS

1c2·2024년 3월 13일
0

DB

목록 보기
1/7
  • RDBMS

    • 관계형(Relational) 데이터베이스 시스템
    • 테이블기반의 RDBMS
      • 데이터를 테이블 단위로 관리

        하나의 테이블은 여러 개의 column으로 구성

      • 중복 데이터를 최소화 시킴

        같은 데이터가 여러 컬럼 또는 테이블에 존재 했을 경우
        데이터를 수정 시 문제가 발생할 가능성이 높아짐 - 정규화

      • 여러 테이블에 분산되어 있는 데이터를 검색 시 테이블 간의 관계(join)를 이용하여 필요한 데이터를 검색
  • SQL

    • Database에 있는 정보를 사용할 수 있도록 지원하는 언어.
    • 모든 DBMS에서 사용 가능
    • Query의 대소문자는 구분하지 않음(Data의 대소문자는 구분)
      • my SQL은 데이터도 대소문자 구분하지 않음 (default 설정) :: binary 함수 이용.
  • SQL 구문은 DCL, DDL, DML로 구분하며, 아래와 같은 종류가 있다.

  • DDL (Data Definition Language) : 데이터 정의어

    • 데이터베이스 객체 (table, view, index, ...)의 구조를 정의
    • 테이블 생성, 컬럼 추가, 타입 변경, 제약조선 지정, 수정 등
  • DML (Data Manipulation Language) : 데이터 조작어

    • Data 조작기능
    • 테이블의 레코드를 CRUD
  • DCL (Data Control Language) : 데이터 제어어

    • DB, Table의 접근 권한이다 CRUD 권한을 정의
    • 특정 사용자에게 테이블의 검색 권한 부여/금지 등
  • TCL (Transaction Control Language) : 트랜잭션 제어어

    • transaction란 데이터베이스의 논리적 연산 단위
  • 데이터베이스 생성

    create database 데이터베이스명;
    create database 데이터베이스명
    default character set값
    collate 값;

  • 데이터베이스 변경

    alter database 데이터베이스명
    default character set값 collate 값;

*데이터베이스 삭제

drop database 데이터베이스명;

*이름이 'dbtest'인 데이터베이스 삭제
drop database dbtest;

  • 데이터베이스 사용.

    use 데이터베이스명;

    • 이름이 ssafydb인 데이터베이스 사용.

      use ssafydb;

  • Data Manipulation Language (DML) : SELECT
    • SELECT, FROM
use ssafydb;

-- 모든 사원의 모든 정보 검색.
select *
from employees;

-- 사원이 근무하는 부서의 부서번호 검색.
select department_id
from employees;

-- 사원이 근무하는 부서의 부서번호 검색.(중복제거)

select distinct department_id
from employees;
-- 회사에 존재하는 모든 부서.
select employees
from departments;

-- 모든 사원의 사번, 이름, 급여 검색.
select employee_id, first_name, salary
from employees;

-- 모든 사원의 사번, 이름, 급여, 급여 * 12 (연봉) 검색.
select employee_id, first_name, salary, salary * 12
from employees;

-- 모든 사원의 사번, 이름, 급여, 급여 * 12 (연봉), 커미션, 커미션포함 연봉 검색.
select employee_id, first_name, salary, salary * 12, commission_pct, 
salary * 12 * (1+ifnull(commission_pct, 0))
from employees;

프로그램에서 null값 : 값이 없다.
sql에서 null값 : 값을 알 수 없다.

  • WHERE
  -- 부서번호가 50인 사원중 급여가 7000이상인 사원의
-- 사번, 이름, 급여, 부서번호
select employee_id, first_name, salary, department_id
from employees
where department_id = 50
and salary >= 7000;
-- 근무 부서번호가 50, 60, 70에 근무하는 사원의 사번, 이름, 부서번호
select employee_id, first_name, salary, department_id
from employees
where department_id = 50 
or department_id = 60 
or department_id = 70;

-- 근무 부서번호가 50, 60, 70이 아닌 사원의 사번, 이름, 부서번호
select employee_id, first_name, salary, department_id
from employees
where department_id != 50 
and department_id != 60 
and department_id != 70;

-- 근무 부서번호가 50, 60, 70에 근무하는 사원의 사번, 이름, 부서번호
select employee_id, first_name, salary, department_id
from employees
where department_id in (50,60,70);

-- 근무 부서번호가 50, 60, 70이 아닌 사원의 사번, 이름, 부서번호 
select employee_id, first_name, salary, department_id
from employees
where department_id not in (50,60,70);

-- 급여가 6000이상 10000이하인 사원의 사번, 이름, 급여
select employee_id, first_name, salary, department_id
from employees
where salary >= 6000 and salary <= 10000;

select employee_id, first_name, salary, department_id
from employees
where salary between 6000 and 10000;

-- 근무 부서가 지정되지 않은(알 수 없는) 사원의 사번, 이름, 부서번호 검색.
select employee_id, first_name, salary, department_id
from employees
where department_id is null;

-- 근무 부서가 지정된 사원의 사번, 이름, 부서번호 검색.
select employee_id, first_name, salary, department_id
from employees
where department_id is not null;

-- 커미션을 받는 사원의 사번, 이름, 급여, 커미션
select employee_id, first_name, salary, department_id, commission_pct
from employees
where commission_pct is not null;

-- 이름에 'x'가 들어간 사원의 사번, 이름
select employee_id, first_name, salary, department_id
from employees
where first_name like '%x%';

-- 이름의 끝에서 3번째 자리에 'x'가 들어간 사원의 사번, 이름
select employee_id, first_name, salary, department_id
from employees
where first_name like '%x__';
  • 논리 연산시 주의점 : NULL
  • ORDER BY
  -- 모든 사원의 사번, 이름, 급여
-- 단 급여순 정렬(내림차순)
select employee_id, first_name, salary
from employees
order by salary desc;

-- 50, 60, 70에 근무하는 사원의 사번, 이름, 부서번호, 급여
-- 단, 부서별 정렬(오름차순) 후 급여순(내림차순) 검색
select employee_id, first_name, department_id, salary
from employees
where department_id in (50,60,70)
order by department_id asc, salary desc;
  • SET

0개의 댓글