SQL 복습

모서아·2024년 12월 13일

SQL

목록 보기
6/6

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

열 (Column) ↓

열은 테이블에 저장된 데이터의 각 항목(특성)을 나타냄
즉, 열은 데이터의 속성을 정의하며, 같은 열에는 동일한 유형의 데이터가 저장됨

행(Row) →

행은 테이블에서 개별 데이터 항목(레코드)을 나타냄
고유한 데이터를 담고 있으며, 각 열의 데이터를 조합하여 하나의 완전한 정보를 나타냄

데이터 타입

문자형 : 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

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로 그룹화된 데이터에 조건을 추가로 적용할 때 사용

  • where + 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로 그룹화한 후, 총 급여를 계산
  • group by + having
-- 예제 코드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

  • 그룹화 이전에 데이터 필터링
  • 개별 행을 기준으로 조건 적용
    having
    -그룹화 이후에 데이터를 필터링, 즉 그룹화된 결과를 기준으로 조건을 적용
    차이 요약

    데이터 → where (개별 행 필터링) → group by (그룹화) → having (그룹화된 결과 필터링)

order by : 정렬
asc(생략가능) : 오름차순
desc : 내림차순

2개의 댓글

comment-user-thumbnail
2024년 12월 15일

select절에서 선언한 별칭을 having 절에서 사용할 수 있는가? "Yes"
where 절에선 "No"

1개의 답글