gwooden_코린이
데이터 베이스 오라클 11g xe 설치 및 오라클 sql Developer 세팅해보기 본문
- 데이터 베이스
관계형 데이터 베이스
- 데이터를 통합해서 관리
- 일관된 방법
- 데이터의 누락, 중복을 제거(최소화)
- 여러 사용자가 동시에 관리
데이터 베이스의 구성
- 테이블(표)
- 행과 열로 구성
필드 | 필드 | 필드 | 컬럼(열) |
- 키
- 기본키 : 각 레코드를 구별하는 유일한 필드
- ex) 주민등록번호, 아이디
- 기본키로 설정된 건 중복 불가능
- 빈칸(Null) 불가능
- 기본키 : 각 레코드를 구별하는 유일한 필드
학생 테이블 | |||
학번 | 이름 | 국어 | 영어 |
1001 | 유재석 | 100 | 90 |
1002 | 유재석 | 80 | 50 |
-
- 외래키
- 기본키가 아니다 보니 중복이 가능
- 기본키를 참조
- 외래키
수강과목 테이블 | |
학번 | 과목 |
1001 | JAVA |
1001 | C |
1002 | HTML |
- DBA : 데이터베이스 관리자
- DBMS : 데이터베이스 관리 시스템
- 오라클, mySQL, splLite
- 데이터 추출, 조작, 정의, 제어 등
- 편의성 목적
- 오라클(SQL), SQL 문법을 안쓰는 NOSQL도 존재
- 사용이 쉬움
- 비절차적인 언어
- 표준문
- SQL
- 데이터 정의어 -> 테이블을 생성, 삭제, 수정 (create, drop, alter
- 데이터 조작어 -> 레코드를 추가, 삭제, 수정, 검색(insert into, delete, update, select)
- 데이터 제어어 -> 권한 관련 (commit, rollback, revoke)
- 자료형
- number : 숫자
- varchar : 문자
- date : 날짜
- SQL
- 데이터베이스 오라클 설치해보기
오라클 11g express edition <-- 무료
https://www.oracle.com/database/technologies/xe-prior-release-downloads.html
무료버전이고 옛버전이다 보니 오라클 홈페이지에서 직접 찾는게 힘들어 위 링크를 이용하거나 또는 구글에 오라클 11g XE 라고 검색해서 다른 유저들이 블로그에 올린 글을 참고해서 각 PC OS환경에 맞게 다운로드하면 된다.
오라클 설치 할때 시스템 비밀번호 설정 하는 곳에만 비번을 설정해 주고 나머지는 다 기본값으로 놔두고 다음 눌러서 설치를 완료하면 된다.
- OracleXE112_Win64 압축 풀기
- disk1 풀더에서 setup 실행
- Next 버튼 클릭 -> 비번은 1234로 하고 설치 진행~
오라클DB와 같이 사용되는 SQL Developer jdk 8도 같이 다운로드 해준다.
SQL Developer는 그래픽 유저 인터페이스를 지원해서 dos창에서 작업하는 불편함을 해결해주는 것
오라클 sql 디벨로퍼 실행 (중간에 나오는 문구는 '아니오' 클릭' 하고 진행)
왼쪽 접속 메뉴에서 '+' 버튼 클릭해서 새로 만들기
- Name :
- 사용자 이름 :
- 비밀번호 :
- 비밀번호 저장 체크
- 테스트 버튼으로 상태 : 성공 으로 나오면 완료
- 접소 버튼 클릭
글씨 크기 키우고 싶을때
alter user hr account unlock identified by 1234;
컨트롤 + 엔터로 실행
Local_HR(이름은 본인이 알아볼 수 있게 마음대로)이라는 것도 새롭게 만들어 줘서 연결 시켜준다.
연습용으로 쓸 테이블과 데이터가 제공된다.
사용자 : scott, 비밀번호 : tiger
create user scott identified by tiger;
기본적인 접속 권한 : connect
to로 grant에게 던져준다
grant connect, resource to scott;
가상테이블 view
grant create view to scott;
원격 접속 할때 필요한 코드
EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);
여러 코드를 실행 시킬때는 실행하고 싶은 코드를 전부 드래그 한 상태에서 컨트롤 + 엔터로 실행
@C:\oraclexe\app\oracle\product\11.2.0\server\RDBMS\ADMIN\scott.sql
ALTER USER scott IDENTIFIED BY tiger ACCOUNT UNLOCK;
create user practice identified by 1234;
grant connect, resource to practice;
grant create view to practice;
EMPNO
NUMBER(4,0) : 4자리수, 소수점 단위 / NUMBER(7,2) : 소수점 자리 포함해서 7자리수
No
1
HIREDATE DATE Yes 5
날짜가 들어가는 데이터 타입
- VAR : 가변길이
- 없으면 : 고정길이
- var가 있으면 가변 없으면 고정
- BYTE 단위를 설정했지만 입력한 값에 크기가 설정한 BYTE 단위보다 작을 경우 var가 붙으면 자동으로 byte단위를 줄여주고 var가 없으면 입력한 값에 크기가 작아도 byte 단위는 빈공간이 있어도 단위 고정
- char : 최대 2000byte
- char2 : 최대 4000byte
- long : 최대 2gb
- var char 2 ( 단위 크기 )
- N VAR CHAR 2 ( 크기 )
- N : 유니코드 (모든 문자가 2byte) -> 크기를 글자수 단위로 처리
- N이 없을 경우 : 3byte, 영어,숫자 -> 1byte / 크기는 바이트로 처리
- 열쇠 모양이 있는게 기본키
- 체크박스가 체크 되어 있을 경우 무조건 값을 넣어줘야 된다.
- 기본값 : 레코드 내용 추가할 때 필요한 것
- 설명 : 개발자들끼리 주고받을때
각 필드별 설명
EMP - 사원테이블
EMPNO : 사원번호
ENAME : 사원이름
JOB : 사원직책
MGR : 직속 상관의 사원번호
HIREDATE : 입사일
SAL : 급여
COMM : 추가수당
DEPTNO : 부서번호 (해당사원의)
DEPT - 부서 테이블
DEPTNO : 부서번호
DNAME : 부서명
LOC : 부서 위치 (지역)
SALGRADE - 급여 정보 테이블
GRADE : 급여 등급
LOSAL : 급여 등급의 최소 급여
HISAL : 급여 등급의 최대 급여
1. 검색문 (Select)
- SELECT : 필드명
- FROM : 테이블명
- WHERE : 조건식;
SELECT * FROM EMP;
* < -- 모두 조회
SELECT EMPNO, JOB, SAL FROM EMP;
특정 조건으로 원하는 데이터 조회도 가능
필드 여러개 보고 싶으면 ,로 보고 싶은 필드명 입력
위에서 필드명 EMPNO, JOB, SAL
SELECT ENAME 이름, SAL 급여 FROM EMP;
SELECT ENAME AS 이름, SAL AS 급여 FROM EMP;
AS 붙이든 안붙이든 상관없음
기존에 있는 필드명으로 조회 말고 별칭을 부여해서 조회할 수 있다. 띄어쓰기, 특수문자 등 할 경우 따옴표로 구분을 해줘야 된다.
DESC EMP;
EMP 테이블에 대한 필드정보
SELECT DEPTNO FROM EMP;
SELECT DISTINCT DEPTNO FROM EMP;
DISTINCT : 중복제거
SELECT SAL, SAL*12 FROM EMP;
사칙연산도 가능
SELECT * FROM EMP WHERE DEPTNO = 10;
EMP 테이블 안에서는 DEPTNO에서 조건에 만족하는걸 * 전부 보여주는
사원번호가 10인 사원만 표시
SQL에서는 = 비교연산자로 사용됨
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE EMPNO>=7500;
사원번호가 7500이상인것만 사원번호, 사원이름, 직책, 급여만 출력
select * from emp where hiredate <'81/05/01';
입사일이 조건식
select * from emp where deptno != 30;
select * from emp where not deptno = 30;
사원번호가 30이 아닌것만
select * from emp where sal>=3000 or deptno=20;
select * from emp where sal>=3000 and deptno=20;
급여가 3000이상이거나 부서번호가 20인 데이터만 조회
급여가 3000이상이고 부서번호가 20인 데이터만 조회
select * from emp where sal>=3000 and deptno=20 and hiredate<'82/01/01';
여러 조건을 사용하는것도 가능하다
--급여가 3000 이상인 데이터 중에서 부서번호가 20이거나 입사일이 82/01/01이전
select * from emp where sal >=3000 and (deptno=20 or hiredate<'82/01/01');
--급여가 2500 이상이고 직업이 manager인 사원이름, 직책, 급여, 부서번호만 출력
select ename, job, sal, deptno from emp where sal >=2500 and job='MANAGER';
데이터 조건 비교할때는 작은 따옴표 사용 ' '
--직책이 MANAGER, SALESMAN, ANALYST인것만 출력
select * from emp where job='MANAGER' or job='SALESMAN' or job='ANALYST';
select * from emp where job in ('MANAGER', 'SALESMAN', 'ANALYST');
--반대 속성
select * from emp where job not in ('MANAGER', 'SALESMAN', 'ANALYST');
-- 부서번호가 12, 20인 데이터만 출력
select * from emp where deptno in (12, 20);
--급여가 2000이상 3000이하
select * from emp where sal>=2000 and sal<=3000;
select * from emp where sal BETWEEN 2000 and 3000;
- IN : (OR랑 같은거) <> NOT IN
- 컬럼명 IN(값, 값, 값)
- BETWEEN (AND같은거) <> NOT BETWEEN
- 컬럼명 BETWEEN 최소값 AND 최대값;
-- ~~~포함하는
SELECT * FROM EMP WHERE ename LIKE '%K%';
%k% : k를 포함하는 모든 문자
k% : k로 시작하는 모든 문자
%k : k로 끝나는 모든 문자
SELECT * FROM EMP WHERE ename LIKE '_I%';
두 번째로 시작하는 글자가 i 인것
SELECT * FROM EMP WHERE ename LIKE 'M____';
_ : 한글자만
M______ : M 으로 시작하는 총 6글자
_M : M으로 끝나는 총 2글자
_M% : 두번째가 M인 모든 문자
-- 사원이름이 AM을 포함하는 데이터만 출력
SELECT * FROM EMP WHERE ename LIKE '%AM%';
--AM을 포함하지 않는
SELECT * FROM EMP WHERE ename NOT LIKE '%AM%';
SELECT * FROM EMP WHERE ename LIKE '%\%%' ESCAPE '\';
ESCAPE로 \를 문자로 인식하게 하면 \%로 검색을 할 수 있다.
구분할 기호는 본인이 원하는 걸로 해도 상관없음
%와 _ 는 와일드 카드로 쓰이기 때문에 ESCAPE로 구분을 해줘야 인식이 가능하다
-- 추가 수당이 없는 사람을 조회
SELECT * FROM EMP WHERE COMM IS NULL;
-- 추가 수당이 있는 사람을 조회
SELECT * FROM EMP WHERE COMM IS NOT NULL;
NULL 값을 조회하고 싶을 때는 IS를 붙여서 사용
--정렬
--급여를 오름차순 정렬
SELECT * FROM EMP ORDER BY SAL ASC;
--내림차순 정렬
SELECT * FROM EMP ORDER BY SAL DESC;
ORDER BY 필드명 정렬기준 :
- ASC는 생략해도 됨 기본값이 오름차순이기 때문에
- DESC는 내림차순
--급여가 1200이상인 레코드를 조회
--(1차적으로 이름을 기준으로 오름차순, 2차적으로 급여를 기준으로 내림차순 정렬
SELECT * FROM EMP WHERE sal>=1200 ORDER BY job, sal DESC;
정렬은 자원소모가 많이 발생되어서 잘 사용하지 않음
SELECT empno 사원번호, ename 이름, sal 급여 FROM EMP ORDER BY 급여 ASC;
별도로 지정해준 명칭으로도 가능
--연결연산자
select ename || ' ' || job as 이름과직책 from EMP;
select ename || 's job is ' || job as 이름과직책 from EMP;
변수1 + "연결" + 변수2
- 문제
1.
--emp테이블에서 이름이 s로 끝나는 데이터를 출력
SELECT * FROM emp WHERE ename LIKE '%S';
2.
--사원번호, 이름, 직책, 급여, 부서번호를 출력
SELECT empno, ename, job, sal, deptno FROM emp where deptno = 30 AND job ='SALESMAN'
3.
--EMP테이블에서 부서번호가 20, 30인 사원중
--급여가 2000 이상인 데이터를 추출
--정렬 : 1차적으로는 부서번호 순으로 내림차순,
--2차적으로는 급여순으로 내림차순
SELECT * FROM emp WHERE deptno in (20, 30) AND sal >= 2000
ORDER BY deptno DESC, sal DESC;
4.
--급여가 2000이상 3000이하가 아닌 데이터를 추출
SELECT * FROM emp
WHERE sal NOT BETWEEN 2000 AND 3000;
5.
--이름이 E를 포함하고 부서번호가 30번이면서
--급여가 1000 이상 2000 이하가 아닌 데이터 중
--이름, 사원번호, 급여, 부서번호 순으로 출력
SELECT ename, empno, sal, deptno
FROM emp
WHERE ename LIKE '%E%'
AND deptno = 30
AND sal NOT BETWEEN 1000 AND 2000;
6.
--추가수당이 없고, 직속 상관이 있으면서
--직책이 MANAGER, CLERK인 사람 중
--두번째 글자가 L인 데이터를 출력
--(입사일 기준으로 오름차순 정렬)
SELECT *
FROM emp
WHERE comm IS NULL --추가수당이 없고
AND mgr IS NOT NULL --직속 상관이 있는
AND job IN('MANAGER', 'CLERK') --직책이 MANAGER, CLERK인 사람
AND ename NOT LIKE '_L%' --두번째 글자가 L인 데이터를 출력
ORDER BY hiredate; --입사일 기준으로 오름차순 정렬
데이터베이스 종류
- 관계형 데이터 베이스
- 테이블로 구성 (컬럼과, 레코드로)
- sql문법 사용
- 중복최소화 때문에 정규화가 필요
- 속도는 느린편
- 정확도가 필요할 경우 좋음
- key-value 데이터 베이스
- key : value
- 서브용 데이터베이스 용도로 많이 쓰임
- 중복은 신경안씀
- 그래프 데이터 베이스
- gql을 사용
- 도큐먼트 데이터 베이스
- key-value
- 관계형 db보다 가벼운편
- 풀더형
- 중복은 신경안씀
- 속도는 빠름
- 정확도는 떨어짐
- 그 외 검색 특화 등등 많이 존재
'데이터베이스' 카테고리의 다른 글
오라클 데이터 베이스 정규화/정규형 (0) | 2023.01.11 |
---|---|
오라클 데이터베이스 함수다뤄보기 (0) | 2023.01.10 |
데이터 베이스란? (0) | 2022.12.21 |
java_MariaDB 활용02 (1) | 2022.12.13 |
java_데이터베이스01 (0) | 2022.12.12 |