본문 바로가기

배운 책들 정리/오라클로 배우는 데이터베이스 입문

0201 - 목차 및 데이터베이스, SQL 쿼리 조회까지

0. 목차

1) 데이터베이스 개념 잡기

키워드 : DBMS, 데이터 모델, 관계형 데이터베이스

 

2) 실무에서 가장 많이 사용하는 SQL 조회

키워드 : SELECT문, WHERE절, 연산자, 오라클 함수, 다중행 함수, 그룹화, 조인, 서브쿼리 

 

3) 데이터를 조작, 정의, 제어하는 SQL 배우기

키워드 : 데이터 조작어, 트랜잭션 제어, 세션, 데이터 정의어, 객체 종류, 제약 조건, 사용자-권한-롤 관리

 

4) PL/SQL 배우기

키워드 : PL/SQL 기초, 레코드와 컬렉션, 커서-예외 처리, 저장 서브프로그램

 

1. 1장 _ 데이터와 데이터베이스, DBMS (15p~)

키워드 : 데이터, 자료, 정보 , DBMS

 

1) 데이터와 정보의 차이

- 자료와 정보라는 말은 다르다.

 

2) 데이터 관리

- 통합관리와 일관성을 위해 데이터 관리를 한다

 

3) 과거방식의 파일 시스템과 현대 방식의 DBMS 데이터 관리 

- 파일 시스템 : 폴더 방식

- JOIN : 학번이라는 매개체로 확인하는 것이 해당 조건을 실행해도 되는지 가능하게 함.

- 데이터베이스 : 일관된 프로그램으로 데이터 오류, 누락, 중복 등의 문제를 해결할 수 있음. 사용자 정보를 입력하는 것.

- DBMS : 사용자 관리를 할 수 있는 곳

- 데이터 통합 관리 : 이 프로세스에는 일반적으로 서로 다른 소스에서 데이터를 추출하고, 데이터를 공통 형식으로 변환하고, 데이터를 Oracle 데이터베이스 또는 데이터 웨어하우스로 로드하는 작업이 포함됨.

 

4) 데이터 모델

- 계층형 (허브) : 트리 형태로 하위 분류로 나눠져 있는 형태

- 네트워크형 (과거) : 과거 방식의 망형 데이터 모델

- 객체 지향형 (자바) : 객체 지향형의 데이터는 클래스의 인스턴스인 객체로 표현됨. (모델링이 더 직관적임)

- 관계형 (통계) : 데이터는 데이터 중복을 제거하고 데이터 무결성을 향상시키기 위해 테이블로 구성된다. 테이블 간의 관계는 다른 테이블의 기본 키를 참조하는 열인 외래 키를 사용하여 설정됩니다. 이를 통해 여러 테이블의 데이터를 필요에 따라 결합하고 분석할 수 있습니다.

 

* 중복 데이터가 많다는 것은 쓸데 없는 정보들이 많다는 것임.

* 부서 이름과 위치가 중복되면 그냥 하나의 카테고리로 설정할 수 있음.

 

5) 관계형 데이터베이스 RDBMS

- DQL : 데이터 조회

- DML : 데이터 저장, 수정, 삭제

- DDL : 객체 생성, 수정, 삭제

- TCL (통제) : 트랜잭션 데이터  // 문법 commit, rollback

- DCL : 데이터 사용 권한

 

* Manipulation : 조작의 의미 (매니지먼트)

* Definition : 정의어

 

2. 2장 _ 관계형 DB와 오라클 DB (29p~)

1) 관계형 DB 구성요소

- 기본키 : 한 명만 가질 수 있는 고정값 (예시 - 학번)

- 보조키 : 기본 키에 해당 되지 않은 나머지 키들 (예시 - ID, 주민번호)

- 후보키 : 기본키, 보조키의 부모 개체.

- 외래키 : 참조할 수 있는 키 (import가 가능한 키)

- 복합키 : 여러열을 조합하여 하나의 기본키로 설정하는 것.

 

2) 오라클 데이터베이스

- 많이 사용하는 자료형 : VARCHAR2, NUMBER, DATE (꼭 기억)

- 객체 : 데이터 저장하고 관리하기 위한 논리 구조를 가진 구성 요소

