지난 포스팅에서는 DDL 에 대해서 알아봤습니다. DDL 의 명령어로는 CREATE, ALTER, DROP, TRUNCATE 총 4가지의 명령어가 존재하고 그들로 테이블을 생성, 수정, 삭제, 초기화 등의 작업을 진행할 수 있었습니다.
이번 포스팅에서는 DML 에 대해서 알아보도록 하겠습니다. DML 이란 데이터 조작어(Data Manipulation Language) 로, 데이터를 조회.삽입.수정.삭제가 가능한 명령어들의 집합을 의미합니다.
DML 의 명령어 종류는 아래와 같습니다.
SELECT : 데이터를 조회
INSERT : 데이터 삽입
UPDATE : 데이터 수정
DELETE : 데이터 삭제
SELECT [원하는 컬럼] from [테이블명]
그리고 전체적인 형태는 아래와 같습니다.
SELECT [ALL | DISTINCT] 컬럼명 [,컬럼명...]
FROM 테이블명 [,테이블명...]
[WHERE 조건식]
[GROUP BY 컬럼명 [HAVING 조건식]]
[ORDER BY 컬럼명]
GROUP BY 컬럼명[,컬럼명...]
ORDER BY 컬럼명[,컬럼명...]
SELECT * FROM [테이블];
SELECT EMPLOYEE_ID, LAST_NAME, FIRST_NAME FROM EMPLOYEES;
SELECT Employee_ID AS "종업원ID", LAST_NAME AS "성", FROM Employee_table;
필드값에 별칭을 사용하여 결과출력을 할 수 있습니다.
별칭을 사용할때는 큰따옴표""로 감싸거나 빼고 명령을 해도 됩니다.
=> 즉, 각 필드에 별칭을 부여하여 데이터를 확인하는 것입니다.
SELECT DISTINCT [속성1], [속성2] ... FROM [테이블];
중복된 데이터가 있다면 하나로 보고싶을때 사용하면 됩니다.
필드값을 여러개 사용한다면 해당 필드가 함께 고유한 값을 보여줍니다.
SELECT DISTINCT JOB_ID FROM EMPLOYEES;
JOB_ID 중복제거하고 데이터를 보여준다.
만약 필드값을 두개 이상 EX(JOB_ID, FIRST_NAME)으로 지정한다면
JOB_ID 와 FIRST_NAME을 같이 포함해서 중복을 제거한 데이터를 보여준다.
where 컬럼명 in (값1, 값2, 값3)
where 컬럼명 like '문자패턴'
오라클의 문자패턴 형식
where job_id like 'ST%' <---job_id가 'ST'로 시작하는 것 검색 : 'ST_MAN' 'ST_CLERK'
where job_id like '%ST' <---job_id가 'ST'로 끝나는 것 검색 : 'ST_MAN' 'SH_MAN' 'SR_MAN'
where first_name like '%e%' <---first_name가 'e'를 포함하는 것 검색 : 'elsa' 'gabliel' 'jane'
where name like '이__' <---이름이 '이**'인 사람을 검색 : '이순신' '이성계'
where name like '이_' <---이름이 '이*'인 사람을 검색 : '이황' '이이' '이산'
where 컬럼명 is null
where 컬럼명 in not null
1. 이름이 '홍길동'인 사람을 검색
SELECT * FROM table01 WHERE my_kor = '홍길동'
2. 나이가 25샇인 사원의 한국이름과 나이 조회
SELECT language, age FROM table01 WHERE age>=25
3. 나이가 25살이 아닌 사원 조회
SELECT * FROM my_table age<>25
4. 사원번호가 '0315' 이고 나이가 25살보다 작거나 이름이 '홍길동'인 사원 조회
SELECT * FROM table01 WHERE number = '0315' AND (age<25 OR name = '홍길동')
5. 사원번호가 '0315' 이거나 나이가 25살 이상이면서 이름이 '홍길동'인 사원 조회
SELECT * FROM My_Table WHERE No_Emp = '0315' OR (Age>=25 AND Nm_Kor = '홍길동')
6. 소속부서 아이디가 30, 60, 90인 사원의 아이디, 이름, 직종, 부서아이디를 조회
select employee_id, first_name, job_id, department_id
from employees
where department_id in (30, 60, 90);
7. 부서정보에서 담당자가 지정되어 있지 않는 부서의 아이디, 부서이름을 조회하기
select department_id, department_name
from DEPARTMENTS
where manager_id is NULL;
8. 사원정보에서 커미션을 받는 사원의 아이디, 이름, 급여, 커미션을 조회하기
select employee_id, first_name, salary, commission_pct
from EMPLOYEES
where COMMISSION_PCT is not null;
1. '김'으로 시작하는 사원 조회
SELECT * FROM My_Table WHERE No_Emp = '0315' OR (Age>=25 AND Nm_Kor = '홍길동')
2. 김이 들어가는 시작하는 사원 조회
SELECT * FROM My_Talbe WHERE Nm_Kor LIKE '%김%'
1. 나이가 20살, 24살, 26살인 사원조회
SELECT * FROM table01 WHERE age IN(20,24, 26)
2. 사원번호가 0000 이거나 00004 이고, 나이가 20살, 24살, 28살인 사원조회
SELECT * FROM table01 WHERE number IN('0000','0004') AND age IN(20,24,28)
1. 나이가 20살~25살까지의 사원조회
SELECT * FROM table01 WHERE age Between 20 AND 24
2. 나이가 사원번호가 '0000' ~ '0010' 까지이거나 나이가 30살~40살인 사원의 이름 조회
SELECT age FROM table01 WHERE (number BETWEEN '0000' AND '0010') OR (age BETWEEN 30 AND 40)
https://cmelcmel.tistory.com/30
https://coding-factory.tistory.com/81
INSERT INTO 테이블 이름 (열1, 열2, ...)
VALUE (값1, 값2 , ….)
INSERT INTO table01 (deptno, dname, loc) // 컬럼 deptno, dname, loc 에다
VALUES (50, 'IT TEAM', 'SEOUL') // 값 50, 'IT TEAM', 'SEOUL' 을 할당
VALUES 뒤에 입력할 행을 쉼표(,)로 구분하여 여러 행을 한 번에 입력할 수 있습니다.
INSERT INTO table01 (deptno, dname, loc)
VALUES (70, 'DBA', 'HI'), (80, 'DESIGN TEAM', 'GANGNAM')
INSERT INTO 테이블이름 ( 열1,열2,열3,열4 ….)
SELECT 테이블에 들어갈 값
FROM select값을 구하기 위한 테이블
WHERE 조건
위 선언문을 조금 더 구체화해보면 아래와 같습니다.
INSERT INTO [테이블명] ([칼럼1], [칼럼2], [칼럼3] ...)
SELECT [값1], [값2], [값3] ... FROM [테이블명]
WHERE ...
INSERT 문의 컬럼 개수와 테이터 형식을 SELECT 절에서 컬럼의 개수와 데이터 형식을 동일하게 조회하여 여러 건의 데이터를 한 번에 입력할 수 있습니다.
INSERT INTO table01 (deptno, dname, loc)
SELECT deptno + 1, dname, 'JEJU ISLAND' FROM dept
WHERE deptno IN (60, 70, 80)
https://121202.tistory.com/25
https://gent.tistory.com/498
UPDATE [테이블] SET [열] = '변경할값' WHERE [조건]
만일 업데이트할 칼럼이 여러 개인 경우 SET 절에서 쉼표(,)로 구분하여 컬럼과 값을 기술하면 됩니다.
UPDATE table01
SET dname = 'SALES TEAM'
, loc = 'TEXAS'
WHERE deptno = 30
UPDATE table01
SET loc = 'Korea'
FROM table01.emp a
JOIN table01.emp b
ON a.mgr = b.empno
WHERE b.ename = 'SCOTT'
AND dept.deptno = b.deptno
UPDATE table01
SET loc = (SELECT a.loc FROM table01 a WHERE a.deptno = 10)
WHERE deptno IN (20, 30)
UPDATE dbo.dept
SET loc = 'TEXAS'
WHERE dept.deptno IN (SELECT a.deptno
FROM dbo.emp a
WHERE a.job = 'SALESMAN')
UPDATE dbo.dept
SET loc = 'TEXAS'
WHERE EXISTS (SELECT 1
FROM dbo.emp a
WHERE a.job = 'SALESMAN'
AND a.deptno = dept.deptno)
https://121202.tistory.com/28
https://gent.tistory.com/499
DELETE FROM [테이블] WHERE [조건]
DELETE FROM table01
WHERE emp_id = 4; // emp_id 값이 4인 데이터 삭제
DROP은 폴더를 자체를 삭제하며, DELETE 는 폴더의 내용을 삭제 한다.