MSSQL LAB
MSSQL 1.1 · 1부. 기초

관계형 데이터베이스와 SQL Server

테이블·행·열이 무엇인지, SQL 이 무엇을 시키는 말인지 봅니다.

예상 학습 시간 12분 난이도 입문
개념 설명

데이터를 어디에 담는가

프로그램이 다루는 값을 파일에 적어 둘 수도 있습니다. 회원 목록을 텍스트 파일 한 줄에 하나씩 적는 식입니다. 다루는 양이 적고 혼자 사용한다면 그것으로 충분합니다.

사람이 늘고 프로그램이 여럿이 되면 파일로는 감당하기 어려운 일이 생깁니다.

  • 동시에 고칠 때 — 두 사람이 같은 파일을 동시에 저장하면 나중에 저장한 쪽이 앞의 내용을 덮어씁니다.
  • 찾을 때 — 백만 줄에서 조건에 맞는 것을 찾으려면 처음부터 끝까지 읽어야 합니다.
  • 중간에 멈출 때 — 여러 파일을 차례로 고치다 도중에 프로그램이 죽으면, 앞의 파일만 바뀌고 뒤의 파일은 그대로인 상태가 남습니다.

데이터베이스 관리 시스템(DBMS)은 이 세 가지를 대신 처리합니다. 이 단원에서 다루는 SQL Server 가 그중 하나이고, 데이터를 테이블의 형태로 담기 때문에 관계형 데이터베이스라고 부릅니다.

개념 설명

테이블, 행, 열

관계형 데이터베이스가 담는 것은 테이블(table) 하나뿐입니다. 테이블은 세로로 열(column) 을, 가로로 행(row) 을 가집니다.

  • — 무엇을 담을지 정합니다. 이름과 형식이 있고, 테이블을 만들 때 정해집니다.
  • — 실제 값 한 벌입니다. 회원 한 사람, 글 한 편이 각각 한 행입니다.

1.2 에서 만들 회원 테이블(Member.USERS)의 열은 다섯 개입니다. 형식(int·nvarchar)이 무엇인지는 1.4 에서 따로 다룹니다. 여기서는 열마다 담을 것이 미리 정해져 있다는 점만 보면 됩니다.

형식담는 것
numint회원 번호. 자동으로 매겨집니다
user_idvarchar(50)로그인 아이디
nicknamenvarchar(50)화면에 보이는 이름
emailvarchar(200)전자 메일 주소. 없을 수 있습니다
reg_datedatetime2가입한 때

열에 형식이 있다는 것이 파일과의 가장 큰 차이입니다. 숫자를 담기로 한 자리에 글자를 넣으면 저장되지 않고 거부됩니다. 잘못된 값이 들어간 뒤에 찾아내는 것보다 들어가지 못하게 막는 편이 훨씬 쌉니다.

최소 예제

SQL 은 무엇을 하는 말인가

SQL(Structured Query Language)은 데이터베이스에 시키는 말입니다. 어떻게 찾을지가 아니라 무엇을 원하는지를 적으면, 실제로 어느 순서로 읽을지는 데이터베이스가 정합니다.

아래는 회원 테이블에서 번호가 5 이하인 사람을 번호 순으로 보는 문장입니다. 1.2 를 마치면 여러분의 화면에서도 같은 결과가 나옵니다.

SQL
SELECT num, user_id, nickname, email
FROM Member.USERS
WHERE num <= 5
ORDER BY num;
결과
numuser_idnicknameemail
1hong홍길동hong@example.com
2kim김철수kim@example.com
3lee이영희lee@example.com
4park박민수park@example.com
5choi최지우NULL
(5개 행이 영향을 받음)

이 트랙의 예제는 브라우저가 아니라 여러분의 SQL Server 에서 돌립니다.

네 줄이 각각 하는 일이 있습니다. 지금은 이름만 익혀 두고, 각각은 1.5 부터 하나씩 다룹니다.

하는 일
SELECT어느 열을 낼지 정합니다
FROM어느 테이블에서 가져올지 정합니다
WHERE어느 행만 남길지 거릅니다
ORDER BY어떤 차례로 낼지 정합니다

다섯 번째 회원의 전자 메일 자리에 NULL 이 있습니다. 빈 문자열이 아니라 값이 없다는 뜻이고, 다루는 방법이 따로 있어 1.9 에서 한 단원을 들여 살펴봅니다.

상세 사용법

테이블이 여럿일 때 — 관계

회원과 글을 한 테이블에 담으면 글을 작성할 때마다 작성자의 이름과 전자 메일을 함께 적게 됩니다. 그 사람이 이름을 바꾸면 그가 작성한 글을 모두 찾아 고쳐야 하고, 하나라도 빠뜨리면 같은 사람이 두 이름으로 남습니다.

그래서 테이블을 나누고 번호로 가리킵니다. 글 테이블에는 작성자의 이름 대신 회원 번호만 담고, 이름이 필요할 때 회원 테이블에서 가져옵니다. 이렇게 가리키는 관계를 외래 키라 하고, 두 테이블을 이어 한 결과로 내는 일을 조인이라 합니다(2.1).

