🟨 목 차 🟨
1. MySQL 구문
2. MySQL CREATE문[ 데이터베이스, 테이블 생성 ]
2.1 데이터베이스 생성(CREATE DATABASE)
2.2 데이터베이스 선택(USE DATABASE)
2.3 테이블 생성(CREATE TABLE)
2.4 제약 조건(constraint)
2.4-1. CREATE TABLE 문을 통해 사용할 수 있는 제약 조건
2.4-2. CREATE 문으로 NOT NULL 설정(제약조건 설정)
3. MySQL ALTER문[ 데이터베이스, 테이블 수정 ]
3-1. 데이터베이스 수정(ALTER DATABASE)
3-2. 테이블 수정(ALTER TABLE)
3-2-1. 테이블에 필드 추가(ADD)
3-2-2. 테이블에 필드 삭제(DROP)
3-2-3. 테이블에 필드 타입 변경(MODIFY COLUMN)
4. MySQL DROP문[ 데이터베이스, 테이블 삭제 ]
4-1. 데이터베이스 삭제(DROP DATABASE)
4-2-1. 해당 테이블의 저장된 데이터만 삭제(TRUNCATE TABLE)
4-2-2. 해당 테이블 삭제(DROP TABLE)
5. MySQL INSERT문[ 테이블에 데이터 추가 ]
5-1. 모든 필드의 값 넣기
5-2. 특정 필드의 값만 넣기
6. MySQL UPDATE문[ 테이블에 데이터 수정 ]
6-1. 특정 조건 테이블 데이터 수정(WHERE 절 사용)
6-2. 테이블 데이터 수정(WHERE 절 사용 안함)
7. MySQL DELETE문[ 테이블의 레코드 삭제]
7-1. 특정 조건 테이블 레코드(레코드) 삭제(WHERE 절 사용)
7-2. 테이블 레코드(레코드) 삭제(WHERE 절 사용안함)
8. MySQL SELECT문[ 테이블의 레코드 선택]
8-1. 테이블의 모든 필드 선택
8-2. 테이블의 특정 조건 레코드 선택(WHERE문 사용)
8-3. 특정 필드 선택
8-4. 특정 조건을 만족하는 특정 필드를 선택하는 예제(WHERE문 사용)
8-5. 중복되는 값 제거
8-6. 별칭(alias)을 이용한 처리
MySQL을 기본적으로 사용할 수 있을 정도로만 문법에 대해서 알아봅시다. :)
◼️ 1. MySQL 구문 ◼️
- 데이터베이스에 대한 작업 명령은 *SQL 구문을 이용하여 처리한다.
- 서버와의 연결을 끊는 QUIT와 같은 경우를 제외한 일반적인 구문 뒤에는 세미콜론(;)을 붙인다.
- 키워드와 구문에서 대소문자를 구분하지 않는다. [ 단, 테이블 명과 필드의 이름은 대소문자를 구분한다. ]
[ ex) SELECT * FROM Reservation; / select * from Reservation; ] - 코드에 대한 이해를 돋는 설명인 주석을 사용할 수 있다.
[ # : 한 줄 주석, -- : 한 줄 주석, /* */ : 두 줄 이상의 주석 ] - 주요 구문으로 [ CREATE DATABASE / ALTER DATABASE/ CREATE TABLE / ALTER TABLE / DROP TABLE / INSERT INTO / UPDATE/ DELETE / SELECT / CREATE INDEX / DROP / INDEX ]
◼️ 1-1. SQL 이란 ?
Structured Query Language(구조적 질의 언어)의 줄임말로, 관계형 데이터베이스 시스템(RDBMS)에서 자료를 관리 및 처리하기 위해 설계된 언어이다.
◼️ 1-2. SQL 문법의 종류
- DDL(Data Definition Language, 데이터 정의 언어) : 각 릴레이션을 정의하기 위해 사용하는 언어이다.
[ CREATE, ALTER, DROP 등 ] - DML(Date Manipulation Language, 데이터 조작 언어) : 데이터를 추가/수정/삭제 하기 위한, 즉 데이터 관리를 위한 언어이다.
[ SELECT, INSERT, UPDATE 등 ] - DCL(Data Control Language, 데이터 제어 언어) : 사용자 관리 및 사용자별로 릴레이션 또는 데이터를 관리하고 접근하는 권한을 다루기 위한 언어이다.
[ GRANT, REVOKE 등 ]
◼️ 2. MySQL CREATE문[ 데이터베이스, 테이블 생성 ] ◼️
MySQL에서는 CREATE 문을 사용하여 데이터베이스와 테이블을 만들 수 있다.
[ CREATE DATABASE / CREATE TABLE ]
◼️ 2.1 데이터베이스 생성(CREATE DATABASE)
문법 : CREATE DATABASE 데이터베이스이름;
예제 : School 이라는 새로운 데이터베이스를 생성하는 예제
[ CREATE DATABASE School; ]
==> 생성된 데이터베이스 목록은 SHOW DATABASES 구문을 통해 확인 할 수 있다.
◼️ 2.2 데이터베이스 선택(USE DATABASE)>
데이터베이스를 생성한 후에, 해당 데이터베이스를 사용하기 위해서는 우선 데이터베이스를 선택해야 한다.
MySQL에서는 USE 문을 사용하여 데이터베이스를 선택할 수 있다.
문법 : USE 데이터베이스이름;
예제 : School 이라는 데이터베이스를 선택하는 예제
[ USE School; ]
유닉스 환경 : 데이터베이스 이름 대소문자 구분함
윈도우 환경 : 데이터베이스 이름 대소문자 구분하지 않음
==> 될 수 있으면 언제나 데이터베이스의 이름은 대소문자를 구분하여 사용하는 것이 가독성 측면에 좋다.
◼️ 2.3 테이블 생성(CREATE TABLE)
데이터베이스는 하나 이상의 테이블로 구성되며, 이러한 테이블에 데이터를 저장하여 관리 할 수 있다.
CREATE TABLE 문을 통하여 새로운 테이블을 생성해준다.
[문법]
CREATE TABLE 테이블이름
(
필드이름1 필드타입1,
필드이름2 필드타입2,
...
)
==> 테이블을 생성하기 위해서는 테이블 이름, 필드(field) 목록과 각 필드의 타입을 명시해야 하다.
[ 필드의 타입이란 해당 필드에 저장될 데이터가 가질 수 있는 타입을 의미 ]
[예제]
CREATE TABLE Test
(
ID INT,
Name VARCHAR(30),
ReserveDate DATE,
RoomNum INT
);
==> 생성된 테이블 목록은 SHOW TABLES 구문을 통해 확인 가능, 해당 테이블의 상세 정보는 DESCRIBE 구문이나 DESC 구문을 통해 확인 가능
◼️ 2.4 제약 조건(constraint)
제약 조건이란 데이터의 무결성을 지키기 위해 데이터를 입력받을 때 실행되는 검사 규칙을 말한다.
이러한 제약 조건은 CREATE 문으로 테이블을 생성하거나, ALTER 문으로 필드를 추가할 때 설정할 수 있다.
◼️ 2.4-1. CREATE TABLE 문을 통해 사용할 수 있는 제약 조건
- NOT NULL : 해당 필드는 NULL 값을 저장할 수 없게 됩니다.
- UNIQUE : 해당 필드는 서로 다른 값을 가져야만 합니다.
- PRIMARY KEY : 해당 필드가 NOT NULL과 UNIQUE 제약 조건의 특징을 모두 가지게 됩니다.
- FOREIGN KEY : 하나의 테이블을 다른 테이블에 의존하게 만듭니다.
- DEFAULT : 해당 필드의 기본값을 설정합니다.
◼️ 2.4-2. CREATE 문으로 NOT NULL 설정(제약조건 설정)
[문법]
CREATE TABLE 테이블 이름
(
필드이름 필드타입 NOT NULL,
...
)
[예제]
CREATE TABLE test
(
ID VARCHAR NOT NULL,
Name VARCHAR(30),
ReserveDate DATE,
RoomNum INT
);
3. MySQL ALTER문[ 데이터베이스, 테이블 수정 ]
MySQL에서는 다음과 같은 ALTER 문을 사용하여 데이터베이스와 테이블의 내용을 수정할 수 있습니다.
◼️ 3-1. 데이터베이스 수정(ALTER DATABASE)
ALTER DATABASE 문은 데이터베이스의 전체적인 특성을 수정할 수 있게 해준다.
이러한 데이터베이스의 특성은 데이터베이스 디렉터리의 db.opt 파일에 저장되어 있습니다.
[문법]
ALTER DATABASE 데이터베이스이름 CHARACTER SET=문자집합이름
ALTER DATABASE 데이터베이스이름 COLLATE=콜레이션이름
[예제]
ALTER DATABASE Hotel CHARACTER SET=euckr_bin COLLATE=euckr_korean_ci;
==> Hotel 데이터베이스의 문자 집합과 콜레이션을 변경한다. [ COLLATE에서 ci는 case-insensitive를 의미하며, 대소문자를 구분하지 않게 설정 ]
자주 사용되는 대표적인 CHARACTER SET
- utf8 : UTF-8 유니코드를 지원하는 문자셋 (1~3바이트)
- euckr : 한글을 지원하는 문자셋 (1~2바이트)
자주 사용되는 대표적인 COLLATE
- utf8_bin
- utf8_general_ci (기본 설정)
- euckr_bin
- euckr_korean_ci
◼️ 3-2. 테이블 수정(ALTER TABLE)
ALTER TABLE 문은 테이블에 필드를 추가, 삭제하거나 필드의 타입을 변경할 수 있게 해준다.
ALTER 수정 기능 3가지
- ADD
- DROP
- MODIFY COLUMN
◼️ 3-2-1. 테이블에 필드 추가(ADD)
ALTER TABLE 문과 함께 ADD 문을 사용하면, 테이블에 필드를 추가할 수 있다.
[테이블에 필드 추가 문법]
ALTER TABLE 테이블이름 ADD 필드이름 필드타입
[Table에 INT 타입 Phone 필드 추가 예제]
ALTER TABLE Reservation
ADD Phone INT;
◼️ 3-2-2. 테이블에 필드 삭제(DROP)
ALTER TABLE 문과 함께 DROP 문을 사용하면, 테이블의 필드를 삭제할 수 있다.
[테이블에 필드 삭제 문법]
ALTER TABLE 테이블이름 DROP 필드이름
[Table에 RoomNum 필드 삭제 예제]
ALTER TABLE Reservation
DROP RoomNum;
◼️ 3-2-3. 테이블에 필드 타입 변경(MODIFY COLUMN)
ALTER TABLE 문과 함께 MODIFY COLUMN 문을 사용하면, 테이블의 필드 타입을 변경할 수 있다.
[문법]
ALTER TABLE 테이블이름 MODIFY COLUMN 필드이름 필드타입
[테이블의 ReserveDate 필드 타입을 DATE에서 VARCHAR(20)으로 변경하는 예제]
ALTER TABLE Reservation
MODIFY COLUMN ReserveDate VARCHAR(20);
◼️ 4. MySQL DROP문[ 데이터베이스, 테이블 삭제 ] ◼️
MySQL에서는 다음과 같은 DROP 문을 사용하여 데이터베이스와 테이블을 삭제할 수 있다.
◼️ 4-1. 데이터베이스 삭제(DROP DATABASE) ◼️
DROP DATABASE 문은 해당 데이터베이스를 삭제해준다.
[데이터베이스를 삭제하면 해당 데이터베이스의 모든 테이블과 데이터도 다 같이 삭제되므로 주의해야한다.]
[문법]
DROP DATABASE 데이터베이스이름
[예제]
DROP DATABASE Hotel;
◼️ 4-2. 테이블 삭제(DROP TABLE) ◼️
DROP TABLE 문은 해당 테이블을 삭제해준다.
테이블 자체를 아니라 그 테이블 안의 있는 데이터만 지우기 위해선 TRUNCATE TABLE 문을 사용할 수 있다.
◼️ 4-2-1. 해당 테이블의 저장된 데이터만 삭제(TRUNCATE TABLE)
[문법]
TRUNCATE TABLE 테이블이름
[예제]
TRUNCATE TABLE Reservation;
==> 실행결과로 TRUNCATE TABLE 을 한 어떠한 데이터도 저장되어 있지 않다.
◼️ 4-2-2. 해당 테이블 삭제(DROP TABLE)
DROP DATABASE 문이나 DROP TABLE 문을 사용하여 데이터베이스나 테이블을 삭제하려고 할 때, 만약 삭제하려는 이름의 데이터베이스나 테이블이 존재하지 않으면 에러가 발생한다.
==> 이를 위해 IF EXISTS 절을 사용하면 삭제하려는 데이터베이스나 테이블이 존재하지 않아서 발생하는 에러를 미리 방지할 수 있다.
[문법]
DROP DATABASE IF EXISTS 데이터베이스이름;
DROP TABLE IF EXISTS 테이블이름;
[예제]
DROP DATABASE IF EXISTS Hotel;
DROP TABLE IF EXISTS Reservation;
==> 실행결과 만약 Hotel 데이터베이스와 REservation 테이블이 존재한다면 삭제하는것이다.
◼️ 5. MySQL INSERT문[ 테이블에 데이터 추가 ] ◼️
MySQL에서는 INSERT INTO 문을 사용하여 테이블에 새로운 레코드를 추가할 수 있다.
[문법]
1. INSERT INTO 테이블이름(필드이름1, 필드이름2, 필드이름3, ...)
VALUES (데이터값1, 데이터값2, 데이터값3, ...)
2. INSERT INTO 테이블이름
VALUES (데이터값1, 데이터값2, 데이터값3, ...)
==> 필드의 이름을 생략할 수 있으며, 이 경우에 데이터베이스의 스키마와 같은 순서대로 필드의 값이 자동으로 대입된다.
이때 생략 가능한 필드
- NULL을 저장할 수 있도록 설정된 필드
- DEFAULT 제약 조건이 설정된 필드
- AUTO_INCREMENT 키워드가 설정된 필드
◼️ 5-1. 모든 필드의 값 넣기</spanL
[모든 필드의 값을 가져온 예제]
INSERT INTO Reservation(ID, Name, ReserveDate, RoomNum)
VALUES(5, '이순신', '2016-02-16', 1108);
◼️ 5-2. 특정 필드의 값만 넣기
[모든 필드의 값을 가져와야 할 필요없는 예제]
INSERT INTO Reservation(ID, Name)
VALUES (6, '김유신');
◼️ 6. MySQL UPDATE문[ 테이블에 데이터 수정 ] ◼️
MySQL에서는 UPDATE 문을 사용하여 레코드의 내용을 수정할 수 있다.
[문법]
UPDATE 테이블이름
SET 필드이름1=데이터값1, 필드이름2=데이터값2, ...
WHERE 필드이름=데이터값
==> UPDATE 문은 해당 테이블에서 WHERE 절의 조건을 만족하는 레코드의 값만을 수정한다.
◼️ 6-1. 특정 조건 테이블 데이터 수정(WHERE 절 사용)
[테이블에서 Name 필드의 값이 '홍길동'인 모든 레코드의 RoomNum 값을 2002로 변경하는 예제(WHERE절 사용)]
UPDATE Reservation
SET RoomNum = 2002
WHERE Name = '홍길동';
◼️ 6-2. 테이블 데이터 수정(WHERE 절 사용 안함)
[WHERE 절을 생략하는 예제]
UPDATE Reservation
SET RoomNum = 2002;
◼️ 7. MySQL DELETE문[ 테이블의 레코드 삭제] ◼️
MySQL에서는 DELETE 문을 사용하여 테이블의 레코드를 삭제할 수 있다.
◼️ 7-1. 특정 조건 테이블 레코드(레코드) 삭제(WHERE 절 사용)
[문법(WHERE절 사용)]
DELETE FROM 테이블이름
WHERE 필드이름=데이터값
==> DELETE 문은 해당 테이블에서 WHERE 절의 조건을 만족하는 레코드만을 삭제한다. 위의 문법에서의 WHRER문은 테이블에서 명시된 필드이름과 데이터 값이 일치하는 레코드만 삭제한다.
◼️ 7-2. 테이블 레코드(레코드) 삭제(WHERE 절 사용안함)
[문법(WHERE절 사용안함)]
DELETE FROM 테이블이름;
==> 테이블에 저장된 모든 데이터가 삭제되더라도 테이블은 남아있게 된다. 해당 테이블을 삭제까지 하고 싶으면 DROP TABLE문을 사용하면 된다.
[예제(WHRER절 사용)]
DELETE FROM Reservation
WHERE Name = '홍길동';
==> Name 필드의 값이 '홍길동'인 모든 레코드를 삭제한다.
◼️ 8. MySQL SELECT문[ 테이블의 레코드 선택] ◼️
MySQL에서는 SELECT 문을 사용하여 테이블의 레코드를 선택할 수 있다.
[문법]
SELECT 필드이름
FROM 테이블이름
[WHERE 조건]
==> FROM 절은 레코드를 선택할 테이블의 이름을 명시, 해당 테이블에서 선택하고 싶은 필드의 이름은 SELECT 바로 뒤에 명시, 선택할 레코드의 조건은 WHERE절 뒤에 뒤에 명시
◼️ 8-1. 테이블의 모든 필드 선택
[테이블의 모든 필드 선택 문법]
SELECT *
FROM 테이블이름
==> SELECT 문과 함께 별표(*) 기호를 사용하면, 해당 테이블의 모든 필드를 선택 할 수 있다.
[테이블의 모든 필드 선택 예제]
SELECT *
FROM Reservation;
◼️ 8-2. 테이블의 특정 조건 레코드 선택(WHERE문 사용)
[테이블의 특정 조건의 레코드 선택 예제]
SELECT *
FROM Reservation
WHERE Name = '홍길동';
==> Name 필드의 값이 '홍길동'인 레코드만을 선택하는 예제이다. 이렇게 테이블의 특정 조건의 레코드 선택을 위해서 SELECT 문과 WHERE절을 사용하면 검색할 레코드의 조건을 설정할 수 있다.
[테이블의 특정 조건(ID 값이 3 이하이면서 ReserveDate 필드의 값이 2016년 2월 1일 이후)의 레코드 선택 예제]
SELECT *
FROM Reservation
WHERE ID <= 3 AND ReserveDate > '2016-02-01';
◼️ 8-3. 특정 필드 선택
[특정 필드만을 선택하는 예제]
SELECT Name, RoomNum
FROM Reservation;
==> SELECT 키워드 다음에 필드 이름을 명시하면 해당 테이블의 특정 필드만 불러 올 수 있다. 이때 쉼표(,)를 사용하여 여러 개의 필드 이름을 한 번에 명시 할 수 있다.
◼️ 8-4. 특정 조건을 만족하는 특정 필드를 선택하는 예제(WHERE문 사용)
[테이블의 특정 조건(ID 값이 3 이하이면서 ReserveDate 필드의 값이 2016년 2월 1일 이후)인 레코드의 필드만을 선택하는 예제]
SELECT Name, ReserveDate
FROM Reservation
WHERE ID <= 3 AND ReserveDate > '2016-02-01';
◼️ 8-5. 중복되는 값 제거
[중복되는 값 제거 예제]
SELECT DISTINCT Name
FROM Reservation;
==> 만약 같은 필드에 중복되는 값을 가지는 레코드가 있다면, DISTINCT 키워드를 사용하여 그 값이 한 번만 선택되도록 DISTINCT를 이용하여 설정 할 수 있다.(중복된 값은 단 한 번 만 선택 된다.)
[선택한 결과의 정렬 예제]
SELECT *
FROM Reservation
ORDER BY ReserveDate;
==> SELECT 문으로 선택한 결과를 ORDER BY 절을 사용하여 정리 할 수 있다. (ORDER BY절의 기본 설정은 오름차순, ASC 키워드를 사용하면 직접 오름차순 명시, DESC 키워드를 사용하면 직접 내림차순 명시)
[선택한 결과의 정렬 예제]
SELECT *
FROM Reservation
ORDER BY ReserveDate DESC
==> PHP에서 문자열 타입을 데이터로 가지는 필드를 정렬할 때는 기본적으로 대소문자를 구분하지 않는다. 하지만 대소문자까지 구분하여 정렬하고 싶을때는 OREDER BY BINARY 절을 사용하면 된다.
[테이블의 모든 레코드를 먼저 ReserveDate 필드의 내림차순으로 정렬 한 뒤에, 다시 RoomNum 필드의 내림차순으로 정렬하는 예제]
SELECT *
FROM Reservation
ORDER BY ReserveDate DESC, RoomNum ASC;
==> ReserveDate 필드의 내림차순으로 정렬 한 뒤에, 다시 RoomNum 필드의 내림차순으로 정렬한다.
◼️ 8-6. 별칭(alias)을 이용한 처리
MySQL에서는 테이블과 필드에 임시로 별칭(alias)을 부여하고, 해당 별칭을 SELECT 문에서 사용할 수 있습니다.
[ 별칭(alias)은 복잡한 테이블 이름이나 필드의 이름을 좀 더 읽기 쉽도록 만들어 준다. ]
[문법]
1. SELECT 필드이름 AS 별칭
FROM 테이블이름;
2. SELECT 필드이름
FROM 테이블이름 AS 별칭;
==> 위 첫번째 문법은 해당 필드에 새로운 별칭을 부여하고, 두번째 문법은 해당 테이블에 새로운 별칭을 부여하는 문법이다.
[예제]
SELECT ReserveDate, CONCAT(RoomNum, " : ", Name) AS ReserveInfo
FROM Reservation;
==> 테이블의 RoomNum 필드와 Name 필드에 새로운 별칭을 부여하는 예제이며, CONCAT() 함수를 통해 인수로 전달받은 문자열 모두 결합하여 하나의 문자열로 반환하였다.
참고
'DB > MySQL' 카테고리의 다른 글
MySQL 여러개의 SELECT 합치기(UNION) feat. Workbench (0) | 2022.08.19 |
---|---|
MySQL 테이블 레코드 조합(JOIN) feat.Workbench (0) | 2022.08.19 |
Workbench(MySQL)로 스키마와 테이블 만들기 (0) | 2022.08.17 |
aws ec2 인스턴스(우분투 서버)에 MySQL Workbench 연동 (0) | 2022.08.16 |
AWS EC2 인스턴스에 MySQL 구축 (0) | 2022.08.15 |