티스토리 뷰




데이터베이스에서는 데이터를 추가하는 일보다, 가져오는 일이 더 많습니다. 이 글에서는 데이터베이스를 통해서 데이터를 가져오는 방법에 대해서 상세히 설명을 드리도록 하겠습니다. 일전에 데이터베이스에 대한 글을 올려놓았으니, 데이터베이스의 기본 개념과 데이터베이스에 대한 간단한 SQL문에 대해서 궁금하다면 아래의 링크를 참조하시기 바랍니다.


이전글 보기


데이터베이스를 통해서 데이터를 가져오는 방법은 Select 문입니다. 데이터를 모두 다 가져올지, 조건을 걸어서 조건에 만족하는 데이터만 가져올지(Where 절)에 대한 차이를 통해서 사용자가 원하는 데이터를 효율적으로 가져올 수 있습니다.


기본적으로 데이터베이스에서 데이터를 가져오기 위해서는 아래와 같이 Select 구문을 사용할 수 있습니다.

Select 구문은 아래와 같이 사용합니다.



Select 문에는 많은 옵션을 사용할 수 있습니다. 옵션은 아래와 같습니다. 


 이름

설명 

 DISTINCT 

 결과의 중복 행 제거 

 *

 테이블의 모든 정보를 가져오기

 COLUMN

 지정된 컬럼의 정보를 가져오기

 ALIAS

 해당 컬럼에 대한 ALIAS를 부여

 테이블 이름

 읽을 테이블의 이름

 WHERE 조건

 수집할 데이터에 대한 조건 설정

 ORDER BY

 데이터 결과에 대한 정렬 설정(ASC : 오름차순, DESC : 내림차순)


위의 테이블에서 확인을 할 수 있듯이, 데이터를 가지고 올때 가져올 데이터의 양(*, COLUMN, ALIAS)을 결정할 수 있습니다. 또한 어떠한 데이터를 가지고 올지에 대한 조건(WHERE)을 설정할 수도 있습니다. 


1. SELECT 구문 간단히 사용하기


모든 데이터를 가져오기 위해서는 아래와 같은 구문으로 사용할 수 있습니다. 이는 모든 COLUMN에 있는 데이터를 가져오라는 명령입니다. TABLE_NAME은 데이터베이스에 있는 사용자가 읽기 위한 테이블 이름을 지정하면 됩니다. 


SELECT * FROM TABLE_NAME;


하지만 특정 조건에 맞는 데이터를 가져오고 싶다면 어떻게 해야할까요? 

이러한 경우에는 WHERE 절을 사용할 수 있습니다. WHERE 절을 사용하는 방법은 아래와 같습니다.


SELECT * FROM CONTACTS_TABLE WHERE MALE= 'MALE';

SELECT * FROM CONTACT_TABLE WHERE AGE=15;


위의 코드를 위해 CONTACTS_TABLE이라는 테이블을 만들어 보았습니다. CONTACTS_TABLE에는 아래와 같은 데이터가 저장이 되어 있습니다. 



이 데이터는 Select * from CONTACTS_TABLE를 이용하여 모든 데이터를 가져온 결과입니다.만약 15살 짜리 사용자 정보만 가지고 오고 싶다면? 남자인 사람들 정보만 가지고 오고 싶다면 WHERE 절을 통해서 조건을 설정할 수가 있습니다.


남자인 사용자만 가져오기 위해서 SELECT * FROM CONTACTS_TABLE WHERE MALE= 'MALE';를 실행해보았습니다. FEMALE이 아닌 MALE 데이터만 가져온것을 확인할 수 있습니다. 



나이에 대한 조건도 걸어보았습니다. SELECT * FROM CONTACT_TABLE WHERE AGE=15;를 실행하면 아래와 같은 결과를 가져올 수 있습니다. 



사용자가 이름만 필요한 경우에는 어떻게 데이터를 읽을 수 있을까요? 위의 테이블에서 설명드렸다싶이, SELECT 이후에 나오는 *를 사용하지 않고, COLUMN의 이름을 지정하면 됩니다. 아래와 같이 설정을 하게 된다면 이름만 가져올 수 있습니다. 


SELECT NAME FROM CONTACTS_TABLE WHERE AGE=15;


결과를 보겠습니다.



2. 조건 두개이상 달기


조건을 2개 달아볼까요. 조건을 2개이상 달기 위해선 OR 연산자와 AND 연산자를 사용할 수 있습니다. 또한 SELECT 구문의 연산자인 IN, LIKE, NOT LIKE, NOT IN등의 연산자도 사용할 수 있습니다. 


WHERE 절에서 사용할 수 있는 연산자들을 한번에 살펴보도록 하겠습니다. 


 이름

