Develope/교육

[Oracle] 교육 2일차 - 연산자 우선순위(AND, OR), 기본 함수

고로이 2018. 10. 1. 09:17
반응형

181001 오라클 교육 2일차


튜닝들어가는 순간 망하겟지


헷갈리는 부분을 정의하는중





* 연산자 우선순위


참고1 : http://krids.tistory.com/201 

참고2 :  https://zetawiki.com/wiki/SQL_AND,_OR_%EC%97%B0%EC%82%B0%EC%9E%90_%EC%9A%B0%EC%84%A0%EC%88%9C%EC%9C%84


where 절에 쓰이는 AND 와 OR절의 연산자는 얼핏보면 우선순위가 같아보인다


벗 노노


AND 가 OR 보다 우선순위가 더 높다.


아래는 제타위키의 예시이다


2 예시[편집]

SELECT 1 OR 0 AND 0;
-- 1
SELECT (1 OR 0) AND 0;
-- 0
SELECT 1 OR (0 AND 0);
-- 1


* mysql 인가보다 오라클에서는 안돌아감

 "FROM keyword not found where expected"




문제를 조금 풀어봣을 때


select

from employees

where 1=1

and last_name like '%a%'

or last_name like '%e%' and last_name like '%k%' 


이런 느낌이다. 나처럼 혼동되지 않게 괄호를 써주자



 





* 문자열 함수

대소문자 관련 : upper, lower, initcap (첫글자만 대문자, 나머지는 소문자)

문자열 관련 :  

concat ( 문자열 붙이기 == ||), 

substr (i, k) : i부터, i+k만큼 자른다.

instr(input, str, N1, N2)  : str이 N1 번째 나온 순간부터 N2번째 나온 순간까지의 거리

trim 


LTRIM (컬럼 , 제거할 문자 |  RTRIM (컬럼 , 제거할 문자

 

   - 제거할 문자가 없을시 기본적으로 공백


 TRIM ( [LEADING,TRAILING,BOTH]  제거할 문자 [FROM]  컬럼)


  - LEADING : 왼쪽에서 제거  |  TRAILING : 오른쪽에서 제거  |  BOTH : 양쪽에서 제거

 

  - 특별히 설정해주는 값이 없으면 기본값은 BOTH

 

  - 제거할 문자는 오직 한개



출처: http://devjhs.tistory.com/92 [키보드와 하루]


select email, upper(email), lower(email), initcap(email), substr(email,1,3),instr(email,'A',1,2)as instr, length(email), lpad(email,10,'$'), replace

from employees

where 1=1;

 

ORIGIN      UPPER      LOWER      INITCAP     SUBSTR   INSTR LEN  LPAD              REPLACE

ABANDA ABANDA abanda Abanda ABA     3          $$$$ABANDA @@B@@ND@@

ABULL ABULL abull         Abull         ABU     0     5     $$$$$ABULL @@BULL

ACABRIO ACABRIO acabrio Acabrio ACA     3     7     $$$ACABRIO @@C@@BRIO

AERRAZUR AERRAZUR aerrazur Aerrazur AER     5     8      $$AERRAZUR @@ERR@@ZUR

AFRIPP AFRIPP afripp Afripp AFR     0     6     $$$$AFRIPP     @@FRIPP

AHUNOLD AHUNOLD ahunold Ahunold AHU     0     7     $$$AHUNOLD @@HUNOLD

AHUTTON AHUTTON ahutton Ahutton AHU     0     7     $$$AHUTTON @@HUTTON










DUAL 테이블 : 더미 테이블






* 숫자 관련 함수

- ROUND : 반올림

select 

round(456.789),     round(456.789, 0),     round(456.789, 1),     round(456.789, -1),     round(456.789, -2)

457                     457               456.8                   460                         500


- TRUNC : 버림

select 

trunc(456.789),     trunc(456.789, 0),     trunc(456.789, 1),     trunc(456.789, -1),     trunc(456.789, -2)

456                     457               456.8                   460                         500


- MOD : 나누기 나머지 값

select mod(1500, 400)

from dual


== 300






* 날짜 관련 함수


* 현재 세션의 날짜 표기방식을 바꾸는 방법

alter session set nls_date_format = 'yyyy/mm/dd hh24:mi:ss'

* NLS_DATE_FORMAT은 Oracle 환경변수 중 하나로 Date type의 데이터를 string으로 return할 때 기본적으로 사용될 format을 지정하는 것이다.



- 날짜에 숫자를 더하면 DATE가 증가한다.

 select sysdate, sysdate+1, sysdate-1

2018/10/01 12:54:24 2018/10/02 12:54:24 2018/09/30 12:54:24


- 날짜끼리 빼면 차이 날짜를 얻을 수 있다.

select (sysdate+1)-sysdate

== 1



- 날짜 관련 함수 

ADD_MONTHS           날짜에 월 추가

NEXT_DAY                 지정된 날짜의 다음 날

MONTHS_BETWEEN    두 날짜 간의 월 수

LAST_DAY                 월의 마지막 날

ROUND                    날짜 반올림

TRUNC                     날짜 truncate

반응형