[MySQL] SELECT 기초 문법
2023. 1. 11. 15:41
SELECT
- 테이블들에서 레코드들을 읽어오는 데 사용
- WHERE를 사용해 조건을 만족하는 레코드
GROUP BY -> SELECT의 ADVANCED된 기능
ORDER BY -> 필드 이름 대신 숫자 사용 가능
기초문법 1) SELECT
SELECT 필드이름1, 필드이름 2...
FROM 테이블 이름
WHERE 선택 조건
GROUP BY 필드이름1, 필드이름2, ...
ORDER BY 필드이름 [ASC|DESC] -- 필드 이름 대신에 숫자 사용 가능
LIMIT N; -- 앞에 몇 개만 살핌
기초문법 2) *
SELECT * -- *는 모든 필드를 지칭하는 표현
FROM prod.session; -- 앞서 USE prod;를 수행했다면 FROM session도 사용 가능
-- FROM 다음에 오는 TABLE은 DATA BASE 이름 + '.'+ TABLE 이름
기초문법 3) LIMIT
SELECT id, user_id, channel_id -- 일부 읽어오기
FROM prod.session;
SELECT *
FROM prod.session
LIMIT 10; -- 모든 필드들에 대해 읽어오되, 처음 10개만 읽어온다.
기초문법 4) DISTINCT
SELECT DISTINCT channel_id; -- 유일한 채널 ID를 알고 싶은 경우
FROM prod.session;
-- channel_id라는 FIELD의 유일한 값을 알고싶다.
-- 목적 : channel_id 별로 몇 개의 레코드들이 존재하는지 보고 싶다.
-- GROUP BY 다음에 올 것은
-- FIELD의 이름 OR SELECT에서 사용된 FIELD의 일련번호 (1이면 1번째 번호)
SELECT channel_id, COUNT(1) -- 채녈 ID별 카운트를 하려면 GROPU BY/COUNT 함수 !
FROM prod.session;
GROUP BY 1;
기초문법 5) COUNT
SELECT COUNT(1) -- 테이블의 모든 레코드 수 카운트. COUNT(*). 하나의 레코드
FROM prod.session;
-- null 들어갈 수 없음. 안에 있는 값이 무엇이든 카운트 함.
-- session table안에 존재하는 모든 레코드들을 카운트 해라.
SELECT * -- channel 테이블의 모든 레코드들을 표시
FROM prod.channel;
목적 : channel_id의 값이 5인 경우만 COUNT하고싶다.
SELECT COUNT(1)
FROM prod.session
WHERE channel_id = 5; -- channel이 Facebook 경우만 레코드 수 카운트
기초문법 6) CASE WHEN
-- CASE WHEN
-- 필드 값의 변환을 위해 사용 가능
-- CASE WHEN 조건 THEN 참일 때 값 ELSE 거짓일 때 값 END 필드이름
-- 여러 조건을 사용하여 변환하는 것도 가능
-- 목적 : 새로운 타입의 값을 만들어 SELECT 함.
CASE
WHEN 조건1 THEN 값 1
WHEN 조건2 THEN 값 2
ELSE 값3
END 필드이름
SELECT channel_id, CASE
WHEN channel_id in (1, 5, 6) THEN 'Social-Media'
WHEN channel_id in (2, 4) THEN 'Search-Engine'
ELSE 'Something-Else'
END channel_type
FROM prod.session;
기초문법 7) NULL
- 값이 존재하지 않음을 나타내는 상수. 0 혹은 ""과는 다름.
- 필드 지정 시 값이 없는 경우 NULL로 지정 가능
- 테이블 정의 시 디폴트 값으로도 지정 가능
- 어떤 필드의 값이 NULL인지 아닌지 비교는 특수한 문법을 필요로 함.
- field1 is NULL혹은 field1 is not NULL
- NULL이 사칙연산에 사용되면 그 결과는 ?
- SELECT 0 + NULL, 0 - NULL, 0 * NULL, 0 / NULL
아래 문제를 풀어보자
테이블:prod.count_test
value |
1 |
1 |
0 |
0 |
4 |
3 |
QUESTIONS.
- SELECT COUNT(1) FROM prod.count_test
- 7
- SELECT COUNT(0) FROM prod.count_test
- 7
- SELECT COUNT(NULL) FROM prod.count_test
- 0
- SELECT COUNT(value) FROM prod.count_test
- 6
- SELECT COUNT(DISTINCT value) FROM prod.count_test
- 5
각각의 리턴값을 위와 같이 쓸 수 있다/
SQL은 선언 LANGUAGUE.