Cute Happy Ghost
본문 바로가기
DB/Oracle

20201023_21 다양한 함수

by JENN_tech7 2020. 10. 23.
728x90
SMALL

모든열 출력 : SELECTTION

일부열 : 프로젝션

DROP TABLE Account;
CREATE TABLE Account (
 id NUMBER not null,
 name VARCHAR2(128),
 email VARCHAR2 (128) ,
 location VARCHAR2 (128) 

);

INSERT INTO Account(id, name, email, location) VALUES (1, '나나', 'ss@ss', '서울');
INSERT INTO Account(id, name, email, location) VALUES (2, '다다', 'ss@ss', '부산');
INSERT INTO Account(id, name, email, location) VALUES (3, '가가', 'ss@ss', '여수');


CREATE TABLE account_log (
    id NUMBER not null,
    user_account_id NUMBER NOT null,
    action VARCHAR2(128) not null
);

INSERT INTO account_log (id, user_account_id, action)VALUES (1, 2, 'LOGGED IN');
INSERT INTO account_log (id, user_account_id, action)VALUES (2, 3, 'DELETED ACTION HISTORY');

SELECT * FROM Account;
SELECT * FROM account_log ;

SELECT * 
FROM Account a
JOIN account_log al
ON a.id = al.user_account_id;

SELECT *
FROM Account a, account_log al
WHERE a.id = al.user_account_id;

테이블두개만들고 데이터삽입하고 조인과 프롬을 이용해 조인해보기

where절을 빼면 카타시안어쩌구로 엄청 많이 나옴

 

 

SELECT * FROM emp ORDER BY sal DESC ;

 

DESC 내림차순

order by 오름차순 : 사전순

 

 

  • job이 salesman이면서 salary가 1500이 넘는 사람 출력
SELECT *
FROM emp
WHERE job = 'SALESMAN' and sal = 1500;

 

 

 

  • 연봉이 1000이상 1500이하 
SELECT *
FROM emp
WHERE sal BETWEEN 1000 and 1500;

 

 

 

  • 와일드 카드 종류설명
_ 종류에 상관 없이 한 개의 문자
% 길이와 종류와 상관 없이 모든 문자

 

 

  • 이름에 ON있는 이름찾기
SELECT * FROM emp 
WHERE ename LIKE'%ON%';

 

 

 

  • 커미션이 NULL값인 것
SELECT * FROM emp
WHERE comm IS NULL;

 

 

 

 

 


UNION : 합집합

 

UNION : 중복제거된 상태로 

UINION ALL :중복다나옴

 

SELECT 열선택 FROM 테이블1

UNION

SELECT 열선택 FROM 테이블2

 

열은 같아야함

이름, 자료형도

 

이름이 달라도 as name해서 같은 이름으로 만들어서 묶을 수도 있음

 

 

 

함수설명

UPPPER 모든 문자를 대문자로 변환
LOWER 모든 문자를 소문자로 변환
INITCAP 첫 글자를 대문자로
LENGTH 문자열 길이를 반환
SUBSTR(origin,begin[,size]) 문자열 substring
INSTR 문자 위치 반환
REPLACE 문자 치환
LPAD,RPAD 문자 패딩 설정
CONCAT 문자열 연결






  • 선택한 열을 소문자로 바꾸고 싶을때
SELECT lower(ename) as ename_lower FROM emp;

 

 

  • ename의 length가 4이하인 애들 선택
SELECT * FROM emp WHERE LENGTH(ename)<=4;

= 은 나중에 ! 

 

 

 

 

 

자바는 0부터 시작했지만 sql은 1부터 시작

substr(선택할열, 시작할 문자 위치, 추출할 문자개수)

ename의 두번째부터 네개 추출

 

 

 

 

 

 

  • ename에 L이 있으면 몇개있는지 추출, 없으면 0으로 반환

 

 

 

 

REPLACE(선택할열, '타겟', '바꿀말')

 

 

 

  • PAD(선택할열, 채울글자수, '채울문자')

RPAD 오른쪽으로 채움

LPAD 왼쪽으로 채움

 

 

 

 

 

  • concat(선택할열1, 선택할열2)
    열이아니라 값이어도 상관없음

 

 

 

 

 

  • round(선택할 열 혹은 값) 

  • trunc(선택할열, 몇번쨰 이후로 버릴것인지)

 

 

 

  • mod(나눠질값, 나눌값)

 

 

 

 

 

 

  • 오늘날짜

 

우앙~ 날짜에도 계산을 할 수있다고한다

 

 

sysdate를 디폴트로 두면 id만 입력하면 날짜가 나옴

 

 

 

  • ADD_MONTHS(날짜타입의 값 혹은 일, 개월수)

3개월 후는 언제인가?

 

 

 

 

 

  • next_day(날짜타입의 열 혹은 값, '월~일요일')

오늘이 23일이니까 다음 월요일은 언제인가? 

 

 

SELECT value
FROM NLS_SESSION_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_LANGUAGE';

이거 치면 KOREAN인지 영어인지 나온다

영어로 돼있으면 월요일이 아니라 mon이렇게 쳐야겠죠

 

 

 

 

  • TO_CHAR(날짜, 포맷문자열)

cc세기

yyyy연도

mm월

dd일

hh24 24시표기

mi분

ss초

 

 

 

  • nvl2(선택할 열, NULL이 아닌경우 출력할 값, NULL인 경우 출력할 값);

 

 

 

SELECT 열선택

  CASE

     WHEN 조건식1 THEN 출력할값1

     WHEN 조건식2 THEN 출력할값2

     WHEN 조건식n THEN 출력할값3

  END

FROM emp;

 

 

SELECT sal,
CASE
    WHEN sal >= 1000 THEN '1000d이상' 
    ELSE '1000미만'
END
FROM emp;




SELECT ename, sal,
CASE
    WHEN sal >=500 and sal <1000 THEN '500이상 1000미만'
END
FROM emp;

이런식으로 쓸 수 있다

이렇게 나옴

ELSE에 뭐쓰면 null값이 채워지겠죠

 

728x90
LIST

'DB > Oracle' 카테고리의 다른 글

20201026_22 계정생성, 제약조건  (0) 2020.10.26
20201024_21 Review  (0) 2020.10.23
20201023_21 group by  (0) 2020.10.23
테스트용 scott 스크립트  (0) 2020.10.23
20201022_20 테이블 만들기, 데이터 삽입, 조인  (0) 2020.10.22

댓글