• 테이블의 데이터를 다루는 목적의 문법들
INSERT | 새로운 데이터를 테이블에 추가 |
UPDATE | 기존 데이터를 갱신 |
DELETE | 기존 데이터를 삭제 |
INSERT
• 새로운 데이터를 테이블에 입력할 때 사용하는 문법
INSERT INTO절
- 데이터를 추가할 테이블과 컬럼의 목록을 작성하는 절.
VALUES절
- 테이블에 입력할 값들의 목록을 작성.
INSERT INTO 테이블명 [(컬럼 목록[, …])]
VALUES (값1, [, 값2, ...])
desc departments;
Field |Type |Null|Key|Default|Extra|
---------------+------------+----+---+-------+-----+
department_id |int unsigned|NO |PRI| | |
department_name|varchar(30) |NO | | | |
manager_id |int unsigned|YES |MUL| | |
location_id |int unsigned|YES |MUL| | |
PRIMARY KEY: null값 x, unique(고유한 값)
INSERT INTO departments (department_id, department_name, manager_id, location_id)
VALUES (310, 'Nap', 100, 1700);
DESC departments;
SELECT * FROM departments;
INSERT INTO departments (department_id, department_name)
VALUES (320, 'GoHome');
• id 컬럼에 default값으로 10의 숫자를 가진 테이블을 생성한다.
CREATE TABLE t_insert
(
id INT DEFAULT 10
);
DESC t_insert;
Field|Type|Null|Key|Default|Extra|
-----+----+----+---+-------+-----+
id |int |YES | |10 | |
• id 컬럼에 대해서 명시적으로 NULL값을 입력한다.
INSERT INTO t_insert (id)
VALUES (NULL);
• 위와 같이 명시적으로 NULL값을 입력하는 경우 컬럼에 DEFAULT 설정이 적용되어 있더라도 무시되고 NULL값이 입력되는 것을 볼 수 있다.
SELECT * FROM t_insert;
id|
--+
|
서브쿼리를 사용한 데이터 입력
• employees 테이블의 구조를 복사하여 생성
CREATE TABLE sales_reps AS
(
SELECT * FROM employees WHERE 1 = 2
);
DESC sales_reps;
Field |Type |Null|Key|Default|Extra|
--------------+------------+----+---+-------+-----+
id |int unsigned|NO | | | |
name |varchar(25) |NO | | | |
salary |decimal(8,2)|NO | | | |
commission_pct|decimal(2,2)|YES | | | |
• 생성된 sales_reps테이블의 데이터는 복사되지 않았음.
SELECT * FROM sales_reps;
id|name|salary|commission_pct|
--+----+------+--------------+
• values 절을 대신하여 서브쿼리의 출력 결과를 메인 쿼리의 입력값으로 입력하는 구문작성방법이다.
INSERT INTO sales_reps (id, name, salary, commission_pct)
SELECT employee_id, last_name, salary, commission_pct
FROM employees
WHERE job_id LIKE '%REP';
SELECT * FROM sales_reps;
id |name |salary |commission_pct|
---+----------+--------+--------------+
150|Tucker |11000.00| 0.30|
151|Bernstein |10450.00| 0.25|
152|Hall | 9900.00| 0.25|
153|Olsen | 8800.00| 0.20|
UPDATE (데이터 갱신)
- 기존 데이터의 값을 새로운 값으로 갱신할 때 사용하는 문법
- UPDATE절 : 갱신할 데이터가 있는 테이블명 작성
- SET절 : 갱신 작업의 내용을 작성한다. 컬럼 = 값 의 구조로 = 기호는 할당의 의미로 사용된다. 한번에 여러 컬럼의 값을 갱신할 수도 있다.
- WHERE절 : 갱신 작업의 대상이 될 행을 선택하는 조건식을 작성한다. where절은 생략가능하나, 생략하는 경우 테이블의 모든 행이 갱신의 대상이 된다.
CREATE TABLE sales_reps (
id INT UNSIGNED NOT null,
name varchar(25) NOT NULL,
salary decimal(8,2) NOT null,
commission_pct decimal(2,2)
);
DESC sales_reps;
Field |Type |Null|Key|Default|Extra|
--------------+------------+----+---+-------+-----+
id |int unsigned|NO | | | |
name |varchar(25) |NO | | | |
salary |decimal(8,2)|NO | | | |
commission_pct|decimal(2,2)|YES | | | |
• employees 테이블의 구조를 복사하여 생성
CREATE TABLE sales_reps AS
(
SELECT * FROM employees WHERE 1 = 2
);
DESC sales_reps;
Field |Type |Null|Key|Default|Extra|
--------------+------------+----+---+-------+-----+
id |int unsigned|NO | | | |
name |varchar(25) |NO | | | |
salary |decimal(8,2)|NO | | | |
commission_pct|decimal(2,2)|YES | | | |
- 생성된 sales_reps테이블의 데이터는 복사되지 않았음.
SELECT * FROM sales_reps;
id|name|salary|commission_pct|
--+----+------+--------------+
values 절을 대신하여 서브쿼리의 출력 결과를 메인 쿼리의 입력값으로 입력하는 구문작성방법이다.
INSERT INTO sales_reps (id, name, salary, commission_pct)
SELECT employee_id, last_name, salary, commission_pct
FROM employees
WHERE job_id LIKE '%REP';
SELECT * FROM sales_reps;
id |name |salary |commission_pct|
---+----------+--------+--------------+
150|Tucker |11000.00| 0.30|
151|Bernstein |10450.00| 0.25|
152|Hall | 9900.00| 0.25|
copy_emp
CREATE TABLE copy_emp AS
(SELECT * FROM employees);
DELETE FROM copy_emp
WHERE employee_id = 100;
SELECT employee_id, job_id, salary
FROM copy_emp
WHERE employee_id IN (113, 205);
employee_id|job_id |salary |
-----------+----------+--------+
113|FI_ACCOUNT| 7590.00|
205|AC_MGR |13200.00|
• 113 사번의 직원에 대하여 job_id, salary의 값을 205번 사원의 job_id, salary값으로 갱신한다.
UPDATE copy_emp
SET job_id = ( SELECT job_id
FROM employees
WHERE employee_id = 205),
salary = ( SELECT salary
FROM employees
WHERE employee_id = 205)
WHERE employee_id = 113;
• 갱신 이후 113, 205 사원의 데이터 확인
SELECT employee_id, job_id, salary
FROM copy_emp
WHERE employee_id IN (113, 205);
employee_id|job_id|salary |
-----------+------+--------+
113|AC_MGR|13200.00|
205|AC_MGR|13200.00|
• 1800위치 값에 근무하는 부서의 정보
SELECT department_id
FROM departments
WHERE location_id = 1800;
department_id|
-------------+
20|
• 1800위치 코드에 존재하는 부서의 사원 정보를 출력
SELECT department_id, salary
FROM copy_emp
WHERE department_id IN (SELECT department_id
FROM departments
WHERE location_id = 1800);
department_id|salary |
-------------+--------+
20|14300.00|
20| 6600.00|
UPDATE copy_emp
SET
salary = salary * 1.1
WHERE department_id IN ( SELECT department_id
FROM departments
WHERE location_id = 1800);
• 갱신 작업 후 값의 변화
SELECT department_id, salary
FROM copy_emp
WHERE department_id IN (SELECT department_id
FROM departments
WHERE location_id = 1800);
department_id|salary |
-------------+--------+
20|15730.00|
20| 7260.00|
DELETE FROM copy_emp
WHERE department_id = (SELECT department_id
FROM departments
WHERE location_id = 1800);
SELECT department_id, salary
FROM copy_emp
WHERE department_id IN (SELECT department_id
FROM departments
WHERE location_id = 1800);
department_id|salary|
-------------+------+
'DB > MySQL' 카테고리의 다른 글
[Mysql] 시험용어 정리 ① (1) | 2023.10.12 |
---|---|
[Mysql] 예제로 공부하는 트랙잭션 공부 (0) | 2023.10.04 |
[Mysql] 서브쿼리 예제문제 (1) | 2023.09.18 |
[Mysql] 인라인뷰, 조건의 쌍비교 방식 (2) | 2023.09.16 |
[Mysql] 서브쿼리 (0) | 2023.09.16 |