IT/오라클

오라클 수업 2일째 (18.03.28)

Beautifulkim 2018. 3. 28. 10:22

오라클사원생성.sql

03.28.txt

[ SQL PLUS ] 실행방법 1

[ SQL PLUS ] - sql 클라이언트 프로그램

시작버튼 > Run SQL Command Line 실행


conn system/oracle [아이디: system /비밀번호: oracle]


sql문 저장 위치

Run SQL Command Line 에서

host 라고 명령어 입력( 도스 화면으로 변경됨 )


C:\oraclexe\app\oracle\product\11.2.0\server\bin

temp.sql


이 상태에서 exit를 치면 sql 명령을 입력할수 있는 화면으로 전환됨.


접속 종료 명령어 : disconn


윈도우즈8 : 호스트

오라클11 : 게스트



[ SQL PLUS ] 실행방법 2

컨트롤 + R 엔터

dos 화면에서 sqlplus 직접 실행시키기위한 방법

sqlplus system/oracle

접속종료 : disconn


다른계정 접속 : conn sys/oracle as sysdba


SQL> SELECT * FROM dept; -- 표준(ANSI) SQL

SQL> conn -- 오라클 SQLPlus 명령어(SQL을 접속하기 위한 명령어)




desc emp;


SELECT DISTINCT empno AS "번호", ename AS "이름", sal AS "급여" FROM emp WHERE sal=3000;

SELECT empno, ename, sal FROM emp WHERE sal>3000;

SELECT empno, ename, sal FROM emp WHERE sal<3000;

SELECT empno, ename, sal FROM emp WHERE sal>=3000;

SELECT empno, ename, sal FROM emp WHERE sal<=3000;

SELECT empno, ename, sal FROM emp WHERE sal<>3000;


-- 문자열 조회

DESC emp;

SELECT ename FROM emp;

SELECT empno, ename, sal FROM emp WHERE ename='FORD';

-- WHERE ename='FORD'; 문자열이나 날짜는 반드시 단일 따옴표(single quotation) 안에 표시


/********************

sql 문장 실행순서

1_ from 절

2_ where 절

3_ 컬럼 절

*********************/

-- 절 실행순서

SELECT empno, ename, sal -- 3

FROM emp -- 1

WHERE ename>'SCOTT'; -- 2


-- 문자크기는 문자표 참조

SELECT empno, ename, sal -- 3

FROM emp -- 1

WHERE ename <= 'SCOTT'; -- 2


SELECT hiredate FROM emp;

SELECT *  FROM emp WHERE hiredate >= '1982/01/01';

SELECT * FROM emp WHERE hiredate = '1982/01/23';

SELECT * FROM emp WHERE hiredate = '82/01/23';

SELECT * FROM emp WHERE hiredate = '1982-01-23';

SELECT * FROM emp WHERE hiredate = '82-01-23';

SELECT * FROM emp WHERE hiredate = '82.01.23';


-- 논리연산자

SELECT * FROM emp WHERE deptno=10 AND job='MANAGER';

SELECT * FROM emp WHERE deptno=10 OR job='MANAGER';

SELECT * FROM emp WHERE NOT deptno=10;


DESC emp;

-- 10번 부서 소속인 사원들 중에 직급이 'MANAGER'인 사람

SELECT DISTINCT ename AS "사원명", DEPTNO AS "부서번호"  

FROM emp 

WHERE deptno=10 AND job='MANAGER';


SELECT DISTINCT ename AS "사원명", DEPTNO AS "부서번호"  

FROM emp 

WHERE deptno=10 OR job='MANAGER';


SELECT DISTINCT ename AS "사원명", DEPTNO AS "부서번호"  

FROM emp 

WHERE deptno=10 AND job='MANAGER' AND HIREDATE='1982-01-23';


SELECT DISTINCT ename AS "사원명", DEPTNO AS "부서번호"

FROM emp 

WHERE deptno=10 OR job='MANAGER' OR HIREDATE='1982-01-23';


SELECT DISTINCT ename AS "사원명", DEPTNO AS "부서번호"

FROM emp 

WHERE deptno=10 OR job='MANAGER' OR HIREDATE='1982-1-23';


