코딩하렴

DML Data Manipulation Language - SELECT

by 으렴


SELECT


테이블에 입력된 데이터를 조회하기 위해서 SELECT문을 사용한다

SELECT문은 특정 칼럼이나 특정 행만을 조회할 수 있다.

SELECT *FROM EMP;


Order By

SELECT * FROM EMP ORDER BY ENAME, SAL DESC;

DESC는 내림차순(Descending)

SELECT * FROM EMP ORDER BY ENAME, SAL ASC;

ASC는 오름차순(Ascending)


Order by가 정렬하는 시점은 모든 실행이 끝난 후에 개발자에게 데이터를 출력하기 바로 직전이다.

정렬을 하기때문에 데이터베이스 메모리를 많이 사용하게 된다. 즉, 대량의 데이터를 정렬하게 되면 정렬로 인한 성능 저하가 발생한다.

정렬을 회피하기 위해서 인덱스를 생성할 때 사용자가 원하는 형태로 오름차순 혹은 내림차순으로 생성해야한다.



INDEX를 사용한 정렬 회피


정렬은 Oracle 데이터베이스에 부하를 준다. 그래서 인덱스를 사용해서 Order by를 회피할 수 있다.


create table dept(
deptno varchar2(4) primary key,
deptname varchar2(30)
);
insert into dept(deptno,deptname) values ('1000','HR');
insert into dept(deptno,deptname) values ('1001','Finance');
insert into dept(deptno,deptname) values ('1002','Marketing');
insert into dept(deptno,deptname) values ('1003','Production');
insert into dept(deptno,deptname) values ('1004','R&D');
insert into dept(deptno,deptname) values ('1005','Design');


이렇게 되어있다고 치면 


SELECT /*+ INDEX_DESC(A) */ FROM DEPT A;


이렇게 입력 했을 경우 맨 위에 출력되는 것은 Design이다


힌트를 사용하여 dept 테이블에 생성된 인덱스를 내림차순으로 읽게 지정했다.




Distinct

컬럼 명 앞에 지정하여 중복된 데이터를 한번만 조회하게 한다.


SELECT DEPTNO FROM EMP BY DEPTNO;

만 하면 중복된 부서번호가 많이 나온다.


SELECT DISTINCT DEPTNO FROM EMP ORDER BY DEPTNO;

중복된 데이터를 제거하여 조회함.



Alias

Alias(별칭)은 테이블명이나 컬럼명이 너무 길어서 간략하게 사용할 때 사용한다.


SELECT DEPTNAME AS "이름" FROM DEPT A

컬럼명을 '이름'으로 출력되게 하며 DEPT테이블명 대신에 A를 사용하겠다.

WHERE A.DEPTNO=='1001';

A를 컬럼명처럼 사용하겠다.


이렇게 하면 컬럼 명이 '이름'으로 출력된다.




WHERE

WEHRE문에서는 비교연산자 부정비교연산자 논리연산자 SQL연산자 부정SQL등을 사용할 수 있다.


비교연산자

 = 같은 것을 조회

 < 작은 것을 조회

 <= 작거나 같은 것을 조회

 > 큰 것을 조회

 >= 큰 것과 같은 것을 조회


부정 비교 연산자

 != 같지 않은 것을 조회한다

 ^= 같지 않은 것을 조회한다

 <> 같지 않은 것을 조회한다

 NOT 컬럼명 = 같지 않은 것을 조회한다.

 NOT 컬럼명 > 크지 않은 것을 조회한다.


논리연산자

 AND 조건을 모두 만족해야 참이 된다.

 OR 조건 중 하나만 만족해도 참이된다.

 NOT 참이면 거짓으로 바꾸고 거짓이면 참으로 바꾼다.


SQL 연산자

 LIKE '비교문자열' 비교문자열을 조회한다. '%'는 모든 것을 의미한다.

 BETWEEN A AND B A와 B사이의 값을 조회한다.

 IN(list) OR을 의미하며 list 값 중에 하나만 일치해도 조회된다.

 IS NULL NULL값을 조회한다.


부정 SQL 연산자

 NOT BETWEEN A AND B A와 B사이의 해당되지 않는 값을 조회한다.

 NOT IN (list) list와 불일치한 것을 조회한다

 IS NOT NULL NULL값이 아닌 것을 조회한다.




LIKE


LIKE문은 와일드 카드를 사용해서 데이터를 조회할 수 있다.


 % : 어떤 문자를 포함한 모든 것을 조회한다. 'pre%'는 pre로 시작하는 모든 문자를 조회한다.

 _ : 한 개인 단일 문자를 의미한다.



SELECT * FROM EMP WHERE ENAME LIKE 'CHION%';

CHION으로 시작하는 모든 데이터를 조회한다.


SELECT * FROM EMP WHERE ENAME LIKE '%RYEOM';

RYEOM으로 끝나는 모든 데이터를 조회한다.


SELECT * FROM EMP WHERE ENAME LIKE '%I%';

i가 들어간 모든 것을 조회한다.


SELECT * FROM EMP WHERE ENAME LIKE 'BABO';

만약에 와일드카드를 쓰지 않는다면 = 이퀄과 같다.



SELECT * FROM EMP WHERE ENAME LIKE '_TION';

ENAME컬럼에서 TION으로 끝나고 앞에 하나의 데이터가 더있는것을 조회한다.





BETWEEN

SELECT * FROM EMP WHERE SAL BETWEEN 1000 AND 2000;

SAL이 1000부터 2000사이의 값을 조회한다.


SELECT * FROM EMP WHERE SAL NOT BETWEEN 1000 AND 2000;

SAL이 1000부터 2000사이의 값이 아닌 것을 조회한다.



IN

IN은 OR의 의미를 가지고 있어서 하나의 조건만 만족해도 조회가 된다.

SELECT *FROM EMP WHERE JOB IN('STAFF','MANAGER');

JOB이 STAFF이거나 MANAGER인 경우를 조회한다.


SELECT *FROM EMP WHERE (JOB, DEPTNO) IN(('STAFF','1000'),('MANAGER','1002'));

IN조건이 다중일 경우 지정할 수 있다.

이때 데이터 값은 괄호를 사용하여 묶어준다.




NULL값 조회 

NULL은 모르는 값을 의미한다.

NULL은 값의 부재를 의미한다.

NULL과 모든 비교는 알수없음을 반환한다.

NULL과 숫자 혹은 날짜를 더하면 NULL이 된다.

NULL값은 비교연산자로 비교할 수 없다. 만약 비교연산자로 NULL을 비교한다면 거짓이 나온다.



NULL값 조회


NULL을 조회할 경우는 IS NULL을 사용하고 NULL값이 아닌 것을 조회할 경우는 IS NOT NULL을 사용한다.

SELECT * FROM EMP WHERE MGR IS NULL;
SELECT * FROM EMP WHERE MGR IS NOT NULL;


사이트의 정보

코딩하렴

으렴

활동하기