요기보드3   필수기초 선택과목 요기보드 그누보드 로그인

MySQL- 데이터베이스의 이해


SQL 언어 배우기

SQL은 ‘에스큐엘’ 또는 ‘시퀄’로 부르는데 정식 명칭은 ‘Structured Query Language’의 약자로 Html, php처럼 이것도 하나의 언어야.
즉, 데이터베이스를 생성하고, 조회하며 자료추가 수정, 삭제를 하는 전체 명령어들의 통칭이야.
그리고 각각의 명령어는 간단히 줄여서 ‘쿼리(Query)’라고 불러.
보통 SQL 명령 하나 보내는 것을 ‘쿼리를 보낸다..날린다.’라는 표현으로 이야기해.
(아마도 원격에 있는 서버로 명령을 보낸다고 해서 '날린다' 라는 표현이 나온 것 같아.)

예전에는 데이터베이스를 만드는 회사마다 이 명령어들의 이름과 문법이 다 달랐어.
그러니 개발자들은 데이터베이스 마다 명령어와 사용법을 따로 공부해야 했으니 얼마나 힘들었겠어?
그래서 1986년 미국의 표준연구소에서 표준을 제시하고, 주요 데이터베이스 업체들이 여기에 동참하면서 점차 통일되어 가면서 오늘에 이른 거야.
물론 아직도 100% 통일된 것은 아니야. 가장 많이 사용하는 MySQL와 MS-SQL 도 아직 똑같지는 않아.
그렇지만 거의 비슷해서 하나를 알면 다른 것도 금방 적응할 수 있어.

우리가 위에서 만든 게시판 테이블인 yg_bbs도 SQL 언어로 표시하면 아래와 같아.


