SQL(Structured Query Language)에는 DDL(Data Definition Language), DML(Data Manipulation Language), DCL(Data Control Language)이 있다고 하였습니다. 이 세가지 모두를 알아볼건데요. 저희는 DML부터 알아보려고 합니다. DML에는 크게 4가지 명령어가 있습니다.
- SELECT : 데이터 읽기
- INSERT : 데이터 삽입
- UPDATE : 데이터 수정
- DELETE : 데이터 삭제
크게 이렇게 4가지 명령어가 있으며 추가로 다음과 같은 명령어도 있습니다.
* Alias (별칭)
SELECT ENAME AS ”사원명” FROM EMP;
-> " " 는 생략가능하며 AS도 생략 가능합니다
SELECT ENAME 사원명 FROM EMP;
* 테이블 구조 확인
DESC 테이블명; (=DESCRIBE 테이블명;)
* Line 크기 변경 / Page 크기 변경
SET LINESIZE 크기; / SET PAGESIZE 크기;
* 문자열 연결
STRING||STRING
1. SELECT
SELECT 컬럼명,…
FROM 테이블명
WHERE 컬럼의 조건;
SELECT 명령어의 기본 형태입니다. 또한 실행순서는 FROM -> WHERE -> SELECT로
FROM 테이블에서 WHERE 조건을 가진 SELECT 컬럼을 읽겠다 라고 해석순서가 있습니다.
* 컬럼의 값을 연산 (산술, 비교 등)
> , >=, <, <=, =, !=(<>), BETWEEN, IN, NOT IN, ANY 등
* 조건 연결은 AND, OR 로 함
연산이나 조건 연결 등은 아래 예시에서 다뤄 볼예정입니다. 이전 포스팅에서 SELECT * FROM EMP;를 써본적이 있죠? 이 명령어를 해석하면 EMP테이블에서 *(모든) 칼럼을 읽겠다. 라고 해석 할 수 있습니다.
그러먼 저희가 앞선 포스팅에서 덮어놨던 EMP 테이블이 나옵니다.
위의 테이블에서 칼럼은 EMPNO, ENAME, JOB, MGR, HIRDATE, SAL, COMM, DEPTNO가 되겠네요.
그렇다면 EMP 테이블에서 ENAME과 JOB칼럼만 보고 싶다면 어떻게 할까요?
SELECT ENAME, JOB FROM EMP;
를 입력하면 되겠죠?
SELECT 명령어 이해 되셨나요?
아 참 그리고 명령어를 한줄로 적어도 되는데
SELECT *
FROM EMP;
이렇게 끊어서 입력해도 됩니다!
--Q1) 사원 테이블에서 사원의 이름(ENAME), 사원의 번호(EMPNO), 월급(SAL)을 출력하자.
SELECT EMPNO, ENAME, SAL FROM EMP;
--Q2) 사원 테이블에서 사원의 이름과 연봉을 출력하자.
SELECT ENAME, SAL*12 FROM EMP;
연산도 됩니다!
--Q3) 부서 테이블(DEPT)의 모든 데이터를 출력하자.
SELECT * FROM DEPT;
--Q4) 부서 테이블의 구조를 보자
DESC DEPT;
--Q5) 사원 테이블에서 사원의 이름, 월급, 커미션(COMM)을 출력하자.
SELECT ENAME, SAL, COMM FROM EMP;
--COMM이 없으면 출력이 안됨(NULL값은 계산 할 수 없음)
--SELECT ENAME, SAL * 12 + COMM FROM EMP;
--위의 코드는 에러 발생함
--Q6) 사원 테이블의 모든 데이터를 "OO님이 OO에 입사를 하고 OO의 월급을 받습니다." 형식인 하나의 컬럼으로 출력하자.
SELECT ENAME||'님이 '||HIREDATE||'에 입사를 하고 '||SAL||'의 월급을 받습니다.' FROM EMP;
BONUS) 별칭주기 문제9로 바꾸기
SELECT ENAME||'님이 '||HIREDATE||'에 입사를 하고 '||SAL||'의 월급을 받습니다.' AS "문제9" FROM EMP;
SET LINESIZE 160
SELECT * FROM EMP;
SET PAGESIZE 20; SELECT * FROM EMP;
--Q7) 사원테이블에서 'SMITH'의 사원번호, 이름, 월급을 출력하자.
SELECT EMPNO, ENAME, SAL FROM EMP WHERE ENAME = 'SMITH';
--숫자인 경우 ''생략가능
--Q8) 사원테이블에서 입사일이 1980년 12월 17일인 사원의 모든 데이터를 출력하자.
SELECT * FROM EMP WHERE HIREDATE='80/12/17';
SELECT * FROM EMP WHERE HIREDATE='1980/12/17';
SELECT * FROM EMP WHERE HIREDATE='80-12-17';
SELECT * FROM EMP WHERE HIREDATE='1980-12-17';
--네가지 모두 가능합니다.
--Q9) 1980년도에서 1982년도 사이에 입사한 사원의 이름과 입사일을 출력하자.
SELECT ENAME, HIREDATE
FROM EMP
WHERE HIREDATE >= '1980/01/01'
AND HIREDATE <= '82/12/31';
SELECT ENAME, HIREDATE
FROM EMP
WHERE HIREDATE BETWEEN '80/01/01' AND '82/12/31';
두가지 모두 가능합니다
--Q10) 사원번호가 7369, 7499, 7521인 사원들의 이름과 월급을 출력하자.
SELECT ENAME, HIREDATE
FROM EMP
WHERE EMPNO = 7369
OR EMPNO = 7499
OR EMPNO = 7521;
SELECT ENAME, SAL
FROM EMP
WHERE EMPNO IN (7369, 7499, 7521);
두가지 모두 가능합니다.
2. INSERT
1. 전체칼럼
INSERT INTO 테이블명
VALUES(전체 컬럼 내용);
2. 특정칼럼
INSERT INTO 테이블명(특정 컬럼명)
VALUES(특정 컬럼 내용);
--Q11) 사원테이블에 사원번호 1111, 이름 HONG, 직업 DEVELOPER, 관리자 없음
입사일 오늘날짜, 월급 3000, 커미션 400, 부서번호 30 을 추가해 보자.
INSERT INTO EMP
VALUES(1111,'hong','DEVELOPER',NULL,SYSDATE, 3000, 400, 30);
(SELECT이용해서 테이블이 어떻게 바뀌었는지 확인해보세요!)
3. UPDATE
UPDATE 테이블명
SET 컬럼명 = 값
WHERE 조건;
--Q12) 사원테이블에서 HONG의 월급을 3500으로 수정하자
UPDATE EMP
SET SAL = 3500
WHERE ENAME = 'HONG';
(SELECT이용해서 테이블이 어떻게 바뀌었는지 확인해보세요!)
4. DELETE
DELETE FROM 테이블명
WHERE 조건;
--Q13) 사원 테이블에서 월급이 3500인 사원 삭제하자.
DELETE FROM EMP
WHERE SAL = 3500;
(SELECT이용해서 테이블이 어떻게 바뀌었는지 확인해보세요!)
'RDB > Oracle' 카테고리의 다른 글
[ORACLE] DCL - 데이터 제어어 (0) | 2021.12.22 |
---|---|
[ORACLE] DDL - 데이터 정의어 (0) | 2021.12.21 |
[ORACLE] 기본 개념과 용어 및 트랜잭션 (0) | 2021.12.19 |
[ORACLE] 계정 생성 (0) | 2021.12.18 |
[ORACLE] 오라클(ORACLE) 데이터베이스(DB)설치 (0) | 2021.12.17 |