관계형데이터베이스

이제 마지막으로 관계형데이터베이스를 공부할겁니다.

이전 포스팅에서 하나의 데이터베이스 내부에 여러개의 표가 존재한다고 했는데 우리는 지금까지 하나의 표만을 만들었습니다. 이제 여러개의 표를 만들어서 이 표가 하나였던 것처럼 보이게 할겁니다.

관계형데이터베이스는 여러 레이블이 존재할 때 중복이 자주 발생하는 값을 모아 다른 표에 저장하고 필요할 때 불러오는 방식을 사용하여 중복을 방지하고 공간을 아낄 수 있습니다.

뭐 다른 특징은 나중에 더 찾아보도록 하고 지금은 이정도만 알고 갑시다.

관계형 데이터베이스를 공부하기 전에 이전까지의 포스트에서 사용한 데이터베이스를 갈아엎어야 할 필요가 있습니다.

https://opentutorials.org/course/3161/19521

 

테이블 분리하기 - 생활코딩

테이블 분리하기 2018-02-10 15:56:41 -- -- Table structure for table `author` -- CREATE TABLE `author` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `profile` varchar(200) DEFAULT NULL, PRIMARY KEY (`id`) ); -- -- Dumping data for table `aut

opentutorials.org

 

이 강좌와 동일하게 진행하므로 이와 같은 표를 만들고 시작하겠습니다.

사용할 표 2개

이렇게 말이죠.

저는 이제 topic 표의 author_id 값과 일치하는 author 표의 id값에 해당하는 레이블을 이어 붙일 겁니다.

SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.id;

위와 같이 작성하게 된다면.

이렇게 두개의 표가 연결됩니다. 바로 이것이 관계형 데이터베이스의 요지라고 볼 수 있을 것 같네요.

이제 저게 뭘 의미하는 것인지 설명하겠습니다.

SELECT [필드] FROM [붙을표] LEFT JOIN [붙일표] ON [붙을표].[기준필드1] = [붙일표].[기준필드2];

이런 형식의 명령어입니다.

그대로 해석하자면 [붙을표]의 [필드]를 출력하는데 LEFT 방식으로 [붙일표]를 [붙을표]의 [기준필드1]과 [붙일표]의 [기준필드2]가 일치하도록 [붙을표]에 [붙일표]를 결합시켜 출력한다.

라는 의미입니다.

이해하셨나요?

다시말해서 위의 사진에서 topic 표와 author 표를 합치는데 topic 표의 author_id 값이랑 author 표의 id값을 일치시켜서 내용을 붙인다는 의미입니다.

LEFT 방식은 이해 못해도 됩니다. 지금 설명 안할거거든요.

이해했다고 하고, 보는데 저기 사진에서 author_id와 id는 굳이 출력할 필요 없어보이지 않나요?

그냥 이어붙이기 위한 기준이었는데... 그렇기 때문에 SELECT에서 표시할것만 넣어서 출력해줍시다.

SELECT id, title, description, createc, name, profile 
 FROM topic LEFT JOIN author ON topic.author_id = author.id;

이렇게 작성해서 말이죠.

근데 문제가 발생했습니다. id값이 애매하다는데요.

이 문제는 topic 표와 author 표에서 id가 중복해서 존재하기 때문에 발생합니다.

이를 해결해주기 위해서는 표 또한 지정해주면 되겠죠?

SELECT topic.id, title, description, createc, name, profile 
 FROM topic LEFT JOIN author ON topic.author_id = author.id;

id로 적을 내용을 topic.id로 적어서 topic 표 내부에 있는 id 값이라는 것을 지정해줬습니다. 그 결과

이렇게 정상적으로 출력이 되었습니다!

이렇게 관계형 데이터베이스를 어떻게 이용하는지를 알아보았습니다.

+) 만약 필드명을 바꿔서 출력하고 싶다면...

SELECT [필드명] AS [바꿀 이름] ...이런 방식으로 작성하시면 됩니다.

여기까지! 기초를 마치겠습니다.

이정도면 적당한것은 모두 다 할 수 있을 것이고, 모르는것도 찾으면 나올거기 때문이죠.

궁금한것은 항상 검색하는 자세를 가지도록 합시다.

 


--------------------------명령어 정리----------------------------

mysql -uroot -p

: MySQL을 실행한다.

CREATE DATABASE [데이터베이스 이름];

: [데이터베이스 이름]으로 된 데이터베이스를 만든다.

DROP DATABASE [데이터베이스 이름];

: [데이터베이스 이름]으로 된 데이터베이스를 지운다.

SHOW DATABASES;

: 현재까지 생성한 데이터베이스를 모두 보여준다.

USE [데이터베이스 이름];

: [데이터베이스 이름]을 사용하기 위해 선택한다.

CREATE TABLE [표 이름]([필드명1] [타입], [필드명2] [타입], [필드명3] [타입], ......);

: 각각의 필드의 자료형과 제약 조건이 설정된 [표 이름]의 표를 만든다.

DESC [표 이름];

: [표 이름]의 필드의 이름, 자료형, 제약조건을 모두 확인한다.

INSERT INTO [표이름] ([필드1], [필드2], ..., [필드마지막]) VALUES('[필드1data]', '[필드2data]', ..., '[필드마지막data]');

: [표 이름]에 각 필드마다의 데이터를 삽입한다.

SELECT * FROM [표 이름];

: [표 이름]을 선택하여 전체 내용을 보여준다.

SELECT [필드명1], [필드명2]... FROM [표이름];

: [표 이름]을 선택하여 [필드명1], [필드명2],...의 내용을 보여준다.

SELECT [필드] FROM [표이름] WHERE [조건]

: [표 이름]을 선택하여 [필드]의 내용을 [조건]에 맞는 레이블만 보여준다.

SELECT [필드] FROM [표이름] ORDER BY [필드1] ASC ;

: [표 이름]을 선택하여 [필드]의 내용을 [필드1]을 기준으로 오름차순 정렬하여 보여준다.

SELECT [필드] FROM [표이름] ORDER BY [필드] DESC;

: [표 이름]을 선택하여 [필드]의 내용을 [필드1]을 기준으로 내림차순 정렬하여 보여준다.

SELECT [필드] FROM [표이름] LIMIT [숫자];

: [표 이름]을 선택하여 [필드]의 내용을 [숫자]의 개수만큼 보여준다.

UPDATE [표이름] SET [필드1]='[내용1]', [필드2]='[내용2]' WHERE [조건]

: [표 이름]에서 [조건]에 맞는 레이블의 내용 중 [필드1]을 [내용1]로, [필드2]를 [내용2]로 바꾼다.

DELETE FROM [표이름] WHERE [조건];

: [표 이름]에서 [조건]에 맞는 레이블을 지운다.

SELECT [필드] FROM [붙을표] LEFT JOIN [붙일표] ON [붙을표].[기준필드1] = [붙일표].[기준필드2];

: [붙을표]의 [필드]를 출력하는데 LEFT 방식으로 [붙일표]를 [붙을표]의 [기준필드1]과 [붙일표]의 [기준필드2]가 일치하도록 [붙을표]에 [붙일표]를 결합시켜 출력한다.

SELECT [필드명] AS [바꿀 이름] ...

: [필드명]의 이름을 [바꿀 이름]으로 바꾸어 ...을 출력한다.

제약 조건

NULL : 해당 필드의 데이터 값이 공백인 상태도 허용된다.

NOT NULL : 해당 필드의 데이터 값이 공백인 상태가 불가능하다.

AUTO_INCREMENT : 자동으로 값을 증가시킨다.

UNIQUE : 필드에서 데이터가 중복될 수 없다.

PRIMARY KEY([필드명]); : [필드명]의 각 값이 중복될 수 없으며, 공백인 상태가 불가능하다.

'Web-기초 > MySQL' 카테고리의 다른 글

MySQL 기초(2)  (0) 2020.04.11
MySQL 기초(1)  (0) 2020.04.11

+ Recent posts