1. 문제 풀기
아침마다 수업 시작하시기 전에 여러 개의 문제를 내주시는데 새롭게 배운 내용이 있는 것만 정리하였다.
문제1) insa 테이블에서 남자는 'X', 여자는 'O' 로 성별(gender) 출력하는 쿼리 작성
풀이1)

풀이2) NULLIF 함수 사용

- NULLIF( ) 함수
두 개의 값을 비교하여 두 개의 값이 같으면 NULL 값을 반환
같지 않으면 첫번째 값을 반환해주는 함수
문제2) emp 테이블에서 사원명(ename)에 'e'문자를 포함한 사원을 검색해서 아래와 같이 출력.

- 주석처리 한 쿼리로도 검색해서 출력할 수 있다.
' :변수명 '
위의 ':변수명'을 바인드 변수라고 하며, 세션(session)이 유지되는 동안 사용할 수 있는 변수이다.
바인드 변수를 사용하면 아래와 같이 입력할 수 있는 메시지 창이 뜬다.

어제 수업에 이어서..!
2. SET 연산자
1) UNION ALL : 중복되는 값도 포함하여 출력

- 다른 테이블에 있는 데이터도 UNION을 활용하여 가져올 수 있다.
단, 가져오고자 하는 컬럼명의 자료형들이 순서대로 동일해야 하고 가져올 컬럼명의 갯수도 동일해야한다.
2) MINUS : 차집합

3) INTERSECT : 교집합

3. floating-point condition 연사자 종류
1) IS NAN : 숫자인지 아닌지 확인하는 연산자(Not A Number)
2) IS INFINITE : 무한대인지 아닌지 확인하는 연산자
3) IS NULL : 널의 유무를 확인하는 연산자
4. 함수(function)
1) 복잡한 쿼리문을 간단히 처리(조작)하여 결과를 반환해주는 것
인자값은 데이터이고 그 결과를 처리하여 반환하는 기능을 수행한다.
2) 함수 기능
ㄱ. 데이터 계산 ex) SQRT(4) -> 루트 계산
ㄴ. 데이터 항목 변경 ex) UPPER('a') -> 대문자로 변환
ㄷ. 그룹의 결과를 출력 = 그룹함수(group function)

ㄹ. 날짜 형식을 변경 : TO_CHAR(데이터, 날짜형)
ㅁ. 컬럼 데이터 타입 변경 == 형변환 함수
날짜형 <-> 문자열 변환
문자열 <-> 숫자형 변환
TO_CHAR는 중복함수(== 자바 용어로 오버로딩)
TO_CHAR(날짜) -> 날짜형을 문자열로 형변환 해주는 함수
TO_CHAR(숫자) -> 숫자를 문자열로..
TO_CHAR(문자열) -> 문자열 내가 원하는 문자열로

3) 함수의 유형(종류)
ㄱ. 단일행 함수(Single_row) : 행(레코드)이 각각 실행되어 각각 보여주는 함수

ㄴ. 복수행 함수(Groip) == 그룹함수(집계함수) : 행(레코드)을 그룹화하여 결과를 보여주는 함수

4) 단일행 함수 중 '숫자 함수'
- SQRT(n) : 제곱근, 루트 값 구하는 함수
- LOG(a, b) : 로그 값 구하는 함수
- LN(n) : 자연로그 값 구하는 함수
- POWER(a, b) : 누승(계승) 값 구하는 함수
- MOD(a, b) : 나머지 구하는 함수
- ABS(n) / ABS(-n) : 절대값 구하는 함수
- SIN(n) , COS(n) , TAN(n) : 사인, 코사인, 탄젠트 구하는 함수

- ROUND(number, [+-위치값]) : 반올림 함수
- number가 0이면 0을 반환한다.
- 특정 위치(지정한 자리 이하)에서 반올림한 결과 값을 반환하는 함수이다.
- ROUND(a, b) : a를 소수점 이하 b+1 자리에서 반올림하여 b자리까지 출력,
b값이 음수이면 소수점 왼쪽 b자리에서 반올림하여 출력한다.


- 절삭(내림) 함수 : TRUNC()와 FLOOR() 함수
- TRUNC(a, [+-위치]): 숫자값을 특정 위치(지정한 소수점 자리수 이하)에서 절삭하여 정수 또는 실수값 리턴
TRUNC(n) == FLOOR(n) == TRUNC(n, 0)
TRUNC(a, b) -> a를 b+1 자리에서 절삭하여 출력, 음수이면 왼쪽 b자리에서 절삭
- FLOOR(n) : 숫자값을 소숫점 1번째 자리에서 절삭하여 정수값을 리턴 -> 실수값을 리턴 X

- CEIL() : 소수점 첫 번째 자리에서 올림하는 함수
- 오라클에서 특정 위치에서 올림하는 함수는 없다.

