QCC를 풀고 강의를 들으며 SQL 다시 복습을 해야겠다고 느꼈다
고로 다시 한 번 처음부터 정리 시작
아! 노트정리는 이제 안 할려고 한다 .. 사랑했다 ..

열은 테이블에 저장된 데이터의 각 항목(특성)을 나타냄
즉, 열은 데이터의 속성을 정의하며, 같은 열에는 동일한 유형의 데이터가 저장됨
행은 테이블에서 개별 데이터 항목(레코드)을 나타냄
고유한 데이터를 담고 있으며, 각 열의 데이터를 조합하여 하나의 완전한 정보를 나타냄
문자형 : varchar (문자, 숫자, 특수문자 포함)
수치형 : int, float (정수,실수)
날짜/시간형 : date (yyyy-mm-dd)
불리언 : boolean (true/fales 혹은 0/1)
SELECT → FROM → JOIN → ON → WHERE → GROUP BY → HAVING → ORDER BY → LIMIT
FROM → ON → JOIN → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY → LIMIT
📌select절에서 선언한 별칭을 having 절에서 사용할 수 있는가?📌
A : Yes !!!!!!! where절에선 No !!!!!!!
null = 값이 없다
0 이랑 다른 개념이다
null 은 'is null', 'is not null' 사용
-- 일반적인 비교연산은 NULL에서 작동하지 않습니다.
SELECT *
FROM 테이블명
WHERE 컬럼명 = NULL; -- 작동하지 않음!
-- NULL 값만 선택
SELECT *
FROM 테이블명
WHERE 컬럼명 IS NULL;
-- NULL이 아닌 값만 선택
SELECT *
FROM 테이블명
WHERE 컬럼명 IS NOT NULL;
select : 조회
from : 테이블 지정
distinct : 중복 제거
SELECT DISTINCT city
FROM employees;
limit : 갯수 제한
where : 조건 지정
between A and B : A 와 B 사이 조회
-- 나이가 30~50 사이인 직원 조회
SELECT *
FROM employees
WHERE age BETWEEN 30 AND 50;
in : 일치하는 데이터 필터링
-- IN 예시: 특정 도시에서 근무하는 직원 조회
SELECT *
FROM employees
WHERE city IN ('Seoul', 'Busan');
not in : 제외한 데이터 조회
-- NOT IN 예시: 특정 도시를 제외한 직원 조회
SELECT *
FROM employees
WHERE city NOT IN ('Seoul', 'Busan');
like : 특정 패턴과 일치하는 데이터 필터링 %, _ 활용 (not like도 가능)
조건문에서 사용할 수 있는 연산자 : <>, !=
case when
else
end as : 첫번째로 참인 조건이 실행 → 조건을 만족하지 않으면 else 절이 실행
SELECT name, age,
CASE
WHEN age < 30 THEN '청년'
WHEN age BETWEEN 30 AND 50 THEN '중년'
ELSE '노인'
END AS age_group
FROM employees;
: 단일 결과값을 반환하는 함수
대부분의 집계 함수는 null 값 제외하고 작동함
예외적으로 count(*) 는 null포함 ‼️‼️‼️
count : 데이터의 행 수 반환
count(distinct) : 고유한 값을 갖는 데이터의 행 수 반환
sum : 열의 값을 모두 더함
avg : 열 값의 평균 계산
min : 최소값
max : 최대값
group by : 그룹화하여 요약 정보 생성
having : group by로 그룹화된 데이터에 조건을 추가로 적용할 때 사용
-- IT 부서가 아닌 직원들만 선택하여 부서별 총 급여를 계산
SELECT department_id, SUM(salary) AS total_salary
FROM employees
WHERE department_id != 'IT'
GROUP BY department_id;
--WHERE department_id != 'IT'로 데이터를 필터링합니다.
--필터링된 데이터를 GROUP BY department_id로 그룹화한 후, 총 급여를 계산
-- 예제 코드1
-- 부서별 총 급여가 10,000 이상인 부서만 선택
SELECT department_id, SUM(salary) AS total_salary
FROM employees
GROUP BY department_id
HAVING SUM(salary) >= 10000;
-- 모든 데이터를 GROUP BY department_id로 그룹화합니다.
-- HAVING 조건을 적용하여 총 급여가 10,000 이상인 부서만 선택!
-- SELECT 절에서 두 컬럼 조회
where + group by + having
-- 예제 코드1
-- 나이가 30 이상인 직원만 선택하고(WHERE), 성별별 그룹화가 된 후(GROUP BY)
-- 평균 나이가 35 이상인 성별만 조회(HAVING)
SELECT gender,
AVG(age) AS average_age
FROM employees
WHERE age >= 30
GROUP BY gender
HAVING AVG(age) >= 35;
-- 예제 코드2
-- IT 부서의 직원만 선택하고, 부서별 총 급여가 10,000 이상인 경우만 표시
SELECT department_id, SUM(salary) AS total_salary
FROM employees
WHERE department_id IN ('IT', 'HR')
GROUP BY department_id
HAVING SUM(salary) >= 10000;
--WHERE department_id IN ('IT', 'HR')로 IT와 HR 부서의 직원만 필터링
--필터링된 데이터를 GROUP BY department_id로 그룹화
--그룹화된 결과에서 SUM(salary) >= 10000 조건을 만족하는 부서만 조회
📌where 와 having 차이점📌
where
데이터 → where (개별 행 필터링) → group by (그룹화) → having (그룹화된 결과 필터링)
order by : 정렬
asc(생략가능) : 오름차순
desc : 내림차순
select절에서 선언한 별칭을 having 절에서 사용할 수 있는가? "Yes"
where 절에선 "No"