오라클 설치 후
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에서 아예 입력오류를 냄.
*/