SQL

SQL 더 나은 SELECT를 위하여

sue24 2020. 11. 8. 23:59

이번 게시글에서는 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은 생략해도 됩니다.

 

stock_quantity컬럼으로 오름차순 정렬한 뒤 결과를 3개만 출력합니다.

 

    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 '%\%%';

 

    이렇게 쓰면 %가 들어있는 데이터를 찾게 됩니다.