데이터베이스 간단 실습해보기

Ju Young Jun·2021년 9월 24일
0

👨‍💻 SQL과 일반 프로그래밍 언어

👨‍💻 SQL 기능에 따른 부류

  • 데이터 정의어(DDL)

  • 데이터 조작어(DML)

  • 데이터 제어어(DCL)

데이터 정의어는 테이블이나 관계의 구조를 생성하는데 사용하며 CREATE, ALTER(테이블 속성 변경 혹은 수정..), DROP문 등이 있다. 데이터 조작어는 테이블에 데이터를 검색, 삽입, 수정, 삭제하는데 사용하며 SELECT, INSERT, DELETE, UPDATE문 등이 있다. 여기서 SELECT 문은 특별히 Query문(질의어)라고도 함. 데이터 제어어는 데이터의 사용 권한을 관리하는데 사용하며, GRANT, REVOKE문 등이 있다. SQL문의 내부적 실행순서는 아래와 같음.

👨‍💻 Database 생성

CREATE DATABASE chap3;

👨‍💻 DB에 Students Table 생성

  • 데이터베이스를 만들고 chap3에서 작업하기 위해서 use chap3; 을하고 난 뒤, chap3인지 확인
  • 기본키 명시 & 제약 조건 이름 명시 & unique 제약 명시

    create table Students
    (sid char(20),
    name varchar(20),
    login varchar(20),
    age integer,
    gpa real,
    unique (name, age),
    constraint StudentsKey primary key (sid) )
    default character set = euckr;

👨‍💻 Students Table에 INSERT & SELECT

  • 도메인 제약, 기본키 제약 조건 준수하면서 INSERT

    insert into Students(sid, name, login, age, gpa) Values (50000, 'Dave', 'dave@cs', 19, 3.2);
    insert into Students(sid, name, login, age, gpa) Values (53668, 'Smith', 'smith@ee', 18, 3.2);
    insert into Students(sid, name, login, age, gpa) Values ('53666', 'Jones', 'jones@cs', 18, 3.3);
    insert into Students Values (53650, 'Smith', 'smith@math', 19, 3.7);
    insert into Students Values (53831, 'Madayan', 'madayan@music', 11, 1.8);
    insert into Students Values (53832, 'Guldu', 'Guldu@music', 12, 2.0);

👨‍💻 Chap3 DB에 Courses Table 생성

  • 기본키 명시, 제약 조건 이름 명시

    create table Courses
    (cid char(20),
    cname varchar(30),
    credits integer,
    constraint CoursesKey primary key (cid) )
    default character set = euckr;

👨‍💻 Courses Table에 INSERT & SELECT

  • 도메인 제약, 기본키 제약 조건 준수하면서 INSERT

    insert into Courses values ('Carnatic101', 'Intro Carnatic', 3);
    insert into Courses values ('Reggae203', 'Understanding Reggae', 2);
    insert into Courses values ('History105', 'Intro History', 3);
    insert into Courses values ('Topology112', 'Intro Topology', 3);
    select * from Courses;

👨‍💻 DB에 Enrolled Table 생성

  • 기본키, 외래키 명시, 참조 무결성 옵션 명시
  • studid, cid 도메인 : 각각 부모 테이블의 기본키 도메인과 동일

create table Enrolled
(studid char(20),
cid char(20),
grade char(2),
primary key (studid, cid),
foreign key (studid) references Students (sid)
on delete cascade
on update cascade,
foreign key (cid) references Courses (cid)
on delete cascade
on update cascade)
default character set = euckr;
desc enrolled;

👨‍💻 Enrolled Table에 INSERT & SELECT

  • 도메인 제약, 기본키 제약 조건, 참조무결성 준수하면서 INSERT

    insert into enrolled values (53650, 'Topology112', 'A');
    insert into enrolled values (53666, 'History105', 'B');
    insert into enrolled values (53831, 'Carnatic101', 'C');
    insert into enrolled values (53831, 'Reggae203', 'B');
    select * from enrolled

👨‍💻 On Delete CASCADE 확인

  • CREATE TABLE Students
    (sid CHAR(20), ... CONSTRAINT StudentsKey
    PRIMARY KEY (sid) )
  • CREATE TABLE Enrolled
    (studid char(20), ... FOREIGN KEY (studid)
    REFERENCES Students
    (sid) ON DELETE CASCADE ...)
  • 해석 : 부모 테이블 Students에 있는 어떤 행이 삭제될 떄, 그 행이 가지고 있는 기본키 sid 값을 자식 테이블 Courses에서 참조하고 있을 떄, cascade로 삭제

    delete from students where sid = '53666';
    select from students;
    select
    from enrolled;

👨‍💻 On Update Cascade 확인

  • CREATE TABLE Students
    (sid CHAR(20), ... CONSTRAINT StudentsKey
    PRIMARY KEY (sid) )
  • CREATE TABLE Enrolled
    (studid char(20), ... FOREIGN KEY (studid)
    REFERENCES Students
    (sid) ON UPDATE CASCADE ...)
  • 해석 : 부모 테이블 Students에 있는 어떤 행이 갱신될 때, 그 행
    이 가지고 있는 기본키 sid 값을 자식 테이블 Courses에
    서 참조하고 있을 때, cascade로 갱신

1175 error가 난다면, 안전모드를 꺼주면 되므로

SET SQL_SAFE_UPDATES = 0;

위 코드를 입력하면 해결됨.

update Students set sid = 6000 where sid = 53831;
select from students;
select
from enrolled;

👨‍💻 단일 테이블 대상 검색

select from students where age <= 13;
select name, age from students where sid = 53832;
select
from Students Where name = 'Smith';

👨‍💻 두 테이블 대상 검색

  • A 학점을 받은 학생 이름과 과목 번호 검색

    select S.name, E.cid
    from Students S, Enrolled E
    where S.sid=E.studid And E.grade = 'A';

👨‍💻 세 테이블 대상 검색

  • Madayan이 수강한 과목 이름, 학점수, 평점 검색

    select S.name, C.cname, C.credits, E.grade
    from Students S, Enrolled E, Courses C
    Where S.sid = E.studid and E.cid = C.cid and S.name = 'Madayan';

profile
안녕하세요 :)

0개의 댓글