본문 바로가기

데이터베이스

[ORACLE 3일차] DML (2)

* Order by

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

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


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

특별한 지정이 없으면 Order by는 오름차순으로 정렬한다.


예를 들어,


SELECT * FROM EMP ORDER BY ENAME, SAL DESC;

ENAME으로 오름차순으로 정렬하고 SAL로 내림차순으로 정렬한다. 


SELECT DISTINCT DEPTNO FROM EMP ORDER BY DEPTNO;

모든 부서 번호가 중복되게 나오는 것이 아니라, 중복된 것은 제외하고 SELECT 할 수 있다.



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

SELECT ENAME AS "이름" FROM EMP a WHERE a.EMPNO=1000;

ENAME이 이름이라는 형태로 출력이 되고, 테이블명 EMP가 a로 별칭을 줄 수 있다.



* where문을 활용하기

where문 사용할 수 있는 연산자는 비교 연산자, 부정 비교 연산자, 논리 연산자, SQL 연산자, 부정 SQL 연산자가 있다.


1. 같지 않은 것을 WHERE절에 넣어 사용하는 방법

!=, ^=, <>. NOT 칼럼명 =


2. NULL 값을 조회

IS NULL <-> IS NOT NULL 


3. OR를 의미하며 list 값 중에 하나만 일치해도 조회된다.

IN (list)


* where문을 예로 확인하기


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

-> ENAME이 test로 시작하는 모든 데이터를 조회한다.

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

-> ENAME의 마지막이 '1'로 끝나는 모든 것을 조회한다.



SELECT * FROM EMP WHERE SAL BETWEEN 1000 AND 2000;

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


SELECT * FROM EMP WHERE ENAME LIKE 'test_';

-> ENAME 칼럼에서 'test'로 시작하고 하나의 데이터만 더 있는 것만 조회한다.


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

-> IN은 OR의 의미를 가진다. 그래서 JOB이 CLERK 또는 MANAGER인 경우를 모두 조회


SELECT * FROM EMP WHERE (JOB,ENAME) IN ( ('CLERK','TEST1') , ('MANAGER','TEST4') );

-> 그룹화를 시켜 SELECT를 할 수 있다.



* NULL값 조회


NULL의 특징

1. 모르는 값을 의미

2. 값의 부재를 의미

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

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

5. NULL로 비교하면 거짓으로 나온다.


* HAVING문 사용


SELECT DEPTNO, SUM(SAL) FROM EMP 

GROUP BY DEPTNO 

HAVING SUM(SAL) > 10000; 

-> GROUP BY 결과에서 급여합계가 10000이상만 조회한다.











'데이터베이스' 카테고리의 다른 글

[ORACLE 6일차] DCL  (0) 2019.01.12
[ORACLE 5일차] DML (4)  (0) 2019.01.11
[ORACLE 4일차] DML (3)  (0) 2019.01.10
[ORACLE 2일차] DML (1)  (0) 2019.01.08
[ORACLE 1일차] DDL  (0) 2019.01.07