아이티-잉

공부하며 정리하는 IT블로그

Today   Total  
2023년! 복 많이 받으세요

데이터베이스 :: SQL

2016. 3. 6. 21:02

SQL(Structured Query Language)

 

 

 

사진 속 책장이 데이터베이스의 한 테이블이라고 할 경우 각 선반 마다 또는 수직 열마다 카테고리화하여 값을 채워넣어 운용하는 방법이 있을 것이다.

정리 외에도 필요한 서적을 꺼낼 때, 혹은 중복 서적을 제거하는 등의 조작 방식이 마치 데이터베이스의 SQL과 흡사하여 사진을 넣어봤다.

 

본론으로,

데이터베이스 관리 시스템(DBMS; Database management system)에서 데이터 관리를 위한 프로그래밍 언어가 SQL이다.

미국 국립 표준 협회(ANSI; American national standards Institute)와 국제표준화기구(ISO; International organization for standardization)에서 지정한 표준언어이며,

비절차적 언어로 정의, 조작, 제어 기능을 모두 갖췄다.

 

 

 

 


~ 광고 타임 ~


 

 

 

 

SQL 자료형(Data Type)

 

구분 자료형 설명
비트열  BIT(n)  고정길이 n개의 비트열
 VARBIT(n)  n비트까지의 배열
문자열  CHAR(n), CHARACTER(n)  공백으로 채워지는 고정길이 n개의 문자열(쉽게 말하면 n개의 글자)
 VARCHAR(n)  가변길이 n개의 문자열
정수형  SMALLINT  2바이트 크기의 고정 소수점
 INT, INTEGER  4바이트 크기의 고정 소수점
실수형  FLOAT  4바이트 크기의 부동 소수점
 DOUBLE  8바이트 크기의 부동 소수점
10진수  NUMERIC(a, b), DECIMAL(a, b)  a는 10진수의 수, b는 소수점 이하 자릿수
날짜  DATE   YY-MM-DD 형식 
시간  TIME   HH : MM : SS 형식 

 

 

 

 


~ 광고 타임 ~


 

 

 

SQL 명령어

 

모든 조작은 테이블을 통해 이루어지며, 조작에 의해 만들어지는 테이블의 종류를 크게 3가지로 볼 수 있다.

가장 기본이 되는 테이블(Table)과 가상 테이블인 뷰(View), 그리고 연산 간 발생하는 임시 테이블(Temporary table)이 있다.

 

 

1. 데이터 정의어 (Data Definition Language)

 : CREATE, ALTER, DROP 총 3개의 명령어를 사용하여 스키마나 테이블 등의 구조를 정의한다.

 

1) CREATE

 : 새로 정의할 때 사용한다.

 

CREATE TABLE 테이블 명
(속성 이름, 데이터 타입, [NOT NULL], …,
{[PRIMARY KEY 속성]}
{[UNIQUE 속성]}
{
 [FOREIGN KEY 속성 REFERENCES 테이블 ] 속성
 [ON DELETE {RESTRICT, CASCADE, SET NULL, SET DEFAULT} ]
 [ON UPDATE {RESTRICT, CASCADE, SET NULL, SET DEFAULT} ]
}
{[ CHECK 조건식 ]}
};

 

- NOT NULL : 널(NULL)값을 허용하지 않는다.

- PRIMARY KEY : 기본키를 설정한다.

- FOREIGN KEY : 외래키를 설정한다.

- CASCADE : 변경 또는 삭제가 일어날 때 이를 참조하고 있는 개체 또한 함께 수정작업이 일어난다.

- RESTRICT : 변경 또는 삭제가 일어날 때 다른 참조 개체가 존재한다면 수정작업이 취소된다.

- NO ACTION : 아무것도 하지 않는다.

- SET NULL : 모두 NULL로 변경시킨다.

- SET DEFAULT : 초기값으로 돌려놓는다.

- CHECK : 해당 부분에 제약조건을 지정할 수 있다.

 

예제)

CREATE TABLE 학생정보 -- 학생정보라는 테이블을 만든다.
(학번 INT NOT NULL, -- 학번 속성은 INT 타입이며 NULL 값을 가질 수 없다.
 이름 CHAR(4) NOT NULL, -- 이름 속성은 CHAR 타입으로 4글자까지 받을 수 있으며 NULL값은 가질 수 없다.
 평균학점 FLOAT, -- 평균학점 속성은 부동소수점 형태로 소수를 입력 받을 수 있다.
 편입여부 SMALLINT, -- 편입여부는 SMALLINT 타입을 받는다.
PRIMARY KEY (학번), -- 기본키는 학번 속성이 된다.
FOREIGN KEY (평균학점) REFERENCES 성적(학점평균) -- 평균학점은 성적 테이블의 학점평균 속성을 외래키로 갖는다.
 ON DELETE NO ACTION  -- 참조 테이블의 해당 튜플이 삭제되더라도 변함없어야 하며
 ON UPDATE CASCADE, -- 참조 테이블의 변경이 일어나면 함께 변경된다.
CHECK (편입여부 = 1 OR 편입여부 = 2)); -- 편입여부는 1 또는 2만 받는다. 

 

 

 

2) ALTER

 : 기존의 것을 변경할 때 사용한다.

 

