[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.