NULL값은 제외하고 카운트
SELECT COUNT(email) FROM member;
SELECT COUNT(height) FROM member;
NULL을 제외한 값을 카운트
SELECT COUNT(\*) FROM member;
*을 넣어 실행하면 NULL과 상관없이 항상 정확한 카운트가능
SELECT MAX(weight) FROM member;
SELECT MIN(weight) FROM member;
SELECT AVG(weight) FROM member;
NULL인 row는 제거하고 실행됨
SELECT SUM(age) FROM member;
SELECT STD(age) FROM member;
SELECT CEIL(height) FROM member;
SELECT FLOOR(height) FROM member;
SELECT ROUND(height) FROM member;
집계함수는 특정 컬럼의 여러 row의 값들을 동시에 고려해서 실행되는 함수이고
산술함수는 특정 컬럼의 각 row의 값마다 실행되는 함수이다
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;
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을 여러개 받을 수 있다
SELECT IFNULL(height, 'N/A') FROM member;
height컬럼이 NULL이면 'N/A'을 출력
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이 반환됨
SELECT
email,
height AS 키,
weight AS 몸무게,
weight/((height/100) * (height/100)) AS BMI
FROM member;
SELECT
email,
height 키,
weight 몸무게,
weight/((height/100) * (height/100)) BMI
FROM member;
SELECT
email,
CONCAT(height, 'cm', ',', weight, 'kg') AS '키와 몸무게',
weight/((height/100) * (height/100)) AS BMI
FROM member;
CASE 컬럼이름
WHEN 값 THEN 값
WHEN 값 THEN 값
WHEN 값 THEN 값
ELSE 값
END
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
WHEN 조건1 THEN 해당조건이 TRUE일 떄 보여줄 값
WHEN 조건2 THEN 해당조건이 TRUE일 떄 보여줄 값
WHEN 조건3 THEN 해당조건이 TRUE일 떄 보여줄 값
ELSE 그밖의 모든경우 보여줄 값
END
고유값 보기
SELECT DISTINCT(gender) FROM member;
특정컬럼의 n번째에서 m개의 문자열출력
SELECT DISTINCT(SUBSTRING(address, 1, 2)) FROM member;
문자열의 길이를 보여주는 함수
UPPER는 문자열을 모두 대문자로, LOWER는 문자열을 모두 소문자로 바꿔 보여주는 함수
LPAD는 LEFT+PADDING, RPAD는 RIGHT+PADDING의 줄임말
LPAD(age,10,'0')는 age컬럼값을 왼쪽에 문자0을 붙여서 총 10자리로 만드는 함수
문자열에 존제하는 공백을 제거하는 함수
LTRIM은 왼쪽공백 삭제, RTRIM은 오른쪽공백 삭제, TRIM은 좌우 모두 공백삭제
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 뒤에 써서 그 값을 조회해야 한다.
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. LIMITWITH 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;
필터링 할 때 사용 할 수 있다
HAVING은 SQL SELECT문이 집계 값이 지정된 조건을 충족하는 행만 반환하도록 지정하는 SQL절
WHERE은 단일 테이블에서 데이터를 가져 오거나 여러 테이블과 결합하여 조건을 지정하는데 사용되는 SQL절
WHERE > GROUP BY > HAVING의 순서로 사용된다
HAVING은 그룹화 또는 집계가 발생한 후 레코드를 필터링하는데 사용되고 WHERE은 그룹화 또는 집계가 발생하기 전에 레코드를 필터링하는데 사용된다