ALTER TABLE 테이블이름
 { ADD | ALTER(MODIFY) | DROP } 변경할 속성;

 

여기에서 '|' 문자는 논리합의 의미로 '또는', 'OR"에 해당한다.

즉, ADD 또는 ALTER 또는 DROP 중 원하는 연산을 입력한 뒤 명령문을 이어가면 된다.

 

- ADD : 추가시킬 때 사용한다.

- ALTER 또는 MODIFY : 변경하고자 할 때 사용한다.

- DROP : 삭제하고자 할 때 사용한다.

 

예제)

 

ALTER TABLE 학생정보 -- 학생정보 테이블을 변경할건데,
 ALTER {이름 CHAR(10) NOT NULL); -- 이름 속성을 CHAR 탑으로 10만큼 할당하여 최대 10글자까지 받게한다. 

 

 

3) DROP

 : 기존의 것을 삭제할 때 사용한다.

 

DROP TABLE 테이블 이름 [CASCADE | RESTRICT]

 

 

 

 


~ 광고 타임 ~


 

 

 

 

2. 데이터 조작어(Data Manipulation Language)

 : SELECT, INSERT, UPDATE, DELETE 총 3개의 명령어로 앞서 정의한 테이블에서 원하는 데이터를 조작한다.

 

1) SELECT

 : 테이블에 접근하여 필요한 데이터를 찾기위한 명령어다.

 

SELECT [ ALL / DISTINCT ] 속성
 FROM 테이블 이름
 [ WHERE 조건절 ]
 [ GROUP BY 속성 ] [ HAVING 조건 ]
 [ ORDER BY 속성 [ASC/DESC] ];

- DISTINCT : 중복된 행을 제거하여 선택한다.

- GROUP BY : 지정한 열의 데이터들을 묶는 역할을 한다.

- HAVING : GROUP BY와 함께 쓰이며 조건을 이용할 때 사용한다.

- ASC : Ascending의 약자로 오름차순을 의미한다.

- DESC : Descending의 약자로 내림차순을 의미한다.

 

 

예제1)

SELECT * FROM 학생정보 -- 학생 정보의 모든 내용을 출력한다.

 

예제2)

SELECT 이름 FROM 학생정보 -- 학생정보 테이블에서,
 WHERE 편입여부 = 1; -- 편입여부 속성이 1과 같은 이름 속성만 출력한다.

 

* 참고로 비교연산자에 관한 정보여기를 참고하면 된다.

 

예제3)

SELECT 학번, COUNT(*) FROM 장학내역 -- 장학내역 테이블에서 학번을 카운트하여 출력하되,
 GROUP BY 학번 HAVING COUNT(*) > 2; -- 학번이 3번이상 노출(장학금 내역이 3번이상)된 학번만 출력한다. 

 

 

 

2) INSERT

 : 원하는 테이블에 튜플을 삽입시킨다.

 

INSERT INTO 테이블 이름 [삽입 속성들]
 { VALUES (속성에 들어갈 값) | SELECT 문}

 

 

예)

INSERT INTO 장학내역(학번, 이름, 금액) -- 장학내역 테이블의 학번, 이름, 금액 속성에
 VALUES('20160000', '고알파', '110,1000'); -- 학번, 이름, 금액 순으로 입력되게 된다.

 

 

 

3) UPDATE

 : 테이블 내 원하는 값을 변경시킨다.

 

UPDATE 테이블 이름 SET 속성이름 = 값[WHERE 조건식]

 

 

예)

UPDATE 학생정보 SET 편입여부 = '2' -- 학생정보 테이블에서
 WHERE 학번 = '20160000'; -- 학번 20160000에 해당하는 튜플의 편입여부를 '2'로 변경한다.

 

 

 

4) DELETE

 : 튜플을 삭제할 때 사용한다.

 

DELETE FROM 테이블이름 [WHERE 조건]

 

 

예)

/*  학생정보 테이블에서 학번 20160000에 해당하는 튜플을 제거한다. */
DELETE FROM 학생정보 WHERE 학번 = '20160000';

 

 

 

 


~ 광고 타임 ~


 

 

 

 

마치며

 

본 블로그에서 가장 먼저 쓰여진 포스팅이 데이터베이스 소개글인데,

그 이유는 필자가 가장 약한 부분이기 떄문에 공부하며 정리해보려 시작한데 있다.

 

이론의 경우는 암기나 이해를 통해 또는 필요할 때 찾아보면서 알아가면 되는부분이지만,

SQL같은 언어의 경우에는 직접 코딩을 해보면서 결과를 눈으로 봐야 손에 익는다.

 

아직 DBMS 관련 소프트웨어를 설치해두지 않은 관계로,

직접 실습하지 못한 탓에 나름의 정리를 한다지만 스스로 정리가 잘 안되는 느낌이 있다.

때문에 본 포스팅 또한 이해를 돕기위한 내용이 충분하지 못한 느낌이라서 찝찝한 감이 있다.

 

그래서 차후 적당한 DBMS 도구를 알아본뒤 함께 소개하면서

실습을 통한 결과와 함께 다시 심도있는 포스팅으로 찾아오도록 하겠다.

 

 

 

 

끝!.