명령어 처리 ( Order by ), 연산자, 현재시각, 테이블 만들기

양혜정·2024년 2월 18일

Oracle

목록 보기
4/49

테이블에서 데이터 정보를 꺼낼 때,

명령어의 처리순서

--------------------------------------------------
select 컬럼명1, 컬럼명2		-> 5 번
from 테이블명 (또는 뷰명)		-> 1 번
where 조건절					-> 2 번
// where 조건절 : 조건에 만족하는 테이블의 행(row)를 
// 			메모리(RAM)에 로딩해주는 것
group by 절					-> 3 번
having 그룹함수조건절			-> 4 번
order by 절 				-> 6 번
--------------------------------------------------

Order by 절

  • 오름차순
order by 컬럼명 asc;
-- 또는
order by 컬럼명;		-- 'asc' 는 생략 가능
  • 내림차순
order by 컬럼명 desc;

오름차순 내림차순 이용

  • select 의 순서를 이용한 오름차순 내림차순
  • 1차정렬, 2차 정렬, 3차 정렬
select 컬럼명1, 컬럼명2, 컬럼명3
from 테이블명(또는 뷰명)
order by 1,2,3 desc;
-- 이 경우,  컬럼명1 은 1에 해당, 오름차순 정렬, 1차 정렬
-- 			컬럼명2 는 2에 해당, 오름차순 정렬, 2차 정렬
--			컬럼명3 은 3에 해당, 내림차순 정렬, 3차 정렬
-- 1차 정렬 후 2차 정렬 진행, 2차 정렬 후 3차 정렬 진행된다.

-> 주의.
select 의 순서를 명령어 처리순서가 이전단계에서 사용불가!

-- >>>>> 오류 <<<<< 
select 컬럼명1 as "1", 컬럼명2 "2"
-- 첫글자 숫자 "" 표시, as 생략
from 테이블명(또는 뷰명)
where 1(select순서) > 1000 || "2" < 500;
-- 명령어의 처리순서가 select 가 where 보다 뒤에 있으므로
-- 오류가 발생한다.
  • 컬럼명이 길 경우 별칭을 이용하여 정렬이 가능하다.
select 컬럼명~~~~~~~~~~~~~~~~~~~~~1 as "1컬럼명"
-- 첫글자가 숫자이므로 "" 을 반드시 붙여야 한다.
from 테이블명(또는 뷰명)
order by "1컬럼명" asc;	-- 1컬럼명에 해당하는 컬럼 오름차순 정렬
-- 별칭이 공백, 특수문자, 첫글자가 숫자가 아닌 경우
-- ""을 지워도 무방하다.
  • Oracle 의 Null 값
    -> Oracle 에서는 null 을 가장 큰 것으로 간주
    -> Microsoft 사의 My-SQL은 null 을 가장 작은 것으로 간주

null

null 인 경우 => 컬럼명 is null
null 이 아닌 경우 => 컬럼명is not null 또는 not 컬럼명 is null


비교연산자

  1. 같다 ' = '
  2. 같지 않다 ' != ' , ' <> ' , ' ^= '
  3. 크다 작다 > <
  4. 같거나 크다 같거나 작다 >= <=
  5. Null 은 존재하지 않으므로 비교대상이 될 수 없으니,
    nvl함수, nvl2함수 이용하여 처리
where nvl(department_id, -9999) != -9999;
-- deparment_id 가 null 이면 -9999 를 띈다.
-- 조건은 != -9999 이므로 null 이 아닌 사람을 메모리(RAM)에 로딩

AND, OR, IN( ), NOT 연산자

  • AND
    -> 조건1에 충족한 사람 중 조건 2에 충족한 경우
where 조건1 and 조건2

-- 예시)
where nvl(department_id,-9999) = 80 and salary >= 10000;
-- department_id 의 null 은 -9999 로 표시
--> department_id 가 80인 사람 중 salary 가 10000 이상인 사람
  • OR
    -> 조건1 충족한 경우와 조건2 충족한 경우 모두
where 조건1 or 조건2

-- 예시)
where department_id is null or salary >= 10000;
-- null 은 ' = ' 사용 X 
-- null 은 is null 로 사용 O 
--> department_id 가 null 인 사람들과 
-- 				salary 가 10000 이상인 사람들 모두
  • IN( )
    -> ( ) 가 있는 OR 이다.
    -> 조건1 충족한 경우와 조건2 충족한 경우 모두
where 컬럼명 IN(조건1, 조건2)
-- 예시)
where nvl(department_id,-9999) in (80,-9999)
-- department_id 의 null 은 -9999 로 표시
--> department_id 가 '80 과 -9999' 인 사람들 모두

-- IN( ) 은 비교연산자 '='와 동일하기 때문에 
-- null 값이 있을 경우 nvl함수를 반드시 사용해야 한다.
  • NOT 연산자
    -> IN( ) 과 함께 사용
    -> AND , OR 은 != , ^= , <> 로 NOT 을 표현
where 컬럼명 NOT IN(조건1, 조건2)
-- 또는
where NOT 컬럼명 IN(조건1, 조건2)

--> 컬럼에 NULL 이 있는 경우
where NVL(컬럼명,-9999) NOT IN(조건1, 조건2)
-- 또는
where NOT NVL(컬럼명,-9999) IN(조건1, 조건2)

