고급 SQL

Mar 03 2023
얼마 전에 SQL Beginner's tutorial을 만들었습니다. 여기에서 읽을 수 있습니다. 오늘은 GROUP BY 및 HAVING 연산자, MERGE 문 및 저장 프로시저와 같은 고급 주제에 대해 설명할 시간입니다.

얼마 전에 SQL Beginner's tutorial을 만들었습니다. 여기에서 읽을 수 있습니다 . 오늘은 GROUP BY 및 HAVING 연산자, MERGE 문 및 저장 프로시저와 같은 고급 주제에 대해 설명할 시간입니다.

그룹화 기준

SQL의 GROUP BY 절은 하나 이상의 열을 기반으로 결과 집합의 행을 그룹화하는 데 사용됩니다. 일반적으로 COUNT, SUM, AVG, MIN 및 MAX와 같은 집계 함수와 함께 사용되어 각 그룹의 값을 계산합니다.

SELECT category, SUM(sales)
FROM orders
GROUP BY category;

다른 예시:

SELECT department, COUNT(employee_id)
FROM employees
GROUP BY department;

오류 수신을 방지하려면 GROUP BY 절이 적용되지 않는 선택한 모든 열에서 집계 함수를 활용해야 한다는 점에 유의해야 합니다. 또한 GROUP BY 절의 열이 그룹을 정의하는 열임을 기억하는 것이 중요합니다. SELECT 문의 열 순서는 결과 집합과 관련이 없습니다.

갖는

집계 함수의 조건에 따라 결과 집합의 행 그룹은 SQL의 HAVING 절을 사용하여 필터링할 수 있습니다. 일반적으로 특정 요구 사항에 맞지 않는 그룹을 제거하기 위해 GROUP BY 절과 결합됩니다.

예를 들어 샘플 테이블의 각 제품 범주에 대한 총 매출을 선택 order하고 총 매출이 1000보다 큰 범주만 반환하는 다음 SQL 쿼리를 고려하십시오.

SELECT category, SUM(sales)
FROM orders
GROUP BY category
HAVING SUM(sales) > 1000;

다른 예시:

SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING COUNT(employee_id) > 5;

WHERE 절과 유사하게 HAVING 절은 GROUP BY 절이 그룹을 생성하고 집계 함수가 적용된 후 그룹을 필터링하는 데 사용됩니다.

병합

SQL MERGE 문은 원본 테이블의 데이터를 기반으로 대상 테이블에 데이터를 업데이트 또는 삽입하거나 둘 이상의 테이블의 데이터를 단일 테이블로 결합하는 데 사용됩니다. INSERT, UPDATE 및 DELETE를 결합하는 명령문의 대안으로 자주 사용됩니다.

통사론:

MERGE INTO target_table
USING source_table
ON (join_condition)
WHEN MATCHED THEN
    UPDATE SET target_table.column1 = source_table.column1, ...
WHEN NOT MATCHED THEN
    INSERT (column1, column2, ...)
    VALUES (source_table.column1, source_table.column2, ...)

MERGE INTO products
USING prices
ON (products.product_id = prices.product_id)
WHEN MATCHED THEN
    UPDATE SET products.price = prices.price;

MERGE INTO employees
USING temp_employees
ON (employees.employee_id = temp_employees.employee_id)
WHEN MATCHED THEN
    UPDATE SET employees.salary = temp_employees.salary
WHEN NOT MATCHED THEN
    INSERT (employee_id, first_name, last_name, department, salary)
    VALUES (temp_employees.employee_id, temp_employees.first_name, temp_employees.last_name, temp_employees.department, temp_employees.salary);

MySQL 및 SQLite와 같은 일부 데이터베이스 관리 시스템은 MERGE 문을 지원하지 않으므로 대신 INSERT, UPDATE 및 DELETE 문의 조합을 사용해야 합니다.

MERGE 명령은 대형 테이블의 성능에 큰 영향을 미칠 수 있으므로 전체 테이블에서 사용하기 전에 데이터의 작은 하위 집합에서 테스트해야 합니다.

저장 프로시저

저장 프로시저로 데이터베이스에 보관되는 미리 컴파일된 SQL 문 그룹입니다. 그들은 종종 데이터베이스에서 정보를 얻거나 까다로운 수학을 하는 것과 같은 특정 작업이나 활동 모음을 수행하기 위해 고용됩니다. 수많은 별도의 SQL 문을 실행하는 것과 비교할 때 저장 프로시저는 입력 매개 변수를 수신하고 출력 값을 반환할 수 있으므로 더 다양하고 효과적입니다.

다음은 테이블에서 모든 행을 검색하는 간단한 저장 프로시저의 예입니다 employees.

CREATE PROCEDURE GetAllEmployees
AS
BEGIN
    SELECT * FROM employees;
END

EXEC GetAllEmployees;

그것을 따라 우리 출판물을 지원하십시오

다음 기사도 참조하십시오.

Java 8 Stream API 인터뷰 질문 및 답변