본문 바로가기
kosta/[DB]Oracle

[DB] 1. 데이터베이스 소개

by 엑츄얼리 2022. 3. 4.

Database란?

 - 서로 연관성을 가지며, 중복 없이 지속성(영속적)으로 유지 관리해야 할 유용한 데이터들의 집합

  -- ex) 학사관리 정보, 도서관리 정보, 인사관리 정보 등...

  -- Database에 저장된 데이터는 검색뿐만 아니라 수정, 삭제 등이 용이

 

 - 데이터 저장을 위해 가장 원시적인 방법으로 데이터 파일 사용

  -- 데이터 파일 사용 시 중복된 데이터 저장이 빈번이 발생하며 대용량의 데이터를 관리하기에는 역부족

  -- 또한 다중 사용자 환경의 데이터 공유가 어렵다(주로 하나의 파일은 하나의 응용 프로그램만을 위해 사용)

  -- 보안에 취약

 

 * 이러한 파일시스템의 문제점을 극복하고, 대량의 데이터를 체계쩍으로 저장, 관리하기 위해 DataBase등장

 

DBMS란?

 - Database Managemetn System(데이터베이스 관리 시스템)

  -- 대용량의 데이터를 쉽게 저장하고, 효율적으로 검색, 수정, 삭제(CRUD)할 수 있는 환경을 제공해 주는 소프트웨어

   --- 응용프로그램과 데이터의 중재자로서 모든 응용 프로그램(Client)들이 데이터베이스를 공유하고,

        체계적으로 관리할 수 있게끔 관리

  -- 대표적인 DBMS

   --- Oracle, mySQL, MS-SQL, Informix, Sybase, DB2 등

DBMS 종류

 - 1960년대 : Flat-File(SAM)

 - 1970년대 : Network-DBMS, Hierachical-DBMS

 - 1980년대 : 관계형-DBMS

 - 1990년대 : 객체지향형-DBMS

 - 2000년대 : 객체관계형-DBMS

 

관계형 DBMS

 - 가장 대표적인 DBMS로 실세계 데이터들을 2차원적 표(테이블) 형식으로 표현

 - 데이터 무결성, 트랜잭션 처리 등 기본적 기능이 우수

 - 질의어(Query Language)를 사용한 데이터 접근

 - 데이터를 단순한 표(Relation) 형식으로 표현하여 데이터를 관리

 - 데이터베이스의 기본 데이터 저장 단위로 테이블을 사용, 테이블 간의 관계를 활용

 - 테이블을 행(Row)와 열(Column)의 2차원 행렬 구조를 가짐

 - 행(Row)은 데이터 파일의 레코드에 해당

 - 하나의 행은 서로 구분되는 속성(사원번호, 사원명, 직급, 급여, 부서번호 등)으로 구성

 

Oracle 소개

 - 가장 대표적인 DBMS 중의 하나 (회사 이름인 동시에 DBMS 제품 이름)

 - 1977년 래리 엘린슨이 설립

 - 1983년 회사 이름을 Oracle Corporation으로 변경

 - 이후 지속적으로 기능을 향상시켜 제품을 출시

 - 버전 8부터 버전번호 뒤에 I(internet)가 붙음

 - 버전 10부터 버전번호 뒤에 g(grid)가 붙음

 - 현재 버전 Oracle 11g까지 출시

 

오라클 설치 및 실행

설치 후 계정 로그인 방법 => 실행을 통해 sqlplus 실행 =>

  1. sqlplus/nolog => conn sys as sysdba

  2. sqlplus => id : system, pw:패스워드

 

계정생성

=> create user c##kosta236 identified by 1234;

 

권한부여

=> grant connect, resource, dba to kosta236; 

 

파일 연결

=> conn kosta236/1234

 

파일 불러오기

=> @파일경로 ( ex) @C:\Users\alswk\Downloads@oracle_exam2 => commit;

목록 출력

=> select *from tab; (모든 행 선택)

 

hr 계정 unlock

=> conn /as sysdba => alter user hr identified by hr account unlock; => conn hr/hr

