이번 chapter는 정리해야 할 내용이 많아서 분리해서 정리하려 한다.

 

추가적으로 연습문제도 풀어보겠다.

 

 

내용 정리

이번에는 WHERE절이 무엇인지

 

WHERE 절에서 사용하는 AND와 OR 연산자

 

그리고 논리 연산자 외의 연산자들에 대해서 공부한다.

 

 

 

WHERE절

 

SELECT문으로 데이터를 조회할 때

특정 조건을 기준으로 원하는 행을 출력하는 데 사용

 

 

예를 들자면

 

앞 chapter에서 배운 것과 같이 테이블을 전체적으로 조회하는 것이 아니라

 

특정 조건에 맞는 테이블 내의 행만 조회하는 것이다.

 

부서 번호가 30인 사원, 보너스가 300만 원 이상인 사원 등

 

다양한 조건을 사용해서 원하는 데이터를 조회할 수 있게 하는 방법을 알아본다.

 

 

기본 문법

SELECT [조회할 열1 이름], ..., [조회할 열N 이름]

FROM [조회할 테이블 이름]; 

WHERE [조회할 행을 선별하기 위한 조건식];

 

아래 표는 저번 chapter과 같이 계속 사용할 테이블의 전체 데이터이다.

 

 

이 테이블을 각종 조건을 이용하여

 

입맛에 맞게 조회해보자

 

 

EMP 테이블의 부서 번호가 30인 사원의 이름과 급여 부서 번호 조회

 

1
2
3
SELECT ENAME, SAL, DEPTNO 
FROM EMP
WHERE DEPTNO = 30;

 

 

WHERE절에는 이용할 수 있는 다양한 연산자가 있는데

 

다양한 연산자들의 사용 방법에 대해 알아보겠다.

 

 

 

AND, OR 연산자

 

WHERE절에서 여러 개의 조건식을 지정하게 해주는 논리 연산자

 

비 전공자는 모르겠지만 나는 전공 자기에 논리 연산자의

 

자세한 설명은 PASS

 

 

EMP 테이블의 부서 번호가 30이고 직업이 'SALESMAN'인 사원의 정보

 

1
2
3
4
SELECT *
FROM EMP
WHERE DEPTNO = 30
    AND JOB = 'SALESMAN';

 

 

AND 연산자를 통해 여러 개의 조건식을 사용할 수 있다.

 

 

여기서 주의할 점은 

 

SQL은 대 소문자를 구별하지 않지만

 

JOB이라는 문자열 데이터는 테이블에 대문자로 들어있기 때문에

 

대문자로 검색해야 일치하는 행을 조회할 수 있다.

 

 

OR 연산자도 마찬가지로 여러 개의 조건식을 사용할 수 있도록 해준다.

 

 

 

산술 연산자, 비교 연산자

 

간단하게 말하면 사칙연산이다.

 

산술 연산자

 

간단하게 말하면 사칙연산이다.

+, -, *, /

 

비교 연산자

 

대소 비교 연산자(부등호)와 등가 비교 연산자가 있다.

 

 

대소 비교 연산자

연산자 사용법 설명
> A > B A 값이 B 값을 초과할 경우 참
>= A >= B A 값이 B 값 이상일 경우 참
< A < B A 값이 B 값 미만일 경우 참
<= A <= B A 값이 B 값 이하일 경우 참

 

 

등가 비교 연산자

연산자 사용법 설명
= A = B A 값이 B 값과 같은 경우 참
!= A != B A 값이 B 값과 다를 경우 참
<> A <> B
^= A ^= B

 

 

EMP 테이블의 1년 급여(보너스 제외)가 36000 이상인 사원의 정보

 

1
2
3
SELECT *
FROM EMP
WHERE SAL * 12 >=  36000;

 

 

SAL * 12 와 같이 산술 연산자을 이용 할 수 있다.

 

또한 36000 이상인 사원을 조회하는 과정에서

 

비교 연산자인 부등호를 이용하였다.

 

 

 

논리 부정 연산자

 

부정문에 쓰이는 영어는 NOT

 

논리 부정 연산자는 NOT이다.

 

 

NOT은 '아닌 것'이라고 생각하면 된다.

 

 

EMP 테이블의 1년 급여(보너스 제외)가 36000이 아닌 사원의 정보

 

1
2
3
SELECT *
FROM EMP
WHERE NOT SAL * 12 =  36000;

 

