Oracle

kxsxh·2024년 2월 15일
0

DataBase

목록 보기
1/5

ORACLE

- 관계형 데이터베이스(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;

null

널? => 널 값을 허용하냐 안하냐

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을 처리해주는 함수

NULL은 존재하지 않는 것이므로 4칙연산(+-*/)에 NULL이 포함되어지면 그 결과는 무조건 NULL이 된다

1. NVL

  • (NULL VALUE) 아주 많이 쓰임
   select '안녕하세요', 500, '500', 0075, '0075', null  -- db 정렬 오른쪽으로 나오면 숫자, 왼쪽은 문자 ,, 
   문자열은 항상 홑따옴표가 들어와야한다 쌍따옴표가 나오면 안됌 !  
    from dual; -- 가상테이블, dual은 select 다음에 나오는 값들을 화면에 보여주기 위한 용도로 쓰이는 가상 테이블이다 
select nvl(7,3), nvl(null, 3),      -- null 인지 물어보는 것
        nvl('이순신', '거북선'), nvl(null, '거북선')
    from dual;

2. NVL2

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;
    

별칭(별명, alias)

=> 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'
  • ascii code
    'A' --> 65
    'a' --> 97
    '0' --> 48
    ' ' --> 32

0개의 댓글