ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (My)SQL SELECT 구문을 알아보자 2
    SQL 2023. 2. 19. 02:40

    지난번 포스팅에 이어서 SELECT구문을 좀 더 살펴보자. 지난번과 같은 테이블 예제를 이용하겠다.

    테이블 명칭은 qwer, PK는 id라고 하자.

    ORDER BY 구문은 출력을 정렬해 주는 기능이라고 생각하면 된다.

    SELECT id FROM qwer ORDER BY age(ASC생략가능);
    SELECT id FROM qwer ORDER BY age DESC;
    SELECT id FROM qwer ORDER BY age DESC, phone ASC;
    
    출력
    id			id
    abc			hig
    def			def
    hig			abc

    사용법은 WHERE구문처럼 사용하면 되며 기본값은 오름차순 정렬인 ASC이다. 생략이 가능하며 내림차순 정렬을 원할 경우 DESC을 쓰면 된다. 만약 순서가 동일한 경우 다른 기준을 적용하고 싶다면 뒤에 조건을 하나 더 붙여주면 된다. 지금은 테이블에 동일한 값이 없어 의미가 없다.

     

    LIMIT 구문은 출력의 개수를 제한해주는 기능을 가진다.

    SELECT * FROM qwer LIMIT 1;
    
    출력
    id	name	phone	age
    abc	aaa	1234	25

    원래라면 테이블의 모든 데이터가 출력되어야 하지만 1개로 제한을 걸어 첫 번째 행만 출력이 된 것을 볼 수 있다. 정확한 형식은 LIMIT 시작위치, 출력개수이다. 그냥 숫자만 쓰면 앞에 0부터 시작한다는 것을 암묵적으로 표현한 것이다. 보통은 ORDER BY구문을 이용해 먼저 정렬한 후 앞의 몇 개의 데이터를 추출하는 방식으로 이용한다.

     

    DISTINCT 구문은 중복된 결과를 하나씩만 보여주는 기능을 한다. 내 예제에서는 영향이 없어 다른것으로 설명하자면 여러 학생의 학교정보가 담긴 테이블이 있을 때 학교명을 출력해 보자.

    SELECT school FROM student;
    SELECT DISTINCT school FROM student;

    위의 코드는 모든 학교를 전부 나열할 것이다. 중복된 것도 전부 출력될 것이다. 두 번째 코드는 위에서부터 출력하는 것은 같지만 중복된 값이 나오면 뛰어넘어 사용자는 중복된 값을 보지 않는다. 데이터에 중복이 많고 이를 단순화해야 할 필요가 있는 경우 유용하게 쓰일 수 있다.

     

    GROUP BY 구문은 말 그대로 데이터를 그룹으로 묶어주는 역할을 한다. 내 예제에서는 적용이 힘든 구문이라 이것도 다른 예시를 들어야 한다. 예시 좀 신경 써서 만들걸 쇼핑몰 데이터베이스에 이름, 구매일자, 상품명, 가격, 수량이 있다고 해 보자. 한 사람이 여러 물건을 구매한 경우도 있고 한 번에 여러 물건을 구매한 경우도 있을 것이다. 이럴 경우 한 사람이 구매한 물건의 총개수나 총 가격등을 추출하려면 어떻게 해야 할까? GROUP BY 구문은 주로 집계함수와 같이 사용된다. 집계함수는 SUM, AVG, MIN, MAX, COUNT 등이 있는데 아마 명칭만 봐도 감이 올 것이다. 예시를 보자.

    SELECT id, SUM(amount) FROM buy GROUP BY id;

    다음 코드를 실행하면 각 id별로 수량이 전부 더해져서 나온다. A가 1개 주문하고 다시 2개를 주문했더라도 3개로 더해져서 출력되는 것이다. 집계함수를 적절하게 바꿔주면 다양한 데이터를 추출할 수 있다. 그리고 집계함수 안에도 연산자를 사용이 가능하니 총 구매금액을 알고 싶으면 amount*price로 쓰면 된다. 만약 여기서 WHERE구문으로 조건을 설정하면 어떻게 될까?

    SELECT id, SUM(amount) FROM buy WHERE SUM(amount)>1000 GROUP BY id;

    이렇게 합계가 1000 이상인 id만 출력하고 싶다고 이렇게 쓰면 출력이 되지 않는다. WHERE구문은 집계함수에 대해서 사용할 수 없다. 이럴 때에는 WHERE 대신 HAVING 을 사용하면 된다. 사용방법은 똑같지만 HAVING은 반드시 GROUP BY뒤에 나와야 한다.

    SELECT id, SUM(amount) FROM buy GROUP BY id HAVING SUM(amount)>1000;

    이러면 id와 총 구매개수가 1000이상인 데이터에 한해서 출력이 될 것이다.

     

    여기까지가 SELECT의 기본적인 사용법이다. 다음에는 테이블의 데이터를 변경하는 명령어들을 알아보도록 하겠다.

Designed by Tistory.