글 작성자: beaniejoy

1. DQL(Data Query Language)

 

DB에서 데이터에 접근하고 조작할 수 있는 언어와 인터페이스를 제공한다. DML(Data Manipulation Language)은 단어에서도 알 수 있듯이 DB의 데이터를 조작하고 프로그램과 DB사이에 데이터처리를 위해서 사용한다. 주로 CRUD 차원에서 INSERT, SELECT, UPDATE, DELETE 명령어를 다룬다고 할 수 있다.

 

DML에서도 거의 90% 이상이 SELECT를 다룰 정도로 SELECT는 매우 중요한 쿼리다. 이를 따로 떼어내 DQL(Data Query Language)로 표현하기도 한다. 지금부터는 DQL인 SELECT 명령어에 대해서 배웠던 내용들을 정리해볼 생각이다.

 

 

2. 기본 SELECT 정리

 

 SELECT의 기본 형식에 대해서 배웠던 내용들을 정리하기전에 알아야할 것이 탐색하는데 들어가는 비용측면에서도 고려해야 한다는 것이다. SELECT를 잘못 사용하면 극히 일부의 내용만을 필요로 하는 작업에서 여러번 전체 테이블 풀스캔(Full Scan)해야 하는 사태가 발생할 수 있다. 연습하려는 테이블은 비록 데이터 수가 20개도 안되는 양이라 별 차이가 없겠지만 현업에서 쓰이는 테이블은 양이 어마어마하기 때문에 풀스캔을 하지 않는 방법으로 SELECT문을 DB에 보내는 것이 좋다. 이 점도 유의하면서 접근해보고자 한다.

 

 SELECT문의 기본 형식은 다음과 같다.

출처: 에이콘아카데미

 이 기본형식을 최대한 지키면서 쿼리를 보내는 것이 좋다. 한번 하나하나 알아보자.

 

 

 

1) 칼럼 선택

 칼럼 선택은 정확하게 기입을 해주는 것이 좋다. 

 

 '*' 기호를 이용해서 추출하는 방법도 있는데 이렇게 하면 해당 테이블의 모든 칼럼을 다 추출하겠다는 의미다. 이런 식으로 사용해도 문제는 없으나 DB를 불러올 때 상당한 시간 비용이 발생한다. 되도록 구체적인 칼럼이름을 기입해서 추출하는 것을 추천한다.

 

 

 

2) 칼럼명 바꾸기

 칼럼 선택해서 표시할 때 칼럼명을 바꿀 수도 있다. 칼럼명을 empno → eno / ename → en 이렇게 바꾸는데 "empno eno"으로 띄어쓰기를 통해 표현하는 것과 "empno AS eno" 처럼 AS를 이용해 바꾸는 방법 두 가지가 존재한다.

 

 추출한 결과를 출력하면

 이렇게 바뀐 칼럼명으로 출력이 된다. raw데이터의 칼럼이 너무 길어서 추출한 결과를 가지고 다시 가공을 하기 힘들 때 이렇게 짧게 칼럼명을 축약할 때 사용할 수 있을 것이다. (이를 Alias라고 부른다.)

 

 

 

3) ORDER BY로 정렬하기

 SELECT를 할 때는 기준을 하나 잡고 정렬을 해주는 것이 좋다. 정렬에는 오름차순(ASC)과 내림차순(DESC) 두 가지 방식이 있는데 defualt로 ASC가 지정되어 있기 때문에 오름차순하고 싶을 땐 ASC를 안 써도 된다.

 

 

 

4) 연산자 이용하기

 

이런 식으로 칼럼에다가 연산자를 취해서 연산된 결과를 출력하게끔 할 수도 있다.

 

 

 

5) 비교 연산자 이용하기

 WHERE 절에서 주로 사용한다. WHERE은 조건절로서 테이블에서 조건을 걸어 해당 조건에 맞는 데이터만 출력한다. 비교연산자에는 다들 잘 알고 있는 (=, !=, >, <, >=, <=) 등이 있다. (보통 프로그래밍 언어에서 같다의 의미로 쓰이는 연산자로 '=='를 사용하는데 SQL에서는 '='로 쓰이니 헷갈리지 말자)

 "deptno != 30"과 "deptno <> 30"은 같은 결과를 출력한다. DB전문가들이 <>와 같이 사용한다고 하니 참고만 하자.  

 

 

 

6) AND, OR, IN 연산자 

AND는 두 조건을 동시에 만족하는 데이터를 추출하는 것이다.

 OR는 AND와 다르게 두개의 조건 중 하나라도 만족하는 데이터 전부 추출하는 것이다. IN연산자와 비슷한 의미를 가진다. 바로 위 두 개의 쿼리는 같은 결과값을 출력한다.

 

→ OR와 IN은 둘 중 하나의 조건이 일치하는지를 보기 때문에 조건 두개를 OR로 연결지었다면 풀스캔을 두번하는 꼴이 된다. 이는 상당히 비효율적이며 최대한 AND연산자를 활용해 풀스캔을 줄이는 것이 좋다. (AND연산은 풀스캔 한번으로 가능하다.)

 

 

 

7) IS NULL / IS NOT NULL 

 comm이 null값이 들어있는 데이터를 추출할 때 IS NULL을 사용하고 반대로, 값이 들어있느 데이터만 추출하고 싶을 때 IS NOT NULL을 사용하면 된다.

 

 

(계속해서 SELECT에서 함수(Function)에 대해 정리해보겠습니다.)