=> select * from tab;

scott 계정 불러오기

=> conn system /1234 or conn /as sysdba

=> @C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin\scott.sql

=> alter user scott identified by tiger;

=> conn scott/tiger

=> select *from tab;

 

--1. 각 학생의 평점을 검색하라(학번, 이름, 학점) : student => 별칭사용
SELECT sno "학번", sname "이 름", avr "학 점" FROM student;

--2. 각 과목의 학점을 검색하라.(과목번호, 과목명, 학점수):course => 별칭 사용
SELECT cno "과목번호", cname "과목명", st_num "학점수" FROM course;

--3. 각 교수의 직위를 검색해라.(교수번호, 교수이름, 직위):professor => 별칭
SELECT pno "교수번호", pname "교수이름", orders "직위" FROM professor;

--4. 급여를 10% 인상했을 때 각 직원마다 연간 지급되는 급여를 검색하라 : emp
--  (사원번호, 사원이름, 연봉) => 별칭
SELECt eno "사원번호", ename "사원이름", sal*1.1 "연봉" FROM emp;

--5. 현재 학생의 평점은 4.0 만점이다. 이를 4.5만점으로 환산해서 검색하라.: student
--  (학번, 이름, 환산학점) => 별칭
SELECT sno "학번", sname "이름", avr*4.5/4.0 "환산학점" FROM student;

-- 정렬 (묶음 검색) ORDER BY (데이터량이 많으면 사용하면 안됨)
SELECT eno "1", ename "2", sal"3" FROM emp
ORDER BY sal DESC;

-- 각 학과별로 교수의 정보를 부임일자 순으로 출력하라
SELECT section, pname, hiredate FROM professor
ORDER BY section, hiredate DESC;

--2. 화학, 물리학과 학생중에 1,2학년 학생을 성적 순으로 검색하라.
SELECT avr FROM student
WHERE major IN('화학', '물리')
AND syear IN(1, 2)
ORDER BY avr(DESC);

--3.화학과 정교수를 검색하라.
SELECT * FROM professor
where section = '화학' AND orders = '정교수';

--mission kosta236
--1. 2,3학년 학생 중에서 학점이 2.0에서 3.0사이의 학생을 검색하라.
SELECT * FROM student
WHERE syear IN(2, 3)
AND avr BETWEEN 2.0 AND 3.0;

-- <mission kosta236>
--1. 화학과 학생 중에 성이 '관'씨인 학생을 검색
SELECT sname, major FROM student
where major = '화학' AND sname like '관%';

--2. 부임일이 1995년 이전의 정교수를 검색
SELECT pname, orders, hiredate from professor
where hiredate < '1995/1/1'
--where hiredate <= TO_DATE('1995-01-01', 'YYYY-MM-DD')
AND orders = '정교수';

--3. 성과 이름이 각각 1글자인 교수를 검색 (이름이 2글자)
select pname from professor
where pname like '__';

--4. 화학과 학생 중에 4.5환산 학점이 3.5이상인 학생을 검색
SELECT sname, major, avr FROM student
where avr >= 3.5 / 4.5 *4.0 and Major = '화학'
order by avr desc;

--5. 화학과 이외 학과 학생의 평점을 각 학과별 그리고 학년별 순서로 출력
SELECT sname, major, syear, avr from student
where major not like '화학'
order by major, syear, avr desc;

<kosta236.sql>

 

--조건절에서 조건에 맞는 일부 데이터 추출
SELECT employee_id, last_name, hire_date FROM employees
WHERE hire_date >= '03/01/01'
AND last_name = 'King';

--연산자
--AND
--연봉 5000~10000 사이의 직원들 내역을 출력
SELECT employee_id, last_name, salary FROM employees
WHERE salary >= 5000 AND salary <= 10000
ORDER BY salary DESC;

--OR
SELECT employee_id, last_name, job_id FROM employees
WHERE job_id = 'FI_MGR' OR job_id = 'FI_ACCOUNT';

