프로그래밍/Database

Oracle 데이터베이스 Select문 완전정복 -(1)

Jay Tech 2017. 3. 22. 23:29
반응형

오라클에서 데이터베이스에서 select문을 다 부셔버리자.



먼저 쿼리문을 등록해야한다. 다운받아서 sql developer에 로그인하여 복사 붙여넣기하자. 로그인방법을 모른다면 검색하면 바로 나온다.

q.txt


이것을 쿼리문 쓰는 곳에다가 붙여넣고 저 두 번째 버튼을 누르면 왼쪽 상단처럼 테이블이 만들어진다. 데이터는 임의로 삽입하였다.


왼쪽상단에 테이블이 만들어진것이 보일 것이다.




이제 select문을 활용하여 보자.


EMP 테이블의 내용이다.







select ename from emp; 


emp테이블에서 ename을 뽑아내는 것이다. 이건 쉽다.



하지만 이렇다면?


Select Ename From Emp;   // 대소문자가 엉켜있다.


SELECT ename 

FROM emp;        // 엔터가 쳐져있다.


결과는 같다. 결론은 대소문자와 공백은 영향이 없음을 알 수 있다.





SELECT ename, ename FROM emp;


같은 테이블을 2번 조회해 보았다.


읭?? 칼럼명이 저렇게 바뀌었다. 언더바가 생기는구나.



##  산술연산자


select sal, -sal from emp; 



아 저렇게 설정한대로 칼럼명이 바뀌는 구나.




좀 더 복잡한 연산을 해보자.


 SELECT sal, (-sal + 100) * -2 FROM emp;



null값 조회해 보기


select empno, job, comm from emp;




select sal, comm, (sal+comm)*12 from emp;

null값이 포함된 칼럼의 연산



연산해도 null 이구나


그럼 연산결과를 0으로하고싶다. 즉, null인연산은 그냥 0으로 표현하고싶은데?


select empno, ename, NVL(comm,0) comm from emp;


NVL안의 comm이 null이면 0으로 표현하라라는 뜻이다.



매니저가 할당 되어있지 않은 최고 직급의 사원인 경우를 보자.

아까 테이블을 만들 때 KING이 한명 있었다. 이 사람은 PRESIDENT 즉, 대빵이다.



이 사람은 MGR가 null이다. 없으니까. 그럼 출력될 때 NO MANAGER로 바꿔서 출력하고 싶다. 그럼 그냥 테이블에 그냥 NO MANAGER넣으면안되나요? 그건 정신이 나간것이다.


select NVL(mgr, 'NO MANAGER') from emp; 

이렇게 하면 되겠다.



 “ORA-01722: invalid number”

..????


들어가있는 애들은 integer인데 string으로 변환 시키려고 해서 에러가 나는 것이다.



Alias

SELECT sal*12 annual_salary FROM emp;

사원들의 월급을 출력하고 싶다.

sal*12 를 annual_salary로 표현하고 싶다는 뜻이다. 대소문자는 상관없다 하지만 저 언더바(_)대신에 그냥 공백으로 띄어버리면 안 된다.

SELECT sal*12 "Annual Salary" FROM emp;

SELECT sal*12 AS "Annual Salary" FROM emp;

얘네들도 같다.



## 연결 연산자 : 문자열을 연결(Concatunation)


칼럼들의 값을 연속해서 붙여서 뽑고 싶다.


select empno||ename from emp;



붙어서 뽑혔다. 아 근데 너무 딱 붙어있다. 



select ename||' '||sal from emp;
띄어쓰기를 해보자.

띄어졌네?


그럼 문장도 되나??

select ename||'is working as a '||job FROM emp;

문장을 뽑아 보자.

어 된다.



## Dual Table



select * from dual


????? 더미?


DUAL은 원래 있는 테이블이다. 오라클 표준 테이블로서 오직 한 행(row)에 한 컬럼만 담고 있는 dummy테이블로서 일시적인 산술연산이나 날짜 연산을 위하여 주로 쓰인다.


뭔소리일까.

코딩을 하다보면 여러 계산을 하는 경우가 생긴다. SELECT문에서 10*10을 계산해야 한다고 가정하면 FROM을 써줘야한다. 근데 뭐 어떤 테이블에서 해야될지 마땅하지 않다. 그럴때 dual에다가 걸어버리면 된다. 잘 쓰면 매우 유용하다.


ex)

 SELECT 'Korea Fighting' FROM emp;



emp row수만큼 튀어나온다.



dual을 사용하여 서버의 현재 시간이나 현재 접속중인 DB 사용자를 조회해 볼 수 있다.

select sysdate, user from dual



다음 포스팅에서 계속 정복해서 select문을 다 부셔버리자.


도움이 되었다면 공감 눌러주시고 질문있으시면 댓글 남겨주세요~

반응형