1 교시
노트필기
2 교시
** 오라클 다운로드 : www.oracle.com - 회원가입을 해야만 다운로드 가능
1. 종류
11g, 12c, 18,c 19c 등 : 개발순서 (g-grid, c-cloud, i-internet)
eXpress Edition, Standard Edition, Enterprise Edition : 규모
집에서 공부할때는 eXpress Edition 이 적당하고 DB관리자가 되기 위해서 공부할 때는 Enterprise Edition을 설치
2. Oracle 11g xe 버전 설치
3. Oracle은 특별한 경우가 아니고는 Unix나 Linux에 설치해서 사용
비밀번호 입력란
=> 설치 확인 및 시작 옵션 변경
[제어판] - [관리도구] - [서비스]
3~4 교시
** 오라클 접속
1. 접속에 필요한 정보
=> 오라클 접속 컴퓨터 정보 - localhost:1521(오라클 기본 포트)
=> 데이터베이스 이름이나 서비스 이름 - 이름(sid)이 xe
=> 사용자 계정 - sys(슈퍼관리자), sysdba(관리자) 계정이 제공
=> 비밀번호 - 설치할 때 입력한 비밀번호
2. 접속 프로그램
1) sqlplus : 오라클을 설치하면 자동으로 설치 - 관리자 프로그램
2) instant client : 오라클에서 만든 콘솔 기반의 접속 프로그램
3) sql developer : 오라클에서 만든 GUI 기반의 접속 프로그램 - 자바로 만들어짐
4) toad : 금융권에서 많이 사용하는 접속 프로그램
5) dbeaver : 하나의 프로그램으로 여려 종류의 데이터베이스에 접속이 가능 - 자바로 만들어짐
=> 자바로 데이터베이스를 접속하기 위한 드라이버가 있어야 한다.
3. 데이터베이스 사용시 필요한 것
1) DB Server
=> 데이터베이스 위치 - IP와 PORT
=> 데이터베이스이름 - SID 나 Service Name
=> 계정
=> 비밀번호
2) DB Client Program
=> DB Server를 설치하면 기본적으로 제공을 해주지만 DB Server가 설치되지 않은 곳에서는 직접 설치해서 DB Server에 접속해야 한다.
4. Sample Database 설치
1) system 으로 접속, 유저 생성
-- 유저 생성
CREATE USER scott IDENTIFIED BY tiger; -- scott유저의 비번은 tiger
-- 테이블 스페이스 사용 권한 부여
ALTER USER scott
DEFAULT tablespace users;
-- 임시 테이블 스페이스 사용 권한 부여
ALTER USER scott
TEMPORARY tablespace temp;
-- 접속 권한 부여
GRANT CONNECT, dba, resource
TO scott;
2) scott 계정으로 접속
우쿨릭 - 연결 종료 - 에디트 커넥션 - scott tiger 입력
5 교시
scott.sql 데이터가 저장되어 있는 파일을 이용해본다.
DROP TABLE DEPT; CREATE TABLE DEPT (DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY, DNAME VARCHAR2(14) , LOC VARCHAR2(13) ) ; DROP TABLE EMP; CREATE TABLE EMP (EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY, ENAME VARCHAR2(10), JOB VARCHAR2(9), MGR NUMBER(4), HIREDATE DATE, SAL NUMBER(7,2), COMM NUMBER(7,2), DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT); INSERT INTO DEPT VALUES(10,'ACCOUNTING','NEW YORK'); INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS'); INSERT INTO DEPT VALUES(30,'SALES','CHICAGO'); INSERT INTO DEPT VALUES(40,'OPERATIONS','BOSTON'); INSERT INTO EMP VALUES (7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20); INSERT INTO EMP VALUES (7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30); INSERT INTO EMP VALUES (7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30); INSERT INTO EMP VALUES (7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20); INSERT INTO EMP VALUES (7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30); INSERT INTO EMP VALUES (7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30); INSERT INTO EMP VALUES (7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10); INSERT INTO EMP VALUES (7788,'SCOTT','ANALYST',7566,to_date('13-7-1987','dd-mm-yyyy')-85,3000,NULL,20); INSERT INTO EMP VALUES (7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10); INSERT INTO EMP VALUES (7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30); INSERT INTO EMP VALUES (7876,'ADAMS','CLERK',7788,to_date('13-7-1987','dd-mm-yyyy'),1100,NULL,20); INSERT INTO EMP VALUES (7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30); INSERT INTO EMP VALUES (7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20); INSERT INTO EMP VALUES (7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10); DROP TABLE BONUS; CREATE TABLE BONUS ( ENAME VARCHAR2(10) , JOB VARCHAR2(9) , SAL NUMBER, COMM NUMBER ) ; DROP TABLE SALGRADE; CREATE TABLE SALGRADE ( GRADE NUMBER, LOSAL NUMBER, HISAL NUMBER ); INSERT INTO SALGRADE VALUES (1,700,1200); INSERT INTO SALGRADE VALUES (2,1201,1400); INSERT INTO SALGRADE VALUES (3,1401,2000); INSERT INTO SALGRADE VALUES (4,2001,3000); INSERT INTO SALGRADE VALUES (5,3001,9999); COMMIT; SELECT * FROM DEPT; SELECT * FROM EMP; SELECT * FROM BONUS; SELECT * FROM SALGRADE; |
** SQL
=> Strutured Query Language : 구조적 질의 언어
=> 관계형 데이터베이스 작업을 위한 언어
1. 분류
1) DDL(Date Definition Language - DBA(Data Base Administrator의 언어)
=> 구조를 만들고 변경하고 삭제하는 언어
Create : 구조 생성
Alter : 구조 변경
Drop : 구조 삭제
Truncate : 테이블 삭제
Rename : 테이블 이름 변경
2) DML(Date Manipulate Language - 개발자의 언어)
=> 데이터를 삽입하고 갱신하고 삭제하는 언어
Insert : 데이터 삽입
Update : 데이터 갱신
Delete : 데이터 삭제
3) DQL(Date Query Language - 개발자의 언어)
=> 데이터를 조회하는 언어
=> DB 이론에서는 DQL을 DML로 간주
Select : 데이터 조회
4) TCL(Transaction Control Language - 개발자의 언어)
=> 트랜잭션을 제어하는 언어
=> DB 이론에서는 TCL을 DCL로 간주
Commit : 작업 완료
Rollback : 철회
SavaPoint : 저장점
5) DCL(Data Control Language - DBA의 언어)
=> 보안, 무결성, 회복, 병행제어 등에 관련된 언어
Grant : 권한 부여
Revoke : 권한 회수
6) 개발자 한테 중요한 순서 (DB할 일이 있으면 이순서로 하자)
DQL -> DML ->TCl ->DDL ->DCL
=> DCL은 개발자가 사용할 가능성이 거의 없다.
=> 중견기업이상에서는 DDL도 사용할 가능성이 없는데 중소기업이나 스타트업 처럽 데이터베이스 관리자를 별도로 두지 않는 경우에는 개발자가 DDL도 수행
2. 데이터베이스 개체
1) Table : 실제 데이터가 저장되는 개체
1) Sequence : 일련번호
=> auto_increment
3) View : 자주 사용하는 Select 구문을 미리 만들어 둔 것
4) Index : 데이터를 빠르게 찾을 수 있도록 해주는 개체
5) Synonym : 별명
6) Stored Precudure : 자주 사용하는 SQL 구문을 하나의 이름으로 묶어 둔 것
7) Function : 자주 사용하는 코드를 하나의 이름으로 묶어둔것
=> SQL에서는 반드시 리턴 값이 있어야 한다.
8) Trigger : DML 문장을 수행하기 전이나 수행 한 후에 자동으로 동작하는 개체
3. SQL 규칙
=> SQL에서는 예약어와 테이블이름 그리고 열 이름은 대소문자 구분을 하지 않는다.
오라클은 테이블 이름과 열 이름에 대문자를 사용하고 MySQL은 소문자를 사용한다.
=> 문장의 끝은 ; 인데 데이터베이스 접속 프로그램에서는 블럭을 잡고 실행하기 때문에 생략해도 된다.
java에서 SQL을 입력할 때는 ; 을 붙이면 안된다.
** SELECT : 데이터 조회
1. 기본 형식 (암기)
5- SELECT 조회할 표현식 나열(열을 분리)
1- FROM 테이블 이름 나열
2- WHERE 조건 나열(행을 분리)
3- GROUP BY 그룹화 할 표현식 나열
4- HAVING 그룹화 한 이 후의 조건 나열(행을 분리)
6- ORDER BY 정렬할 표현식 나열
=> FROM과 SELECT는 필수
=> 나머지는 선택
2. 테이블 구조 파악
DESC 테이블 이름;
=> DBeaver 에서는 안된다.
3. 테이블의 전체 데이터 조회
SELECT*
FROM 테이블이름;
ex) emp, dept, salgrade 테이블의 전체 데이터를 조회
SELECT * FROM EMP;
8열 14행
EMPNO : 사원번호
ENAME : 사원이름
JOB : 직무
MGR : 관리자 사원번호
HIREDATE : 입사일
SAL : 급여
COMM : 성과금
DEPTNO : 부서번호
SELECT * FROM DEPT;
3열 4행
DEPTNO : 부서번호
DNAME : 부서명
LOC : 부서위치
SELECT * FROM SALGRADE;
3열 5행
GRADE : 급여등급
LOSAL : 최소급여
HISAL : 최대급여
6~7 교시
4. 테이블에서 특정 열 조회
SELECT 열이름나열
FROM 테이블이름나열;
EX) EMP 테이블에서 EMPNO와 ENAME을 조회
SELECT EMPNO, ENAME
FROM EMP;
5. 숫자로 된 열에 산술 연산자를 이용해서 산술 연산한 결과 조회
=> 산술 연산자 +, -, *, / 사용 가능
=> 날짜 데이터는 하루를 1로 계산해서 연산이 가능
=> NULL 데이터와 연산을 하게되면 결과는 NULL
=> NVL(컬럼이나 연산식, 값이 NULL 인 경우 적용할 값)을 이용하면 NULL인 데이터를 기본값으로 변경해서 연산을 하는 것이 가능
적용할 값은 컬럼의 자료형과 일치하는 데이터이어야 한다.
EX1) EMP 테이블에서 ENAME과 SAL에 12를 곱한 결과를 조회
SELECT ENAME, SAL*12
FROM EMP;
EX2) EMP 테이블에서 ENAME SAL * 12 + COMM 결과를 조회
SELECT ENAME, SAL*12 + COMM
FROM EMP;
EX3) EMP 테이블에서 ENAME SAL * 12 + COMM 결과를 조회
COMM이 NULL이면 0으로 계산
SELECT ENAME, SAL*12 + NVL(COMM, 0)
FROM EMP;
6. 열 이름에 ALIAS 설정
=> 열 이름에 별명을 부여하는 것
=> 열 이름 다음에 빈 칸을 두고 별명을 기재하면 된다.
중간에 AS를 삽입해도 된다.
=> 별명에 공백이 잇거나 영문 대문자가 있으면 ""로 감싸야 한다.
=> SELECT 절에 작성하기 때문에 이 별명은 ORDER BY에서만 사용이 가능
=> 연산식이나 함수의 결과를 조회할 때 많이 사용
EX) EMP 테이블에서 ENAME, SAL * 12 + COMM 결과를 조회
COMM이 NULL이면 0으로 계산
SAL * 12 + COMM을 연봉이라는 열 이름으로 조회
SELECT ENAME, SAL*12 + NVL(COMM, 0) 연봉
FROM EMP;
SELECT ENAME, SAL*12 + NVL(COMM, 0) AS 연봉
FROM EMP;
7. 열 결합 연산자- ||
=> 2개 이상의 열이나 표현식을 하나의 열로 묶어서 조회할 때 사용하는 연산자
=> 오라클 만을 이용해서 보고서를 만들 때 주로 이용
EX) EMP 테이블에서 ENAME의 업무는 JOB입니다. 로 조회하기
SELECT ENAME || '의 연봉은' || JOB || ' 은 입니다'
FROM EMP;
=> 개발자들은 2개의 컬럼을 가져와서 출력할 때 직접 결합하는 형태를 많이 사용하기 때문에 개발자들은 이 연산자를 거의 사용하지 않는다.
8. 중복 제거
=> SELECT 절에서 맨 앞에 DISTINCT를 추가하면 중복을 제거하고 조회
=> DISTICT 뒤에 2개 이상의 열 이름이 오면 모든 열의 값이 일치하는 경우 제거된다.
하나라도 중복되지 않은 값이 있으면 조회가 된다.
EX1) EMP 테이블에서 JOB 열의 중복을 제거하고 조회
-- 중복을 제거하지 않고 JOB을 조회
SELECT JOB
FROM EMP;
-- 중복을 제거하고 JOB 조회
SELECT DISTINCT JOB
FROM EMP;
![]() |
![]() |
=> DISTINCT는 맨 앞에 1번만 나와야 하고 뒤에 나오는 모든 열에 영향을 미친다.
**프로그래밍이 수행되는 과정
데이터를 수집 -> 데이터를 가공 -> 처리 -> 결과를 출력 -> 결과를 저장
8 교시
**where
=> select 구문에서 테이터를 행 단위로 분리하기 위한 절
=> from 다음에 위치해야하고 생략할 수 있다.
1. 연산자
연산자 의미
= 같다
>보다 크다
>= 보다 크거나 같다
< 보다 작다
<= 보다 작거나 같다
<>, !=, ^= 같지 않다
NOT Column_name = 같지 않다
NOT Column_name > 보다 크지 않다
ex1) emp 테이블에서 sal이 3000이상인 사원의 empno, ename, sal을 조회
select empno, ename, sal
from emp
where sal >= 3000;
ex) emp 테이블에서 job이 MANAGER인 사원의 empno, ename, job, sal, deptno를 조회
SELECT empno, ename, job, sal, deptno
FROM EMP
WHERE job = 'MANAGER'; -- 조건은 대소문자 구분을 해줘야한다. manager 라고 쓰면 에러
2. 날짜
=> 날짜도 숫자 데이터처럼 크기 비교가 가능
=> 날짜 및 시간 표현 : to_date('날짜문자열', '날짜서식')
=> yyyy:년도4자리, mm:월2자리, dd:일 2자리, hh:시간2자리, hh24:24시간제, mi:분, ss:초
=> 날짜끼리 산술연산이가능하고 숫자 데이터와 산술연산이 가능
하루를 1로 계산
ex) emp 테이블에서 1982/01/01 이후에 입사한 사원(입사일이 HIREDATE)의 ename, sal 데이터를 조회
SELECT ENAME, SAL
FROM EMP
WHERE HIREDATE >=to_date('1982/01/01', 'yyyy/mm/dd');
-- emp 테이블에서 1982년에 입사한 사원(입사일이 HIREDATE)의 ename, sal, hiredate 데이터를 조회
SELECT ENAME, SAL , HIREDATE
FROM EMP
WHERE HIREDATE >=to_date('1982/01/01', 'yyyy/mm/dd') AND HIREDATE <=to_date('1982/12/31', 'yyyy/mm/dd');
3. between and
=> between A and B : A 와 B사이 - A와 B 포함
=> B가 A보다 크거나 같아야한다.
위의 문제를 WHERE HIREDATE between to_date('1982/01/01', 'yyyy/mm/dd') AND
HIREDATE <=to_date('1982/12/31', 'yyyy/mm/dd');
으로 작성해서 풀 수 있다.
4. in
=> in(값을 나열) : 나열된 값 중에 포함된 데이터를 조회
ex) EMP 테이블에서 JOB이 MANAGER 또는 ANALYST인 사원의 모든 정보를 조회
select *
from emp
where job in ('MANAGER', 'ANALYST');
EX2) EMP 테이블에서 DEPTNO의 값이 10 또는 30인 사원의 ENAME, SAL, COMM을 조회
단 COMN 이 NULL이라면 0으로 출력
select ENAME , SAL , NVL(COMM, 0)
from emp
where DEPTNO in (10, 30);
**JAVA 문제
1. 하나의 문자열을 입력받아서 이 문자열이 펠린드롬인지 확인하는 문제
펠린드롬은 앞에서 읽으나 뒤에서 읽으나 동일한 문자열을 의미한다. (예: 101,1001)
=> length() : 문자열의 길이, charAt(int idx) : idx 번째 문자를 char로 리턴
2. 배열이나 리스트를 이용해서 0-1023 사이의 정수를 입력했을 때 이 숫자를 이진수로 변환해서 출력하기 - 무조건 10자리로 출력
7 : 0000000111
21 : 0000010101
1023 : 1111111111
'Oracle' 카테고리의 다른 글
25일차 공부 Transaction, DTO&DAO, Procedure (0) | 2020.05.13 |
---|---|
24일차 공부 select, procedure, JDBC (0) | 2020.05.12 |
23일차 공부 Transaction (0) | 2020.05.11 |
22일차 공부 SELF JOIN, ANSI JOIN, SUB QUERY (0) | 2020.05.08 |
21일차 공부 select, like, NVL , GroupFunction, join (0) | 2020.05.07 |