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 6 $$$$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
- 날짜에 숫자를 더하면 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
'Develope > 교육' 카테고리의 다른 글
[Oracle] 3일차) 그룹함수 (0) | 2018.10.02 |
---|---|
[Oracle] 교육 2일차 - NVL, DECODE, CASE (0) | 2018.10.01 |
[Oracle] 교육 2일차 - 형변환 (0) | 2018.10.01 |
[Oracle] 1일차 - 오라클에서 데이터타입 변환하기 (3) | 2018.09.21 |
[Oracle] 1일차) DB 기본 (0) | 2018.09.21 |