SELECT DISTINCT *

FROM emp

WHERE NOT deptno=10;


SELECT DISTINCT *

FROM emp

WHERE sal>=2000 AND sal<=3000;


-- 컬럼값의 일부 목록

SELECT DISTINCT *

FROM emp

WHERE COMM=300 OR COMM=500 OR COMM=1400;


SELECT DISTINCT *

FROM emp

WHERE NOT COMM=300 AND COMM=500 AND COMM=1400;


-- 부서번호는 DEPTNO로, 부서명은 DNAME으로 정해져 있으므로 

-- 다음과 같은 쿼리문의 결과는 왼쪽 그림과 같이 컬럼 헤딩에도 역시 DEPTNO, DNAME으로 출력됩니다. 

-- EMPNO이 7521 이거나 7654 이거나 7844 인 

-- 사원들의 사원 번호와 급여를 검색하는 

-- 쿼리문을 비교 연산자와 OR 논리 연산자 사용하여 작성하시오

SELECT *

FROM emp

WHERE empno=7521 OR empno=7654 OR empno=7844;


SELECT *

FROM emp

WHERE sal BETWEEN 2000 AND 3000;


-- SQL 스크립트: 한개이상 SQL문

/*

F5 : 한개창

F9 : 각각별

*/




-- IN 사전적 의미 : (지역,공간 내의) …에   2. (무엇의 안에 들어가거나 에워싸여) …에

SELECT *

FROM EMP

WHERE COMM IN(300, 500, 1400);


-- <>, !=, ^= : 다르다 ( NOT ) 세 개중에 한 개 골라 씀

SELECT *

FROM EMP

WHERE COMM<>300 AND COMM<>500 AND COMM<>1400;


SELECT *

FROM EMP

WHERE COMM NOT IN(300, 500, 1400);


SELECT *

FROM emp

WHERE comm <> 300 AND comm <> 500 AND comm <> 1400;


SELECT *

FROM emp

WHERE comm NOT IN(300, 500, 1400);

-- 아래는 드모르간의 법칙

-- !(a OR b)=!a AND !b

-- !(a AND b)=!a OR !b


SELECT empno, ename 

FROM emp

WHERE empno != 7521 AND empno != 7654 AND empno != 7844;

-- 위와 아래는 같은 쿼리문

SELECT empno, ename

FROM emp

WHERE empno NOT IN(7521, 7654, 7844);

-- 위는 간소화 시킨 쿼리문


SELECT * FROM emp;

-- like

-- 패턴문자

-- 문자갯수 알면 : _ (아랫바로 사용)

-- 문자갯수 모르면 : % ( % 사용)

-- 글자의 갯수를 모를 때 %(문자가 없거나, 하나 이상의 문자가 어떤 값이 와도 상관없다.)

-- '_'하나의 문자가 어떤 값이 와도 상관없다.

-- 검색할려고하는 문자열 대소문자 구분함

SELECT * FROM emp WHERE ename LIKE 'F%'; -- F로 시작하는 이름 찾기

SELECT * FROM emp WHERE ename LIKE '%S' -- S로 끝나는 이름 찾기;

SELECT * FROM emp WHERE ename LIKE '%A%';

-- A이 포함된 이름 찾기(앞뒤에 어떤 문자가 와도 상관없음) A앞뒤에 문자가 없어도 되고, 1개, 2개여도 무관 어떤 위치에 와도 무관


SELECT * FROM emp WHERE ename LIKE '_m';


DESC emp;

-- % (퍼센트)

SELECT empno, ename FROM emp WHERE ename LIKE '%K';

SELECT hiredate FROM emp WHERE hiredate LIKE '82%'; -- 82로 시작하는 날짜를 가진 행 전체 출력

SELECT * FROM emp WHERE sal LIKE '1%'; -- 1로 시작되는 급여를 가진 행 전체 출력

SELECT * FROM emp WHERE empno LIKE '%9'; -- 9로 끝나는 번호를 가진 행 전체 출력

SELECT * FROM emp WHERE empno LIKE '%9%'; -- 9가 포함되어있는 번호를 가진 행 전체 출력


-- _ (언더바)

SELECT * FROM emp;

