본문 바로가기
DATABASE/ORACLE

[Oracle] SQL Operator

SQL Operator





종류 

예 

SELECT 칼럼명 + comm FROM 테이블 명

-

SELECT 칼럼명 - 100 FROM 테이블 명 

*

SELECT 칼럼명 *12 FROM 테이블 명

/

SELECT 칼럼명 / 12 FROM 테이블 명


계속 사용해오던 아이유와 삼도다의 정보가 들어있는 테이블을 사용한다.



SAL 칼럼에 * 연산자를 사용하였다.


SQL> SELECT 칼러명, 칼럼명, 칼럼명*12 FROM 테이블명;


이렇게 유저의 이름과, 급여, 그리고 급여에 *12를 하여 연봉을 확인 할 수 있다.




NULL도 데이터이다.


오라클에서의 NULL은 매우 중요한 데이터 이다.

오라클에서는 컬럼에 NULL값이 저장 되는 것을 허용 하는데, NULL 값을 제대로 이해하지 못한 채 쿼리문을 사용하면 원하지 않는 결과를 얻을 수 있다.


NULL


● 0이 아니다.

● 빈 공간도 아니다

● 미확정, 알 수 없는 값을 의미한다

● 어떤 값인지 알 수 없지만, 어떤 값이 존재하고 있다.

● ? 또는 ∞의 의미도 포함하고 있다

● 연산, 할당, 비교가 불가능하다.  / 100 + ? = ?



예시 


현재 테이블



아이유는 월급 (SAL)으로 5000을 받고, 커미션(COMM)으로 500, 삼도다는 월급으로 100을 받으며 커미션에는 NULL 값이 들어 가있다.


만약, 연봉으로 계산을 한다면 아이유는 5000*12 그리고 커미션으로 받는 500을 더 해주면 되며,

삼도다는 100*12 그리고 커미션이 없다면 +0 을 하면 된다.




삼도다의 커미션(COMM)에 0이 아닌 NULL이 들어가 있기 때문에, 월급*12+커미션을 하게 되면, NULL 나오는 것을 확인 할 수 있다.

이렇듯 0과 NULL은 다른 것을 확인 할 수 있다.




그렇다면 삼도다의 연봉을 제대로 구할 방법은 없을까?



nvl(null value 함수)를 사용하면 된다.


sal*12+comm : 삼도다의 값이 NULL이 나오는 것을 확인 했고


nvl(comm,0) comm이라는 칼럼이 null 이면 이 값을 0으로 넣어라,


sal*12+nvl(comm,0) : 제대로 된 연봉이 나오는 것을 확인 할 수 있다.



연봉을 계산한 SAL*12+NVL(COMM,0) 칼럼이름 대신 별칭을 부여하여 ( as 별칭명) 기술 할 수 있다.

대소문자를 구분하여 넣고 싶을 때는 ""을 사용하면 된다.  (as "AnnSal")





Concatenation 연산자의 정의와 사용


Concatenationd의 사전적인 의미는 연결


여러개의 컬럼을 연결할 때 사용,  ||를 사용



이상한 문장이 되었지만 어떤 느낌인지만 이해하면 된다.



DISTINCT 키워드


현재 테이블에서는 아이유와 삼도다가 다른 부서(DEPT)에 속해 있다.

하지만 많은 데이터들이 저장되고, 중복되는 부서들이 생길 것이다.

여기서 부서명만 얻기 위한 목적이라면 중복되어 출력되는 것은 의미가 없다.


중복되는 부서 번호를 한 번씩만 출력하기 위해서 DISTINCT 키워드를 사용한다.



'레알'이 한번만 출력 된 것을 볼 수 있다.