WHERE SAL*12 != 36000과 같기 때문에

 

NOT은 혼자 잘 사용되지 않는다.

 

 

IN, BETWEEN, IS NULL과 같은 연산자에 복합적으로 사용된다.

 

또한 AND, OR과 같이 여러 조건식이 묶여있는 상황에서 

 

정반대의 결과를 얻을 때 사용한다.

 

 

 

IN 연산자

 

IN 연산자는 특정 열에 해당하는 조건을 여러 개 지정하게 한다.

 

AND나 OR 연산자를 여러 번 사용하지 않게 하는 장점이 있다.

 

 

EMP 테이블의 JOB가 MANAGER OR SALESMAN OR CLERK인 사원의 정보

 

1
2
3
4
5
SELECT *
FROM EMP
WHERE JOB = 'MANAGER'
    OR JOB = 'SALESMAN'
    OR JOB = 'CLERK';
 
1
2
3
SELECT *
FROM EMP
WHERE JOB IN ('MANAGER','SALESMAN','CLERK');

 

두 코드는 같은 결과를 보여준다.

 

추후 중첩 쿼리문을 사용할 때도 유용하게 사용하는 연산자이다.

 

 

 

BETWEEN A AND B 연산자

연산자 이름처럼 A와 B 사이에 존재하는 값을 조회하기 위해 사용하는 연산자이다.

 

EMP 테이블의 SAL이 2000 이상 3000 미만인 사원의 정보

 

1
2
3
4
SELECT *
FROM EMP
WHERE SAL >= 2000
    AND SAL <= 3000;

 

1
2
3
SELECT *
FROM EMP
WHERE SAL BETWEEN 2000 AND 3000;

 

 

 역시 같은 결과를 보여준다.

 

훨씬 간단하게 사이의 값에 존재하는 데이터를 확인할 수 있다.

 

 

 

LIKE 연산자와 와일드카드

 

 LIKE 연산자는 일부 문자열이 포함된 데이터를 조회할 때 사용한다.

 

이때 와일드카드를 사용한다.

 

 

와일드카드는 _와 %가 있다.

 

_는 한 개의 문자 데이터를 의미하며

 

% 는 길이와 상관없는 모든 문자 데이터를 의미한다.

 

 

EMP 테이블의 사원 이름의 두 번째 글자가 L인 사원의 정보

 

 

1
2
3
SELECT *
FROM EMP
WHERE ENAME LIKE '_L%';

 

 

LIKE '_L%'의 의미는

 

두 번째 문자가 반드시 L이고

 

L 앞에는 반드시 한 문자가 와야 한다

 

L 뒤에는 몇 개의 문자가 와도 상관없다.

 

 

 

EMP 테이블의 사원 이름에 AM이 포함되어 있지 않은 사원의 정보

 

 

1
2
3
SELECT *
FROM EMP
WHERE ENAME NOT LIKE '%AM%';

 

이름에 AM이 포함돼있는 사원이 아닌 사원의 정보를 보여준다.

 

이때 AM은 붙어있어야 한다.

 

 

IS NULL 연산자와 집합 연산자는 다음 글에서 정리해보겠다.

내용 정리

 

SELECT문은 데이터베이스에 보관되어 있는 데이터를 사용자의 입맛에 맞게 꺼내오기 위해서 사용한다.

 

각종 조건문(WHERE, ORDER BY, FROM 등)을 사용하여

 

조회하고 싶은 데이터를 보기 쉽게 조회가 가능하다.

 

 

 

먼저 실습용 테이블을 살펴보면

 

DESC 명령을 사용하여 테이블의 구성 정보를 확인할 수 있다.

 

1
DESC EMP;           -- EMP는 사원 테이블

 

 

테이블을 구성하는 컬럼(열) 명과 컬럼에 대한 정보들이 표출된다.

 

EMPNO(사원 번호)가 기본키(PK)이며 4자리 숫자로 구성된다.

 

여기서 VARCHAR2형식의 데이터는 가변형 문자열이며

 

문자열의 데이터가 10byte보다 작다면 데이터의 공간도 작다는 것을 말한다.

 

*저장 공간을 무조건 10byte할당하는 자료형은 고정형 저장 방식이다.

 

 

 

SQL의 기본 뼈대, SELECT절과 FROM절

 

SELECT문은 데이터베이스에 보관되어 있는 데이터를 조회하는 데 사용한다.

 

