Posts Database-1. 데이터베이스 명령어
Post
Cancel

Database-1. 데이터베이스 명령어

계정, 설정하기

초기계정(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 : 데이터조회

  1. 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;
  1. 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;
  1. 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’);

이렇게 된다.

이렇게 날짜를 변환함수로 데이터를 나타내는 방법 잘

This post is licensed under CC BY 4.0 by the author.