본문 바로가기

오라클 데이터베이스

dB시작 설치

express버전이 가볍다 MB단위로 차지하고 돌아감

 

현업에서는 높은 버전안씀

 

계정 2개 생김 1004

포트 1521

톰캣과 같은 8080포트를 쓴다. HTTPLIStener

사용자/비밀번호

 

현재 접속한 사용자

exit로 탈출

 

툴을 다양하게 쓰자

 

Developer

토드 , 한국 :  오렌지 , 디자인 개굿 : sqlgate

JDK가 포함되었는가 아닌가 차이임

 

 

 

압축만 풀고 실행햇을때 이런창이 뜨면 돋보기 누르고 sQl developer의 버전을 선택한다.

 

 

 

 

 

 

호스트이름은 IP

xe - > 전역데이터베이스 이름

orcl - > 2GB깔은 사람

테스트-> 성공하면 접속

 

 

 

 

글자크기

 

 

 

 

 

dB를 만들고 사용자들에게 권한을 주는거

 

 

 

 

계정잠금해제

 

sQL에들어가면 sQL이 어떻게 되어있는지 나옴

ALTER USER "HR" DEFAULT ROLE "CONNECT","RESOURCE";

 

그룹으로 ROle권한을 줌

사용자ㅐㅇ성

 

create view같은 건 직접 줘야함

 

창을 빼서 따로 쓸수 있당

 

실습 준비

CREATE TABLE EMP
(EMPNO number not null,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR number ,
HIREDATE date,
SAL number ,
COMM number ,
DEPTNO number );
--alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS';

