- 관계형 데이터베이스(Relation DataBase) 관리 시스템(Management System)
- 관계형 데이터베이스 관리 시스템을 RDBMS(Relation DataBase Management System) 라고 부른다.
- 관계형 데이터베이스는 데이터를 열(Column, Field) 과 행(Row, Record, tuple) 으로 이루어진 테이블(Table, entity, 개체) 형태로 저장한다.
Environment => UTF - 8
코드편집기 - 행 여백 => 행번호 표시 꼭 해주기
일반유저는 테이블 또는 뷰를 못본다
select *
from tab;
THAME TABTYPE
---------------------------------
COUNTRIES TABLE
DEPARTMENTS TABLE
EMPLOYEES TABLE
EMP_DETAILS_VIEW VIEW (VIEW는 테이블은 아니지만 SELECT 되어진 결과물을 마치 테이블인 것 처럼 보는 것)
JOBS TABLE
JOB_HISTORY TABLE
LOCATIONS TABLE
REGIONS TABLE
select *
from DEPARTMENTS;
-> SQL 명령어는 대,소문자를 구분하지 않는다
-> 테이블명도 대,소문자를 구분하지 않습니다
select department_id, department_name, manager_id, location_id
from departments;
-> 컬럼명도 대,소문자 구분하지 않습니다
-> 저장되어진 데이터 값 만큼은 반드시 대,소문자를 구분합니다 !!!
[⭐⭐⭐⭐⭐⭐]
== 어떠한 테이블(또는 뷰)에서 데이터 정보를 꺼내와 보는 명령어인 select의 처리(해석,parsing) 순서 ====
select 컬럼명, 컬럼명 -- 5 컬럼명 대신에 *을 쓰면 모든 컬럼을 뜻하는 것이다
from 테이블명(또는 뷰명) -- 1
where 조건절 -- 2 where 조건절이 뜻하는 것은 해당 테이블명(또는 뷰명)에서 조건에 만족하는 행(row)을 메모리(RAM)에 로딩(올리는 것) 해주는 것이다 !! ==> 필수 암기
group by절 -- 3
having 그룹함수조건절 -- 4
order by 절 -- 6
* select부터 쓰면 안됌 ! from부터 써야 함 !!!!
select *
from departments; -- "부서" 테이블
select department_id, department_name
from departments; -- ex) 이 테이블에서 어느 컬럼을 골라볼래?
describe departments;
-- departments 테이블의 컬럼(column)의 정보를 알려주는 것이다
-- 또는
desc departments;
널? => 널 값을 허용하냐 안하냐
NOT NULL
-> NOT NULL은 반드시 데이터를 입력해야한다, 필수 입력
=> NULL 값, 이러한 부서만 하겠다는 계획만
=> 없는 것이나 NULL은 같은 것인데 데이터를 입력하든 입력하지 않든 모두 허용한다
<유형>
NUMBER(4) => 자바에서는 INT 같은 존재, 숫자타입(범위가 -9999 ~ 9999 , 10만은 못들어옴)
VARCHAR2(30) => 자바에서는 string, 문자열 타입( 최대 30byte 까지만 입력 가능함)
DATE => 날짜타입(날짜에 있는 것만 불러옴)
number(8,2) => -999999.99 ~ 999999.99
NUMBER(2,2) => -0.99 ~ 0.99
NULL은 존재하지 않는 것이므로 4칙연산(+-*/)에 NULL이 포함되어지면 그 결과는 무조건 NULL이 된다
select '안녕하세요', 500, '500', 0075, '0075', null -- db 정렬 오른쪽으로 나오면 숫자, 왼쪽은 문자 ,,
문자열은 항상 홑따옴표가 들어와야한다 쌍따옴표가 나오면 안됌 !
from dual; -- 가상테이블, dual은 select 다음에 나오는 값들을 화면에 보여주기 위한 용도로 쓰이는 가상 테이블이다
select nvl(7,3), nvl(null, 3), -- null 인지 물어보는 것
nvl('이순신', '거북선'), nvl(null, '거북선')
from dual;
select nvl2(7,3,2), nvl2(null, 3,2), nvl2('이순신', '거북선','구국영웅'), nvl2(null, '거북선','구국영웅') from dual;
-- nvl은 첫번째가 아니라면 자기 자신을 나타내고 자기 자신을 나타내고 첫번째라면 첫번째를 나타냄, nvl2는 첫번째 물어봐주고 아니라면 두번째를 나타내주고 첫번째가 널이 아니라면 2번째 값을 나타냄
-- null 인지 물어보는 것
select employee_id, first_name, last_name, job_id, salary, commission_pct, department_id -- 보고 싶은 컬럼명을 적어준다
from employees -- 1. employees 테이블에서
where department_id = 60;
-- 2. department_id 컬럼의 값이 60과 일치하는 행들만 메모리(RAM)에 퍼올린다
-- 3. 메모리(RAM)에 퍼올려진 행들에서 화면에 보여주는 컬럼은 employee_id, first_name, last_name, job_id, salary, commission_pct, department_id 컬럼의 값들을 화면에 보여라.
select * -- 2. *이므로 employees 테이블에 존재하는 모든 컬럼들을 화면에 보여라
from employees; -- 1. employees 테이블에서 where절이 없으므로 employees 테이블에 저장되어진 모든 행들(107개행)을 몽땅 다 메모리(RAM)에 퍼올린다.
select * -- 2. *이므로 employees 테이블에 존재하는 모든 컬럼들을 화면에 보여라
from employees; -- 1. employees 테이블에서 where절이 없으므로 employees 테이블에 저장되어진 모든 행들(107개행)을 몽땅 다 메모리(RAM)에 퍼올린다.
select employee_id, first_name, last_name, job_id, salary, commission_pct, department_id
-- 보고 싶은 컬럼명을 적어준다,, 2. 메모리 (Ram)에 퍼올려진 행들에서 화면에 보여주는 컬럼은 employee_id, first_name, last_name, job_id, salary, commission_pct, department_id 컬럼 값들을 화면에 보여라
from employees; -- 1. employees 테이블에서 where절이 없으므로 employees 테이블에 저장되어진 모든 행들(107개행)을 몽땅 다 메모리(RAM)에 퍼올린다.
--- 위에 두개는 메모리 사용량이 똑같음
-- 월급은 기본급여(salary) + 수당(salary * commission_pct) --> 0.3은 수당이 아님
-- commission_pct 컬럼의 값이 null이라 함은 수당이 없다는 말이고 commission_pct 컬럼의 값이 0.3이라 함은 자신의 기본 급여(salary) * 0.3이 실제 수당 금액이다. ==> 이게 월급이다
select 2+3*4, 2+(3*4), (2+3)*4
from dual;
=> select 되어져 나온 결과물에서 컬럼에 대한 별칭(별명, alias)를 부여하겠다
select employee_id AS "사원번호" -- 별칭(별명, alias), 같다라는 뜻, 큰따옴표로 적어야함 꼬옥
, first_name "이름" -- 별칭(별명, alias)에서 as는 생략 가능하다
, last_name 성 -- 별칭(별명, alias)에서 " "는 생략 가능하다
, salary "기본 급여" -- 별칭(별명, alias)에서 공백을 주고 싶으면 쌍따옴표(" ")를 해야한다
, commission_pct 커미션퍼센티지
, NVL( salary + (salary * commission_pct),salary )"1월급" -- 별칭(별명, alias)에서 별칭명이 숫자로 시작한다라면 반드시 "" 로 해주어야 한다.
, NVL2( commission_pct, salary + (salary * commission_pct), salary ) "2월급"
from employees;
```
-> date
date 타입의 기본적인 표현방식은 'RR/MM/DD'으로 나타내어진다
RR은 년도의 2자리만 나타내어주는데 50 ~ 99는 1950 ~ 1999을 말하는 것이다
RR은 년도의 2자리만 나타내어주는데 00 ~ 49는 2000 ~ 2049을 말하는 것이다
MM은 월이고, DD는 일이다
SELECT sysdate
, to_char(sysdate, 'yyyy-mm-dd' )
, to_char(sysdate, 'hh24-mi-ss' )
, to_char(sysdate, 'yyyy-mm-dd hh24-mi-ss' )
, to_char(sysdate, 'yyyy/mm/dd hh24:mi:ss' )
, to_char(sysdate, 'yyyy-mm-dd am hh:mi:ss' )
, to_char(sysdate, 'yyyy-mm-dd pm hh:mi:ss' )
from dual;
to_char()
-- 날짜와 숫자 등의 값을 문자열로 반환하는 함수
⭐중요!
-- 날짜를 나타낼때 시,분,초 가 없는 년,월,일만 나타내어주면 자동적으로 0시0분0초가 된다
즉, 자정(그날의 시작)을 뜻한다
풀이
select employee_id AS 사원번호
, first_name || ' ' || last_name AS tkdnjsaud
, hire_date AS 입사일자1
, to_char(hire_date, 'yyyy-mm-dd hh24:mi:ss') AS 입사일자2
from employees
-- where '05/01/01' <= hire_date and hire_date < '06/12/31'