🟨 목 차 🟨
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() 함수를 통해 인수로 전달받은 문자열 모두 결합하여 하나의 문자열로 반환하였다.
참고
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com
'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 |