계정, 설정하기
초기계정(sys)
이름 : system 비밀번호 : Icia1008
scott계정
1
2
3
4
5
6
7
8
9
10
11
// 접속설정을해준다.
scott
이름 : scott
비밀번호 : tiger
//그후 명령어설정을 해준다. (sys계정에서)
CREATE USER scott
IDENTIFIED BY tiger;
GRANT DBA TO scott;
icia_user 계정
1
2
3
4
5
6
7
8
9
10
11
12
13
// 접속설정을해준다.
icia_user
이름 : iciauser
비밀번호 : 1234
//그후 명령어설정을 해준다. (sys계정에서)
CREATE USER iciauser
IDENTIFIED BY 1234;
grant connect, resource, dba to iciauser;
테이블 만들기
이름, 주소가 변할수있는 값은 VARCHAR2 를 사용하고 (오라클 : VARCHAR2) 주민등록번호, 사번 같이 변할수없는 값은 CHAR 를 사용한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// iciauser 계정에서 실행 시작
create table emp
(
empno number(4) not null,
ename varchar2(10),
job varchar2(9),
mgr number(4),
hiredate date,
sal number(7, 2),
comm number(7, 2),
deptno number(2)
--, constraint emp_pk primary key(empno)
);
alter table emp add constraint emp_pk primary key(empno);
// drop table emp;
comment on table emp is '사원정보';
comment on column emp.empno is '사원번호';
comment on column emp.ename is '사원명';
comment on column emp.job is '직급';
comment on column emp.mgr is '상사번호';
comment on column emp.hiredate is '입사일';
comment on column emp.sal is '급여';
comment on column emp.comm is '보너스';
comment on column emp.deptno is '부서코드';
select * from tab;
// iciauser 계정에서 실행 끝
테이블을 생성하고 comment 설정 작업을 해보았다.
ALTER 테이블컬럼추가,삭제, 변경 하기
문법 : ALTER TABLE 테이블명 ADD
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// iciauser 계정에서 실행
// 컬럼추가
alter table emp add(emp_name varchar2(10));
// 컬럼수정
alter table emp modify(emp_name varchar2(20));
// 컬럼명 변경
alter table emp rename column emp_name to emp_f_name;
// 컬럼 삭제
alter table emp drop column emp_f_name;
// drop, truncate 테스트
CREATE TABLE EMP_TEST
(
EMPNO NUMBER(4,0) NOT NULL ENABLE,
ENAME VARCHAR2(10 BYTE),
JOB VARCHAR2(9 BYTE),
MGR NUMBER(4,0),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2,0)
);
truncate table emp_test;
drop table emp_test;
차이점 TRUNCATE : 테이블은 존재하지만 데이터의 내용이 없어진다. DROP : 테이블의 모든것을 삭제한다.
DML : 데이터조작어
INSERT : 데이터입력 UPDATE : 데이터수정 DELETE : 데이터삭제 SELECT : 데이터조회
- INSERT - 데이터 추가
INSERT INTO 테이블명 VALUES(데이터1, 데이터2, 데이터3);
1
2
3
4
5
6
// DML, insert문
insert into emp(empno, ename, job) values (2222 , '연습용', '직원');
insert into emp values (3333, '연습용3', 'manager', 1111, sysdate, 1000, 500, 10);
commit;
rollback;
- UPDATE - 데이터 수정
UPDATE 테이블 set 컬럼이름 =값 where 조건;
1
2
3
4
5
6
7
update emp
set empno = 2222;
where empno = 2222;
update emp
set job = '대리'
where empno = 1111;
- SELECT - 데이터 조회
SELECT 컬럼 FROM 테이블명 WHERE 조건;
1
2
3
4
5
6
7
8
9
10
11
12
13
select *
from emp;
select empno, ename, job
from emp;
select * from emp where job='MANAGER';
// empno가 7800이상인 직원정보조회
select * from emp where empno >= 7800;
// empno가 7800이상이고 그리고 급여가 3000원 이상인 직원정보조회
select * from emp where empno >= 7800 and sal >=3000;
테이블 속도 차이
1
2
3
4
5
6
7
8
9
10
11
12
1번
SELECT *
FROM EMP
WHERE JOB LIKE 'MA%';
2번
SELECT *
FROM EMP
WHERE UPPER(JOB) LIKE 'MA%';
1번이 속도가 더 빠르다.
DUAL테이블
가상의 테이블로 값이 없지만 테이블 역활을 할 수 있는 테이블 원하는 select를
테이블 조회, 삭제, 등등 연습해보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
SELECT *
FROM EMP
WHERE EMPNO = 7369;
// 월급이 1000원이상이면서 보너스가 100이상인것
SELECT *
FROM EMP
WHERE SAL >= 1000
AND COMM >= 100;
// 일부 컬럼만 조회
SELECT EMPNO, ENAME, JOB, SAL, COMM
FROM EMP
WHERE SAL >= 1000
AND COMM >= 100;
// 조회 컬럼 이름 변경하여 조회
// AS 다음에있는 글자는 .JAVA에있는 멤버변수와 맞춘다.
SELECT EMPNO AS 직원번호, ENAME "직원이름" , JOB "직원의 직책"
FROM EMP
WHERE SAL >= 1000
AND COMM >= 100;
// NULL값은 컬럼
SELECT EMPNO AS 직원번호, ENAME "직원이름" , JOB "직원의 직책", SAL,
NVL(COMM, 0)보너스
FROM EMP
WHERE SAL >= 1000;
여기서 NVL(컬럼명, 0)
null값을 0으로 대치할때 사용한다.
// 문자열 연결
SELECT '[' || ENAME || '-' || JOB || ']' "이름과 직책",
SAL, COMM
FROM EMP
WHERE COMM IS NULL;
* 같은표현 1
SELECT *
FROM EMP
WHERE JOB LIKE 'MA%'; --테이블에있는값은 꼭 대소문자구별한다. (1)
* 같은표현 2
SELECT *
FROM EMP
WHERE LOWER(JOB) LIKE 'ma%'; --테이블에있는값은 꼭 대소문자구별한다.
SELECT *
FROM EMP
WHERE UPPER(JOB) LIKE 'MA%'; (2) 속도차이난다
// 조회 컬럼 대문자, 소문자 변환하여 조회 (WHERE에서 많이사용)
// LIKE 'ACCCOUNT%'; 포함하고있는값을 가져온다. , 단 %어떤글자가와도상관없다.
// DUAL테이블
SELECT upper('manager') UPPER, lower('ManaGer') LOWER,
initcap('manager') INITCAP
FROM dual;
SELECT *
FROM EMP;
// 직책이 SALESMAN이면서 급여가 1500원 이상이면서 보너스가 없는 직원 조회
SELECT *
FROM EMP
WHERE JOB = 'SALESMAN' AND SAL >=1500 AND COMM IS NULL;
// ENAME ALLEN 인 직원의 보너스를 0으로 변경
SELECT * FROM EMP WHERE ENAME='ALLEN';
UPDATE EMP SET COMM = 0 WHERE EMPNO = 7499;
COMMIT;
// 급여액이 1000원 이상이면서 보너스가 NULL이거나 0인 직원조회
SELECT *
FROM EMP
WHERE SAL >= 1000
AND NVL(COMM ,0) = 0;
// where조건에 가장적은 범위가오는 순으로 하는게 좋다
// 2가지방법
SELECT *
FROM EMP
WHERE SAL >= 1000
AND (COMM IS NULL OR COMM =0);
// 직원번호가 7500 - 7800번 사이의 직원 조회
SELECT *
FROM EMP
WHERE EMPNO >=7500
AND EMPNO <=7800;
SELECT *
FROM EMP
WHERE EMPNO BETWEEN 7500 AND 7800;
// 부서코드가 20과 30에 해당하는 직원조회
SELECT *
FROM EMP
WHERE DEPTNO IN(20, 30); -- WHERE DEPNO=20 OR DEPTNO=30
SELECT *
FROM USER_TABLES;
SELECT *
FROM ALL_TABLES
문자 처리 함수
LENGTH : 문자의 길이 반환 CONCAT(varchar1, varchar2) : 두문자를 붙여 반환 SUBSTR(varchar, m, n) : 문자열에서 m번째 문자 부터 n개 문자부터 자름 REPLACE(a, b, c) : 문자열 a에서 b를 c문자열로 변경
1
2
3
4
5
6
// 문자처리 함수
SELECT LENGTH('DDDDDDDD')
,CONCAT('ABC', 'DEF')
,SUBSTR('ABCDEF', 2, 3)
,REPLACE('ABBCD', 'B', 'F')
FROM DUAL;
날짜 함수
SYSDATE : 현재 일자와 시간을 DATE SYSTIMESTAMP : 현재일자와 시간을 TIMESTAMP형으로 반환
1
2
3
4
5
6
7
8
9
10
// 날짜 함수
SELECT SYSDATE
,SYSTIMESTAMP
,ADD_MONTHS(SYSDATE, 2)
,MONTHS_BETWEEN(ADD_MONTHS(SYSDATE, 1), SYSDATE)
,NEXT_DAY(SYSDATE, '토요일')
,LAST_DAY(SYSDATE)
,ROUND(SYSDATE, 'MONTH')
,TRUNC(SYSDATE, 'MONTH')
FROM DUAL;
날짜 포맷
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT TO_CHAR(SYSDATE, 'YYYYMMDD')
,TO_CHAR(SYSDATE, 'YYYY/MM/DD')
,TO_CHAR(SYSDATE, 'YYYY-MM-DD')
,TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')
날짜에 0없애기
SELECT TO_CHAR(SYSDATE, 'MM/DD') --07/03
TO_CHAR(SYSDATE, 'FMMM/DD') --7/3
FROM DUAL;
// 시간 오전, 오후 표시
SELECT TO_CHAR(SYSDATE, 'AM')
,TO_CHAR(SYSDATE, 'AM HH:MI:SS')
,TO_CHAR(SYSDATE, 'YYYY-MM-DD AMHH:MI:SS')
FROM DUAL;
변환 함수
TO_CHAR(a, format) : 숫자나 날짜를 문자로 변환
TO_NUMBER(a, format) : 문자나 다른 타입을 number로 변환
TO_DATE(a, format) : 문자를 date타입으로 변환
1
2
3
4
5
6
// 변환함수
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD'), TO_DATE('20210610', 'YYYYMMDD') FROM DUAL;
SELECT ROUND(TO_DATE('20210605', 'YYYYMMDD'), 'MONTH'),TRUNC(SYSDATE, 'MONTH') FROM DUAL;
중요하다.
만약 20210620 ~ 20210630 사이의 컬럼들을 보여주시오라고하면
SELECT * FROM EMP where hidedate >= TO_DATE(‘20210620’, ‘YYYYMMDD’) AND hidedate <= TO_DATE(‘20210630’, ‘YYYYMMDD’);
이렇게 된다.
이렇게 날짜를 변환함수로 데이터를 나타내는 방법 잘