CREATE TABLE `yg_bbs` (
  `bno` int(11) NOT NULL AUTO_INCREMENT,
  `catno` int(11) DEFAULT NULL,
  `parent` int(11) DEFAULT NULL,
  `datetime` datetime DEFAULT NULL,
  `linkfile` varchar(30) DEFAULT NULL,
  `filename` varchar(50) DEFAULT NULL,
  `subject` varchar(100) DEFAULT NULL,
  `content` text,
  `cmt` smallint(6) DEFAULT NULL,
  `hit` int(11) DEFAULT NULL,
  `uno` int(11) DEFAULT NULL,
  `writer` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`bno`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

위 SQL 명령을 MySQL 에게 보내면 우리가 열심히 클릭해서 만든 테이블을 만들어 주는 거야.
(첫 줄만 보아도 CREATE TABLE…로 시작하는 게 ‘테이블 만드는 명령이구나….’ 하고 짐작하겠지?)
그런데 이 DB생성, 테이블 생성은 보통 한 번만 사용하기 때문에 잘 사용되지 않고 위에서 설명한 것처럼 관리 프로그램을 사용하는 거야.
즉, adminer 또는 phpMyAdmin 같은 관리프로그램에서 테이블 만들기 메뉴에서 칼럼명, 속성 등을 지정해서 [저장]을 누르면 그때 이 관리프로그램이 내용을 위와 같은 SQL문으로 바꾸어 데이터베이스 전달해서 테이블이 만들어 지는 원리야.

SQL 명령도 배우자면 끝이 없지만, 데이터베이스를 관리하면서 사용하는 명령의 90% 이상은 추가, 수정, 삭제, 조회 이 4가지야. 다행이지? 그럼 공부해 보자구….

▶ INSERT 추가
SQL 데이터베이스에 자료추가를 하는 명령의 기본 형태는 다음과 같아.

INSERT INTO 테이블 (칼럼1, 칼럼2, …) VALUES (값1, 값2, …)

예를 들어 우리가 만든 yg_bbs 테이블에 간단한 자료를 하나 추가하려면…


INSERT INTO yg_bbs (datetime, subject) VALUES ('2019-01-01','반갑습니다')

이렇게 입력하면 날짜와 제목에 2019-01-01 과 ‘반갑습니다’ 라는 내용으로 새 레코드가 추가가 되는 거야.
필수항목인 bno는 자동증가로 되어 있으니 넣지 않아도 알아서 최종번호로 들어가겠지.
또 날짜에 시간까지 넣지 않았으니 시간은 00:00:00으로 저장될 거야.

직접 해 보자구.
모든 DB관리 프로그램에는 이 SQL 명령을 직접 입력할 수 있는 메뉴가 있어.

1. 상단 메뉴에서 [SQL 명령]을 클릭


2. 아래 INSERT 쿼리 명령을 그대로 명령어란에 입력하고 하단의 [실행] 클릭

(기존 명령이 있으면 지우고 새로 입력해.)


INSERT INTO yg_bbs (datetime, subject) VALUES ('2019-02-01','반갑습니다')

SQL INSERT
메시지가 뜨면서 명령이 제대로 수행되었는지를 알려 줄 거야.
만일 에러메시지가 나오면 입력한 명령어가 어딘가 잘못된 거야.
보통 철자가 틀렸다든지 점, 쉼표, 따옴표 등에서 에러가 많이 발생해. 에러가 나오면 어떻게든 원인을 찾아내야 해….
이제 정말 자료가 들어갔는지 확인해 보자구.

3. 화면 좌측에서 [선택 yg_bbs] 를 선택해서, 우측 화면에 [테이블 : yg_bbs] 의 테이블 구조가 보이는 화면에서 상단의 [데이터를 선택하십시요] 를 클릭해.


Adminer INSERT
아래와 같이 방금 추가한 자료가 마지막에 추가된 것이 보이지?

Adminer browse data
그런데 결과 테이블 위에 쿼리문 SELECT * FROM `yg_bbs` 라는 문장이 보이네?
이것은 이 명령으로 아래 내용이 출력되었다는 것을 뜻해.
자료수정 명령을 배우기 전에 이 SELECT문을 배워 보자구.

▶ SELECT 조회
데이터베이스에서 가장 많이 쓰이는 명령이 이 SELECT 쿼리야.
심지어 'SELECT문 날린다' = '쿼리문을 날린다'는 말로도 쓰여. 당연히 조회하는 일이 가장 많으니까 이렇게 말해도 다 알아들어.
SELECT문의 가장 많이 쓰이는 기본형은 다음과 같아. ( ) 안은 필요한 경우만 쓴다는 뜻이야.

SELECT 칼럼1, 칼럼2 … FROM 테이블 (WHERE 조건 ORDER BY 칼럼 LIMIT 개수)

예를 들어 전체 자료 중 번호, 날짜, 제목 필드만 보려면…

1. 상단 메뉴에서 [SQL 명령]을 클릭


2. 아래 쿼리 명령을 그대로 명령어 란에 입력하고 하단의 [실행] 클릭


SELECT bno, datetime, subject FROM yg_bbs 

Adminer select data
어때 딱 지정한 필드(datetime, subject) 만 결과로 나왔지?
이번에는 조건을 지정해서 bno=1인 자료만 보려면 아래와 같이 WHERE 문장을 뒤에 추가하면 될 거야.


SELECT bno, datetime, subject FROM yg_bbs WHERE bno=1

또 이번에는 날짜 순서로 결과를 보려면 뒤에 ORDER BY 문장을 사용해


SELECT * FROM yg_bbs ORDER BY datetime

SELECT 다음에 칼럼명 대신 *를 사용하면 이 테이블에 들어 있는 모든 칼럼을 다 출력하라는 뜻이야.

LIMIT은 자료가 많은 경우 한 페이지에 몇 개씩 볼 것인지를 지정하는 거야.
왜 카페나 게시판에서 한 페이지에 15개 정도만 보이고 다음 페이지를 클릭하면 다음 페이지 리스트가 나오는 거 많이 보았지? 바로 이 LIMIT을 응용한 거야.

SELECT bno, datetime, subject FROM yg_bbs LIMIT 1

자, 이렇게 SELECT 문장 사용법에 대해서 알아보았어.
우리는 아주 간단한 조회만 사용했는데 사실 이 SELECT 문은 SQL 명령 전체에서 가장 어렵고 심오한 명령이야.
조회 조건이 경우에 따라 엄청 어려울 수도 있거든.
예를 들어 테이블 2개에 걸쳐서 조건을 찾을 수도 있고, 여러 개의 결과를 합해서 한 줄로 보여 주어야 할 때도 있어.
한마디로 이 SELECT문은 SQL의 꽃이야.
지금 설명한 WHERE, LIMIT 같은 옵션 이외에도 많은 옵션이 있고 이 SELECT문을 얼마나 잘 다루느냐가 곧 초보와 고수를 결정해. 아마도 깊이 들어가면 웹 공부 전체에서 가장 어려운 부분이기도 해.

▶ UPDATE 수정
UPDATE는 저장되어 있는 자료를 수정할 때 쓰여. 기본 형태는…

UPDATE 테이블 SET 칼럼1=값1, 칼럼2=값2 … WHERE 조건

예제로 보는 게 더 쉽겠지?
여러분도 직접 아래 쿼리문을 넣어서 실행하고 결과를 확인해 봐.

UPDATE yg_bbs SET subject='안뇽', datetime='2910-02-01' WHERE bno=1

이 UPDATE문을 사용할 때 주의할 점은 뒤에 WHERE 조건을 꼭 써야 한다는 거야.
만일 위 명령에서 WHERE 조건을 안 쓰면 어떻게 될까?
현재 저장되어 있는 모든 데이터의 제목과 날짜가 몽땅 바뀌어 버릴 거야.

▶ DELETE 삭제
마지막으로 DELETE는 삭제 명령이야. 기본형은…

DELETE FROM 테이블 WHERE 조건

예를 들어 bno=1 자료를 삭제하려면


DELETE FROM yg_bbs WHERE bno=1

수정 명령과 마찬가지로 이 DELETE문을 사용할 때 주의할 점은 뒤에 WHERE 조건을 꼭 써야 한다는 거야.
만일 위 명령에서 WHERE 조건을 안 쓰면 어떻게 될까?
현재 저장되어 있는 모든 데이터를 몽땅 지우겠지?

이상으로 그 어렵다는 데이터베이스와 SQL을 단 몇 페이지로 초(?)압축해서 배워 봤어.
정말 이것만 알아도 되는거야?
데이터베이스는 DB관리 자격증이 있을 정도로 고급기술이라고 하는데 정말 이걸로 끝이야?

걱정마. 이 정도만 개념만 알고 있어도 충분해.
왜냐하면 요기보드에는 내가 벌써 코드를 다 써 두었거든. 여러분이 직접 쓸 일이 없어.
또 위 기본적인 내용만 알면 요기보드의 코드를 복사해서 약간만 응용하면 돼.

물론 여러분의 웹사이트를 확장하기 위해 테이블이 추가되고 연결이 복잡해 지면 이 SQL 도 계속 어려워 지겠지만 여러분의 실력도 조금씩 늘어 나게 될거야.
미리 어려운거 끙끙대고 배워 놓고는 한 번도 쓸 일 없는 것 보다, 문제에 부딪쳤을 때 공부하고 검색해서 해결해 가는 것이 훨씬 더 효율적이야.
추가적인 공부는 다음 장 ‘요기보드’를 배우면서 새로운 명령들이 나오면 설명하도록 할게.
직접 부딪혔을 때 공부하는 게 가장 효과적이야.

목차제 목조회
326
411
393
427
438