
※ Oracle 개념 단계별로 접근하기
DB - DBMS - RDBMS - Oracle
1. DB ( Database, 데이터베이스 )
- 중복을 최소화하고, 다수의 사용자가 공유할 수 있도록 데이터들을 모아둔 시스템
- 관련된 데이터를 모아 이를 통합하여 관리할 수 있도록 하는 것
- 데이터를 저장하고 다수의 사용자가 동시에 사용하더라도 데이터의 정합성과 속도가 보장되는 것이 데이터베이스
- 효율적으로 접근이 가능하고 질의를 할 수 있음
2. DBMS ( 데이터베이스 관리시스템, DataBase Mamanagement System )
- 모든 응용프로그램들이 데이터베이스를 공유할 수 있도록 관리해 주고
데이터베이스를 유지하기 위한 일련의 소프트웨어 시스템
[1] 정의기능 : 논리적, 물리적 구조정의 및 구조 매핑
[2] 조작기능 : 데이터 검색, 삽입, 수정, 삭제
[3] 제어기능 : 데이터의 정확성과 안정성 유지
3. RDBMS ( 관계형 데이터베이스, Relational-Database )
- 관계 : 두 테이블 사이에 존재.
부모 - 자식 관계로 이루어져있음
부모 테이블의 기본키(Primary key)는 자식 테이블에 외래키(Foreign Key)로 전이 되어진다
- 행과 열로 이루어진 2차원의 테이블 구조에 데이터를 저장
- 질의어를 사용한 데이터 접근 방법
- 대표적 RBDMS : 오라클
※ 데이터베이스의 구조
필드(Field) - 레코드(Record) - 테이블(Table)
○ 필드(컬럼) : 테이블의 열 ( 가로줄 ) 에 해당되는 것
○ 레코드 : 필드들의 집합체, 테이블의 각 행(row)
○ 인덱스 : 데이터베이스에서 데이터를 신속하게 찾을 수 있도록 정렬된 목록, 키
○ 테이블 : 데이터베이스라는 큰 통안에 정보가 들어있는 다수의 테이블이 존재함
ㄴ 데이터를 저장하기 위한 기본 형식을 제공하는 것이 바로 테이블
- 여러 개의 레코드를 담고 있는 논리적인 구조
- 테이블은 데이터를 저장하고 추가, 삭제, 수정 하는 등의 기본적인 데이터 관리 기능을 함

▶ 우리가 원하는 자료를 찾아보려면
1) 데이터베이스에 접속하고
2) 테이블을 찾아봐야 함
※ SQL (구조적 질의 언어 Structured Query Language)
- RDBMS를 액세스해서 데이터를 조작할 수 있는 언어
- 틀과 패턴에 맞게 조건들을 나열하기만 하면 SQL은 우리가 원하는 결과를 가져다 줌
▶ SQL 문의 종류
▷ DML ( Data Manipulation Language)
- 데이터 조작어 : 데이터를 조회, 저장, 삭제할 때 사용되는 SQL 문장
ex ) SELECT - INSERT, UPDATE, DELETE
▷ DDL ( Data Definition Language) :
- 데이터 정의어, 객체 조작어 : 데이터베이스나 테이블을 생성할 목적으로 사용하는 언어
ex ) CREATE, DROP, ALTER, TRUNCATE
▷ DCL ( Data Control Language)
- 데이터 제어어 : 데이터베이스에 있는 데이터에 접근을 제어하는 언어
ex ) GRANT - 데이터베이스 사용자에게 사용권한을 부여하는 명령
REVOKE - 그랜트의 반대로 사용권한을 취소하는 명령
※ 데이터 조회 명령어
- 테이블, 컬럼 입력 시 대소문자 구분 X , 데이터는 대소문자 구분 O
▶ DESC (Describe)
- 특정 테이블에 어떤 칼럼이 있는지 조회하는 명령어
desc student;
▶ select
select [칼럼명 또는 표현식] from [테이블명, 뷰명];
select employee_id, first_name, hire_date from employees;
select employee_id from employees;
select * from employees;
* : employees 테이블의 모든 컬럼 조회
▷ 표현식 ' '
- 표현식을 사용하여 select (데이터조회 = 출력) 할 수 있다
select first_name, '님 환영합니다.' from employees;
- 컬럼 이름 이외에 출력하기를 원하는 내용을 의미
select 구분 뒤에 '(홑따옴표)로 묶어서 사용
▷ 별칭 as
- 테이블의 컬럼명을 임시로 바꿔서 보여주는 것
select employee_id as "사원 아이디" from employees;
select first_name 이름, salary "급여!" from employees;
1 ) 컬럼명 뒤에 as "별칭"
- 공백이나 일부 특수기호가 있으면 반드시 ""로 묶어줘야 함 - 오라클에서 "" 는 여기서만 사용함 !
2 ) 컬럼명 뒤에 별칭
- as, "" 생략가능
▷ 중복데이터제거 distinct
- 중복된 값을 제거하고 출력하기
select deptno from emp; // employee 테이블에서 deptno (부서번호) 을 출력해라
select distinct deptno from emp; // `` 근데 중복되는 부서번호는 빼고 출력해라
▷ 연결연산자 ||
1. select name, position from professor; // professor 테이블에서 name, position 두개의 컬럼을 보여줭
2. select name || ' ' || position as "교수이름" from professor;
2 = > professor 테이블의 name, position 컬럼을 연결해서 "교수이름" 라는 별칭을 가진 한개의 컬럼으로 출력해줘
▽


