SELECT *
FROM basic.users -- basic이라는 DB(저장 창고)에 있는 users라는 테이블 가져온다
*
) 기호를 사용하여 모든 컬럼값을 일일히 명시하지 않고 추출 가능 → 쿼리 작성 전 꼭 체크하고 형태 파악하기우리가 이 테이블이 어떻게 생겼는지 모른다고 가정했을 때 무조건 아스테리크 기호를 이용해 테이블이 어떻게 생겼는지 한번 체크한 뒤 필요한 컬럼 확인하기!
날짜 | 요일 |
---|---|
2024-03-11 | 월요일 |
2024-03-18 | 월요일 |
2024-03-19 | 화요일 |
-- 모든 컬럼을 조회할 경우
SELECT *
FROM 테이블이름
;
-- 특정 컬럼을 조회할 경우
SELECT 컬럼이름, 컬럼이름
FROM 테이블이름
;
-- 특정 컬럼을 중복 없이 조회할 경우
SELECT DISTINCT 컬럼이름
FROM 테이블이름
;
SELECT COUNT(game_account_id) AS usercnt
, COUNT(DISTINCT game_accound_id) AS distinctusercnt
FROM basic.users
;
-- usercnt 29,999
-- distinctusercnt 27,141
-- WHERE 절을 이용, 특정 조건을 만족하는 데이터 가져오기
SELECT *
FROM basic.theglory
WHERE 성별 ='F'
;
SELECT CASE
WHEN 조건식1 THEN 결과1
WHEN 조건식2 THEN 결과2
ELSE 결과3
END AS 새로운 컬럼이름
FROM 테이블명
;
연산자 | 연산의 예 | 의미 |
---|---|---|
>, < | N<10, N>10 | N이 10 미만, N이 10 초과 |
>=, <= | N<=10, N>=10 | N이 10 이하, N이 10 이상 |
= | N=10 | N이 10인 값 |
!= | N!=10 | N이 10이 아닌 값 |
LIKE | LIKE('%과자%') | 문자열이 ~와 같을 때 |
(문자열을 기준으로 앞,뒤 문자열과 상관없이 | ||
볼 때 %를 앞뒤에 작성해줍니다.) | ||
AND | A AND B | A 그리고 B를 모두 만족하는 값 |
OR | A OR B | A 또는 B인 값 |
NOT, ! | NOT A, !A | A가 아닌 값 |
BETWEEN | A BETWEEN 10 AND 20 | A가 10과 20 사이에 포함된 값 |
IN | A IN B | B에 A가 포함된 값 |
NOT IN | A NOT IN B | B에 A가 포함되지 않은 값 |
IS NULL | A IS NULL | A 값이 비어있는 값 |
IS NOT NULL | A IS NOT NULL | A 값이 비어있지 않는 값 |
LIKE 예시
SELECT *
FROM basic.users
WHERE txt LIKE('%과자%')
-- 맛있는 과자
-- 과자는 살찐다
SELECT *
FROM basic.users
WHERE txt LIKE('%과자')
-- 맛있는 과자
SELECT *
FROM basic.users
WHERE txt LIKE('과자%')
-- 과자는 살찐다
%
에 공백이 포함되는지 여부는 RDBMS마다 다름IS NULL, IS NOT NULL
)은 NULL이 아님연산자들은 동시에 사용 가능
SELECT *
FROM basic.theglory
WHERE 날짜 IS NOT NULL
AND (성별!='M')
AND 직업 IN('아나운서', '승무원', '화가')
AND (나이 BETWEEN 30 AND 40) -- 30 이상, 40 이하
;
/* 컬럼 번호 활용: MYSQL 환경에서는 날짜가 1번, 이름이 2번, 성별이 3번, 나이가 4번, 직업을 5번으로 인식*/
/*다중조건: 날짜를 내림차순으로 우선 정렬하고, 날짜가 같다면 나이를 기준으로 오름차순 정렬*/
select 날짜, 이름, 성별, 나이, 직업
from basic.theglory
order by 1 desc, 4 ASC;
구분 | 상세 | schema |
---|---|---|
logid | 로그id | int |
※로그는 행위에 대한 기록입니다. | ||
※예를 들어, logid=100 은 서비스입장 입니다. | ||
※해당 컬럼은 이번 과제에서 사용되지 않습니다. | ||
ip_addr | ip주소 | string |
first_login_date | 첫 접속일자, yyyy-mm-dd | string |
game_account_id | 게임계정id | string |
game_actor_id | 게임캐릭터id | int |
level | 현재레벨 | int |
exp | 현재경험치 | int |
serverno | 서버넘버 | int |
zone_id | 지역넘버 | int |
etc_num1 | 파티id | int |
etc_num2 | 파티원수 | int |
etc_str1 | 아이템 획득경로 | string |
etc_num3 | 아이템 획득량 | int |
etc_str2 | 아이템 이름 | string |
조건1) first_login_date 컬럼이 2023-01-01 초과인 날짜의
조건1) level 컬럼이 10 초과이고
조건2) serverno 컬럼이 1이 아니며
조건3) 아이템 이름컬럼이 레벨업 패키지 또는 시즌패스이고
조건4) 아이템 획득 경로가 상점에서 구매한 경우의
조건1) case when 구문을 사용하여 레벨구간을 아래와 같이 구분해주시고, as 를 사용하여 컬럼이름을 ‘levelgroup’ 으로 설정해주세요.
<레벨구간>
◦ 1~10Lv 이하
◦ 11~20Lv 이하
◦ 21~30Lv 이하
◦ 31~40Lv 이하
◦ 41~50Lv 이하
◦ 51~60Lv 이하
◦ 61~70Lv 이하
◦ 71~80Lv 이하
◦ 81~90Lv 이하
◦ 91~100Lv