FROM 절은 조회할 데이터가 저장된 테이블을 명시

 

 

기본 문법

SELECT [조회할 열1 이름], ..., [조회할 열N 이름]

FROM [조회할 테이블 이름]; 

 

전체 열을 조회하려면 *를 사용하면 된다.

 

또한 마지막에 ;(세미콜론)을 써주어 SQL문이 끝났다는 걸 명시해주어야 한다.

 

1
SELECT * FROM EMP;

 

이 명령어의 뜻은

 

EMP 테이블의 모든 데이터의 모든 열 정보를 출력한다는 뜻이다.

총 14개의 데이터가 EMP 테이블에 저장되어 있다.

 

 

그렇다면 테이블의 모든 열이 아닌

 

EMPNO, ENAME, DEPTNO의 정보만 출력하고 싶다면?

 

 

1
SELECT EMPNO, ENAME, DEPTNO FROM EMP;

 

위의 SQL문과 같이 SELECT절에 데이터를 가져오고 싶은 열의 이름을 입력하면 된다.

 

 

1
SELECT DEPTNO FROM EMP;

 

어떠한 부서 번호들이 EMP 테이블에 저장되어 있는지 확인하기 위해서

 

위와같은 SQL문을 사용하면

 

아래와 같은 정보를 얻을 수 있다.

 

10, 20, 30 총 3개의 부서 번호가 있는데 

 

불필요하게 중복된 부서 번호가 여러 번 출력된다.

 

이때 DISTINCT 명령어를 통해 중복을 제거할 수 있다.

 

 

1
SELECT DISTINCT DEPTNO FROM EMP;

 

 

 

검색할 칼럼이 2개 일 때 DISTINCT 명령어를 사용하면

 

2개의 칼럼 모두 중복이 되어야 제거가 된다.

 

아래의 명령어의 경우 직급이 같아도 부서 번호가 다르면 출력이 된다.

 

1
SELECT DISTINCT JOB, DEPTNO FROM EMP;

 

 

 

DISTINCT와 반대는 ALL로 중복을 제거하지 않고

 

모든 열을 출력 한다.

 

하지만 ALL은 DEFAULT 값으로 생략하면 자동 적용이 된다.

 

1
SELECT ALL JOB, DEPTNO FROM EMP;
1
SELECT JOB, DEPTNO FROM EMP;

 

위와 아래의 결과는 같다는 뜻이다.

 

 

별칭 설정하기

 

SQL문에서는 최종 출력되는 열 이름을 사용자가 지정할 수 있다.

 

1
SELECT ENAME, SAL, SAL*12+COMM, COMM FROM EMP;

 

위와 같은 명령을 수행하면 다음과 같이 테이블이 조회된다.

 

SAL*12+COMM(추가 수당)은 1년의 총급여이다.

 

위와 같이 사용자가 계산식을 만들어 새로운 열로 확인할 수 있다.

(실제 테이블에는 위와 같은 열은 존재하지 않는다.)

 

SMITH, JONES 등 의 경우는 COMM의 값이 NULL 값이기 때문에 

 

1년의 총급여가 출력되지 않았다.

 

 

 

하지만

 

위와 같은 테이블은 계산식이 길어지면 어떠한 의미인지 알 수 없고

 

계산식도 그대로 노출되기 때문에 별칭을 지정한다.

 

별칭은 AS(alias)라는 명령어를 통해 지정한다.

 

1
SELECT ENAME, SAL, SAL*12+COMM AS "연간 총 급여", COMM FROM EMP;

 

 

별칭을 지정하면 사용자가 지정한 이름으로 열 이름이 나타난다.

 

 

데이터 정렬

 

데이터를 조회할 때 오름차순 또는 내림차순으로 데이터를 정렬할 수 있다.

 

ORDER BY 명령을 통해 데이터를 정렬 할 수 있으며

 

오름차순 - ASC(ascending)  기본 설정 (default)

내림차순 - DESC(descending)

 

의 명령어를 사용한다.

 

 

오름차순

ASC는 생략 가능

 

1
SELECT * FROM EMP ORDER BY SAL (ASC);

 

 

내림차순

 

1
SELECT * FROM EMP ORDER BY SAL DESC;

 

 

* 꼭 필요한 경우가 아니면 사용 권장하지 않는다.

 

