오라클 설치 후

cmd창에서 실행


>sqlplus system/oracle

--sql 연결 id/pw 로서 여기서 pw는 오라클 설치시 내가 정해준 pw이다.

>SELECT  DBMS_XDB.GETHTTPPORT( ) FROM DUAL;

--포트번호 확인

>EXEC DBMS_XDB.SETHTTPPORT(9090);

--포트번호 변경

>ALTER USER HR IDENTIFIED BY HR ACCOUNT UNLOCK;

--HR계정 잠김 풀기(SYSTEM이상의 권한필요)

--첫번째 HR은 아이디, 두번째 HR은 비밀번호


>sqlplus scott/tiger

--scott계정은 교육용이다

--주석이다


1. 테이블 보기 (;꼭 붙이기)

>SELECT * FROM DEPT ;


2. 원하는 것만 보고자 할때는 SELECT 컬럼명, 컬럼명...FROM DEPT; 이런식으로 쓰면 된다

>SELECT * FROM EMP ;

>SELECT ENAME,HIREDATE,SAL FROM EMP;

--테이블 간에 연결이 되어 있음을 볼 수 있다. (관계형 데이터모델)


3. 컬럼명 변경하기

>SELECT ENAME AS "사원명", HIREDATE AS "입사일", SAL AS "연봉" FROM EMP;

--SELECT ENAME AS 사원명, HIREDATE AS 입사일, SAL AS 연봉 FROM EMP; 이렇게도 되지만 띄어쓰기를 쓰면 명령어로 인식하므로 문제 발생

--" "를 쓰면 대소문자, 특수문자 등을 쓸 수 있다


4. 중복된 데이터 걸러내기

>SELECT DISTINCT JOB FROM EMP;

>SELECT DISTINCT JOB ENAME FROM EMP;

>SELECT DISTINCT DEPTNO FROM EMP;


5. WHERE 조건과 비교연산자

>SELECT EMPNO,ENAME,JOB, HIREDATE,SAL FROM EMP WHERE SAL>=2000;

--SAL이 2000보다 크거나 같은 경우

--  = , > , < , >=,<=

--  NOT의 의미 3가지 !=, <>, ^= 


6. 문자 데이터 조회

>SELECT EMPNO,ENAME,JOB, HIREDATE,SAL FROM EMP WHERE ENAME='SMITH';

>SELECT ENAME,HIREDATE FROM EMP WHERE HIREDATE >='1985/01/01';

// 오라클에서 문자열은 ' ' . 그리고  밸류값이므로 대소문자 구분

--또는 '85/01/01'


7. 다중조건 

>SELECT EMPNO,ENAME,JOB, HIREDATE,SAL FROM EMP WHERE SAL>=2000 AND SAL<2500;

-- AND , OR 


8. 연산자가 아닌 키워드 NOT

>SELECT EMPNO,ENAME,JOB, HIREDATE,SAL FROM EMP WHERE NOT SAL>=2000;

--NOT이 붙었으므로 2000보다 작은 

>SELECT EMPNO,ENAME,JOB, HIREDATE,SAL FROM EMP WHERE NOT JOB='MANAGER';

--JOB이 MANAGER가 아닌


9. BETWEED AND 

>SELECT EMPNO,ENAME,JOB, HIREDATE,SAL FROM EMP WHERE SAL BETWEEN 1000  AND 2000;

--1000에서 2000사이의 값


10. IN

>SELECT EMPNO,ENAME,JOB, HIREDATE,SAL FROM EMP WHERE JOB IN('CLERK','MANAGE');

>SELECT EMPNO,ENAME,JOB, HIREDATE,SAL FROM EMP WHERE SAL IN(1300,1250); 

--정해진 두개의 값만


11. LIKE, 와일드카드

>SELECT EMPNO,ENAME,JOB, HIREDATE,SAL FROM EMP WHERE JOB LIKE '%A%';

--JOB에 대문자 A가 포함된것들이 나옴

>SELECT EMPNO,ENAME,JOB, HIREDATE,SAL FROM EMP WHERE JOB LIKE '_A%';

--두번째 자리에 A가 나오게 함. 첫번째, 세번째가 와일드. 무엇이 와도 상관없음

>SELECT EMPNO,ENAME,JOB, HIREDATE,SAL FROM EMP WHERE JOB LIKE 'A%';

--A 와일드 

>SELECT EMPNO,ENAME,JOB, HIREDATE,SAL FROM EMP WHERE JOB LIKE '_______';

--7자로 된 모든 것


12. NULL

>SELECT * FROM EMP WHERE COMM IS NULL;

--값이 없는 것들을 찾을때

>SELECT * FROM EMP WHERE COMM IS NOT NULL;

--값이 있는 것들을 찾을때. 0도 있는 것이다.


13. ORDER BY: 오름,내림차순 정렬하기