--IN
SELECT employee_id, last_name, job_id from employees
where job_id in('FI_MGR', 'FI_ACCOUNT');


--NOT 연산자
SELECT department_id, department_name FROM departments
where department_id ^= 10;
--where department_id <> 10
--where NOT department_id = 10
--where department_id != 10

/*LIKE 연산자
'김%' => "김"으로 시작하는 모든 문자열
'%과' => "과"로 끝나는 모든 문자열
'%김%' => "김"이라는 문자를 포함하는 모든 문자열
'화_' => 화로 시작하는 2글자 문자열
'_등-' => '등'이 가운데 들어간 3글자 문자열
*/

--07년도 입사한 사원의 목록을 출력
SELECT employee_id, last_name, hire_date FROM employees
WHERE hire_date LIKE '07%';

--hr>last_name 컬럼에 'a'와 'A'가 이름에 들어있지 않은 사원을 출력
SELECT employee_id, last_name FROM employees
WHERE last_name  NOT like '%a%' AND last_name NOT like '%A%';

<hr.sql>

 

--1. 문제) 부서번호가 10번인 부서의 사람 중 사원번호, 이름, 월급을 출력하라
SELECT DEPTNO, EMPNO, ENAME, SAL FROM EMP
WHERE DEPTNO = 10;

--2. 문제) 사원번호가 7369인 사람 중 이름, 입사일, 부서번호를 출력하라.
SELECT EMPNO, ENAME, HIREDATE, DEPTNO FROM EMP
WHERE EMPNO = 7369;

--3. 문제) 이름이 ALLEN인 사람의 모든 정보를 출력하라.
SELECT * FROM EMP
WHERE ENAME = 'ALLEN';

--5. 문제) 직업이 MANAGER가 아닌 사람의 모든 정보를 출력하라.
SELECT * FROM EMP
--WHERE JOB <> 'MANAGER';
WHERE NOT JOB = 'MANAGER';

--6. 문제) 입사일이 81/04/02 이후에 입사한 사원의 정보를 출력하라.
SELECT * FROM EMP
WHERE HIREDATE > '81/04/02'
ORDER BY HIREDATE ASC;

--7. 문제) 급여가 $800 이상인 사람의 이름, 급여, 부서번호를 출력하라.
SELECT ENAME, SAL, DEPTNO FROM EMP
WHERE SAL >= 800 
ORDER BY SAL ASC;

--8. 문제) 부서번호가 20번 이상인 사원의 모든 정보를 출력하라.
SELECT * FROM EMP
WHERE DEPTNO >= 20
ORDER BY DEPTNO ASC;

--10. 문제) 입사일이 81/12/09 보다 먼저 입사한 사람들의 모든 정보를 출력하라.
SELECT * FROM EMP
WHERE HIREDATE < '81/12/09'
ORDER BY HIREDATE ASC;

--11. 문제) 입사번호가 7698보다 작거나 같은 사람들의 입사번호와 이름을 출력하라.
SELECT EMPNO, ENAME FROM EMP
WHERE EMPNO <= 7698
ORDER BY EMPNO ASC;
 
--12. 문제) 입사일이 81/04/02 보다 늦고 82/12/09 보다 빠른 사원의 이름,
--          월급, 부서번호를 출력하라.
SELECT EMPNO, ENAME, SAL, HIREDATE FROM EMP
WHERE HIREDATE BETWEEN '81/04/02' AND '82/12/09'
ORDER BY HIREDATE ASC;

--13. 문제) 급여가 $1,600보다 크고 $3,000보다 작은 사람의 이름, 직업, 급여를 출력하라.
SELECT ENAME, JOB, SAL FROM EMP
WHERE SAL > 1600 AND SAL <3000
ORDER BY SAL ASC;

--14. 문제) 사원번호가 7654와 7782 사이 이외의 사원의 모든 정보를 출력하라.
SELECT * FROM EMP
--WHERE EMPNO NOT BETWEEN 7654 AND 7782
WHERE NOT EMPNO >= 7654 OR NOT EMPNO <= 7782
ORDER BY EMPNO ASC;

