본문 바로가기
Back-End/Database

Oracle SQL(3)

by newny 2023. 2. 27.
반응형

해석순서

 

GROUP BY

[참고] https://extbrain.tistory.com/56
select [그룹컬럼], [집계함수] from [테이블명] group by [그룹컬럼];

SELECT type, COUNT(name) AS cnt FROM hero_collection GROUP BY type;

--hero_collection 테이블에서 type 컬럼을 기준으로 그룹핑한 결과를 보여주는 쿼리

 

HAVING

  • where절과 비슷한 조건절의 역할을 하지만 where 뒤로 와야하고 group by와 함께 사용해야함
  • 집계함수를 사용하여 조건을 부여할 수 있음

select [그룹컬럼], [집계함수] from [테이블명] group by [그룹컬럼] having [조건절];

select addr, count(*) from sungjuk group by addr having count(*) = 3;
-- 주소별 인원수가 3인 행을 조회

 

CASE WHEN

  • IF문, SWITCH문의 기능을 함
  • ELSE 부분은 생략 가능
  • 만족하는 조건이 없으면 NULL을 리턴함
  • SELECT절, WHERE절, PL/SQL 등 많은 부분에서 사용 가능

 
IF문 방식
CASE WHEN [칼럼 = 조건] THEN [리턴값] ELSE [리턴값] END AS [새로운칼럼의 이름]

SELECT ename
     , deptno
     , CASE WHEN deptno = '10' THEN 'New York'
            WHEN deptno = '20' THEN 'Dallas'
            ELSE 'Unknown'
       END AS loc_name
  FROM emp
 WHERE job = 'MANAGER'

 
SWITCH문 방식
CASE [칼럼] WHEN [조건] THEN [리턴값] ELSE [리턴값] END AS [새로운칼럼의 이름]

SELECT ename
     , deptno
     , CASE deptno 
            WHEN 10 THEN 'New York'
            WHEN 20 THEN 'Dallas'
            ELSE 'Unknown'
       END AS loc_name
  FROM emp
 WHERE job = 'MANAGER'

 

서브쿼리

  • 하나의 SQL 문에 포함되어 있는 또 다른 SQL 문
  • 괄호로 감싸서 사용
  • 단일 행 또는 복수 행 비교 연산자와 함께 사용 가능

문자열 관련 함수

lower() / upper()

문자열을 전부 소문자 또는 대문자로 전환
lower([문자열]) / upper([문자열])

select lower('Hello World') from dual;
select upper('Hello World') from dual;

 

length()

문자열의 글자갯수 조회 (공백 포함)
length([문자열])

select length('Hello World') from dual;

 

substr()

문자열에서 지정한 인덱스 번호부터 지정한 숫자만큼 문자열을 출력
→ 데이터베이스에서의 문자열의 인덱스는 1부터 시작함
substr([문자열],[인덱스번호],[숫자])

select substr('Hello World', 1, 5) from dual;
-- 'Hello World'의 1인덱스 부터 5글자 까지 출력

 

instr()

특정 문자 위치의 인덱스 번호를 반환함
→ 데이터베이스에서의 문자열의 인덱스는 1부터 시작함
instr([문자열], [특정문자])

select instr('Hello World','W') from dual;

 

lpad() / rpad()

오라클에서 왼쪽, 오른쪽에 특정문자를 채워서 문자열 길이를 맞출 때 사용
lpad([문자열], [문자열길이], [특정문자]) / rpad([문자열], [문자열길이], [특정문자])

select lpad('SKY', 5, '*') from dual; --**SKY
select rpad('SKY', 5, '*') from dual; --SKY**

 

replace()

문자열에서 문자열 안의 특정 문자를 모두 찾아서 전부 새로운 특정 문자로 바꿔주는 함수
replace([문자열], [문자열 안의 특정문자], [바꿀새로운문자])

select replace('HAPPY','P', 'K') from dual; --HAKKY

 

chr()

  • 함수인자에 대응하는 문자를 리턴하는 함수
  • 인자에 아스키코드를 넣으면 대응하는 문자를 리턴함

아스키코드

아스키코드 문자
10 line feed
13 carriage return
32 space
65 A
97 a
select chr(65) from dual; --아스키코드 문자 변환 'A'
select chr(66) from dual; --아스키코드 문자 변환 'B'
select chr(97) from dual; --아스키코드 문자 변환 'a'
select chr(98) from dual; --아스키코드 문자 변환 'b'

 

concat()

문자열+문자열 또는 칼럼의 내용+문자열 을 연결해줌
concat([문자열], [문자열])
concat([칼럼명], [문자열])

select concat('로미오', '줄리엣') from dual;
select concat(uname, '의 평균은'), concat(aver, '입니다') from sungjuk;

 

결합연산자 (||)

  • select 절에 첨부하여 두 개의 문자열을 하나로 만들 수 있음
  • 해당 연산자를 사용하면 해당 유저에 영향을 주진 않고 유저내의 테이블로 스크립스 생성해줌
select uname || '의 평균은' || aver || '입니다' from sungjuk;


숫자 관련 함수

abs()

절대값 반환 abs([숫자])

 

mod()

나머지 함수(%) mod([숫자, 나눌숫자])

select mod(5,3) from dual; --2

 

소숫점 조정 함수

함수 사용방법 결과값
ceil() ceil([숫자]) 소수점 올림 (정수로 만듦)
trunc() trunc([숫자], [남길 소수점자리]) 소수점 내림 (남길 소수점 자리까지만 출력)
round() round([숫자], [남길 소수점자리]) 소수점 반올림 (남길 소수점 자리까지만 출력)

 

to_number()

문자열을 숫자형으로 변환 to_number([숫자])

select to_number('123')+1 from dual; --124
select '123'+1 from dual; --124 , 내부적으로 to_number()가 호출됨

날짜 관련 함수

sysdate

  • 쿼리문을 실행하는 순간의 날짜, 시간, 분, 초를 알려줌
  • 괄호 없이 사용
select sysdate from dual;

 

extract()

년, 월, 일 추출
extract([년 or 월 or 일] from [날짜형칼럼])

select extract(year from sysdate) from dual; --년
select extract(month from sysdate) from dual; --월
select extract(day from sysdate) from dual; --일

 

날짜데이터의 연산

일 수 연산
sysdate+[숫자]

select sysdate+100 from dual; --오늘날짜 +100일
select sysdate-100 from dual; --오늘날짜 -100일

 

months_between()

months_between([날짜데이터1], [날짜데이터2])
두개의 날짜 데이터에서 개월 수 연산

select months_between('2023-02-27', '2022-10-30') from dual; --(3.9)
select months_between('2023-02-27', '2023-05-30') from dual; --(-3.9)

 

to_date()

문자열을 날짜형으로 변환
to_date([날짜형식의 문자열], [날짜포맷])

SELECT TO_DATE('2021-12-12', 'YYYY-MM-DD')
     , TO_DATE('2021-12-12 17:10:00', 'YYYY-MM-DD HH24:MI:SS')
FROM dual;

nvl()

nvl([조회한 값], [바꿀값])

  • 조회한 값이 null이라면 바꿀 값으로 대체됨
  • 행 추가시 서브쿼리 이용하여 사용가능
select nvl(max(kor), 0) as max_kor --max(kor)값이 null이라면 0으로 대체함
from sungjuk;

 

반응형

'Back-End > Database' 카테고리의 다른 글

SQL 예제(1)  (0) 2023.02.27
Oracle SQL(2)  (0) 2023.02.23
Oracle SQL(1)  (0) 2023.02.22

댓글