지금까지 EERD와 관계 모델을 알아보았으니 이제 드디어 SQL로 넘어갈 차례입니다.

SQL이 바로 처음에 말씀드린 DBMS(Database Management System)에 해당하는데,

제가 이번 글에서 다룰 DBMS는 오라클 사의 MySQL 입니다.

 

SQL의 설치 및 구동은 일단 넘어가도록 하며, 추후 SQL#0 으로 추가하여 올리겠습니다.

저는 SQL을 MS 스토어에 있는 앱인 윈도우 터미널로 구동하는데 글씨체가 귀여워서 좋습니다.

아이콘도 깜찍 >_


본론으로 들어와서, SQL 터미널 내에서 데이터베이스를 생성하려면 어떻게 해야 할까요?

create database mydb;

create database 뒤에 원하는 DB의 이름을 적으면 됩니다.

왜인지는 모르겠지만 방금 221025 라는 이름의 DB를 만드려니까 자꾸 오류가 나길래,

영어 이름으로 시작하도록 mydb1025 로 DB 이름을 바꿔서 만드니 잘 되네용.. 아마 숫자는 오류가 있나 봅니다

이렇게 생성한 DB는 show databases; 명령어로 확인 가능합니다.

 

원하는 DB에 진입하려면 use 명령어를 사용합니다.

use 220919;

 

show tables; 명령어를 사용하면 해당 DB의 테이블(릴레이션),

즉 엔티티 타입 / 관계 타입 / 다치 애트리뷰트가 나옵니다.


테이블을 만들려면 아래와 같은 create table 구문을 사용합니다.

CREATE TABLE EMPLOYEE
( 	FNAME VARCHAR(15) NOT NULL, 
	MINIT CHAR,
	LNAME VARCHAR(15) NOT NULL, 
	SSN CHAR(9) NOT NULL, 
	BDATE DATE,
	ADDRESS VARCHAR(30),
	SEX CHAR,
	SALARY DECIMAL(10, 2), 
	SUPERSSN CHAR(9),
	DNO INT NOT NULL, 
PRIMARY KEY (SSN),
FOREIGN KEY (SUPERSSN) REFERENCES EMPLOYEE(SSN),
FOREIGN KEY (DNO) REFERENCES DEPARTMENT (DNUMBER)) ;

엔티티 타입 EMPLOYEE를 테이블로 만드려고 합니다.

애트리뷰트 Fname은 최대 15 크기의 VARCHAR형이며, NOT NULL의 조건을 달아주었네요.

그리고 쭉 내려가면 SsnPK로 정해주었습니다.

Super_ssnSsn을 참조하는 FK로 정해주어, 다음과 같은 관계를 맺어주었습니다.

DnoDEPARTMENT 테이블의 Dnumber를 참조하는 FK로 설정하여 다음과 같은 관계가 되었네요.

이어서 DEPARTMENT 테이블을 생성합니다.

CREATE TABLE DEPARTMENT
(	DNAME VARCHAR(15) NOT NULL, 
	DNUMBER INT NOT NULL, 
	MGRSSN CHAR(9) NOT NULL, 
	MGRSTARTDATE DATE,
PRIMARY KEY (DNUMBER),
UNIQUE (DNAME),
FOREIGN KEY (MGRSSN) REFERENCES EMPLOYEE (SSN)) ;

PKDnumber를 가지며, Dname에 Unique를 붙여 대체 키로 설정했습니다.

이 경우 Dnumber와 Dname이 후보 키가 되겠네요.

또한 EMPLOYEE 테이블의 Ssn을 참조하여 Mgr_ssn을 FK로 설정해 다음과 같은 관계가 맺어집니다.

스키마 다이어그램을 확인하면 다음과 같습니다.


앞서 보았듯 create table 문에서 NOT NULL을 설정할 수 있습니다.

기본적으로 PK를 제외한 모든 애트리뷰트는 NULL을 허용하는데, 경우에 따라 NOT NULL을 붙이는 것이죠.

또한 DEFAULT 문으로 아래와 같이 기본값을 명시할 수도 있습니다.

CREATE TABLE EMPLOYEE
( 	...
	DNO INT DEFAULT 1, // Dno의 기본 값을 1로 설정
	... );

본래 NULL을 허용하면 아무 값을 넣지 않으면 NULL이 들어가는데,

디폴트 값을 명시하면 아무 값을 넣지 않으면 설정한 디폴트 값이 들어가게 됩니다.

 

create domain 으로 새로운 도메인을 만들 수 있습니다. 즉, 새로운 데이터 타입을 만드는 것이죠.

C/C++에서의 typedef와 같은 역할이라고 생각하시면 됩니다.

create domain SSN_TYPE as CHAR(9)

SSN_TYPE 라는 새 도메인을 9의 크기를 갖는 CHAR 형식으로 만들었습니다.

 

다음은 SELECT와 조인에 대해 알아보겠습니다.

 

<틀린 점이 있다면 지적 부탁드립니다. 감사합니다.>

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기