* 테이블 : 데이터 저장 장소

* 인덱스 : 키워드 모음들 (도서관 분류 기호)

* 뷰 : 여러 데이터를 하나의 테이블로 나타내서 보여줌

* 시퀀스 : 일련 번호 생성

* 시노님 : 별칭 지정 ( ~~ AS ~~)

* 프로시저 : 연산 및 기능 수행 (반환 값 없음)

* 함수 : 연산 및 기능 수행 (반환 값 있음)

* 패키지 : 프로시저와 함수를 보관

* 트리거 : 데이터 관련 작업의 연결 및 방지 관련 기능 (DB 만진 것을 확인할 수 있음)

 

*가로(행) : row = tuple, record

*세로(열) : cloumn = attribute, field

* 쿼리 : 물어보는 것

 

3) 오라클 DB와 도구 프로그램 설치

- 설치했기 때문에 생략

 

3. 둘째마당 _ SQL 조회

1) SELECET문의 기본 형식

SELECT * FROM EMP;

결과 값

- 셀렉션 (행 단위) : SELECT 열이름 FROM 테이블 

--특정 열 조회
SELECT ENAME FROM EMP;
SELECT SAL FROM EMP;
SELECT ENAME, SAL FROM EMP;
SELECT EMPNO,
       ENAME, 
       DEPTNO 
       FROM EMP;

결과값

- 프로젝션 (열 단위) : SELECT 열이름 FROM  테이블

- 셀렉션 + 프로젝션 함께 : SELECT 열이름 FROM 테이블 WHERE 구조 (행과 열단위로 데이터 조회)

- 조인 (두 개 이상의 테이블을 사용해 하나의 테이블처럼 데이터 조회) : SELECT 열이름 FROM 테이블 JOIN

 

2)  중복제거 방법 (DISTINCT)

--중복 제거
SELECT DISTINCT DEPTNO FROM EMP;
SELECT DISTINCT JOB, DEPTNO FROM EMP;
SELECT DISTINCT * FROM EMP;

결과값

3) 별칭 지정 (~AS)

--별칭 지정
SELECT ENAME, SAL, COMM, SAL*12+COMM    
        FROM EMP;
SELECT ENAME, SAL, COMM, SAL*12 AS ANNSAL 
        FROM EMP;

결과값

4) 오름차순, 내림차순 (ASC, DESC)

기본값으로 오름차순이 설정되기 때문에 내림차순 설정할 때만 쿼리를 입력해준다.

--오름차순 (ASC)
SELECT * FROM EMP ORDER BY SAL;
--내림차순 (DESC)
SELECT * FROM EMP ORDER BY SAL DESC;
SELECT * FROM EMP ORDER BY EMPNO;
SELECT * FROM EMP ORDER BY EMPNO DESC;

결과값

* ORDER BY : 왠만하면 쓰지 않는 것을 선호

- ASC : 오름차순

- DESC : 내림차순

 

5) WHERE 절 (94P~)

--AND = 교집합
SELECT * FROM EMP WHERE DEPTNO = 30 AND JOB = 'SALESMAN';
SELECT * FROM EMP WHERE DEPTNO = 30 AND EMPNO = 7499;

--OR = 합집합
SELECT * FROM EMP WHERE DEPTNO = 30 OR JOB = 'SALESMAN';
SELECT * FROM EMP WHERE DEPTNO = 20 OR JOB = 'SALESMAN';

SELECT * FROM EMP WHERE DEPTNO = 30 AND JOB = 'SALESMAN';
SELECT * FROM EMP WHERE DEPTNO = 30 OR JOB = 'SALESMAN';

- OR : 둘중 하나만 만족 해도 나옴. // 합집합

- AND : 둘 다 만족해야 나옴 // 교집합

 

6) 산술 연산자 

SELECT * FROM EMP WHERE SAL * 12 = 36000 ;

 

7) 비교 연산자

--비교연산자
SELECT * FROM EMP WHERE SAL >= 3000;
SELECT * FROM EMP WHERE SAL >= 3000 AND JOB = 'ANALYST' ;
SELECT * FROM EMP WHERE SAL >= 2500 AND JOB = 'ANALYST' ;

