본문 바로가기

23년 1학기 학교공부/데이터베이스

[DB] SQL - DML(Data, MAnipulation Langauge, 데이터 조작어)

목차

    728x90
    반응형
    SMALL

    📁 SQL

    SQL(Structured Query Language)란 관계 데이터베이스를 기반으로 한 포괄적인 표준 언어를 말한다.

     

     

    SQL은 다음 두 기능을 가지고 있다.

    - 데이터 정의어(DDL : Data Definition Language) : 스키마(테이블, 뷰)를 정의하고 제약조건을 명시한다.

      DCL(Data Control Language)이란 보안과 권한 관리, 트리거 등을 말한다.

      TCL(Transaction Control Language)이란 Commit, Rollback 등을 말한다.

    - 데이터 조작어(DML : Data Manipualtion Langauge) : Select, Insert, Delete, Update를 말한다.

     

    이때 Insert, Delete, Update는 SQL에서 데이터베이스 내용을 변경하기 위해 사용되는 명령이다,

     

     

     

     

    📁 Insert문

    각 애트리뷰트에 대해 지정된 값을 가지고 테이블에 새로 행을 추가할 때 사용한다.

     

    애트리뷰트 값들의 순서는 CREATE TABLE 명령에서 명시한 애트리뷰트들의 순서와 같아야한다.

     

     

    insert into	Customer 
    values		(555, ‘Yu’ ‘Jia’, ‘540 Magnolia Hall’, ‘Tallahassee’, ‘FL’, ‘32306’ , 0.00)

    위와 같이 작성하게되면 Customer라는 테이블에 (...) 안의 값들을 각 애트리뷰트의 값으로 하는 하나의 행을 추가한다.

     

    (...) 안의 값들은 Customer의 애트리뷰트 순서대로이어야 하므로 순서가 뒤섞이면 안된다.

     

     

    또는, 테이블 이름 옆에 값과 대응되는 애트리뷰트 이름을 명시적으로 나타낼 수 있다.

    insert into	Customer (firstName, lastName, accountId)
    values		(‘Jia’, ‘Yu’, 555)

     

    누락된 애트리뷰트에 대해서는 기본값(default value)이 입력되며,

    정의된 기본값이 없는 경우에는 null이 입력된다.

     

    NOT NULL이면서 기본값이 정의되지 않은 경우에는 에러가 난다.

     

     

    insert into	PayStatement (ssn, hourlyRate, numHours, amountPaid, datePaid)
    select		TimeCard.ssn,
                    hourlyRate,
                    sum((endTime-startTime)*24) as hoursWorked,
                    sum((endTime-startTime)*24* hourlyRate) as amountPaid, today
    from		TimeCard, HourlyEmployee
    where		TimeCard.ssn=HourlyEmployee.ssn
    			and paid = false
    group by	TimeCard.ssn, hourlyRate

    SELECT 질의 결과로 나온 여러개의 튜플을 한번에 테이블에 삽입할 수도 있다.

     

     

     

     

    📁 Update문

    선택된 하나 이상의 튜플에서 애트리뷰트 값들을 수정할 때 UPDATE문을 사용한다.

     

     

    update	TimeCard
    set 	paid = true
    where	paid = false

    TimeCard 테이블에서, paid 애트리뷰트가 false인 튜플들의 paid를 true로 바꾸는 작업이다.

    급여 지급 후 지급되었음을 기록하기 위한 상황이라고 볼 수 있다.

     

     

    update	HourlyEmployee
    set 	hourlyRate = hourlyRate * 1.1
    where	ssn = ‘145-09-0967’

    HourlyEmployee 테이블에서, 직원번호(ssn)이 '145-09-0967'인 직원의 시간당급여를 1.1배(10% 인상)하는 작업이다.

     

    위 두 예시에서 볼 수 있듯이, update문으로 한 번에 수정 가능한 튜플의 수는 정해져있지 않다.

     

     

     

     

    📁 Delete문

    한 테이블에서 튜플을 삭제할 때 Delete문을 사용한다.

     

     

     

    delete from 	TimeCard
    where not exists (select * 
                    from HourlyEmployee
                    where TimeCard.ssn = HourlyEmployee.ssn)

    직원번호(ssn) 애트리뷰트를 비교하여 TimeCard 테이블과 HourlyEmployee 테이블에 함께 존재하는 튜플을 찾은 뒤,

    TimeCard 테이블에서, 위에서 찾은 튜플 외의 튜플들을 삭제한다.

     

    시간제 직원이 아닌 직원에 대해 정보를 TimeCard 테이블에서 모두 삭제하는 상황이라고 볼 수 있다.

     

     

     

     

     

    728x90
    반응형
    LIST