- 연산자의 우선순위 : () 가먼저 , and 가 먼저
▷ dual 가상테이블
- oracle 은 select 절과 from 절이 필수임
- 따라서 딱히 특정테이블에서 불러오는 값이 아니면 뒤에 dual 을 넣어주면 된다
select 100*0.3, 200-60,100+null,20*null from dual;

= > 식이 컬럼으로, 계산된 값이 데이터로 입력되었다.
특정 테이블에서 데이터를 불러오는 것이 아니라 그저 식을 계산한 것이다
- null : 존재하지 않는다는 것
★ null : 오라클의 데이터 종류 중 한가지로 어떤 값인지 모른다는 의미
데이터가 없음을 의미함, 아직 정의되지 않은 미지의 값
- null에는 어떤 연산을 수행해도 결과값은 항상 null이 나옴
- - null 값은 '=' 연산을 사용할 수 없음 => is null, is not null을 이용해야 함
▶ where
- 조건에 맞는 데이터 조회하기
- 자바의 if 문과 유사하다
select 컬럼명(*) from 테이블명
where 조건;
▷ 숫자조건
▽ emp 테이블에서 10번 부서에 근무하는 사원의 이름과 급여, 부서번호를 출력
select ename, sal, deptno
from emp
where deptno = 10;
▷ 문자조건
- '작은따옴표' 로 감싸주기
▽ emp 테이블에서 이름이 scott인 사람의 이름과 사원번호, 급여를 출력
select ename, empno, sal
from emp
where ename = 'SCOTT';
= > 위에서 말했듯이, 데이터는 대소문자 구분하기 때문에 소문자 scott 으로 작성 시 데이터가 조회되지 않음
▷ 날짜조건
- '작은따옴표' 로 감싸주기
▽ professor 테이블에서 입사일이 1987-01-30 인 레코드 조회하기
select * from professor
where hiredate = '1987-01-30';
or
where hiredate = '1987/01/30';
▷ 비교조건
비교연산자 =,!=, >,<,>=,<=
논리연산자 and, or, not
- 검색 조건이 2개 이상인 경우 논리연산자를 사용해야함
- 논리 연산자 우선순위 : () > not > and > or
범위연산자 between A and B
목록연산자 in(A,B,C) ☆
특정패턴검색 like
같지 않다 !=, <>, ^=
한눈에 이해하기 어려운것들만 정리해보자면 -
[1] between
select name , weight FROM student
where not (weight not between 60 and 80);
◆ 문자, 날짜도 between을 이용해 범위값을 구할 수 있다
문자
- ename이 B~G 사이인 사람 조회
select * from emp
where ename >= 'B' and ename<='G';
select * from emp
where ename between 'B' and 'G';
- ㄱ으로 시작하는 사람
select * from emp
where name >='가' and name <'나';
날짜 - employees에서 입사일이 2005~2006년 사이의 사원 조회
select *from employees
where hire_dat between '2005-01-01' and '2006-12-31';
[2] in
- 같은 종류, 다른 조건 컬럼 두개를 하나로 묶어서 간단하게 명령할 수 있다
- In 연산자를 사용하여 student 테이블에서 101번 학과 학생과 102번 학과 학생들을 모두 출력
ㄴ "학과학생" 라는 컬럼의 종류는 같지만 101,102 라는 조건이 다르다
select * from student
where deptnol in (101,102);
[3] Like 포함된 것 조회
◆ like 와 함께 사용되는 기호
% : 글자수 제한 없고 어떤 글자가 와도 됨
_ : 언더바 개수만큼 자릿수 지정. 어떤 글자가 와도 됨
- student 테이블에서 성이 "김"씨인 사람을 조회 (like + % )
select * from student
where name like '김%';
- employees에서 job_id가 PR_ 가 포함된 것 조회
select * from employees
where job_id like '%PR_%';
▶ order by 출력결과 정렬하기
- asc : 오름차순 정렬(기본값)
- desc : 내림차순 정렬
오름차순 => order by 컬럼명
내림차순 => order by 컬럼명 desc
- sql 문장의 가장 마지막에 적어야 함
▽ student 테이블을 사용하여 1학년 학생의 이름과 키, 몸무게를 출력. 단, 키는 작은 순서대로 출력하고 몸무게는 많은 사람부터 출력
select name, height, weight from student
where grade = 1
order by height, weight desc; // 키 오름차순, 몸무게 내림차순
= > 키가 같은 경우 몸무게를 내림차순으로 정렬 ( 동일한 값이 있을경우 둘중에 우선순위를 정해주는것 )
'SQL' 카테고리의 다른 글
| [ORACLE] scalar subquery / inline view (0) | 2022.03.23 |
|---|---|
| [ORACLE] SUBQUERY/ 단일행 , 다중행, 상호연관 서브쿼리 / exists 연산자 (0) | 2022.03.23 |
| [ORACLE] roll up / cube / grouping / join (0) | 2022.03.22 |
| [ORACLE] 형변환 함수 / 일반 함수 / 그룹함수 (0) | 2022.03.20 |
| [ORACLE] 집합연산자 / 단일행함수 / 문자함수 / 숫자 함수 / 날짜 함수 / 형변환 함수 (0) | 2022.03.19 |