개발 창고/Database

[SQL] SELECT 기본문법(1)

로이제로 2020. 8. 25. 15:46
반응형

Query를 작성하면 기본 소양은 SELECT를 사용할 수 있느냐 입니다. 이는 잘만하면 여기 저기 흩어져 있는 의미없는 데이터를 정보로 만들 수 있는 가장 간단하면서도 가장 필요한 지식이라 할 수 있습니다.

 

구분은 일단 아래와 같습니다.

SELECT [ALL|DISTINCT] 컬럼명 [, 컬럼명 ...]
FROM 테이블명 [, 테이블명 ...]
[WHERE 조건식]
[GROUP BY 컬러명 [, 컬럼명 ...] [HAVING 조건식]]
[ORDER BY 컬럼명 [, 컬럼명 ...]

여기서 []는 조건에 따라 생각이 가능함을 의미하고, 말줄임(...) 표시는, 1개 이상을 의미합니다.

 

SELECT는 데이터 조작언어 (DML) 중 하나로, 2차원 배열(행과 열)의 결과를 갖습니다.

 

흔히 아래의 두 용어를 혼용해서도 쓰기도 하니 참고로 알아두셔도 좋을것 같습니다.

 

테이블(TABLE) = 표

행(ROW) = 레코드

열(COLUMN) = 항목

 

아래의 테이블을 기준으로 설명하도록 하겠습니다.

컬럼1 컬럼2 컬럼3 컬럼4
값1 값1-1    
값1 값1-2    
값2 값2-1    
값3 값3-1    

 

  SELECT

표에 보여질 항목(열)을 정의하는 부분입니다.

만약  아래와 같이

 

SELECT 컬럼1, 컬럼2, 컬럼3
...

 

이라고 정의한 경우 결과는 다음과 같이 보여집니다.

컬럼1 컬럼2 컬럼3
값1 값1-1  
값1 값1-2  
값2 값2-1  
값3 값3-1  

 

또한 컬럼 대신 별표(Asterisk, *)로 표현할 수 있는데, 이는 해당 테이블의 모든 컬럼을 표현하는 것과 같습니다.

/* 컬럼을 전체 표기한 경우 */
SELECT 컬럼1, 컬럼2, 컬럼3, 컬럼4
  FROM 테이블1

/* 컬럼을 별표(*)로 표기한 경우 */
SELECT *
  FROM 테이블1

위의 두 Query문이 동일한 결과를 보여줌을 알 수 있습니다.

 

여기서 생략가능한 ALL과 DISTINCT는 다음과 같은 기능을 삽니다.

  • ALL           : 테이블의 모든 데이터를 반환 (지정하지 않으면 DEFAULT가 ALL)
  • DISTINCT : SELECT에 지정된 컬럼들간 중복된 행이 있는경우 제거하고 한개만 표현함

 

  FROM

대상 테이블을 지정해주는 부분입니다.

이 부분은 한 개 이상의 데이터가 저장된 테이블을 대상으로 지정하여 설정 가능합니다. (추후에 JOIN등을 설명할 때 자세히 다루도록 하겠습니다.)

 

  WHERE

FROM에서 지정된 테이블의 정보 중에서 보여주어야 할 조건을 식으로 표현하는 곳입니다. 주로 가장 많이 사용하는 표현식은 비교연산자 (=, <, >, !=)나 논리연산자(AND, OR, NOT) 등을 활용하여 결과를 표현하게 됩니다.

처음 Query를 작성하는 개발자들이 자주하는 실수로는 (어차피 결과가 오류가 나서 사전에 많이 걸러지지만) 등호(=)인데, 개발에서 주로 조건절에서 (==)으로 쓰다보니 Query문에서도 (==)으로 표현하는 경우가 많습니다. SQL에서는 같은지에 대한 부호가 (=)이므로 헷갈리지 않았으면 합니다.

/* 조건절의 잘못된 표현 */
SELECT 컬럼1, 컬럼2
  FROM 테이블1
 WHERE 컬럼1 == '값1'
 
/* 정상적인 표현 */
SELECT 컬럼1, 컬럼2
  FROM 테이블1
 WHERE 컬럼1 = '값1'

첫 번째는 등호가 잘못 쓰인 예이고, 두 번째 Query문 처럼 표현해야 올바른 표현식이라 할 수 있습니다. 이를 읽어보면

 

"'테의블1'의 데이터 중 '컬럼1'의 값이 '값1'인 목록의 '컬럼1', '컬럼2' 데이터를 보여주세요"

 

라는 표현으로 아래와 같은 값을 보여주게 됩니다.

컬럼1 컬럼2
값1 값1-1
값1 값1-2

조건절에서 '컬럼1'의 값이 '값1'인 데이터라고 했으니 표의 첫번째 값인 '컬럼1'에는 '값1'이라는 데이터가 표현될 것입니다.

 

반응형

'개발 창고 > Database' 카테고리의 다른 글

[SQL] JOIN이란? - OUTER JOIN  (0) 2020.09.16
[SQL] JOIN이란? - INNER JOIN  (0) 2020.09.15
[SQL] WITH절 사용하는 방법  (11) 2020.09.02
[SQL] SELECT 기본문법(2)  (0) 2020.08.25
[MariaDB] Database 및 사용자 계정 생성  (0) 2020.08.04