1.2 에서 만드는 실습 데이터베이스는 테이블 여섯 개로 이루어져 있습니다.

테이블담는 것
Member.USERS회원
Board.BOARDS게시판
Board.CATEGORIES말머리
Board.POSTS
Board.COMMENTS댓글
Board.FILES첨부

이름 앞의 Member·Board스키마입니다. 테이블을 영역별로 묶는 이름이고, 3.8 에서 다룹니다.

상세 사용법

SQL Server 와 다른 데이터베이스

관계형 데이터베이스는 여럿이고 SQL 의 뼈대는 표준으로 정해져 있습니다. SELECT·FROM·WHERE 는 어디서나 같으므로, 하나를 익히면 다른 것으로 옮겨 갈 때 처음부터 배우지 않아도 됩니다.

다만 표준은 조회와 변경에 관한 부분만 정합니다. 변수를 두거나 조건에 따라 다른 문장을 실행하는 것처럼 절차를 적는 문법은 제품마다 따로 만들었고, 표준 안의 기능에도 제품이 더한 것이 있습니다. SQL Server 의 것을 T-SQL(Transact-SQL)이라 부르고, 이 트랙의 4부가 그것을 다룹니다.

제품확장 문법비고
SQL ServerT-SQL이 트랙이 다루는 것입니다
OraclePL/SQL대규모 기간계에서 많이 사용합니다
MySQL · MariaDB웹 서비스에서 널리 사용합니다
PostgreSQLPL/pgSQL표준을 비교적 가깝게 따릅니다
SQLite파일 하나로 동작합니다. 서버가 없습니다

이름이 달라도 하는 일은 비슷합니다. 한쪽을 익히면 다른 쪽의 문서를 읽을 때 무엇을 찾아야 하는지 알게 됩니다.

상세 사용법

어느 판을 설치해야 하나

SQL Server 는 판(에디션)이 나뉘고 값과 제한이 다릅니다.

쓰임
Express무료데이터베이스 하나에 10GB 까지. 작은 서비스를 실제로 돌릴 수 있습니다
Developer무료기능은 Enterprise 와 같지만 개발·테스트 용도로만 허용됩니다
Standard · Enterprise유료운영 서버용입니다

배우는 동안에는 무료인 Express 로 충분한데, 여기서 한 단계 더 가볍게 할 수 있습니다. Express 에는 LocalDB 라는 실행 방식이 있습니다. 같은 엔진을 사용하지만 서비스로 늘 떠 있지 않고, 연결할 때 켜졌다가 사용하지 않으면 꺼집니다.

Express 서버를 설치하지 않고 LocalDB 만 따로 설치할 수 있습니다. 개발 장비에 두기에 알맞아 이 트랙이 사용하며, 설치 방법은 1.2 에서 다룹니다.

이 트랙의 예제는 SQL Server 2019 이상을 기준으로 합니다. 그보다 낮은 판에서는 일부 문법이 동작하지 않습니다. 설치한 것의 판과 버전은 아래 문장으로 확인합니다.

SELECT SERVERPROPERTY('ProductVersion') AS ver,
       SERVERPROPERTY('Edition') AS edition;
실습 문제

직접 해보기

1. 테이블로 나눠 보기 난이도 하

도서관의 대출 기록을 담는다고 할 때 어떤 테이블이 필요할지, 각 테이블에 어떤 열이 들어갈지 적어 보세요. 한 테이블에 다 담지 않는 까닭도 함께 생각해 보십시오.

같은 값이 여러 행에 되풀이되면 그 부분을 따로 떼어 낼 수 있습니다. 한 사람이 여러 번 빌리고, 한 책이 여러 번 빌려집니다.
테이블 셋으로 나눕니다. 회원(번호, 이름, 연락처) 도서(번호, 제목, 저자) 대출(번호, 회원 번호, 도서 번호, 빌린 날, 반납한 날) 대출 테이블에는 이름과 제목을 적지 않고 번호만 담습니다. 회원이 이름을 바꾸거나 책 제목이 고쳐질 때 한 자리만 고치면 됩니다.
2. 문장 읽어 보기 난이도 하

아래 문장이 무엇을 가져오는지 한국어로 풀어 적어 보세요.

SELECT nickname
FROM Member.USERS
WHERE email IS NULL;
회원 테이블에서 전자 메일 주소가 없는 사람의 닉네임을 가져옵니다. email = NULL 이 아니라 email IS NULL 인 것에 주의하십시오. 값이 없는 것끼리는 같다고 견줄 수 없습니다(1.9).
요약
  • 관계형 데이터베이스는 데이터를 테이블로 담습니다. 세로가 , 가로가 입니다.
  • 열마다 형식이 정해져 있어 맞지 않는 값은 저장되지 않습니다.
  • 같은 값이 되풀이되지 않도록 테이블을 나누고 번호로 가리킵니다. 이어서 볼 때는 조인을 사용합니다.
  • SQL 은 무엇을 원하는지 적는 말입니다. 어떻게 찾을지는 데이터베이스가 정합니다.
  • SQL Server 가 표준에 더한 문법을 T-SQL 이라 하고, 배울 때는 무료인 LocalDB 로 충분합니다.