SELECT * FROM EMP WHERE SAL >= 2500 AND JOB = 'ANALYST' ;

 

> : 크다 (초과)

>= : 크다, 같다 (이상)

< : 작다(미만)

<= : 작다, 같다 (이하)

 

8) 문자 비교 연산자

--문자비교연산자
--F~Z
SELECT * FROM EMP WHERE ENAME >= 'F';
--S~Z
SELECT * FROM EMP WHERE ENAME >= 'S';
--A~E
SELECT * FROM EMP WHERE ENAME < 'F';
SELECT * FROM EMP WHERE ENAME <= 'FORZ';

SELECT * FROM EMP WHERE ENAME < 'F';

9) 등가 비교 연산자 (논리부정연산자와 기능이 같음)

--등가비교연산자
SELECT * FROM EMP WHERE SAL != 3000;

SELECT * FROM EMP WHERE SAL != 3000;

 

10) 논리부정연산자 (같지 않다)

--논리부정연산자
SELECT * FROM EMP WHERE NOT SAL = 3000;

SELECT * FROM EMP WHERE NOT SAL = 3000;

11) IN 연산자

* ~ IN ('A','B','C') : A,B,C의 값을 출력함

IN : OR 조건을 여러개로 출력

NOT IN : AND 조건을 여러 개로 반대의 결과를 출력

--IN 연산자
SELECT * FROM EMP WHERE JOB = 'MANAGER' OR JOB = 'SALESMAN' OR JOB = 'CLERK';
SELECT * FROM EMP WHERE JOB IN ('MANAGER', 'SALESMAN','CLERK');
--NOT IN
SELECT * FROM EMP WHERE JOB != 'MANAGER' AND JOB != 'SALESMAN' AND JOB !=
'CLERK';
SELECT * FROM EMP WHERE JOB NOT IN ('MANAGER','SALESMAN','CLERK');
--
SELECT * FROM EMP WHERE DEPTNO IN (10,20);

SELECT * FROM EMP WHERE JOB IN ('MANAGER', 'SALESMAN','CLERK');
SELECT * FROM EMP WHERE JOB NOT IN ('MANAGER','SALESMAN','CLERK');
SELECT * FROM EMP WHERE DEPTNO IN (10,20);

12) BETWEEN 연산자 (교집합을 뽑는 것)

- AND 조건 두 개를 하나로

- (WHERE 열 >= A) + (열 <= B)

--BETWEEN
SELECT * FROM EMP WHERE SAL >= 2000 AND SAL <= 3000;
SELECT * FROM EMP WHERE SAL BETWEEN 2000 AND 3000;
--
SELECT * FROM EMP WHERE SAL < 2000 OR SAL > 3000;
SELECT * FROM EMP WHERE SALGRADE NOT BETWEEN 2000 AND 3000;

SELECT * FROM EMP WHERE SAL < 2000 OR SAL > 3000;

 

13) LIKE 연산자와 와일드 카드% (실무에서 자주 쓰이는)

--LIKE연산자 & 와일드카드
SELECT * FROM EMP WHERE ENAME LIKE 'S%';
SELECT * FROM EMP WHERE ENAME LIKE '_L%';
SELECT * FROM EMP WHERE ENAME LIKE '%S%';
SELECT * FROM EMP WHERE ENAME LIKE '%AM%';

1. S로 시작하는

2. 이름 2번째 자리에 L이 들어가는

3. S가 들어가는 사람들

4.AM이 들어가는 사람들

SELECT * FROM EMP WHERE ENAME LIKE '%AM%';

* _가 와일드 카드 문자가 아니라고 표시할 경우 ₩원화 표시를 해야 함 (이름이 특수 문자일 때)

 

14) IS NULL 연산자

- 데이터 값이 완전히 비어 있는 상태

--IS NULL 연산자
SELECT ENAME, SAL, SAL*12+COMM AS ANNSAL, COMM FROM EMP;
SELECT * FROM EMP WHERE COMM = NULL;
SELECT * FROM EMP WHERE COMM IS NULL;
SELECT * FROM EMP WHERE COMM IS NOT NULL;

SELECT ENAME, SAL, SAL*12+COMM AS ANNSAL, COMM FROM EMP;
SELECT * FROM EMP WHERE COMM IS NULL;
SELECT * FROM EMP WHERE COMM IS NOT NULL;