>SELECT * FROM DEPT ORDER BY DEPTNO;

>SELECT * FROM DEPT ORDER BY DEPTNO DESC;

--내림차순

>SELECT * FROM DEPT ORDER BY DEPTNO ASC;

>SELECT * FROM EMP ORDER BY SAL ASC;

--오름차순

>SELECT * FROM EMP ORDER BY SAL ASC,ENAME DESC;

--연봉순서에서 연봉 중복이 나올때 이름순서로 보고 싶으면




1. 테이블 생성

-- CREATE TALBE TABLENAME( 

--  컬럼명 자료형,

--  컬럼명 자료형,

--  ...

-- );

-- 타입: 숫자 number, number(38), number(전체, 소수점이후)

--        문자열 varchar2(), char(), varchar()

--        날짜 date

--        문자열 (특수) long, lob

*varchar2(10) 인 경우는 10의 메모리 공간을 사용할 수 있되 값이 들어가지 않는한 용량차지 없다 (동적으로 할당)

char(10) 인 경우에 10의 메모리를 주어진다 (비어있더라도)

varchar() 인경우는 오라클에서 사용하지 말라고 권한다 (2와 기능 동일)


long 가변적이라 크기지정 없다(최대 2G까지 저장). 그러나 제어 어렵고 느리다

lob(2G),바이너리,,파일을 직접넣는다.(이미지,,등) 느리고 db부하가 크다


> CREATE TALBE STUDENT( 

  NO NUMBER,

  KOR NUMBER,

  ENG NUMBER,

  MATH NUMBER

  NAME VARCHAR2(20)  

  );

--여기까지 스키마가 만들어졌다.


2. 값 입력  

--INSERT INTO TABLENAME(필드들) VALUES (필드와 매칭되는 VALUE값들);


> INSERT INTO STUDENT(NO,KOR,ENG,MATH,NAME) VALUES (1,90,80,70,'홍길동'); 

> INSERT INTO STUDENT VALUES(2,80,70,60,'홍길자');

> INSERT INTO STUDENT(NAME,KOR,NO,MATH,ENG) VALUES('이길자',50,3,60,80);

> INSERT INTO STUDENT(NO,NAME) VALUES(4,'박길동');

> INSERT INTO STUDENT VALUES (5,50,60,80,NULL);

> INSERT INTO STUDENT(NO,KOR,ENG,MATH) VALUES (5,50,60,80);

--입력할때 타입이 달라지면 오류

--쓰고 싶지 않으면 NULL을 넣으면 된다. 

> INSERT INTO STUDENT VALUES (5,50,60,80);

--오류. 


3. 테이블 확인하기

>DESC STUDENT; 

--테이블 정보 확인 

>SET LINESIZE 100 

--보기좋기 하기 위해 넓이를 넓게

>SELECT * FROM STUDENT; 

--내가 만든 테이블 전체 확인

>SELECT * FROM TAB; 

--어떤것들이 있는지 모른다하면 이것을 통해 테이블들을 확인할 수 있다.


/*

> SELECT * FROM STUDENT WHERE KOR=NULL;

> SELECT * FROM STUDENT WHERE KOR IS NULL;

> SELECT * FROM STUDENT WHERE KOR IN(NULL);

> SELECT * FROM STUDENT WHERE NAME=NULL;

//얘도 안된다.

*/


4. 수정

--UPDATE TABLENAME SET 바꿀필드명=바꿀 값들 ~~~WHERE 조건;


> UPDATE STUDENT SET KOR=90, ENG=80, MATH=70 WHERE NO=4;

--조건이 없으면 전체가 다 바뀌어버린다. 반드시, 수정 삭제때는 WHERE 조건을 사용 


5. 삭제

--DELETE FROM TABLENAME WHERE 조건;


> DELETE FROM STUDENT WHERE NO=4;

--조건반드시 필요


/* INSERT INTO STUDENT(NO,KOR,ENG,MATH,NAME) VALUES('6', '22' , '33' , '44', '홍길동');

    숫자에 문자를 주는것은 문제가 되지 않는다 

 하지만, 문자를 숫자로 주는 것은 문제가 된다

*/


/*

SELECT * FROM STUDENT WHERE NO=1;

만일 조건이 중복되어버리면? 

내 컴퓨터에서 데이터에 입력값을 주는데 다른 컴퓨터에서 또 입력을 해줘서 중복이 되버린다면? 

동일 학번을 다른값으로 줘버리는 문제가 생김. 

그럴 경우에는 DB에서 아예 입력오류를 냄. 

*/


'* DB > Oracle' 카테고리의 다른 글

LPAD, RPAD 함수  (0) 2018.08.17
테이블 이름이 존재하는지 확인하기  (0) 2016.08.24
nul(), decode(), case then  (0) 2016.08.18
Table 조작  (0) 2016.08.18
오라클(함수)  (0) 2016.08.11

+ Recent posts