--*****
--15. 문제) 이름이 B와 J 사이의 모든 사원의 정보를 출력하라.
SELECT * FROM EMP
WHERE ENAME BETWEEN 'B%' AND 'J%'
ORDER BY ENAME;
--*****
--16. 문제) 입사일이 81년 이외에 입사한 사람의 모든 정보를 출력하라.
SELECT * FROM EMP
WHERE HIREDATE NOT LIKE '81%';

--17. 문제) 직업이 MANAGER와 SALESMAN인 사람의 모든 정보를 출력하라.
SELECT * FROM EMP
WHERE JOB IN ('MANAGER', 'SALESMAN')
ORDER BY JOB ASC;

--18. 문제) 부서번호와 20, 30번을 제외한 모든 사람의 이름, 사원번호, 부서번호를 출력하라.
SELECT EMPNO, ENAME, DEPTNO FROM EMP
WHERE NOT DEPTNO IN (20, 30);
--WHERE DEPTNO NOT IN (20, 30);

--19. 문제) 이름이 S로 시작하는 사원의 사원번호, 이름, 입사일, 부서번호를 출력하라.
SELECT EMPNO, ENAME, HIREDATE, DEPTNO FROM EMP
WHERE ENAME LIKE 'S%'
ORDER BY ENAME ASC;

--20. 문제) 입사일이 81년도인 사람의 모든 정보를 출력하라
   SELECT * FROM EMP
   WHERE HIREDATE LIKE '81%'
   ORDER BY HIREDATE ASC;
   
--21. 문제) 이름 중 S자가 들어가 있는 사람만 모든 정보를 출력하라
SELECT * FROM EMP
WHERE ENAME LIKE 'S%'
ORDER BY ENAME DESC;
  
--23. 문제) 첫 번째 문자는 관계없고, 두 번째 문자가 A인 사람의 정보를 출력하라.
SELECT * FROM EMP
WHERE ENAME LIKE '_A%'
ORDER BY ENAME ASC;

--24. 문제) 커미션이 NULL인 사람의 정보를 출력하라.
SELECT * FROM EMP
WHERE COMM IS NULL;

--*****
--25. 문제) 커미션이 NULL이 아닌 사람의 모든 정보를 출력하라.
SELECT * FROM EMP
WHERE COMM IS NOT NULL;

--26. 문제) 부서가 30번 부서이고 급여가 $1,500 이상인 사람의 이름, 부서 ,월급을 출력하라.
SELECT ENAME, DEPTNO, SAL FROM EMP
WHERE DEPTNO = 30 AND SAL >= 1500
ORDER BY SAL ASC;

--27. 문제) 이름의 첫 글자가 K로 시작하거나 부서번호가 
--         30인 사람의 사원번호, 이름, 부서번호를 출력하라.
SELECT EMPNO, ENAME, DEPTNO FROM EMP
WHERE ENAME LIKE 'K%' OR DEPTNO = 30
ORDER BY ENAME ASC;

--28. 문제) 급여가 $1,500 이상이고 부서번호가 30번인 사원 중 직업이
--          MANAGER인 사람의 정보를 출력하라
SELECT * FROM EMP
WHERE SAL >= 1500 AND DEPTNO = 30 AND JOB = 'MANAGER';
  
--29. 문제) 부서번호가 30인 사람 중 사원번호 SORT하라.
SELECT * FROM EMP
WHERE DEPTNO = 30
ORDER BY EMPNO ASC;

--30. 문제) 급여가 많은 순으로 SORT하라.
SELECT * FROM EMP
ORDER BY SAL DESC;

<scott.sql>

'kosta > [DB]Oracle' 카테고리의 다른 글

[Oracle] SQL문 정리 5  (0) 2022.03.14
[Oracle] SQL문 정리 4  (1) 2022.03.11
[Oracle] SQL문 정리 3  (2) 2022.03.10
[Oracle] SQL문 정리 2  (1) 2022.03.09
[Oracle] SQL문 정리  (0) 2022.03.07

댓글