- SIGN : 숫자의 값에 따라 1, 0, -1의 값을 반환하는 함수

문제) emp 테이블에 평균 급여보다 많이 받으면 '많다' 적게 받으면 '적다' 같으면 0이 출력되도록 하자
위의 문제를 아래 쿼리로 작성을 하면 에러가 발생한다.

이유는 복수행 함수와 일반행 칼럼이나 단일행 함수는 같이 사용할 수 없기 때문이다.

아래 쿼리처럼 서브쿼리 안에 쿼리를 작성하면 해결할 수 있다.

5) 단일행 함수 중 '문자 함수'
- UPPER() : 대문자로 변환하는 함수
- LOWER() : 소문자로 변환하는 함수
- INITCAP() : 첫문자만 대문자로 변환하는 함수

- LENGTH() : 문자열 길이를 가져오는 함수
- CONCAT() : 문자열 연결하는 함수
- SUBSTR() : 원하는 데이터를 지정한 위치부터 지정한 길이만큼 잘라오는 함수

- INSRT() 함수
- 문자열 중에서 찾고자 하는 문자가 우측/좌측으로부터 처음 나타나는 위치를 숫자로 반환하는 함수
- 찾는 문자가 없으면 0을 반환
- position : 문자열을 찾기 시작할 위치
- occurrence : 문자열이 n번째에 나타나는 위치(발생 순서)

+ 전화번호를 가지고 있는 테이블 생성
쿼리문으로 테이블을 생성하는 법은 아직 배우지 않아 메뉴로 테이블을 추가하는 것을 배웠다.
1) 좌측 접속 메뉴에서 테이블을 생성하고자 하는 계정의 + 버튼을 눌러 열어보면 테이블 메뉴가 있다. 그 메뉴를 우클릭하면 다음과 같은 메뉴가 보이고 새테이블을 누른다.

2) 새 테이블 메뉴를 누르면 아래와 같은 화면이 뜬다.
테이블 이름과 필요한 컬럼의 이름, 데이터 유형, 널의 유무를 설정해준다.
고유키를 가질 컬럼에 PK 부분을 체크하면 열쇠모양 표시가 뜨게 된다.

3) 테이블 생성을 했다면 화면이 바뀌게 되는데 상단의 데이터 탭을 눌러 행(레코드)를 추가해준다.
추가 후 꼭 커밋을 해줘야한다.



위의 테이블을 가지고 다음과 같은 문제를 풀어보았다.
문제) 전화번호의 지역번호만 출력, 가운데 4자리만 출력, 뒤 4자리 출력

- RPAD / LPAD 함수
- 지정된 길이에서 문자값을 채우고 남은 공간을 우(좌)측부터 특정값으로 채워 반환하는 함수

문제1) 그래프 그리기

문제2) 주민등록번호 뒷자리 가리기

- ASCII(char) -> char 문자를 ASCII 코드 값으로 반환 오라클 문자 자료형 : char
- CHR(ASCII 코드값) -> ASCII 코드 값을 문자로 반환

- GREATEST( ?, ?, ? ...) : 가장 큰 값을 가져오는 함수
- LEAST( ?, ?, ?) : 가장 작은 값을 가져오는 함수

- REPLACE()와 VSIZE()는 어제 다뤘던 부분이라 넘기도록 하겠다.
6) 단일행 함수 중에 '날짜 함수'
- 날짜형 반올림, 절삭 함수 : TRUNC()와 ROUND()
- TRUNC()
일을 절삭하면 그 날을 자정을 출력
월을 절삭하면 그 달의 1일을 출력
년을 절삭하면 금년 1월 1일 출력
- ROUND()
일을 반올림할 때 정오를 넘으면 다음날 자정을 출력, 넘지 않으면 그 날의 자정을 출력
월을 반올림할 때 15일 이상이면 다음 달, 15일을 넘지 않으면 현재 달의 1일을 출력
년을 반올림할 때 6월을 넘으면 다음해의 1월 1일 출력, 넘지 않으면 그 해의 1월 1일 출력
요일을 반올림할 때도 요일의 반이 지나면 다음날로 출력, 넘지 않으면 그 날을 출력한다.


- 날짜에 산술 연산을 사용하는 경우 반환되는 데이터 타입
날짜형 + 숫자 = 날짜형
날짜형 - 숫자 = 날짜형
날짜형 - 날짜 = 일수차(숫자)
날짜형 + 숫자/24(시간) = 날짜형


'TIL > Oracle' 카테고리의 다른 글
[SIST] Oracle_days07 (0) | 2022.04.12 |
---|---|
[SIST] Oracle_days06 (0) | 2022.04.11 |
[SIST] Oracle_days04 (0) | 2022.04.07 |
[SIST] Oracle_days03 (0) | 2022.04.06 |
[SIST] Oracle_days02 (0) | 2022.04.05 |