개발자
[ORACLE 1일차]데이터베이스/기본개념 본문
Oracle(오라클)
: 미국 오라클사의 관계 데이터베이스 관리 시스템(RDBMS)
기본 개념
1. 관계형 데이터베이스(Relation DataBase)란?
관계형 데이터베이스(RDB)는 데이터(정보)를 열(column,Field) 과 행(Row, Record, Tuple) 으로 이루어진 테이블(Table, Entity, 개체) 형태로 저장하는 데이터베이스를 말한다.
2. 관계형 데이터베이스 관리 시스템(elation DataBase Management System=RDBMS)란?
관계형 데이터베이스(RDB)를 관리, 운영, 개발을 해주는 소프트웨어를 말한다. 이러한 관계형 데이터베이스 관리 시스템(RDBMS)의 종류로는 ORACLE(오라클), Mysql, MSSQL Server, DB2. 등등이 있다
3. SQL 이란?
SQL은 Structured Query Language (구조적 질의 언어)의 줄임말로, 관계형 데이터베이스 시스템(REBMS)에서 자료를 관리 및 처리하기 위해 설계된 언어이다.
명령어 (SQL)
1. show user;
유저의 이름을 알려준다.
< 결과값 => -- USER이(가) "HR"입니다. >
2. select
테이블에 저장된 데이터를 조회하기 위한 명령어이다.
SQL문 중에 가장 많이 쓰인다.
SELECT문에는 FROM 키워드가 반드시 따라와야 한다.
2.1 select * from dba_users;
현재 오라클 서버에서 생성되어진 모든 사용자 계정을 조회해주는 것이다.
-> dba users은 관리자(sys)만 조회할 수 있는 것이라서 일반 사용자인 hr은 조회가 불가능하다.
<hr로 조회시 결과값 => ORA-00942 : 테이블 또는 뷰가 존재하지 않습니다.
00942. 00000 - "tavle or veiw does not exist"
2.2 select * from tab;
현재 오라클 서버에 접속되어진 사용자(지금은 hr)가 만든(소유의) 테이블(table) 목록을 조회해준다.
<결과값 =>
4. describe DEPARTMENTS; 또는 desc DEPARTMENTS;
: DEPARTMENTS 테이블의 컬럼(column, field)의 정보를 알려주는 것이다.
테이블의 구조를 확인하기 위한 명령어이다
SQL*PLUS 명령어 중 하나이다.
테이블의 컬럼 이름, 데이터형, 길이, NULL 허용 유무 등 특정 테이블의 정보를 제공한다.
<용어 정리>
DEPARTMENT_ID (부서번호)
DEPARTMENT_NAME (부서명)
MANAGER_ID (부서장의 사원번호)
LOCATION_ID (부서위치 ID)
==> 컬럼(column, field)
널?
NOT NULL ==> NOT NULL 은 반드시 데이터를 입력해야 한다는 뜻이다. "필수입력사항 예 : 아이디,비밀번호,성명"
아무것도 없음 ==> NULL을 허용한다는 뜻으로 데이터값이 들어와도 괜찮고 데이터값이 안들어와도 괜찮다는 뜻이다.
"선택사항 예:집전화번호 "
유형(데이터타입)
NUMBER(4) ==> 숫자타입 -9999 ~ 9999
NUMBER(6) ==> 숫자타입 -999999 ~ 999999
NUMBER(6,2) ==> 숫자타입 -9999.99 ~ 9999.99
NUMBER(3,1) ==> 숫자타입 -99.9 ~ 99.9
NUMBER ==> 숫자타입 자리수에 제한이 없다.
VARCHAR2(30) ==> 문자열타입 최대 30byte 까지 입력가능함.
VARCHAR2(6) ==> 문자열타입 최대 6byte까지 입력하능함.
'superman' 8byte 이므로 입력불가!!
'hong' 4byte 이므로 입력가능!!
'hongkd' 6byte 이므로 입력가능!!
인코딩이 MS949 일때 한글 1글자는 2byte 이므로 '이순신' 은 6byte 이다.
인코딩이 UTF-8 일때 한글 1글자는 3byte 이다. '이순신' 은 9byte 이다.
NVARCHAR2 (6) ==> 문자열타입 최대 6글자까지 입력가능함.
'superman' 8글자 이므로 입력불가!!
'hong' 4글자 이므로 입력가능!!
'hongkd' 6글자 이므로 입력가능!!
'이순신' 3글자 이므로 입력가능!!
'강채영만세' 5글자 이므로 입력가능!!
DATE ==> 날짜타입
<예시>
select *
from EMPLOYEES; -- "사원" 테이블
==>결과값
desc EMPLOYEES;
==> 결과값
이름 널? 유형
-------------- -------- ------------
EMPLOYEE_ID (사원번호) NOT NULL NUMBER(6)
FIRST_NAME (이름) VARCHAR2(20)
LAST_NAME (성) NOT NULL VARCHAR2(25)
EMAIL (이메일) NOT NULL VARCHAR2(25)
PHONE_NUMBER (연락처) VARCHAR2(20)
HIRE_DATE (입사일자) NOT NULL DATE
JOB_ID (직종ID) NOT NULL VARCHAR2(10)
SALARY (기본급여)
NUMBER(8,2)
COMMISSION_PCT (커미션[수당]퍼센티지) NUMBER(2,2)
MANAGER_ID (직속상관[사수]의 사원번호) NUMBER(6)
DEPARTMENT_ID (해당사원이 근무하는 부서번호) NUMBER(4)
select *
from LOCATIONS; -- 부서의 위치정보를 알려주는 테이블
select *
from COUNTRIES; -- 국가 정보를 알려주는 테이블
from REGIONS; --대륙정보를 알려주는 테이블
select *
SQL 특징
1. 대/소문자 구분
1.1 SQL 명령어 : 대,소문자 구문하지 않는다.
1) select *
from DEPARTMENTS
2) SELECT *
FROM DEPARTMENTS
3) sELeCT *
FrOm DEPARTMENTS;
==> 세 경우 모두같은 결과값이 도출된다.
1.2 테이블 명 : 대,소문자를 구분하지 않는다.
1) select *
from departments;
2) select *
from dePARTments;
==> 두 경우 모두같은 결과값이 도출된다.
1.3 칼럼명 : 대,소문자 구분하지 않는다. (칼럼:열)
1)select department_id, department_name
from departments;
2)select DEPARTMENT_ID, DEPARTMENT_NAME
from departments;
3)select DEpartment_id, department_NaMe
from departments;
1.4 데이터값 : 대,소문자 구분한다.
1)select * (*은 모든 컬럼을 뜻한다)
from departments
where department_name = 'Sales';
==> 이 경우만 제대로된 결과값 도출 80 Sales 145 2500
2)select *
from departments
where department_name = 'sales';
3)select *
from departments
where department_name = 'SALES';
4)select *
from departments
where department_name = 'SsLeS';
=> 1)을 제외한 나머지는 모두 오류가 뜬다.
(최종 정리)
select * <관습적으로 소문자를 쓴다>
from DEPARTMENTS; =>"부서" 테이블