-> 주의.
AND 와 OR이 혼용되어 사용될 경우, 연산의 우선순위에 따라 AND 가 먼저 실행된다.
Ex) 사칙연산에서 + 와 × 가 있으면 × 먼저 진행
=> OR을 먼저 실행하게 하고 싶을 경우 ( ) 을 사용!!


범위연산자

-> 비교연산자 : > , < , >= , <=
-> between A and B : A 이상 B 이하
-> 특징 : 숫자, 문자, 날짜 까지 모두 범위연산자 사용 가능 O

where first_name >= 'J' and first_name <= 'S'
where first name between 'J' and 'S'

현재 시각

  • sysdate => RR/MM/DD
  • current_date => RR/MM/DD
  • localtimestamp => RR/MM/DD HH24:MI:SSXFF
  • current_timestamp => RR/MM/DD HH24:MI:SSXFF TIMEZONE
  • systimestamp => RR/MM/DD HH24:MI:SSXFF TIMEZONE

=> RR과 YY 의 차이점

  • RR
    -> 50 미만은 2000 년대로 간주
    -> 50 이상은 1900 년대로 간주

  • YY
    -> 2000 년대로 간주


to_char

  • 모양 바꾸기
    to_char(현재시각,'바꾸고싶은모양') -> 작은따옴표
select sysdate	-- RR/MM/DD
	, 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')
-- hh24 => 24시 기준
-- hh => 12시 기준
-- am, pm => 오전 오후 표시 (무엇을 쓰든 표시된다.)

to_date

  • 문자열을 날짜 형태로 바꾸기
    to_date(바꾸고 싶은 모습, 바꾸고싶은 모습의 형태)
to_date('2024-02-18 09:00:00', 'yyyy-mm-dd hh24:mi:ss')

조건을 24-02-01 부터 24-02-29 까지를 나타내고 싶은 경우

where '24/02/01' <= date and date <= '24-03-01'
-- '24-02-29' 가 아닌 그 다음날을 입력해주어야 한다!
-- Because, '24-02-29' 입력시, 24-02-29 00:00:00 으로 인식하여
-- 그 이후는 포함시키지 않기 때문이다.

Char, Asciii

  • Char 타입 숫자 출력 : ascii('문자')
  • Ascii 타입 출력 : chr(숫자)
    Ascii	|	A	|	a	|	0	|	' ' (공백)
    Char	|	65	|	97	|	48	|	32
select ascii('A'), chr(65)
from dual;
-- 출력 : 	  65		A

저장된 데이터 수정하기

  • update 테이블명 set 컬럼명 = 바꾸고싶은내용
update 테이블명 set 컬럼명 = 데이터
where 조건;
commit;

-- 예시)
update employees set first_name ='혜정', last_name = '양'
-- 메모리(RAM) 상에서 변경, 디스크(DISK) 변경 X
commit;
-- 메모리(RAM) 상에 저장한 것을 디스크(DISK) 에 저장하기 위해 커밋
-- 커밋이 완료되면, 다른사람들이 읽을 때 내가 수정한 모습이 보인다.
  • Commit , Rollback
    commit : 메모리(RAM) 상에 저장한 것을 디스크에 저장
    rollback : 메모리(RAM) 상에 변경되어진 정보를 삭제

rollback 은 'update 취소' 와 같지만, update 된 것을 commit 한 상태라면 rollback을 진행하여도 변경이 안된다.


Like

like 연산자와 함께 % 와 _ 사용
이때, % 와 _ 는 'wild character' 라고 부른다.
% : 글자수와 관계 X => 글자가 있든지 없든지 관계 x
_ : 반드시 글자 1개(문자, 숫자 등 관계 X)
where 컬럼명 like 'F_e%';
-- 첫번째 글자 F, 두번째 글자 상관없음, 세번째 글자 e
-- 이후 글자가 있든 없든 상관없음
  • wild character escape ( % 와 _ 의 탈출)
where 컬럼명 like '%99.99\%%' escape '\';
--> escape 문자로 \ 를 주고 있다(가정)
-- 탈출시키고 싶은 % 나 _ 앞에 escape 문자를 둔다.
-- 이 경우 99.99% 가 컬럼명에 들어있으면 이 조건이다.

-- escape 문자는 아무거나 상관없지만 숫자나 문자대신 특수문자 권장
-- 숫자나 문자는 혼돈을 야기할 수 있기 때문

테이블 만들기

create table 테이블명
(컬럼명1 유형, 컬럼명 유형);
-- 유형은 varchar2(숫자) 보다 Nvarchar2(숫자) 사용
-- 영어는 1byte 이지만 한글사용 시 혼동될 수 있기 때문이다.

컬럼 추가하기

alter table 테이블명
add 컬럼명2 유형;
-- 유형을 모를 시, '참고' 주소를 통해 확인

테이블에 데이터 입력하기

insert into 테이블명(컬럼명1, 컬럼명2) 
	values ('컬럼명1에 들어갈 내용', '컬럼명2에 들어갈 내용');

특정 행 삭제하기

delete from 테이블명
where 컬럼명 = '컬럼명에 들어간 내용'

모든 행 삭제하기

delete from 테이블명

참고

명령어의 처리순서, 유형 : https://velog.io/@jjoung-2j/%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%B2%98%EB%A6%AC-From-Where-Select


정리

-> local_hr에서작업한것

0개의 댓글