본문 바로가기

데이터베이스/SQL & PL/SQL

[SQL] SELECT, 데이터를 조회하자!


 데이터 베이스 안에 있는 데이터를 조회하기 위해서는 이번시간에 알아볼 SELECT문이 필수 입니다.
기본이기도 하구요. 사실 SELECT문만 잘 사용할 줄 안다면, 프로그래밍 할때도 많은 도움이 됩니다.

 일단, 우선 SELECT문의 형식부터 알아보겠습니다.
SELECT  컬럼명1, 컬럼명2, ....
FROM     테이블명
WHERE    조건
ORDER BY 컬럼명;

 SELECT는 단독으로 쓰여질 수 없습니다. 필수로 따라가야 할 것이 FROM이구요.
그외 조건(WHERE)이나 기타 다른 키워드를 사용할 수 있습니다.

 SELECT에서는 우선 조회할려는 데이터가 담겨있는 컬럼을 조회합니다. 한 컬럼내에서는 동일한 타입과 성격의 데이터가 저장이 되는데요.
하나의 테이블이 하나 이상의 컬럼을 담고 있을때 SELECT 를 통해서 원하는 컬럼만 조회할 수 있게 됩니다.

 FROM 에서는 조회할려는 컬럼이 존재하는 테이블을 명시해줘야 합니다. 데이터를 찾을때, 시스템은 우선적으로 FROM절을 통해서 어떤 테이블 있는 컬럼과 데이터 인지를 확인하는 절차를 거치게 됩니다. 기본적으로 FROM 절이 없을경우는 SELECT문이 실행이 되질 않습니다. 무슨 테이블에 해당 컬럼이 있는지 찾질 못하기 때문이죠. 반대로 명시해준 테이블에 없는 컬럼이 명시될 경우는 조금 다릅니다.
뒤에서 배울 [Literal Character Strings] 와 관련이 있겠습니다. WHERE절과 ORDER BY는 다른 글에서 설명하기로 하구요.

 오라클 설치시에 제공되는 HR계정으로 접속시에 이 스키마에는 기본적으로 7개의 테이블이 제공되는데요.
참고로 그중에서 오라클에서 제공하는 hr계정의 employees 테이블은 다음과 같습니다.

    EMPLOYEES
EMPLOYEE_ID
MANAGER_ID
DEPARTMENT_ID
FIRST_NAME
LAST_NAME
EMAIL
PHONE_NUMBER
HIRE_DATE
JOB_ID
SALARY
COMMISSION_PCT

 위의 테이블 정보를 토대로 다음과 같이 정보를 조회할 수 있겠습니다.
SELECT department_id, last_name, first_name
FROM hr.employees ;

 굳이 설명하자면, hr스키마가 가지고 있는 employees 테이블에서 위의 세개의 컬럼, 'department_id, last_name, first_name' 에 대해서만 정보를 조회하겠다라는 뜻이 됩니다.

 조회한 결과는 다음과 같습니다.

전체 결과의 일부입니다.

 보시면 SELECT에 명시한 3개의 컬럼에 대해서만 정보가 조회 되었죠?

 만약에 해당 테이블에 대하여 모든 컬럼에 대해서 정보를 조회하고 싶다면, 다음과 같이 할 수 있습니다.
SELECT *
FROM hr.employees ;

 *은 '모든~' 이라는 의미를 갖습니다. 그렇기 때문에 employees 테이블의 모든 컬럼에 있는 데이터를 조회하게 되죠.

 조회한 결과는 다음과 같습니다.


컬럼이 길게 조회되서 2단으로 분리하였습니다. 전체결과의 일부입니다.

 위에서 봤듯이 11개의 모든 컬럼에 대해서 데이터가 조회되는 군요. 이렇게 SELECT는 데이터를 조회할 수 있도록 하는 기능을 제공합니다.
필수로 동반해야 할 것은 FROM 절이구요. SELECT문은 SQL의 기본이니까 다들 꼭 숙지하도록 합시다. 

 지금까지 SELECT문의 기본형식문을 보았는데요. 이번에는 SQL문을 작성시에 유의사항이 있는데 알아봅시다.
 1. 대소문자 구분을 하지 않습니다.
- 하지만 대소문자를 구분해서 적어놓는다면 구문 분석시에 시간을 줄일수 있습니다. 참고로 말씀드리자면
오라클에서는 같은 쿼리(Query)일 경우는 (쉽게 설명하자면)디스크에서 데이터를 읽지않고, 메모리에 적재되어 있는 쿼리 정보를 읽어서 다시 쿼리를 재사용하게 되는데, 이때 적는 쿼리가 대소문자가 다를경우 다른 쿼리로 인식해서 디스크로 부터 읽습니다.
이렇게 하면 디스크 I/O가 일어나기 때문에, 성능면에서는 좋지 않습니다.
 아무튼 이렇다라는 것만 알아두고, 대소문자를 구분해서 적도록 합시다.
- 그리고 MS-SQL과는 다르게 오라클에서는 데이터 자체의 대소문자를 구분합니다. 그래서 WHERE절을 작성할 때 주의해야 합니다.
- 되도록이면 SELECT나 FROM같은 예약어의 경우는 대문자를 적어주는것이 일반적이고 그외 테이블명이나 컬럼명과 같은건 소문자로 구분되게 적어주는 것이 좋습니다.

2. SQL문을 작성할때 한 라인에 전부 적을수도 있고 나눠서 적을 수도 있다.
-
SQL> SELECT department_id, last_name, first_name
FROM hr.employees
WHERE department_id=100;

SQL> SELECT department_id, last_name, first_name FROM hr.employees WHERE department_id=100;
위에 두개 문장은 동일한 결과를 가져옵니다. 결국 둘중 어느 방법을 적어도 좋지만 역시나 첫번째 가독성 부분에서 좋습니다.

3. SQLplus나 iSQLplus에서 문장을 끝날때는 세미콜론(;)을 찍어줍니다.
결국 문장이 끝났으니 처리 하라는 뜻인거죠.

도움 되셨다면 밑의 추천(손가락 표시)과 댓글 부탁드립니다.