SQL 데이터 특성

POOHYA·2022년 3월 13일
0

SQL

목록 보기
2/7

집계함수

COUNT

NULL값은 제외하고 카운트

SELECT COUNT(email) FROM member;
SELECT COUNT(height) FROM member;

NULL을 제외한 값을 카운트

SELECT COUNT(\*) FROM member;

*을 넣어 실행하면 NULL과 상관없이 항상 정확한 카운트가능

MAX

SELECT MAX(weight) FROM member;

MIN

SELECT MIN(weight) FROM member;

AVG

SELECT AVG(weight) FROM member;

NULL인 row는 제거하고 실행됨

SUM 합계

SELECT SUM(age) FROM member;

STD 표준편차

SELECT STD(age) FROM member;

산술함수

ABS 절대값

SQRT 제곱근

CEIL 올림

SELECT CEIL(height) FROM member;

FLOOR 내림

SELECT FLOOR(height) FROM member;

ROUND 반올림

SELECT ROUND(height) FROM member;

집계함수와 산술함수의 차이점

집계함수는 특정 컬럼의 여러 row의 값들을 동시에 고려해서 실행되는 함수이고
산술함수는 특정 컬럼의 각 row의 값마다 실행되는 함수이다

NULL을 다루는 방법

IS NULL, IS NOT NULL

SELECT * FROM member WHERE address IS NULL;

값이 없는 row들만 출력

SELECT * FROM member WHERE address IS NOT NULL;

값이 있는 row들만 출력

SELECT * FROM member 
WHERE height IS NULL
	OR weight IS NULL
	OR address IS NULL;

COALESCE NULL을 지정한 값으로 출력

SELECT
	COALESCE(weight, '####'),
    COALESCE(height, '---'),
    COALESCE(address, '@@@')
FROM member;

weight, height, adress가 NULL일때 '####', '---', '@@@'으로 출력

SELECT COALESCE(height, weight * 2.3, 'N/A') FROM member;

height, weight * 2.3이 널일때 'N/A'로 출력
NVL을 여러개 받을 수 있다

IFNULL

SELECT IFNULL(height, 'N/A') FROM member;

height컬럼이 NULL이면 'N/A'을 출력

NULL 연산

NULL은 어떤값을 더하거나 곱하여도 NULL로 반한된다

이상한 값 제외하기

'~호'가 정상주소라고 가정했을때

SELECT * FROM member WHERE address LIKE '%호';
SELECT * FROM member WHERE address NOT LIKE '%호';

컬럼끼리 산술계산

더하기(+), 빼기(-), 곱하기(*), 나누기(/), 나머지(%)

SELECT email, height, weight, weight/((height/100) * (height/100))
FROM member;

NULL을 포함한 계산식은 항상 NULL이 반환됨

alias 별칭

SELECT 
	email, 
    height AS, 
    weight AS 몸무게, 
    weight/((height/100) * (height/100)) AS BMI
FROM member;
  • as 생략가능 (허나 권장하지 않음)
SELECT 
	email, 
    height 키, 
    weight 몸무게, 
    weight/((height/100) * (height/100)) BMI
FROM member;

CONCAT 여러컬럼을 하나의 컬럼으로 출력

SELECT 
	email, 
   	CONCAT(height, 'cm', ',', weight, 'kg') AS '키와 몸무게', 
    weight/((height/100) * (height/100)) AS BMI
FROM member;

컬럼의 값 변환

CASE 함수

CASE 컬럼이름
	WHENTHENWHENTHENWHENTHENELSEEND
SELECT 
	email, 
   	CONCAT(height, 'cm', ',', weight, 'kg') AS '키와 몸무게', 
    weight / ((height/100) * (height/100)) AS BMI,

(CASE
	WHEN weight IS NULL OR height is NULL THEN '비만 여부 알 수 없음'
    WHEN weight / ((height/100) * (height/100)) >= 25 THEN '과체중 또는 비만'
    WHEN weight / ((height/100) * (height/100)) >= 18.5
    	AND weight / ((height/100) * (height/100)) < 25
        THEN '정상'
    ELSE '저체중'
END) obesity_check

FROM member
ORDER BY obesity_check ASC;