15) IS NULL 연산자 (열이름만 바뀐)

--MGR 직속상관이 없는 사람
SELECT * FROM EMP WHERE MGR IS NULL;
--MGR 직속상관이 있는 사람
SELECT * FROM EMP WHERE MGR IS NOT NULL;
SELECT * FROM EMP WHERE SAL > NULL AND COMM IS NULL;
SELECT * FROM EMP WHERE SAL > NULL OR COMM IS NULL;

SELECT * FROM EMP WHERE MGR IS NOT NULL;

16) 집합 연산자

- UNION : 중복을 제거하고 합해서 결과 표출

- UNION ALL (합집합) : 중복을 제거하지 않고 합해서 결과 표출 

- MINUS (차집합) : 집합을 빼고 결과 표출

- INTERSECT (교집합) : 결과값이 같은 데이터만 출력

--집합연산자
SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP WHERE DEPTNO = 10;
SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP WHERE DEPTNO = 20;

--중복 제거하여 합집합
SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP WHERE DEPTNO = 10
UNION 
SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP WHERE DEPTNO = 20;

--DEPTNO 누락
SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP WHERE DEPTNO = 10
UNION 
SELECT EMPNO, ENAME, SAL FROM EMP WHERE DEPTNO = 20;
--열 순서 다름, 데이터 유형이 다름
SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP WHERE DEPTNO = 10
UNION 
SELECT EMPNAME, EMPNO, DEPTNO, SAL FROM EMP WHERE DEPTNO = 20;
--열 순서 다름
SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP WHERE DEPTNO = 10
UNION 
SELECT SAL, JOB, DEPTNO, SAL FROM EMP WHERE DEPTNO = 20;
--중복 제거되는지 확인
SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP WHERE DEPTNO = 10
UNION 
SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP WHERE DEPTNO = 10;

SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP WHERE DEPTNO = 10 UNION SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP WHERE DEPTNO = 10;

--중복 제거 없이 합치기
SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP WHERE DEPTNO = 10
UNION ALL
SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP WHERE DEPTNO = 10;

SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP WHERE DEPTNO = 10 UNION ALL SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP WHERE DEPTNO = 10;

--MINUS = 차집합
SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP ;
SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP WHERE DEPTNO = 10;
--
SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP
MINUS
SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP WHERE DEPTNO = 10;

-- INTERSECT = 교집합
SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP
INTERSECT
SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP WHERE DEPTNO = 10;

 

17) 문제 풀이

--문제 1번 125P
SELECT * FROM EMP WHERE ENAME LIKE '%S';
--문제 2번
SELECT EMPNO, ENAME, JOB, SAL, DEPTNO
FROM EMP WHERE DEPTNO = 30 AND JOB = 'SALESMAN';
--문제 3번
--집합연산자 사용 X
SELECT EMPNO, ENAME, JOB, SAL, DEPTNO 
FROM EMP WHERE DEPTNO IN (20,30)
AND SAL > 2000;

--집합연산자 사용 O (UNION)
SELECT EMPNO, ENAME, JOB, SAL, DEPTNO 
FROM EMP WHERE DEPTNO = 20 AND SAL > 2000
UNION
SELECT EMPNO, ENAME, JOB, SAL, DEPTNO 
FROM EMP WHERE DEPTNO = 30
AND SAL > 2000;

--문제 4번
SELECT * FROM EMP WHERE SAL < 2000 OR SAL > 3000;
SELECT * FROM EMP WHERE SAL NOT BETWEEN 2000 AND 3000;

--문제 5번
SELECT ENAME, EMPNO, SAL, DEPTNO FROM EMP WHERE DEPTNO = 30 AND ENAME LIKE '%E%' 
AND SAL NOT BETWEEN 1000 AND 2000 ;

--문제 6번
SELECT * FROM EMP WHERE COMM IS NULL 
                    AND MGR IS NOT NULL
                    AND JOB IN ('MANAGER', 'CLERK')
                    AND ENAME NOT LIKE '_L%';
                     
                    
                    
                    
SELECT * FROM EMP WHERE ENAME LIKE '%L%';

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형
LIST