SELECT : 테이블의 열, 컬럼, 필드를 선택할 수 있다.
FROM : 레코드를 선택할 테이블의 이름을 명시
MySQL에서 마지막 구문은 세미콜론(;)으로 끝나야 한다.다수의 실행하고 싶은 SQL 구문에 마우스 커서를 두고 Ctrl+Enter를 누르면 해당 구문만 실행된다.
DISTINCT : 중복없이 컬럼을 조회할 때 사용
WHERE : 특정 조건의 행만 조회하고 싶을 때
CASE WHEN : 조건에 따라 다른 결과값을 부여한다.
WHEN은 조건에 따라 더 추가할 수 있다.
모두 만족하지 않을 경우, ELSE로 간주되게 된다.
다음은 CASE WHEN의 작동 순서이다.


조건문을 작성할 때에는 IF보다는 WHERE, CASE WHEN을 주로 사용하도록 한다.
ORDER BY : 작동 순서 중 가장 마지막으로, 최종 결과값을 정렬할 때 사용
오름차순은 ASC, 내림차순은 DESC이다. 기본적으로 정렬을 사용했을 때에는 ASC로 정렬된다.
ORDER BY 중 가장 먼저 작성된 것이 우선 순위로 정렬된다.
문제1 - 조건절 where 구문의 활용
조건1) first_login_date 컬럼이 2023-01-01 초과인 날짜의
game_account_id, game_actor_id, serverno 를 추출해주세요.
SELECT
game_account_id,
game_actor_id,
serverno
FROM
users
WHERE
STR_TO_DATE(
first_login_date,
'%Y-%m-%d'
) > '2023-01-01';
문제2 - 조건절 where 구문의 응용
조건1) level 컬럼이 10 초과이고
조건2) serverno컬럼이 1이 아니며
조건3) 아이템 이름 컬럼이 레벨업 패키지 또는 시즌패스이고
조건4) 아이템 획득 경로가 상점에서 구매한 경우의
결과값) first_login_date, ip_addr, exp, zone_id 를 추출하고 first_login_date을 기준으로 내림차순으로 정렬해주세요. 결과값은 아래와 같은 형태입니다.
아래 그림은 전체 중 일부입니다.
사용자의 로컬 환경 및 MySQL 버전에 따라 화면이 다르게 보일 수 있습니다.
SELECT
first_login_date,
ip_addr,
exp,
zone_id
FROM
users
WHERE
LEVEL > 10
AND serverno != 1
AND etc_str2 IN(
'레벨업 패키지', '시즌패스'
)
AND etc_str1 = '상점에서 구매'
ORDER BY
first_login_date DESC;
현재 레벨이 10 초과이며, 서버1을 제외한, 레벨업 패키지 또는 시즌패스를 상점에서 구매한 유저의 첫 접속일자, ip주소, 현재 경험치, 지역번호를 조회하는 쿼리문이다.
문제3 - 조건절 case when 구문의 활용
조건1) case when 구문을 사용하여 레벨구간을 아래와 같이 구분해주시고, 컬럼이름을 ‘levelgroup’ 으로 설정해주세요.
[레벨구간]
◦ 1~10Lv 이하
◦ 11~20Lv 이하
◦ 21~30Lv 이하
◦ 31~40Lv 이하
◦ 41~50Lv 이하
◦ 51~60Lv 이하
◦ 61~70Lv 이하
◦ 71~80Lv 이하
◦ 81~90Lv 이하
◦ 91~100Lv
결과값) game_actor_id, level, levelgroup, first_login_date 컬럼을 추출해주시고, first_login_date를 기준으로 내림차순 정렬해주세요. 결과값은 아래와 같아야 합니다.
아래 그림은 전체 중 일부입니다.
SELECT
game_actor_id,
`level`,
CASE
WHEN `level` BETWEEN 1 AND 10 THEN '1~10Lv 이하'
WHEN `level` BETWEEN 11 AND 20 THEN '11~20Lv 이하'
WHEN `level` BETWEEN 21 AND 30 THEN '21~30Lv 이하'
WHEN `level` BETWEEN 31 AND 40 THEN '31~40Lv 이하'
WHEN `level` BETWEEN 41 AND 50 THEN '41~50Lv 이하'
WHEN `level` BETWEEN 51 AND 60 THEN '51~60Lv 이하'
WHEN `level` BETWEEN 61 AND 70 THEN '61~70Lv 이하'
WHEN `level` BETWEEN 71 AND 80 THEN '71~80Lv 이하'
WHEN `level` BETWEEN 81 AND 90 THEN '81~90Lv 이하'
WHEN `level` BETWEEN 91 AND 100 THEN '91~100Lv'
END AS 'levelgroup',
first_login_date
FROM
users
ORDER BY
first_login_date DESC;