SELECT * FROM emp WHERE ename LIKE '_I%'; -- 이름의 두번째 글자가 I로 시작되는 행 전체 출력


-- 상세 유사검색
-- emp 테이블에서 ename의 두 번쨰 글자가 'A' 이고 job 이 'C'로 시작하는 행 출력
SELECT * FROM emp WHERE ename LIKE '_A%' AND job LIKE 'C%'; 

SELECT * FROM emp WHERE comm=null; -- 아무것도 안나옴
SELECT * FROM emp WHERE comm=NULL; -- 아무것도 안나옴
SELECT * FROM emp WHERE comm IS null; -- NULL 값을 출력하기 위해 =을 쓰지 말고 IS를 써야 함
SELECT * FROM emp WHERE comm IS NOT NULL; -- NULL(커미션)이 아닌 값 출력


SELECT * FROM emp WHERE mgr IS NULL; -- mgr이 null 값인 행 출력


SELECT * FROM emp ORDER BY ename ASC; -- 오름차순

SELECT * FROM emp ORDER BY ename DESC; -- 내림차순

SELECT * FROM emp;

SELECT * FROM emp ORDER BY SAL ASC;


-- EMP 테이블의 자료를 입사일을 오름차순으로 정렬하여 최근 입사한 직원을 먼저 출력하되 사원번호, 사원명, 직급, 입사일 칼럼을 출력하는 쿼리문을 작성하시오

SELECT empno AS "사원번호", ename AS "이름", job AS "직급", hiredate AS "입사일" 

FROM emp 

ORDER BY HIREDATE ASC;


SELECT DISTINCT empno AS "사원번호", ename AS "이름", job AS "직급", hiredate AS "입사일", comm AS "SELECT DISTINCT empno AS "사원번호", ename AS "이름", job AS "직급", hiredate AS "입사일", comm AS "컬럼명모름"

FROM emp 

ORDER BY comm DESC;

"

FROM emp 

ORDER BY comm ASC;


SELECT DISTINCT empno AS "사원번호", ename AS "이름", job AS "직급", hiredate AS "입사일", comm AS "수당"

FROM emp 

ORDER BY 수당 DESC; -- 별명으로 정렬


SELECT DISTINCT hiredate AS "입사일", comm AS "수당"

FROM emp 

WHERE comm IS null 

ORDER BY comm DESC; -- NULL 값만 출력


SELECT *

FROM emp

ORDER BY sal DESC, ename ASC; -- 급여 내림차순, 이름 오름차순으로 출력


SELECT empno, hiredate, ename, sal, deptno 

FROM emp 

ORDER BY deptno ASC, hiredate DESC;


/********************

sql 문장 실행순서

1_ from 절

2_ where 절

3_ 컬럼 절

*********************/

SELECT empno, hiredate, ename, sal, deptno  -- 3

FROM emp -- 1

WHERE deptno=10 -- 2

ORDER BY deptno ASC, hiredate DESC; -- 4


퀴즈 )

-- 이름에 '철수'가 포함되면서 급여가 2000 이상인 직원의 직원의 이름과 급여 출력(단 급여의 별명은 월급)

SELECT ename, sal AS "월급" 

FROM emp 

WHERE sal >=2000 AND ename LIKE '%철수';


-- 100% 인상급여액을 함께 출력 (단 인상급여액의 별명은 새월급)

select ename, sal as "월급", sal*2 as "새월급"

from emp;


-- 부서번호가 10또는 20이면서 수당이 NULL인 직원의 이름과 수당 출력 (단 직원의 이름으로 오름정렬)

SELECT * FROM emp;

-- 방법 1

SELECT ename, comm 

FROM emp

where deptno=10

or deptno=20

and comm is null

order by ename;


-- 간소화 방법 2

SELECT * FROM emp;

SELECT ename, comm 

FROM emp 

WHERE comm IS NULL AND deptno IN(10, 20) 

ORDER BY ename ASC;


-- 샘이 작성하신 코드
SELECT * FROM emp;
SELECT ename, comm, deptno
FROM emp 
WHERE deptno IN(10, 20) 
AND comm IS NULL 
ORDER BY deptno, ename;