본문 바로가기

SQL/MYSQL

MySQL CASE 사용방법, MySQL GROUP_CONCAT 사용방법(문자열 합치기), MySQL ORDER BY 사용방법(테이블 정렬)


MySQL CASE 사용법

MySQL CASE문은 프로그래밍 언어에서 스위치(switch)문과 비슷하지만,

다수의 조건에 하나의 반환 값은 동작하지 않습니다.

CASE WHEN 조건 THEN '반환 값' WHEN 조건 THEN '반환 값' ELSE 'WHEN 조건에 해당 안되는 경우 반환 값' END

- WHEN과 THEN은 커플이어야 합니다.

- WHEN과 THEN은 여러번 사용가능합니다.

- ELSE가 존재하면 모든 조건에 해당하지 않는 경우에 반환 값을 설정할 수 있습니다.

- ELSE가 없고 조건에 맞지 않으면 NULL값으로 반환합니다.


쿼리ex)

SELECT idx, CASE WHEN type = '1' THEN '의사' WHEN type = '2' THEN '장군' WHEN type = '3' THEN '왕' ELSE '일반인' END AS hero_type, name FROM hero_collection;


MySQL GROUP_CONCAT 함수 
- 컬럼 값을 하나의 문자열로 만들기

GROUP_CONCAT 사용법

SELECT GROUP_CONCAT(묶을 컬럼 [, 데이터1, 데이터2 ...]) FROM 테이블명 [WHERE 조건];

- 데이터1, 데이터2 등이 있으면, 컬럼 값에 추가로 데이터를 붙인 다음에 묶습니다.
쿼리
SELECT GROUP_CONCAT(name, ":", type) AS hero_string FROM hero_collection;





MySQL 테이블 정렬 (ORDER BY)

테이블에서 SELECT로 데이터를 조회할 때, ORDER BY를 추가하여 지정된 컬럼을 기준으로 정렬 할 수 있습니다.


정렬방법

1. 오름차순(ASC) 또는 

2. 내림차순(DESC) 두 가지 정렬 방법이 있습니다.

Default value는 오름차순(ASC)입니다. (ASC 또는 DESC를 입력하지 않은 경우 ASC로 기본적으로 정렬합니다.)


*컬럼명이아닌 컬럼 번호로 정렬을 지정할 수도 있습니다.

*현재 조회한 컬럼을 기준으로 1번으로 시작합니다.




ORDER BY 사용법  ex)

정렬하지 않은 경우 

SELECT * FROM 테이블;

오름차순 정렬 

SELECT * FROM 테이블 ORDER BY 컬럼1 ASC;



오름차순 정렬 (Default value)

SELECT * FROM 테이블 ORDER BY 컬럼1;



내림차순 정렬 

SELECT * FROM 테이블 ORDER BY 컬럼1 DESC;



여러 컬럼으로 정렬 

SELECT * FROM 테이블 ORDER BY 컬럼1 [, 컬럼2, 컬럼3 ...];



조건식이 있는 경우 정렬 

SELECT * FROM 테이블 WHERE 조건식 ORDER BY 컬럼1 [, 컬럼2, 컬럼3 ...];



컬럼 번호로 정렬 

SELECT * FROM 테이블 WHERE 조건식 ORDER BY 컬럼 번호1 [, 컬럼 번호2, 컬럼 번호3 ...];




예제 쿼리 (Example Query)


age 오름차순 정렬(Default value)

SELECT name, age FROM table_name ORDER BY age; 


age 오름차순 정렬 

SELECT name, age FROM table_name ORDER BY age ASC;




age 내림차순 정렬 

SELECT name, age FROM table_name ORDER BY age DESC;



age 내림차순, name 오름차순 정렬 

SELECT name, age FROM table_name ORDER BY age DESC, name;



age 내림차순, name 오름차순 정렬 (컬럼 번호로 정렬) 

SELECT name, age FROM table_name ORDER BY 2 DESC, 3;



조건식이 있는 경우 age 내림차순 

SELECT name, age FROM table_name WHERE age < 30 ORDER BY age DESC;