새로운 테이블을 생성할 때 사용됩니다. 이 명령어를 통해 테이블의 열 이름, 데이터 타입, 제약조건 등을 정의할 수 있으며, 테이블 생성 시 초기 구조를 설정할 수 있습니다.
CREATE TABLE 테이블_이름 (
열_이름 데이터_타입 [제약조건],
열_이름 데이터_타입 [제약조건],
...
);
INT
, VARCHAR(50)
, DATE
등PRIMARY KEY
, NOT NULL
, UNIQUE
등)CREATE TABLE IF NOT EXISTS employees (
empno INT PRIMARY KEY,
ename VARCHAR(50) NOT NULL,
job VARCHAR(50),
sal DECIMAL(10, 2) DEFAULT 0.00,
hiredate DATE
);
테이블을 삭제할 때 사용됩니다. 이 명령어를 실행하면 테이블과 그 안에 있는 모든 데이터가 완전히 제거되므로, 데이터 복구가 불가능하다는 점에서 신중하게 사용해야 합니다.
DROP TABLE 테이블명;
IF EXISTS
조건 추가
IF EXISTS
조건을 추가하면, 지정한 테이블이 존재하지 않는 경우에도 오류가 발생하지 않고 명령을 무시하게 됩니다. 이를 통해 테이블이 없는 경우에도 안전하게 명령을 실행할 수 있습니다.
DROP TABLE IF EXISTS employees;
DROP TABLE
명령어는 테이블을 삭제하는 데 사용되며, 모든 데이터가 함께 삭제됩니다.IF EXISTS
조건을 사용하여 테이블이 없는 경우 오류 없이 명령을 수행할 수 있습니다.CREATE TABLE 새_테이블명 AS
SELECT * FROM 기존_테이블명;
기존_테이블명
의 구조와 데이터를 그대로 새_테이블명
에 복제합니다.AS SELECT
구문을 사용할 경우, 원본 테이블의 제약조건(PRIMARY KEY, INDEX 등)은 복제되지 않습니다.// 전체 복사
create table dept1
-> as select * from sample.dept;
// 일부 복사(행은 전체, 열만 일부 복사)
create table dept2
-> as select loc, dname from sample.dept;
// 일부 데이터만 복사
create table dept3
-> as select loc, dname from sample.dept where deptno=10;
[문제] 사원번호, 사원이름, 급여, 연봉, 입사일자가 복제되어 있는 emp_year1 테이블 생성
-- 사원번호(empno), 사원이름(ename), 급여(sal), 연봉(annual_salary), 입사일자(hiredate) 컬럼이 있는 emp_year1 테이블 생성
-- 연봉(annual_salary)은 급여(sal) * 12로 계산
create table emp_year1 as
select
empno, -- 사원번호
ename, -- 사원이름
sal, -- 급여
sal * 12 as annual_salary, -- 연봉 (급여 * 12)
hiredate -- 입사일자
from sample.emp;
CREATE TABLE 새_테이블명 LIKE 기존_테이블명;
기존_테이블명
의 구조와 제약조건을 그대로 복제하되, 데이터는 복사하지 않습니다.LIKE
구문은 PRIMARY KEY, INDEX, DEFAULT 값 등 모든 제약조건을 그대로 유지한 채 테이블을 복제할 수 있습니다.create table empty_dept2 like sample.dept;
WHERE 1 != 1
조건을 사용하면, 테이블의 구조만 복제하고 데이터는 복제하지 않는 효과를 얻을 수 있습니다. 이 방법은 CREATE TABLE ... AS SELECT
구문을 사용할 때 유용합니다. WHERE 1 != 1
조건은 항상 FALSE이므로, 선택된 데이터는 없지만 테이블의 구조는 동일하게 복사됩니다.
CREATE TABLE 새_테이블명 AS
SELECT * FROM 기존_테이블명
WHERE 1 != 1;
SELECT * FROM 기존_테이블명
구문에서 WHERE 1 != 1
조건을 사용하면 데이터가 선택되지 않지만, 구조는 복제됩니다. [문제] 사원번호, 사원이름, 부서번호, 부서이름, 부서위치를 저장할 수 있는 emp_dept 테이블 생성 스크립트
create table emp_dept
as select e.empno, e.ename, d.deptno, d.dname, d.loc
from sample.emp e inner join sample.dept d
on (e.deptno = d.deptno)
where 1 != 1;
예제 코드
-- 1. 부정 조건 이용
MariaDB [test1]> select * from sample.dept where 1 != 1;
Empty set (0.001 sec)
MariaDB [test1]> create table empty_dept
-> as select * from sample.dept where 1 != 1;
Query OK, 0 rows affected (0.114 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [test1]> desc empty_dept;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| deptno | int(2) | NO | | NULL | |
| dname | varchar(14) | YES | | NULL | |
| loc | varchar(13) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.004 sec)
MariaDB [test1]> select * from empty_dept;
Empty set (0.001 sec)
-- 2. like 키워드 이용
MariaDB [test1]> create table emplty_dept2 **like** sample.dept;
Query OK, 0 rows affected (0.076 sec)
MariaDB [test1]> desc emplty_dept2;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| deptno | int(2) | NO | PRI | NULL | |
| dname | varchar(14) | YES | | NULL | |
| loc | varchar(13) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.004 sec)
MariaDB [test1]> select * from empty_dept;
Empty set (0.000 sec)
-- 3. 조인 키워드를 이용한 생성
// 사원번호, 사원이름, 부서번호, 부서이름, 부서위치를 저장할 수 있는 테이블 생성 스크립트
create table empty_dept3
as select e.empno, e.ename, d.deptno, d.dname, d.loc
from sample.dept d inner join sample.emp e
on (e.deptno = d.deptno)
where 1 != 1;