검색 CASE 함수

CASE 
  WHEN 조건1 THEN 해당조건이 TRUE일 떄 보여줄 값
  WHEN 조건2 THEN 해당조건이 TRUE일 떄 보여줄 값
  WHEN 조건3 THEN 해당조건이 TRUE일 떄 보여줄 값 
  ELSE 그밖의 모든경우 보여줄 값
END 

DISTINCT

고유값 보기

SELECT DISTINCT(gender) FROM member;

SUBSTRING

특정컬럼의 n번째에서 m개의 문자열출력

SELECT DISTINCT(SUBSTRING(address, 1, 2)) FROM member;

LENGTH

문자열의 길이를 보여주는 함수

UPPER, LOWER

UPPER는 문자열을 모두 대문자로, LOWER는 문자열을 모두 소문자로 바꿔 보여주는 함수

LPAD, RPAD

LPAD는 LEFT+PADDING, RPAD는 RIGHT+PADDING의 줄임말
LPAD(age,10,'0')는 age컬럼값을 왼쪽에 문자0을 붙여서 총 10자리로 만드는 함수

TRIM, LTRIM, RTRIM

문자열에 존제하는 공백을 제거하는 함수
LTRIM은 왼쪽공백 삭제, RTRIM은 오른쪽공백 삭제, TRIM은 좌우 모두 공백삭제

  • 문자열 내부의 공백을 없애는 함수는 아니다

GROUP BY

SELECT gender FROM member GROUP BY gender;

SELECT gender count(*) FROM member GROUP BY gender;

SELECT gender count(*), AVG(height) FROM member GROUP BY gender;

SELECT gender count(*), AVG(height), MIN(weight) FROM member GROUP BY gender;

그루핑과 집계 함수를 같이 쓰면 그루핑을 통해 생성된 각 그룹의 수치적인 특성을 구할 수 있다
*그루핑 기준으로 쓰인 컬럼은 반드시 SELECT 뒤에 써서 그 값을 조회해야 한다.

HAVING

GROUP BY를 사용하면 모든 그룹의 row가 출력된다 그충 특정 조건을 가진 row를 출력하기 위한 절이다

SELECT SUBSTRING(address, 1, 2) as region,
	gender,
    COUNT(*)
FROM member
GROUP BY
	SUBSTRING(address, 1, 2),
    gender
HAVING
	region = '서울'
    AND gender = 'm';
SELECT SUBSTRING(address, 1, 2) as region,
	gender,
    COUNT(*)
FROM member
GROUP BY
	SUBSTRING(address, 1, 2),
    gender
HAVING
	region IS NOT NULL
ORDER BY
	region ASC,
    gender DESC;

SELECT문의 각 절의 작성순서 정리
1. SELECT
2. FROM
3. WHERE
4. GROUP BY
5. HAVING
6. ORDER BY
7. LIMIT

SELECT문의 실제 해석순서 정리
1. FROM
2. WHERE
3. GROUP BY
4. HAVING
5. SELECT
6. ORDER BY
7. LIMIT

WITH ROLLUP

세부 그룹들을 상위 기준의 그룹안에서 각 값을 합쳐

SELECT SUBSTRING(address, 1, 2) as region,
	gender,
    COUNT(*)
FROM member
GROUP BY
	SUBSTRING(address, 1, 2),
    gender
WITH ROLLUP
HAVING
	region IS NOT NULL
ORDER BY
	region ASC,
    gender DESC;

WHERE절과 HAVING절

유사점

필터링 할 때 사용 할 수 있다

차이점

  • HAVING은 SQL SELECT문이 집계 값이 지정된 조건을 충족하는 행만 반환하도록 지정하는 SQL절
    WHERE은 단일 테이블에서 데이터를 가져 오거나 여러 테이블과 결합하여 조건을 지정하는데 사용되는 SQL절

  • WHERE > GROUP BY > HAVING의 순서로 사용된다

  • HAVING은 그룹화 또는 집계가 발생한 후 레코드를 필터링하는데 사용되고 WHERE은 그룹화 또는 집계가 발생하기 전에 레코드를 필터링하는데 사용된다

profile
김효주

0개의 댓글