[Oracle] oracle 문법, 단일행 함수
sql Developer
- Oracle 데이터베이스 개발용 도구
- 개발 / 관리기능도 포함하고 있다.
- 포터블 형태기 때문에 별도 도구의 설치과정 없이 압축만 해제하면 바로 사용할 수 있다.
Oracle SQL Developer Downloads
- 첫 프로그램 실행 시 이전 사용하던 sql developer에서 설정값을 읽어올건지 팝업이 뜬다.
필요한 설정값이 있다면 적절하게 선택하고 이어서 진행한다.
- 새 접속 생성하기
Oracle 문법
column alias
- 컬럼명을 표기하는 방법은 기본적으로 모두 대문자로 표기하는 것이다.
- 별도로 대소문자 또는 특수문자 공백을 포함하는 컬럼명을 출력원하는 경우 ("")큰따옴표 기호로 묶어서 출력해준다.
SELECT last_name "NaMe",
department_id DEPt_id
FROM employees;
NaMe |DEPT_ID|
-----------+-------+
King | 90|
Kochhar | 90|
De Haan | 90|
Hunold | 60|
Ernst | 60|
…
CONCAT
- 문자열을 합친 결과를 만들어주는 함수로 Oracle에서도 존재하지만 인수의 입력 수가 2개로 제한되어 있다.
SQL> SELECT CONCAT(employee_id, manager_id, department_id)
2 FROM employees;
SELECT CONCAT(employee_id, manager_id, department_id)
*
ERROR at line 1:
ORA-00909: invalid number of arguments
연결연산자(||)
- CONCAT과 비슷하나, 연산 기호 (||)로 원하는 요소를 이어서 작성할 수 있다.
- 연결된 컬럼의 끝 부분에 column alias를 추가해서 사용하는 것도 가능하다.
SELECT last_name || department_id || manager_id "ids"
FROM employees;
ids |
----------------+
King90 |
Kochhar90100 |
De Haan90100 |
Hunold60102 |
Ernst60103 |
…
문자열 비교
- Oracle과 같은 관계형 데이터베이스에서는 기본적으로 문자열의 대소문자와 스펠링까지 모두 일치한 경우에만 동일한 데이터라고 인정한다.
- Mysql이 예외인 상황
단일행 함수
- 단일행 함수는 데이터베이스마다 이름이나 기능은 유사한 경우가 대부분이지만 세부적으로 입력가능한 값의 수나 순서의 차이가 있으므로 미리 확인하고 사용하는 것이 좋다.
문자열 데이터타입
- 고정문자열 : mysql(CHAR) = oracle(CHAR)
- 가변문자열 : mysql(VARCHAR) = oracle(VARCHAR2)
문자함수
- 문자열 데이터들을 조작하는 기능의 함수들이 위치해 있다.
- 대부분은 mysql과 유사한 함수들이다.
LOWER | UPPER | INITCAP
- LOWER : 소문자 변환함수
- UPPER : 대문자 변환함수
- INITCAP : 첫글자를 대문자로 변환한다. 첫글자 이후 문자들은 소문자로 출력한다.
SELECT LOWER('Whale'),
UPPER('Whale'), INITCAP('Whale elahW')
FROM dual;
LOWER('WHALE')|UPPER('WHALE')|INITCAP('WHALEELAHW')|
--------------+--------------+---------------------+
whale |WHALE |Whale Elahw |
- 문자열 값 비교 시 사용하는 컬럼의 대소문자의 규격이 패턴이 없거나 잘 모르는 경우에는 사용할 컬럼과 조건값 모두 대소문자 변형 함수를 활용하여 통일시켜 작업할 수 있다.
- 아래의 예문에서는 모두 대문자로 변형했기 때문에 대소문자는 신경쓸 필요가 없다.
SELECT last_name FROM EMPLOYEES WHERE UPPER(last_name) = UPPER('whalen'); |
LAST_NAME|
---------+
Whalen |
dual 테이블
- oracle에서는 FROM절을 생략할 수 없다.
리터럴 값으로 구문을 작성하는 경우 테이블 데이터가 굳이 필요하지 않는데, 이런 경우 활용할 수 있는 DUAL이라는 가상 테이블을 공용으로 사용할 수 있도록 제공한다.
SELECT INSTR('CORPORATE FLOOR', 'OR',-3, 2) "Reversed Instring" FROM DUAL; |
Reversed Instring|
-----------------+
2|
SQL> DESC DUAL; |
Name Null? Type
----------------------------------------- -------- ----------------------------
DUMMY VARCHAR2(1)
SELECT * FROM dual; |
DUMMY|
-----+
X |
날짜 데이터
- oracle에서는 DATE로 날짜 시간 관련 값들을 저장하고 관리한다.
- MySQL ORACLE
DATE(날짜) DATE(날짜시간)
TIME(시간)
DATETIME(날짜시간) - Oracle의 DATE 데이터타입에는 년, 월, 일, 시, 분, 초의 정보를 저장한다.
다만, 데이터베이스의 기본 설정에 따른 출력 형식과 클라이언트의 출력형식 설정에 따라 DATE를 그냥 출력하는 경우 결과값이 다른 형식의 문자열로 출력 된다.
- DBeaver
SELECT SYSDATE FROM dual; |
SYSDATE |
-----------------------+
2023-12-13 15:17:36.000|
- sql*plus
- 데이터베이스의 기본값을 읽어와서 출력해준다. 현재 서버의 국가 설정은 미국.
SQL> SELECT sysdate 2 FROM dual; |
SYSDATE
---------
13-DEC-23
- sql developer
SELECT sysdate FROM dual; |
23/12/13
날짜의 산술연산
- oracle에서는 날짜데이터와 숫자의 덧셈, 뺄셈 연산을 지원한다.
- 1의 날짜에서는 하루의 크기와 같다.
SELECT SYSDATE - 1, sysdate, sysdate + 1 FROM dual; |
SYSDATE-1 |SYSDATE |SYSDATE+1 |
-----------------------+-----------------------+-----------------------+
2023-12-12 15:26:12.000|2023-12-13 15:26:12.000|2023-12-14 15:26:12.000|