설명 

 AND

 여러 조건들의 결과가 모둔 참일때만 참이다.

 OR

 여러 조건중 하나의 결과가 참이라도 참이다.

 BETWEEN A AND B

 A, B를 포함한 데이터 사이의 결과를 가져온다.

 NOT BETWEEN A AND B

 A, B가 사이의 값이 아닌 결과를 가져온다.

 IN

 IN 뒤에 설정된 데이터 값 이내인 결과를 가져온다.

 NOT IN

 IN의 반대 개념이다.

 LIKE

%, _를 사용하고, 이 캐릭터가 아닌 다른 단어가 비슷하면 결과를 가져온다.

 NOT LIKE

 NOT LIKE의 반대 개념이다.

 IS NULL

 NULL이면 결과를 가져온다.

 IS NOT NULL

 IS NULL의 반대 개념이다.


WHERE 절 이후에 사용할 수 있는 다양한 연산자를 알아보았습니다. 여기에서 2개 이상의 조건을 달기 위해서는 무조건 AND 혹은 OR 연산자를 사용해야 합니다. 


SELECT * FROM TABLE_NAME WHERE 조건1 AND 조건2


위와 같이 SELECT 구문을 던지게 되면 조건1과 조건2가 모두 만족하는 데이터를 수집합니다. 


SELECT * FROM TABLE_NAME WHERE 조건1 OR 조건2


위와 같이 SELECT 구문을 던지면, 조건1 혹은 조건2 둘중에 하나만 참인 모든 데이터를 수집하게 됩니다. 

15살이면서 남자인 데이터 중 이름과 나이만 가져오도록 하겠습니다. 2가지 조건 모두 만족을 시켜야 되기 때문에 AND 연산자를 사용해야 합니다. 사용한 구문은 아래와 같습니다. 


SELECT NAME, AGE FROM CONTACTS_TABLE WHERE MALE='MALE' AND AGE=15;



2개의 조건을 모두 만족하는 데이터를 확인할 수 있습니다. 그럼 조건을 조건 바꿔보도록 하겠습니다. 남자이면서 15세이상, 30세 이하의 데이터를 가져오도록 하겠습니다. 이럴때는 BETWEEN A AND B 혹은 IN을 사용하면 될것 같습니다.


SELECT NAME, AGE FROM CONTACTS_TABLE WHERE MALE='MALE' AND AGE BETWEEN 15 AND 30;

SELECT NAME, AGE FROM CONTACTS_TABLE WHERE MALE='MALE' AND AGE IN(15, 30);


위의 코드의 첫번째는 BETWEEN IN을 두번째는 IN을 사용한 결과입니다. 2개의 실행 결과 모두 아래와 같습니다. 


3. 데이터 정렬하기


데이터를 정렬하기 위해서는 ORDER BY 명령어를 사용할 수 있습니다. ORDER BY 뒤에는 컬럼 이름이나 혹은 컬럼의 순서 인덱스값이 들어갈 수 있습니다. 또한 오름차순(ASC), 내림차순(DESC)에 대한 설정도 가능합니다.  위의 조건에서 ORDER BY를 추가해보도록 하겠습니다. 


ORDER BY 뒤에는 이름 혹은 인덱스가 올수 있다고 하였습니다. 여기서 인덱스는 SELECT 구문에서 읽을 COLUMN 순서에 대한 인덱스 입니다. 아래와 같은 경우는 NAME이 1, AGE가 2가 되겠습니다. 


SELECT NAME, AGE FROM CONTACTS_TABLE WHERE MALE='MALE' AND AGE IN(15, 30) ORDER BY 1 DESC

SELECT NAME, AGE FROM CONTACTS_TABLE WHERE MALE='MALE' AND AGE IN(15, 30) ORDER BY NAME DESC


위의 코드를 실행하면 아래와 같이 동일 결과가 나오는것을 확인할 수 있습니다. 




정렬에 대한 값을 변경해보도록 하겠습니다. 


SELECT NAME, AGE FROM CONTACTS_TABLE WHERE MALE='MALE' AND AGE IN(15, 30) ORDER BY 1 ASC

SELECT NAME, AGE FROM CONTACTS_TABLE WHERE MALE='MALE' AND AGE IN(15, 30) ORDER BY 1 DESC





실행하게 되면 NAME에 대한 값에 따라 오름차순, 내림차순으로 변경이 되는것을 확인할 수 있습니다. 기본적으로 오름차순을 기본값으로 가지고 있습니다. 따라서 오름차순의 경우 ASC를 지워도 무방합니다. 


이 글에서는 SELECT 구문을 사용하는 방법에 대해서 알아보았습니다. 문의점이 있으시면 댓글에 남겨주시기 바랍니다.


이 글이 도움이 되셨나요?

그렇다면 아래의 그림을 클릭해주세요.



댓글