MySQL 오늘 강의를 모두 들을 목표를 가지고 있습니다!
강의를 듣고 정리하고 더 찾아서 올릴겁니다.
SELECT 구문
먼저 SELECT 구문입니다.
이전 포스트에서
SELECT * FROM [표이름];
이 명령어를 마지막에 정리했었습니다.
SELECT 구문은 뜻 그대로 선택해서 출력하는 명령어입니다.
SELECT [필드명1], [필드명2]... FROM [표이름];
이게 기본입니다.
[표이름]에서 [필드명1], [필드명2]를 출력하겠다는 것이죠.
이렇게 출력할 수 있게 됩니다.
필드명에 *를 사용하게 된다면, *은 와일드카드로 무엇이든지 대체가 가능하기 때문에 모든 필드명을 대체하여 전체 필드를 출력하게 됩니다.
이렇게 말이죠.
그런데 SELECT는 항상 FROM과만 나오는 것이 아닙니다.
- WHERE
- ORDER BY
- LIMIT
등이 있죠.
이제 이것들에 대해서 설명해드리겠습니다.
WHERE
WHERE 조건을 설정해서 조건에 맞는 데이터를 출력할 수 있게 합니다.
SELECT * FROM topic WHERE author = "egoing";
이렇게 작성하게 되면 topic이라는 표에서 전체 필드값을 출력하는데 author이 egoing인 데이터만 출력하겠다는 의미가 됩니다.
조건에 따라 출력
이전까지는 출력할 필드값만 다룰 수 있었는데 이제는 어떤 데이터를 출력할지도 다룰 수 있게 되었습니다.
제가 만든 표에서는 author = "egoing"인 데이터가 1개밖에 없어서 1개의 데이터만 출력되었는데 author이 egoing인 데이터가 더 있었다면 그 데이터들만 여러줄에 걸쳐서 출력이 될겁니다.
지금까지 내용을 결합해본다면,
SELECT id, title FROM topic WHERE author = "egoing";
이렇게 작성하면 위에서 출력된 내용이 id와 title만 출력되겠네요.
이렇게말이죠.
위처럼 꼭 'A= ~~'이런 형식이어야 하는것은 아닙니다.
다른 프로그래밍에서 if문을 생각하면 될 것 같은데요.
id<3 이런 형식도 충분히 가능하다는 점 생각해주셨으면 합니다.
ORDER BY
다음은 ORDER BY입니다.
ORDER BY는 표를 데이터를 정렬하여 출력할 수 있게 합니다.
SELECT * FROM [표이름] ORDER BY [필드] ASC ; SELECT * FROM [표이름] ORDER BY [필드] DESC;
기본적으로 이렇게 사용합니다.
첫번째는 표 이름의 모든 데이터를 출력하되 [필드]를 기준으로 오름차순 출력하라.
두번째는 표 이름의 모든 데이터를 출력하되 [필드]를 기준으로 내림차순 출력하라.
이렇게 서술할 수 있습니다.
ASC는 오름차순이며, DESC는 내림차순을 나타냅니다.
참고로 기본 설정은 오름차순이기 때문에 첫번째는 ASC를 생략하여 ORDER BY [필드]까지만 작성해도 됩니다.
위의 사진에서는 topic 표에서 id title값을 출력하는데 id 필드를 기준으로 내림차순 출력하라고 하네요.
따라서 id의 값이 5 4 3 2 1 순으로 id title 데이터가 출력된 것을 볼 수 있습니다.
LIMIT
LIMIT는 말 그대로 제한입니다.
출력할 때 가져오는 데이터 수를 제한할 수 있습니다.
예를 들어
SELECT * FROM [표이름] LIMIT 3;
이렇게 작성하게 되면 가져오는 데이터 중에서 순서대로 3개만 출력하게 됩니다.
이렇게 말이죠.
지금까지 SELECT에 대해서 제가 배운것을 모두 정리했습니다.
이를 모두 사용해본다면
SELECT id, title, description FROM topic WHERE id>1 ORDER BY id DESC LIMIT 3;
이렇게까지도 작성할 수 있을 것 같네요.
밑에 표는 조건만 바꾼거니 참고해주세요.
모두 왜 저렇게 나오는지 이제 아실겁니다.
UPDATE
이제 데이터를 수정해보도록 하겠습니다.
UPDATE 구문을 통해서 표 내용을 수정할 수 있습니다.
UPDATE [표이름] SET [필드1]='[내용1]', [필드2]='[내용2]' WHERE [필드] = '값';
이런 명령어로 표 내용을 수정할 수 있습니다.
설명을 해보자면
[표이름]에서 [필드]='값'인 레이블의 [필드1] 값을 [내용1]으로 바꾸고, [필드2] 값을 [내용2]로 바꾼다는 의미입니다.
여기에서 정말로 진짜 주의해야 할 점은 WHERE 값을 무조건 넣어줘야 한다는 겁니다.
만약 넣지 않는다면 모든 레이플의 데이터가 바뀔테니 재앙이 발생할 수 있다고 하네요.
위의 내용으로 구성되어 있던 표가
위의 명령어를 통해서 id 값이 5인 레이블의 내용이 바뀌게 되네요.
그 결과 id가 5인 레이블의 description과 author 필드의 값이 바뀌었습니다.
심심하신 분들은 WHERE 안넣고 한 번 해보셔도 됩니다..ㅎ(하지마세요)
DELETE
이제 레이블을 지울 줄도 알아야 하겠죠?
DELETE FROM [표이름] WHERE [조건];
이렇게 써주시면 됩니다. 그러면 [표이름]에서 [조건]에 맞는 레이블을 삭제할 겁니다.
여기서도 중요한 점은 WHERE은 무조건 써줘야한다는 겁니다.
강의에서는 '인생이 바뀔수 있어요'라고 하네요...
이렇게 작성하여 id 값이 3인 레이블을 지워봤습니다.
자. 지금까지! 표를 생성하고 데이터를 넣고 수정하고, 삭제하고 모든 것을 다 해봤습니다.
일단 여기까지 정리하고 다음 포스팅에서 관계형 데이터베이스를 정리하겠습니다.
--------------------------명령어 정리----------------------------
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 [조건];
: [표 이름]에서 [조건]에 맞는 레이블을 지운다.
제약 조건
NULL : 해당 필드의 데이터 값이 공백인 상태도 허용된다.
NOT NULL : 해당 필드의 데이터 값이 공백인 상태가 불가능하다.
AUTO_INCREMENT : 자동으로 값을 증가시킨다.
UNIQUE : 필드에서 데이터가 중복될 수 없다.
PRIMARY KEY([필드명]); : [필드명]의 각 값이 중복될 수 없으며, 공백인 상태가 불가능하다.
'Web-기초 > MySQL' 카테고리의 다른 글
MySQL 기초(3)完 (0) | 2020.04.11 |
---|---|
MySQL 기초(1) (0) | 2020.04.11 |