INSERT INTO EMP VALUES
(7369,'SMITH','CLERK',7902,'1980-12-17',800,null,20);
INSERT INTO EMP VALUES
(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
INSERT INTO EMP VALUES
(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,200,30);
INSERT INTO EMP VALUES
(7566,'JONES','MANAGER',7839,'1981-04-02',2975,30,20);
INSERT INTO EMP VALUES
(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,300,30);
INSERT INTO EMP VALUES
(7698,'BLAKE','MANAGER',7839,'1981-04-01',2850,null,30);
INSERT INTO EMP VALUES
(7782,'CLARK','MANAGER',7839,'1981-06-01',2450,null,10);
INSERT INTO EMP VALUES
(7788,'SCOTT','ANALYST',7566,'1982-10-09',3000,null,20);
INSERT INTO EMP VALUES
(7839,'KING','PRESIDENT',null,'1981-11-17',5000,3500,10);
INSERT INTO EMP VALUES
(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
INSERT INTO EMP VALUES
(7876,'ADAMS','CLERK',7788,'1983-01-12',1100,null,20);
INSERT INTO EMP VALUES
(7900,'JAMES','CLERK',7698,'1981-10-03',950,null,30);
INSERT INTO EMP VALUES
(7902,'FORD','ANALYST',7566,'1981-10-3',3000,null,20);
INSERT INTO EMP VALUES
(7934,'MILLER','CLERK',7782,'1982-01-23',1300,null,10);

COMMIT;

CREATE TABLE DEPT
(DEPTNO number,
DNAME VARCHAR2(14),
LOC VARCHAR2(13) );

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');

COMMIT;



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;

 

 

 

 

 

DB의 관계

1:1 

1:n

n:m

 

foreign key

참조하는 테이블에 이쓴 속성 값들중에 하나여야한다.

primary key

참조당하는 테이블의 속성값에 대한 조건 ,내 값은 중복이 없고  null이 없어

 

DB분야

개발자 (CRUD) ( insert, select, update, delete) >> DML + DDL(create, alter, drop)

관리자 (DBA) : 백업하고 복원, 권한 관리, 네트워크 관리, 하드웨어 --> 개발경험, DB그런거 ㅎ경험잇어야함

KOSA에서 제공하는 수업을 듣고 자격요건을 맞추자

튜너 : 속도(문장 튜너, 하드웨어 튜너)>>자바(자료구조,알고리즘잘하는사람) --> 시간당 40만원 짜리 

엔코아 - >이화식 : 데이터베이스 최고의 튜너~

https://product.kyobobook.co.kr/detail/S000001562334

 

대용량 데이터베이스솔루션 1 | 이화식 - 교보문고

대용량 데이터베이스솔루션 1 | 데이터베이스 솔루션 전문서. 이 책은《대용량데이터베이스솔루션1》의 100% 완전 개정판으로 지난 10년간 발전한 데이터베이스 기술의 원리와 실재를 충실히 반

product.kyobobook.co.kr

모델러: 설계자 > 요구사항 정의 -->PM이 하는일>PL이 받아서 해냄

데이터분석 : 석사급! 

외국 공학논문 해석 - > 코드화할 줄 알면 연봉 1억이상

5년뒤에는 이렇게 될 수잇다....경력쌓아야할수 있는일

데이터베이스 교육은...누구나 받음

 

pm현장지식이 많은 사람이 할 수있당 주식, 병원 그런거 다 지식이 잇는놈을 갖다 쓰지

도메인knowlegeㅋㅋㅋㅋ

 

 

컴파일 순서

select * --3
from emp --1
where ename = 'KING';--king과는 다르게 인식한다. --2

 

 

 

arrayList 제네릭은 할줄아알아야함

 

미리만들어져있는 시스템 정보를 다보는 방법

 

select * from nls_session_parameters;

 

--NLS_DATE_FORMAT YYYY-MM-DD HH24:MI:SS
--NLS_LANGUAGE KOREAN
--NLS_TIME_FORMAT HH24:MI:SSXFF

 

이런정보들만 알면된다.

select * from emp where hiredate ='1980-12-17';
select * from emp where hiredate ='1980/12/17';
select * from emp where hiredate ='1980.12.17';
--세기를 빼면 안된다 현재 날짜 포맷이 yyyy-mm...으로 되어있기 때문에
select * from emp where hiredate ='80-12-17';

 

 

spring , javascript, sql - >대보입사하려면 필요한거

 

not in을  !=and로 풀어쓴다

select empno,ename,sal,deptno
from emp
--where deptno != 10 or deptno!=20;
--not in연산자
where deptno not in(10,20);
--IN의 부정 (not in)
--not in >>부정의 and > != and != and ....

 

null값을 계산할때 null에 대한 연산의 결과는 null이다. 올바른 계산을 위해서 nvl함수를 사용한다.

--사원테이블에서 사번, 이름, 급여 ,수당 , 총급여(급여 +수당)을 출력하세요
select empno, ename, sal, comm , sal+nvl(comm,0) 총급여
from emp;
/*
null규칙
1.null과의 모든 연산 결과 : null >> 100+null >> null
2. nvl()함수 ! null값을 처리하기 위한 함수
nvl(컬럼명, 대체값)
Tip)
Mysql : null>IFNULL()>>select ifnull(null,0)
ms- sql : null>convert() 
*/

0710

--1.사원테이블에서 모든 데이터를 출력하세요 대소문자 구분안함
​select * from emp;

--2.특정 컬럼 데이터 출력하기
select empno,ename, sal 
from emp;
select ename from emp;
--3.가명칭 사용하기(alias)
--띄어쓰기를 입력하려면 이렇게 " " 넣어줘야한다.
select empno "사 번", ename 이름 from emp;
--ansi 문법 , 표준문법
select empno as "사 번", ename as 이름 from emp;

--0racle에서 문자열 [데이터]는 엄격하게 대소문자를 구별한다.
/*
java: 문자 'A' , 문자열 "AAAA"
oracle : 문자열 '' > '방가', 'A', '문자열데이터'
oracle : 데이터 'a' 와 'A' 는 다르다. mssql에서는 같으,,,,,


*/
select * --3
from emp --1
where ename = 'KING';--king과는 다르게 인식한다. --2


--sql (오라클언어)
--PL/SQL(변수, 제어문 개념)

--연산자
--java : + 숫자(산술연산), + 문자열 (결합연산)
--Oracle: 
--결합연산자 : ||
--산술연산자 : +
--MS-SQL : + 산술, 결합

select '사원의 이름은' || ename || '입니다.' as 사원정보
from emp;
--테이블의 가장 기본적인 정보가 나온다. (타입)
desc emp;
--VARCHAR2(10) 문자열타입 (한글5 자(이게 아닐수 있다.한글 3byte먹음), 영문자(10자))
/*
java : class Emp {private int empno, private String ename}
Oracle : create table Emp(empno number, ename varchar2(20))

select * from emp 결과를 담으세요(java)
List<Emp> list = new ArrayList<>();
list.add(...);

*/
--결합은 내부적으로 한쪽을 문자열로 바꿈
select empno||ename from emp;
--산술연산은 내부적으로 한쪽을 숫자로 바꿀려고 함
select empno + ename from emp;--ORA-01722: invalid number --숫자가 아니니까 계산 불가
--사장님 우리회사에 직종이 몇개나 있나?
select job from emp;

--중복행 제거 키워드
--distinct
--그룹으로 묶어서 놓고 그거 1로 줄여서 출력
select distinct job from emp;
--job으로 묶고 deptno로 묶어 출력
select distinct job,deptno from emp;
--Oracle 언어
--java : + - * / 나머지 %
--oracle : + - * / 나머지 %는 없음 함수사용 mod()
-- 문자열 패턴 검색 : ename like '%길동%';

--사원테이블에서 사원의 급여를 100달러 인상한 결과를 출력하세요
select empno, ename, sal,sal+100 as 인상급여 from emp;
-- 오라클 임시테이블
--dual
ㅇ
select 100+100 from dual;--200
select 100||100 from dual;--100100
select '100'+100 from dual;--200
select 'A100' +100 from dual;--ORA-01722: invalid number

--비교 연산자
--< > <=
--주의 java  : 같다 (==) , javascript(==,===)
--오라클 : 같다 = 같지 않다 (!=)
--논리 연산자 (AND, OR, NOT)
--둘다 참일때만 출력
--where sal>100 and comm>1000 
--둘중에 하나만 출력
--where sal>100 or comm>1000
select empno, ename, sal
from emp
where sal>=2000;
-- 사원의사 번이 7788번인 사원의 사번이름 직종 입사일을 출력하세요
select * from emp;
select empno, ename, job, hiredate
from emp 
where empno=7788;
select sysdate from dual;--23/07/10
--session은 로그인한 사용자들끼리 공유하는 것
alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS';--2023-07-10 14:43:49

select *
from emp
where empno=7788;
--두조건모두 만족 (and 연산)
--급여가 2000달러 이상이면서 직종이 manager인 사원의 모든정보를출력하세요
select *
from emp
where job='MANAGER' and sal >= 2000;
--and는 데이터의 갯수가 줄어든가 or은 데이터의 갯수가 늘어난다 실무에서 안쓰임
--급여가 2000달러 이상이거나 직종이 manager인 사원의 모든정보를출력하세요
select *
from emp
where job='MANAGER' or sal >= 2000;
--급여가 2000달러 초과이면서 직종이 manager 인사원의 모든정보를 출력하세요
select *
from emp
where job='MANAGER' or sal > 2000;
--미리만들어져있는 시스템 정보를 다보는 방법
select * from nls_session_parameters;
--NLS_DATE_FORMAT	YYYY-MM-DD HH24:MI:SS
--NLS_LANGUAGE	KOREAN
--NLS_TIME_FORMAT	HH24:MI:SSXFF
--날짜 검색 (문자열 검색) 처럼 >> '날짜 형식'
select * from emp where hiredate ='1980-12-17';
select * from emp where hiredate ='1980/12/17';
select * from emp where hiredate ='1980.12.17';
--세기를 빼면 안된다 현재 날짜 포맷이 yyyy-mm...으로 되어있기 때문에
select * from emp where hiredate ='80-12-17';
-- 사원의 급여가 2000이상이고 4000이하인 모든 사원의 정보를 출력하세요
select * 
from emp 
where sal>=2000 and sal<=4000;
--컬럼명 between A and B
select * 
from emp 
where sal between 2000 and 4000;
-- 사원의 급여가 2000초과이고 4000미만인 모든 사원의 정보를 출력하세요
--여기서는 between쓰면 안된다.
select * 
from emp 
where sal>2000 and sal<4000;
--초과, 미만
--이상, 이하(=포함)
--부서번호가 10번 또는 20번 또는 30번인 사원의 사번, 이름, 급여, 부서번호를 출력하세요
select empno,ename,sal,deptno
from emp
where deptno=10 or deptno=20 or deptno=30;
--in연산자
--where deptno in(10,20,30);
--부서번호가 10번 또는 20번이 아닌 사원의 사번, 이름, 급여, 부서번호를 출력하세요
select empno,ename,sal,deptno
from emp
--where deptno != 10 or deptno!=20;
--not in연산자
where deptno not in(10,20);
--IN의 부정 (not in)
--not in >>부정의 and > != and != and ....
--Today Point
--null에 대한 이야기
--값이 없다
--필요 악..?안쓰면 되믄데 안쓸수 업데
create table member(
    userid varchar2(20) not null, --반드시입력되어야한다 (필수 입력)
    name varchar2(20) not null,--필수 입력
    hobby varchar2(50) --default null null값 허용! 선택입력

);

desc member;
insert into member(userid,hobby) values('kim','농구');
--ORA-01400: cannot insert NULL into ("KOSA"."MEMBER"."NAME")
insert into member(userid,name,hobby) values('kim','김유신','농구');
select*from member;
commit;
------------------------------------------
/*
DB서버마다 설정이 다른데
Oracle :DML (데이터 조작어)
insert, update, delete 명령어
실행하면 실제로 테이블에 반영하지 않는다.
내부적으로 
begin transaction
    delete from emp;
다 삭제함 - 하지만 테이블에는 반영안함
개발자는 명시적으로 commit, rollback통해서 (완료, 취소 여부) 확인해야한다.
-실제 반영 여부를 결정해줘야함
대기상태로 lock, 트랜잭션을 실행하면 일단 자원을 잠근다 그래서 다른 사용자는 select만 할수있다
--실수발생가능


db transaction : 논리적인 작업의 단위(성공, 실패)
OLTP(웹환경) :실시간 데이터 처리(online transaction processing)
<> OLAP(분석데이터 : 일정기간 데이터 모아서 분석) : online analysis processing
은행업무
    begin tran
        update A계좌 - 1000
        update B계좌 +1000
    end 
--둘다 성공해야하는 경우!!!!!이럴때 트랜잭션 사용한다.
--하나라도 실패하면 rollback


*/
--오라클
--insert ,update , delete하면 반드시 commit, rollback처리 여부 결정해야한다.

--mssql에서는 delete하면 걍삭제되서 개발자들은 트랜잭션 만들어서 사용함

--수당을 받지않는 모든사원정보를 출력하세요
select *
from emp
where comm is null or comm=0;
--null이 아닌것 is not null
--where comm = null;--문법은 없어요

--사원테이블에서 사번, 이름, 급여 ,수당 , 총급여(급여 +수당)을 출력하세요
select empno, ename, sal, comm , sal+nvl(comm,0) 총급여
from emp;
/*
null규칙
1.null과의 모든 연산 결과 : null >> 100+null >> null
2. nvl()함수 ! null값을 처리하기 위한 함수
nvl(컬럼명, 대체값)
Tip)
Mysql : null>IFNULL()>>select ifnull(null,0)
ms- sql : null>convert() 
*/
select 100+null from dual;
select 100+nvl(null,1) from dual;
select nvl(comm,111111) from emp;
select nvl(null,'hello world') from dual;
--사원의 급여가 1000이상이고 수당을 받지 않는 사원의 사번, 이름, 직종, 급여 , 수당을 출력하세요
select empno, ename, job, sal, comm
from emp
where sal>=1000 and comm is null;

 

 

 

 

 

 

 

 

 

번외))))

 