정렬은 컴퓨터의 자원을 많이 사용하기 때문.

 

3장은 설치 부분이라 내용을 정리할 내용은 없고 설치 과정에서 있었던 문제점과

 

문제점 해결 과정에서 알게 된 부분 몇 가지를 정리하려고 한다.

 

 

 

 

설치 완료 이후 SCOTT 계정을 활성화하는 과정에서 문제가 있었다.

 

CMD창에서 SYSTEM계정이 계속 로그인 되지 않았다.

 

 

 

 

C:\>sqlplus "/as sysdba" 라고 입력을 하면

 

 

DBA(관리자)계정으로 로그인이 된다.

 

이후 SYSTEM계정의 비밀번호를 다시 재설정해주었다.

 

 

SQL문이 관리자 계정으로 활성화된 뒤.

 

C:\>ALTER USER SYSTEM(계정) IDENTIFIED BY ORACLE(암호) 라고 입력하면

 

계정의 비밀번호를 변경할 수 있다.

 

 

이후 SCOTT계정을 활성화하여 오류를 해결하였다.

 

 

 

 

알게 된 내용은 

 

오라클의 계정 체계에 대해 알 수 있었다.

 

SYS는 DBMS의 최고 관리자이다. DB 생성이 가능하다.

 

SYSTEM은 DB생성이 불가능하다는 것을 제외하고 SYS와 같다.

 

이 이외에 사용자는 접근 또는 접근 수정등의 권한을 가진 사용자들이 있다.

 

내용 정리

 

2장에서는 관계형 데이터베이스를 구성하고 있는 요소의 정의와 용어들을 설명하고

 

오라클 데이터 베이스에 대해서 간략하게 설명한다.

 

 

 

관계형 데이터베이스의 구성요소

 

 

테이블: 표 형태의 데이터 저장 공간

 

: 하나의 개체를 구성하는 여러 값을 가로로 늘어뜨린 형태

 

: 저장하려는 데이터를 대표하는 이름과 공통 특성을 정의

 

 

열 중에서 특별한 의미를 지닌 하나의 열 또는 여러 열의 조합을 키(Key)라고 한다.

 

 

 

 

기본키, 보조키, 외래키에 대해 정리해보자

 

 

기본키는 한 테이블 내에서 중복되지 않는 값만 가질 수 있는 키이다.

 

위의 테이블에서 사원 번호는 사원을 유일하게 구별할 수 있기 때문에

 

중복이 되지 않는다. 이를 기본키라고 한다.

 

복합키는 기본키가 한 컬럼이 아니라 여러 컬럼의 조합으로 이루어진 것을 말한다.

 

 

 

기본키의 속성

1. 테이블에 저장된 행을 식별할 수 있는 유일한 값이어야 한다.

2. 중복이 없어야 한다.

3. NULL 값을 가질 수 없다.

 

1번의 속성이 전제가 되기 때문에 자연스럽게 2, 3번은 따라온다.

 

 

보조키후보키에 속해 있는 키이며, 후보키 중에서 기본키로 지정되지 않은 열이다.

 

말이 어려운데, 후보키는 테이블에 저장된 행을 식별할 수 있는 키의 모든 집합을 나타내고

 

쉽게 말하면 보조키는 테이블에 저장된 행을 식별할 수 있는 기본키 이외의 키를 말한다.

간단하게 밴 다이어그램을 그리자면 이렇다.

 

 

 

만약 위와 같은 테이블에서

 

같은 직급 내에서는 동명이인이 없다는 가정이 있다면

 

(사원 이름+사원 직급)이라는 열을 통해서 유일하게 행을 식별할 수 있다.

 

이를 보조키라고 한다.

 

 

 

외래키는 특정 테이블의 어떠한 열의 값이 어떠한 다른 테이블의 기본키로 지정되어있어

 

서로 연결이 되는 키를 말한다.

 

 

위 테이블처럼 데이터의 중복을 방지하기 위해서 테이블을 따로 관리하며

 

테이블을 따로 관리하기 때문에 외래키라는 개념이 생겨난 것 같다.

 

 

 

※책에서는 실무에서 외래키를 잘 사용하지 않는다고 하는데,

이 부분은 공감 간다. 우리 회사도 사용을 지양하고 있다.

 

 

 

오라클 데이터베이스

 

자료형

 

 

오라클은 처음 접해본 입장에서, 어떠한 자료형을 많이 사용하는지 모르겠다.

 

