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 |