본문 바로가기
Backend/Backend 관련 학습 내용

DB 데이터베이스2

by pjhcsol 2024. 11. 29.

Part. DB 데이터베이스

CH4. 조건에 맞는 데이터 가져오기

  • 조건에 맞는 데이터 가져오기(where)
    개념:
    데이터베이스에서 조건을 만족하는 특정 데이터를 선택하기 위해 사용되는 절이다.
    예시는 employees 테이블에서 department_id가 10인 모든 직원 데이터를 선택한다.
    예시:
    SELECT * FROM employees
  • WHERE department_id = 10;
  • 비교연산자(=, >, <, >=, <=)
    개념:
    조건식에서 사용되어 특정 값을 비교하거나 범위를 지정하는 데 사용된다.
    예시:
    SELECT * FROM products
  • WHERE price > 100;
  • 논리연산자(not,and,or)
    개념:
    여러 개의 조건을 조합하여 복잡한 검색 조건을 만들 때 사용된다.
    예시는 orders 테이블에서 2023년 1월에 발생한 주문이거나 총 금액이 1000을 초과한 모든 주문을 선택한다.
    예시:
    SELECT * FROM orders
  • WHERE (order_date >= '2023-01-01' AND order_date < '2023-02-01')
  •   OR total_amount > 1000;
  • 기타 주요 연산자(between,in)
    개념:
    범위를 지정하거나 여러 값을 비교할 때 사용된다.
    1.예시는 inventory 테이블에서 재고 수량이 100에서 500 사이인 모든 레코드를 선택한다.
    2.예시는 customers 테이블에서 주소가 캘리포니아, 뉴욕, 텍사스인 모든 고객을 선택한다.
    예시:
    SELECT * FROM inventory
  • WHERE quantity BETWEEN 100 AND 500;
  • SELECT * FROM customers
  • WHERE state IN ('CA', 'NY', 'TX');
  • 문자 데이터 다루기(like)
    개념:
    문자열 패턴을 사용하여 데이터를 검색할 때 사용된다.
    예시:
    SELECT * FROM employees
  • WHERE last_name LIKE 'S%';
  • null 데이터 다루기(is null)
    개념:
    NULL 값을 검색할 때 사용된다.
    예시는 students 테이블에서 성적이 NULL인 모든 학생 데이터를 선택한다.
    예시:
    SELECT * FROM students
  • WHERE grade IS NULL;

CH5. 원하는 데이터 만들기

  • 데이터 줄세우기(order by)
    개념:
    특정 열 기준으로 데이터를 정렬할 때 사용된다.
    예시는 products 테이블에서 가격을 내림차순으로 정렬하여 모든 상품 데이터를 선택한다.
    예시:
    SELECT * FROM products
  • ORDER BY price DESC;
  • 데이터 순위 만들기(rank,row_number)
    개념:
    데이터에 순위를 할당할 때 사용된다.
    예시는 products 테이블에서 가격을 기준으로 내림차순으로 순위를 매겨 상품 이름, 가격, 순위를 선택한다.
    예시:
    SELECT product_name, price,
  •       ROW_NUMBER() OVER (ORDER BY price DESC) AS rank
  • FROM products;
  • 문자형 데이터 정복하기
    개념:
    예시는 employees 테이블에서 성의 첫 글자를 추출하여 중복 없이 선택한다.
    예시:
    SELECT DISTINCT SUBSTRING(last_name, 1, 1) AS first_initial
  • FROM employees;
  • 숫자형 데이터 정복하기
    개념:
    예시는 employees 테이블에서 직원들의 평균 연봉, 최고 연봉, 최저 연봉을 계산한다.
    예시:
    SELECT AVG(salary) AS avg_salary,
  •       MAX(salary) AS max_salary,
  •       MIN(salary) AS min_salary
  • FROM employees;
  • 날짜형 데이터 정복하기
    개념:
    예시는 orders 테이블에서 주문 날짜를 기반으로 주문 연도와 월을 추출한다.
    예시:
    SELECT order_date,
  •       EXTRACT(YEAR FROM order_date) AS order_year,
  •       EXTRACT(MONTH FROM order_date) AS order_month
  • FROM orders;

 

 

CH6. 데이터 그룹화하기

  • 데이터 그룹화하기(group by)
    개념:
    데이터베이스에서 특정 열의 값을 기준으로 그룹을 만들어서 그룹 단위로 데이터를 집계하거나 분석하는 기능이다.
    예시에서 employees 테이블에서 department_id 열을 기준으로 그룹을 형성하여 각 부서의 직원 수를 계산한다. GROUP BY department_id 구문은 각 부서별로 데이터를 그룹화하는 역할을 한다.
    예시:
    SELECT department_id, COUNT(*) AS num_employees
  • FROM employees
  • GROUP BY department_id;
  • 그룹에 조건 주기(having)
    개념:
    GROUP BY 절과 함께 사용되며, 그룹의 집계 결과에 조건을 적용하여 특정 그룹을 필터링하는 기능이다.
    예시에서 employees 테이블에서 각 부서별 평균 연봉(AVG(salary))을 계산하고, 그 결과가 50000을 초과하는 부서만 선택한다. HAVING AVG(salary) > 50000 구문은 평균 연봉이 50000을 초과하는 그룹을 필터링한다.
    예시:
    SELECT department_id, AVG(salary) AS avg_salary
  • FROM employees
  • GROUP BY department_id
  • HAVING AVG(salary) > 50000;
  • 다양한 그룹 함수 알아보기(count,sum,avg,min,max)
    개념:
    데이터 그룹에 대해 계산을 수행하는 함수들이다.
  • 예시에서 employees 테이블에서 각 부서별 직원 수(COUNT), 총 연봉 합계(SUM), 평균 연봉(AVG), 최소 연봉(MIN), 최대 연봉(MAX)을 계산하여 부서별로 데이터를 그룹화한다.
    예시:
    SELECT department_id,
  •       COUNT(*) AS num_employees,
  •       SUM(salary) AS total_salary,
  •       AVG(salary) AS avg_salary,
  •       MIN(salary) AS min_salary,
  •       MAX(salary) AS max_salary
  • FROM employees
  • GROUP BY department_id;
  • 쿼리 실행 순서 알아보기 tip
    개념:
    SQL 쿼리가 실행될 때의 순서를 이해하는 것이 중요하다.
  • 데이터 그룹화해서 통계 내기 [실습]
    개념:
    예시에서 orders 테이블에서 주문이 발생한 월별로 주문 수(COUNT), 총 매출(SUM(total_amount)), 평균 주문 금액(AVG(total_amount))을 계산하여 월별로 데이터를 그룹화한다. DATE_FORMAT(order_date, '%Y-%m') 함수를 사용하여 order_date를 연도-월 형식으로 포맷팅하고, 이를 기준으로 그룹화한다. 결과는 월별로 정렬된다.
    예시:
    SELECT DATE_FORMAT(order_date, '%Y-%m') AS order_month,
  •       COUNT(*) AS num_orders,
  •       SUM(total_amount) AS total_sales,
  •       AVG(total_amount) AS avg_order_amount
  • FROM orders
  • GROUP BY DATE_FORMAT(order_date, '%Y-%m')
  • ORDER BY order_month;