SQL 더 나은 SELECT를 위하여
이번 게시글에서는 SELECT 기능을 개선해주는
DISTINCT, ORDER BY, LIMIT, LIKE에 대해서 다루겠습니다.
1. DISTINCT
중복 없는 결과를 보기 위해서 쓰는 명령어입니다.
SELECT DISTINCT <컬럼> FROM <테이블>;
스트링, 넘버 다 적용됩니다.
SELECT DISTINCT CONCAT(<컬럼1>, ' ', <컬럼2>) FROM <테이블>;
여러 개의 텍스트/컬럼을 조합해서 유니크한 값을 찾을 때는
하나의 컬럼을 받는 DISTINCT 안에 CONCAT이 와야 합니다.
2. ORDER BY
데이터를 정렬해줍니다.
ORDER와 BY 사이에 공백까지 쳐줘야 합니다!!
SELECT <컬럼1> FROM <테이블> ORDER BY <컬럼2>;
컬럼1과 컬럼2는 같아도 되고 달라도 됩니다.
기본값은 오름차순입니다.
SELECT <컬럼1> FROM <테이블> ORDER BY <컬럼2> DESC;
이렇게 뒤에 DESC를 써 주면 내림차순으로 정렬합니다.
SELECT <컬럼1>, <컬럼2>, <컬럼3> FROM <테이블> ORDER BY 2;
조회하려고 열거한 컬럼의 순서대로 인덱스를 매겨서
숫자를 써 줄 수도 있습니다.
*를 이용해서 전체 조회를 할 때는 테이블의 컬럼 순서대로 인덱스가 매겨집니다.
SELECT <컬럼1>, <컬럼2> FROM <테이블> ORDER BY <컬럼3>, <컬럼4>;
컬럼3으로 먼저 정렬한 후, 컬럼 4로 한 번 더 정렬합니다.
ex) 컬럼 3이 출생 연도, 컬럼4가 이름이라면
출생년도 오름차순으로 정렬을 한 뒤
같은 해에 출생한 사람들을 이름 오름차순으로 다시 정렬하게 됩니다.
3. LIMIT
출력할 결과의 숫자를 조정합니다.
SELECT <컬럼1> FROM <테이블> ORDER BY <컬럼2> LIMIT 2, 5;
컬럼1과 컬럼2는 같을 수도 있고 다를 수도 있습니다.
이 경우에 결과는 컬럼2로 정렬한 순서에서 3번째부터 5번째까지가 나옵니다.
첫 번째부터 나오게 하려면 0, 5인데 0은 생략해도 됩니다.
SELECT * FROM <테이블> LIMIT 4, 2345346;
다섯 번째부터 테이블 끝까지 조회하는 SQL문입니다.
LIMIT의 두 번째 인자는 조회할 테이블의 데이터 수보다 크기만 하면 됩니다.
4. LIKE
어떤 문자를 포함하고 있는 데이터,
어떤 문자로 시작하는 데이터,
어떤 문자로 끝나는 데이터를 찾을 수 있게 해 줍니다.
대소문자를 구분하지 않습니다.
SELECT <컬럼1> FROM <테이블> WHERE <컬럼2> LIKE '%abc%';
이 경우에도 당연히 컬럼1과 컬럼2는 같을 수도 다를 수도 있습니다.
컬럼2가 abc를 포함하는 데이터의 컬럼1 값을 조회하는 SQL문입니다.
%는 모든 문자를 상징합니다.
글자, 숫자, 빈칸 등 모든 문자를 뜻하죠.
아무 문자가 없는 것 역시 포함합니다.
'%abc%'는
abc로 시작하는 데이터,
abc를 포함하는 데이터,
abc로 끝나는 데이터를 모두 포함합니다.
대소문자를 구분하지 않기 때문에
Abc, ABC 등이 모두 포함됩니다.
SELECT * FROM <테이블> WHERE <컬럼> LIKE 'abc';
컬럼 값이 정확히 abc인 데이터를 찾습니다.
SELECT * FROM <테이블> WHERE <컬럼> LIKE 'abc%';
컬럼 값이 abc로 시작하는 데이터를 찾습니다.
SELECT * FROM <테이블> WHERE <컬럼> LIKE 'abc';
컬럼 값이 abc로 끝나는 데이터를 찾습니다.
SELECT * FROM <테이블> WHERE <컬럼> LIKE '____';
_는 하나의 문자를 의미합니다.
위 SQL문은 컬럼 값이 4자리인 데이터를 찾는 거죠.
(123)-456-7890 이런 형식의 전화번호 데이터를 찾는다면
SELECT * FROM <테이블> WHERE <컬럼> LIKE '(___)-___-____';
이런 식으로 쓰게 됩니다.
만약 찾고 싶은 데이터의 값에 %나 _가 들어있다면?
\를 이용합니다.
LIKE '%\%%';
이렇게 쓰면 %가 들어있는 데이터를 찾게 됩니다.