HTML5로 표준화 되었기때문에  태그들이 브라우저별로 같은 역할을 한다. 이전까지는 안됐어

 

 

자바 : 메모리(휘발), 파일(비휘발)

파일작업. 데이터를 작업할때 규칙이 필요함

학번, 이름, 성적; 학번, 이름, 성적; --> 입력한 구분값을 기준으로 값을 뽑아내어야함

 

파일을 읽고 쓰는 규칙이 있는게 좋겠다 -> 데이터베이스(데이터를 영속적으로 저장할수잇는 도구) 100개 이상

우리나라꺼 티맥스, 제우스;;공공기관 사용

객체 형태로 저장하는 DB도 있음 금융권은 cobol,oracle,IBM

자주보게 될거 : 마리아DB, 오라클 mysql

RDBMS->

 

uml(클래스다이어그램)

(has a)포함관계 - 멤버필드

(is a ) 상속관계

https://www.nextree.co.kr/p6753/

 

UML: 클래스 다이어그램과 소스코드 매핑

불과 몇 년 되지 않은 학생 시절... 처음으로 UML을 접했고, UML의 기초적인 그리는 법과 사용법을 배웠습니다. 개인적으로 쉽지 않은 수업이었는데 그 중 가장 많이 사용되는 클래스 다이어그램에

www.nextree.co.kr

 

 

 

 

118p까지

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'오라클 데이터베이스' 카테고리의 다른 글

sQL 6일차(0717)  (0) 2023.07.17
SQL 2일차(0711)  (0) 2023.07.16
sql 5일차(0714)  (0) 2023.07.14
sql 4일차(0713)  (0) 2023.07.13
sql 3일차(0712)  (0) 2023.07.12