MySql과 비슷하겠지...

 

 

VARCHAR2(길이): 4000byte만큼의 가변 길이 문자열 데이터 저장

NUMBER(전체 자리, 소수점 이하 자리): 38자릿수 +-의 숫자를 저장

DATE: 날짜형식 저장

CHAR(길이): 4000byte만큼의 고정 길이 문자열 데이터 저장

 

등등 있는데, 이 자료형을 가장 많이 사용

 

 

 

객체 

 

 

오라클 데이터베이스 내에서 데이터를 저장하고 관리하기 위한

 

논리 구조를 가진 구성요소

 

테이블, 인덱스, 뷰, 시퀀스 등등...

 

아직은 잘 모르겠다. 나중에 정리.

 

 

 

PL/SQL

 

데이터를 관리하기 위해 복잡한 기능 필요할 때

 

기존 SQL만으로는 한계가 있다.

 

PL/SQL을 사용하면 변수, 조건문, 반복문 등 프로그래밍 언어에서

 

제공하는 요소를 사용하여 데이터를 관리할 수 있다.

 

내용 정리

 

1장은 데이터베이스라는 용어의 어원과 간단한 개념을 잡는 과정이라고 할 수 있다.

 

학과 과정 중 MySql을 공부해서 이해하는데 어렵지 않았다.

 

 

 

4차 산업혁명 이후 다양한 데이터들이 수집되고 있으며 이를 잘 활용하는 사람이 이 시대를 이끄는 자가 될 수 있다.

 

수많은 데이터를 관리하기 위해서는 기존의 엑셀이나 워드 같은 

 

파일 시스템으로 데이터를 효율적으로 관리하기가 어려워졌다.

 

데이터를 효율적으로 관리하기 위해서 데이터베이스라는 개념이 등장하였다.

 

 

 

DBMS

 

데이터베이스 관리 시스템(DBMS: DataBase Management System)의 약자.

 

데이터베이스 관리 시스템은 데이터베이스의 데이터 조작과 관리를 극대화한 시스템 소프트웨어이다.

 

 

응용 프로그램이 데이터를 DBMS에 요청하고,

 

DBMS는 자신이 관리하는 데이터베이스로 관련 작업을 수행하고

 

그 결과값을 제공한다.

 

 

 

응용프로그램 중간에 DBMS가 데이터베이스를 조작하고

 

결괏값을 전달한다고 생각하면 쉽겠다.

 

 

 

데이터 모델

 

 

여러가지 모델이 있지만 관계형 데이터 모델을 사용한다.

 

추가적으로 관계형 데이터 모델을 바탕으로 객체 개념을 도입하여

 

객체 관계형 DBMS로 영역을 확장하고 있다.

 

 

데이터를 구성하는 방법은 쉽게 말해 '표'와 같다.

 

이러한 방법으로 데이터를 구성하고 관리한다.

 

 

추가로

 

사원 번호 0001와 0003의 부서는 같다.

 

이렇게 되면 부서의 위치와 전화번호도 같게 되는데

 

이 데이터를 계속 한 사람마다 관리한다면 저장공간은 불필요하게 증가하고

 

데이터가 중복이 된다.

 

이러한 데이터는 정규화 과정을 거쳐서 효율적으로 데이터가 관리되는데

 

목차를 보니 이 책에서는 다루고 있지 않은데 따로 찾아보는 것을 추천한다.

 

 

 

관계형 데이터베이스와 SQL

 

관계형 데이터베이스를 관리하는 시스템은 RDBMS라고 불린다. 

 

SQL(Structured Query Language)의 약자이다.

 

SQL은 RDBMS에서 데이터를 다루고 관리하는 데

 

사용하는 데이터베이스 질의 언어이다.

 

 

 

취업 후 3개월이 흘렀고, 금융권에 배정을 받아 이제 막 업무를 익히고 있다.

 

금융권은 수 많은 데이터를 관리해야하므로, 시스템 관리자인 나도 데이터를 관리해야 했다.

 

그 중 오라클 프로그램을 사용하여 데이터를 관리하고 있으며, 기존에 학부생 때 공부한 부분으로는 부족하다 생각하여

 

오라클 및 SQL공부를 하려 한다. 

 

Pro*c를 공부하기에 앞서 Oracle공부를 먼저 간단하게 마무리 하려 한다.

+ Recent posts