[데이터베이스] 3. SQL은 무엇일까?

1. SQL


SQL의 역사

  • SEQUEL (IBM, 1974) 에서 유래 : 최초의 관계데이터베이스관리시스템(RDBMS)인 System R의 데이터베이스 언어로 제안되었다.
  • 비절차적 데이터베이스 언어이며, 관계 해석을 위주로 관계 대수의 기능을 혼합한다.
  • 미국 표준(ANSI) 및 국제 표준(ISO) 으로 채택되었다.
    • SQL-86 (SQL 1) 최초의 표준
    • SQL-92 또는 SQL/92
    • SQL : 1999(SQL3) → 객체지향 기능 일부 추가
    • SQL : 2003 → XML 지원
    • SQL : 2006, SQL : 2008, SQL : 2011, SQL : 2016
    • SQL : 2019 → 다차원 배열 기능 추가
  • SQL : DDL, DML, DCL 기능을 모두 포함한다.

 

SQL 관련 용어

  • Relation → 테이블(Table)
  • Tuple → 행 (row)
  • 속성 (Attribute) → 열(column)

 

한마디로 설명하자면, SQL은 질의만을 수행하는 것이 아니라 데이터베이스의 모든 작업을 통제하는 비절차적(Non-procedural) 언어이다.

 

2. 테이블(릴레이션)의 생성


CREATE TABLE <테이블 이름>
(
	컬럼1 자료형1,
	컬럼2 자료형2,
	.
	.
	컬럼N 자료형N
); --한 줄로 써도 되고, 여러 줄로 써도 됨--
  • SQL 키워드, 테이블명, 컬럼명은 대소문자를 가리지 않는다. 
  • 모든 명령은 세미콜론 (;)으로 종료해야 한다!

 

3. 자료형


표준 SQL 자료형 오라클 자료형 의미
CHARACTER(n)
CHAR(n)
CHAR(n) 길이가 n인 고정길이 문자열
길이보다 짧게 입력된 값은 공백(' ') 문자로 채워짐
CHARACTER VARYING(n)
CHAR VARYING(n)
VARCHAR2(n) 길이가 최대 n인 가변길이 문자열
입력된 길이만큼 저장됨
NATIONAL CHARACTER(n)
NATIONAL CHAR(n)
NCHAR(n)
NCHAR(n) 고정길이 유니코드 문자열
NATIONAL CHARACTER VARYING(n)
NATIONAL CHAR VARYING(n)
NCHAR VARYING(n)
NVARCHAR2(n) 길이가 최대 n인 가변길이 유니코드 문자열
한글을 쓸려면 이 자료형을 선언하면 됨
NUMERIC[(p,s)]
DECIMAL[(p,s)]
NUMERIC(p,s) 정밀도 p, 스케일(소숫점 아래 자리수) s인 고정소수점 숫자
NUMBER(5,2)는 999.99 형태로 숫자값을 저장

예를 들어, 45.1은 NUMBERIC(3,1)로 전체 3자리 숫자를 가질 수 있으며, 소수점 이하 한자리까지의 정밀도를 가진다.
INTEGER
INT
SMALLINT
NUMBER(38) 정수형, 최대 십진수 38자리 표현
FLOAT
DOUBLE PRECISION(정밀도 24 이상 FLOAT)
REAL(정밀도 23 이하 FLOAT)
FLOAT(n)
FLOAT(126)
FLOAT(63)
최대 이진수 n자리를 갖는 부동소수점 숫자
이진수 126자리 갖는 부동소수점 숫자
이진수 63 자리를 갖는 부동소수점 숫자
DATE DATE 날짜형
TIMESTAMP TIMESTAMP 날짜와 초

 

💡 char과 varchar의 차이점

 

예를 들어, name char(5);인 경우에는

 

a ' ' ' ' ' ' ' '

 

고정길이여서 나머지는 공백으로 채운다.

 

반면에, name varchar2(5);인 경우에는

최대 5글자까지 가능하며, 문자를 주어진 문자길이만큼만 넣을 수 있다.

즉, 나머지를 채우지 않는다!

 

4. 테이블 조작 명령어


1. 테이블 삭제

DROP TABLE <테이블 이름>;

2. 데이터 삽입

INSERT INTO <테이블 이름> values(컬럼값1,컬럼값2, ...,컬럼값N); 
-- 문자일 경우 따옴표 꼭 하기!! --

3. 데이터 검색

SELECT * FROM <테이블 이름> [where <조건식>];

 

5. 실습


Q. 대학 데이터베이스에 해당하는 테이블들을 생성하라.

 

1. 과목 테이블

 

과목번호(cno) 과목이름(cname) 학점(credit) 학과(dept) 담당교수(professor)
C123 C프로그래밍 3 컴퓨터 김성국
C312 자료구조 3 컴퓨터 황수관
C324 화일구조 3 컴퓨터 이규찬
C413 데이터베이스 3 컴퓨터 이일로
E412 반도체 3 전자 홍봉진
CREATE TABLE COURSE(
	cno char(4),
	cname nvarchar2(20),
	credit number(1),
	dept nvarchar2(20),
	professor nvarchar2(20)
);

 

2. 학생 테이블

 

학번(sno) 이름(sname) 학년(year) 학과(dept)
100 나수영 4 컴퓨터
200 이찬수 3 NULL
300 정기태 1 컴퓨터
400 송병길 NULL 컴퓨터
500 박종화 2 산공
CREATE TABLE STUDENT(
	sno number(3),
	sname nvarchar2(5),
	year number(5),
	dept nvarchar2(10)
	);

 

3. 등록 테이블

 

학번(sno) 과목번호(cno) 성적(grade)
100 C413 A
100 E412 A
200 C123 B
300 C312 A
300 C324 C
300 C413 A
400 C312 A
400 C324 A
400 C413 B
CREATE TABLE ENROL(
	sno number(20),
	cno char(4),
	grade char(1),
	mideterm integer,
	finterm integer
);

 

4. 생성된 테이블들에 예제의 데이터를 추가하라.

INSERT INTO COURSER VALUES(C413, 자료구조, 3, 컴퓨터, 이름);

 

5. 각 테이블에 저장된 투플들을 모두 출력하라.

SELECT * FROM STUDENT;
SELECT * FROM COURSE;
SELECT * FROM ENROL;

 

6. 테이블을 모두 삭제하라.

DROP TABLE STUDENT;
DROP TABLE COURSE;
DROP TABLE ENROL;