쿼리문을 사용하게 될 일이 생겨, 복습 차원에서 이전 블로그에 기록해뒀던 기초 쿼리문 내용을 옮겨 적어보았습니다.😃
구조적 쿼리 언어(SQL)는 관계형 데이터베이스에 정보를 저장하고 처리하기 위한 프로그래밍 언어입니다.
관계형 데이터베이스는 데이터를 열과 행의 관계로 저장합니다.
데이터베이스는 폴더, 테이블은 엑셀 파일으로 비유하여 생각하면 조금 더 이해하기 쉬울 것 같습니다.
CREATE DATABASE
DB명DROP DATABASE
IF EXISTS DB명;SHOW DATABASES;
USE
DB명;CREATE TABLE 테이블명
(id INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, regDate DATETIME NOTN ULL, title CHAR(200) NOT NULL, 'body' TEXT NOT NULL);DROP TABLE 테이블명;
SHOW TABLES;
ALTER TABLE
테이블명 ADD COLUMN
id CHAR(20) FIRST;ALTER TABLE
테이블명 DROP COLUMN
id;ALTER TABLE
테이블명 MODIFY COLUMN
id id CHAR(20) AFTER regDate;`INSERT INTO
테이블명 SET
regDate = NOW(), title = '제목 1', body
= '내용 1';UPDATE
테이블명 SET
title = '새 제목 1' WHERE
id = 2;DELETE FROM
테이블명 WHERE
id = 1;SELECT * FROM
article;삭제 명령어에는 DELETE, TURNCATE, DROP 명령어가 있습니다.
DELETE 명령어는 테이블 용량이 줄어들지 않으며 원하는 데이터만 지울 수 있다. 삭제 후 잘못 삭제한 것을 되돌릴 수 있습니다.
TRUNCATE 명령어는 테이블 용량이 줄어 들고, 테이블은 남아 있으나 안의 데이터만 삭제해 줍니다. 삭제 후 복구가 불가하며 원하는 데이터를 골라 삭제하는 것은 불가능합니다.
DROP 명령어는 테이블 자체를 삭제하며, 복구가 불가능합니다.
# 전체 데이터베이스 리스팅 (조회)
SHOW DATABASES;
# `mysql` 데이터 베이스 선택
USE mysql;
# 테이블 리스팅 (조회)
SHOW TABLES;
# 특정 테이블의 구조를 확인하기
DESC db;
# `test` 데이터 베이스 선택
USE test;
# 테이블 리스팅
SHOW TABLES;
# 기존에 a1 데이터베이스가 존재 한다면 삭제
DROP DATABASE IF EXISTS a1;
# 새 데이터베이스(`a1`) 생성
CREATE DATABASE a1;
# 데이터베이스(`a1`) 선택
USE a1;
# 데이터베이스가 추가 되었는지 확인 (데이터베이스 목록 조회)
SHOW DATABASES;
# 테이블 확인
SHOW TABLES;
# 게시물 테이블 article을 만듭니다.
# article은 title과 body 컬럼을 포함하고 있습니다.
# VARCHAR(100) => 문자를 100자까지 저장 가능
# text => 긴 글, 문자를 더 많이 저장 가능
CREATE TABLE article(
title CHAR(200),
`body` TEXT
);
# 테이블이 잘 추가되었는지 확인, 리스팅과 구조까지 확인
USE a1;
SHOW DATABASES;
SHOW TABLES;
DESC article;
# article 테이블에 데이터를 추가합니다.(title = 제목, body = 내용)
INSERT INTO article
SET title = '제목',
`body` = '내용';
# article 테이블 안의 데이터 조회(title만)
SELECT title FROM article;
# article 테이블 안의 데이터 조회(title, body)
SELECT title, `body` FROM article;
# article 테이블 안의 데이터 조회(body, title)
SELECT `body`, title FROM article;
# article 테이블 안의 전체 데이터 조회
SELECT * FROM article;
# 같은 내용의 데이터를 또 한번 추가해 봅시다.(title = 제목, body = 내용)
INSERT INTO article SET title = '제목', `body` = '내용';
# 전체 데이터를 조회해 봅니다. 모든 데이터가 동일하므로,
# 어떤 것이 후에 추가된 데이터인지 알 수 없습니다.
SELECT * FROM article;
# 구별을 위해 테이블에 id 컬럼을 추가합니다. 맨 처음에 추가해 보겠습니다.
# 테이블 구조 수정
ALTER TABLE article ADD COLUMN id INT(10) FIRST;
# 데이터 조회(*, id 칼럼의 값은 NULL으로 조회됩니다.)
DESC article;
SELECT * FROM article;
# 기존 데이터에 id값 추가(id가 NULL인 곳을 수정합니다.)
UPDATE article SET id = 1 WHERE id IS NULL;
# 데이터 조회
# 모두 id가 1이므로 여전히 데이터 구별이 힘듭니다.
SELECT * FROM article;
# 기존 데이터 중 1개만! id를 2로 변경해 줍니다. (LIMIT 1)
UPDATE article SET id = 2 WHERE id = 1 LIMIT 1;
# 데이터 1개를 또 추가해봅니다. (id = 3, title = 제목3, body = 내용3)
INSERT INTO article
SET id = 3,
title = '제목3',
`body` = '내용3';
# 2번 게시물의 데이터를 삭제합니다. => DELETE
SELECT * FROM article WHERE id = 2;
DELETE FROM article WHERE id = 2;
# 테이블에 날짜 컬럼을 추가합니다.
# regDate라는 이름의 컬럼을 만들고, id 속성 뒤에 추가해 줍니다.
ALTER TABLE article ADD COLUMN regDate DATETIME AFTER id;
# 테이블 구조 확인
DESC article;
# 데이터를 조회하면 날짜 정보가 비어있습니다.
SELECT * FROM article;
# 1번 게시물의 비어있는 날짜정보를 채워 봅시다.(regDate = 2018-08-10 15:00:00)
UPDATE article SET
regDate = '2018-08-10 15:00:00'
WHERE id = 1;
# NOW() 함수 실행해보기. NOW 함수는 현재 MySQL 서버의 시간 값을 가져오는 함수입니다.
SELECT NOW();
# 3번 게시물의 비어있는 날짜정보 채우기(NOW())
UPDATE article SET regDate = NOW() WHERE id = 3;
# 데이터 조회(*)
SELECT * FROM article;
# 데이터베이스 목록 조회하기
SHOW DATABASES;
# blog라는 이름을 가진 데이터베이스 생성
CREATE DATABASE blog;
# blog 데이터베이스 선택
USE blog;
# 데이터베이스 안의 테이블들을 확인
SHOW TABLES;
# 테이블 생성
# int = 정수, datetime = 날짜, char = 문자, 100자까지 들어갈 수 있음, text = 긴 글
# primary key = 중복을 허용하지 않음!
# auto_increment = 자동으로 번호 삽입
CREATE TABLE article(
id INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
regDate DATETIME NOT NULL,
title CHAR(100) NOT NULL,
`body` TEXT NOT NULL
);
# 테이블 삭제 시 실행할 명령어
DROP TABLE IF EXISTS article;
# 조회수 가장 많은 게시물 3개 만 보여주세요.
# ASC = 오름차순 , 생략 가능, DESC = 내림차순
SELECT * FROM article ORDER BY hit DESC LIMIT 3;
# 작성자명이 '방울'로 끝나는 게시물만 보여주세요.
SELECT * FROM article WHERE nickname LIKE '%방울';
# 조회수가 10 이상 55 이하 인것만 보여주세요.
# WHERE 조건1 AND 조건2
SELECT * FROM article WHERE hit >=10 AND hit<=55;
# 작성자가 '무명'이 아니고 조회수가 50 이하인 것만 보여주세요.,
SELECT * FROM article WHERE nickname != '무명' AND hit<=50;
# 작성자가 '무명' 이거나 조회수가 55 이상인 게시물을 보여주세요.
SELECT * FROM article WHERE nickname = '무명' OR hit >= 55;