내일배움캠프 Spring 4일차 TIL

Skadi·2023년 12월 27일
0

  1. if문

    IF 함수는 다음과 같이 사용됩니다.

    SELECT
        column1,
        column2,
        IF(조건, 참값, 거짓값) AS 새로운컬럼
    FROM
        테이블명;

    예를 들어, "salary" 컬럼이 50000보다 크면 "High", 그렇지 않으면 "Low"를 반환하고 싶다면 다음과 같이 사용할 수 있습니다.

    SELECT
        employee_id,
        employee_name,
        salary,
        IF(salary > 50000, 'High', 'Low') AS salary_category
    FROM
        employees;
    

    이 경우, IF 함수는 조건에 따라 "High" 또는 "Low"를 반환하며, 새로운 "salary_category" 컬럼에 해당 값을 넣습니다.

  1. case - 다중 if를 사용

    SQL에서 직접적인 IF 문은 없지만, CASE 문을 사용하여 조건에 따라 다른 결과를 반환할 수 있습니다. 예를 들어, 특정 조건에 따라 컬럼 값을 변경하고 싶다면 다음과 같이 사용할 수 있습니다.

    SELECT
        column1,
        column2,
        CASE
            WHEN 조건 THEN 변경할값
            ELSE 원래값
        END AS 새로운컬럼
    FROM
        테이블명;
    

    예를 들어, "age" 컬럼이 18보다 크면 "Adult", 그렇지 않으면 "Minor"를 반환하고 싶다면 다음과 같이 작성할 수 있습니다.

    SELECT
        person_id,
        person_name,
        age,
        CASE
            WHEN age > 18 THEN 'Adult'
            ELSE 'Minor'
        END AS age_group
    FROM
        persons;
    

    이 쿼리는 "age_group"이라는 새로운 컬럼을 만들어 각 행에 대해 조건에 따라 다른 값을 가집니다.

  2. mysql 데이터 타입 확인 방법

    MySQL에서 특정 테이블의 컬럼 데이터 타입을 확인하려면 DESCRIBE 명령어나 SHOW COLUMNS 명령어를 사용할 수 있습니다. 아래는 각각의 사용 예시입니다.

    1. DESCRIBE 명령어 사용:
    sqlCopy code
    DESCRIBE 테이블명;
    

    예를 들어, "employees" 테이블의 구조를 확인하려면 다음과 같이 사용합니다.

    sqlCopy code
    DESCRIBE employees;
    
    1. SHOW COLUMNS 명령어 사용:
    sqlCopy code
    SHOW COLUMNS FROM 테이블명;
    

    DESCRIBE 명령어 대신에 SHOW COLUMNS 명령어를 사용해도 동일한 결과를 얻을 수 있습니다. 아래는 예시입니다.

    sqlCopy code
    SHOW COLUMNS FROM employees;
    

    두 명령어 중 어떤 것을 사용해도 테이블의 구조와 각 컬럼의 데이터 타입, 길이, 속성 등을 확인할 수 있습니다.

  3. 서브쿼리

    MySQL에서 서브쿼리(subquery)는 하나의 SQL 문 안에서 다른 SQL 문을 사용하는 방법을 의미합니다. 서브쿼리는 다양한 목적으로 사용되며, 주로 WHERE, FROM, HAVING 절에서 활용됩니다.

    예를 들어, 다음은 WHERE 절에서 서브쿼리를 사용한 예제입니다. 이 쿼리는 "employees" 테이블에서 특정 부서(department)에 속한 직원들을 선택합니다.

    SELECT
        employee_id,
        employee_name
    FROM
        employees
    WHERE
        department_id = (SELECT department_id FROM departments WHERE department_name = 'IT');
    

    위의 쿼리에서 (SELECT department_id FROM departments WHERE department_name = 'IT') 부분이 서브쿼리로, 이 부분의 결과가 바깥 쿼리의 WHERE 조건에 사용됩니다.

    서브쿼리는 다양한 형태로 사용될 수 있으며, SELECT 문 안에서도 사용할 수 있습니다. 아래는 SELECT 문 안에서 서브쿼리를 사용한 예제입니다. 이 예제는 각 부서의 평균 급여보다 높은 급여를 받는 직원을 찾습니다.

    SELECT
        employee_id,
        employee_name,
        salary
    FROM
        employees
    WHERE
        salary > (SELECT AVG(salary) FROM employees GROUP BY department_id);
    

    이렇게 서브쿼리를 활용하면 더 복잡한 조건이나 비교를 수행할 수 있습니다.

  4. JOIN

    SQL에서 JOIN은 둘 이상의 테이블 간에 행을 결합하여 데이터를 가져오는 데 사용되는 연산입니다. 여러 가지 JOIN 유형이 있으며, 주로 INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN 등이 사용됩니다.

    1. INNER JOIN:
    INNER JOIN은 두 테이블 간의 일치하는 행만 반환합니다. 예를 들어, employees 테이블과 departments 테이블을 조인하여 각 직원의 속한 부서 정보를 가져오는 쿼리는 다음과 같을 수 있습니다:

    SELECT
        employees.employee_id,
        employees.employee_name,
        departments.department_name
    FROM
        employees
    INNER JOIN
        departments
    ON
        employees.department_id = departments.department_id;
    

    2. LEFT JOIN (또는 LEFT OUTER JOIN):
    LEFT JOIN은 왼쪽 테이블의 모든 행을 반환하며, 오른쪽 테이블과 일치하는 행이 없는 경우에는 NULL 값을 반환합니다. 아래는 모든 직원과 그들이 속한 부서 정보를 가져오는 LEFT JOIN의 예시입니다:

    SELECT
        employees.employee_id,
        employees.employee_name,
        departments.department_name
    FROM
        employees
    LEFT JOIN
        departments
    ON
        employees.department_id = departments.department_id;
    

    3. RIGHT JOIN (또는 RIGHT OUTER JOIN):
    RIGHT JOIN은 오른쪽 테이블의 모든 행을 반환하며, 왼쪽 테이블과 일치하는 행이 없는 경우에는 NULL 값을 반환합니다.

    4. FULL OUTER JOIN (또는 FULL JOIN):
    FULL OUTER JOIN은 양쪽 테이블의 모든 행을 반환하며, 어느 한쪽에만 속하는 행이 있는 경우에는 NULL 값을 반환합니다.

    이렇게 JOIN을 사용하면 두 개 이상의 테이블을 연결하여 필요한 정보를 한 번에 가져올 수 있습니다.

  5. WINDOW 함수

    SQL에서 윈도우 함수(Window Function)은 행과 행 간의 관계를 활용하여 특정 창(Window) 내에서 계산을 수행하는 함수입니다. 윈도우 함수는 주로 분석적인 쿼리나 집계 작업에서 사용되며, 창을 정의하고 그 안에서 특정 작업을 수행하는 데에 유용합니다.

    일반적으로 사용되는 윈도우 함수에는 다음과 같은 것들이 있습니다:

    1. ROW_NUMBER(): 결과 집합에서 각 행에 번호를 부여하는 함수.
    SELECT
        column1,
        column2,
        ROW_NUMBER() OVER (ORDER BY some_column) AS row_num
    FROM
        your_table;
    
    1. RANK(): 결과 집합에서 각 행에 대한 랭킹을 매기는 함수.

    RANK() 함수와 PARTITION BY 절을 함께 사용하면 특정 열을 기준으로 데이터를 그룹화하고, 각 그룹 내에서 순위를 부여할 수 있습니다. 예를 들어, 부서별로 급여에 따른 순위를 매기는 쿼리를 살펴보겠습니다.

    SELECT
        employee_id,
        employee_name,
        salary,
        department_id,
        RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS salary_rank
    FROM
        employees;
    

    위의 쿼리에서 RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) 부분은 부서별로 급여를 기준으로 내림차순으로 순위를 매기는 부분입니다. PARTITION BY 절을 사용하여 department_id로 데이터를 그룹화하고, 그 안에서 ORDER BY를 사용하여 급여를 기준으로 순위를 매깁니다.

    이 쿼리는 각 부서에서 급여를 기준으로 순위를 부여한 결과를 반환합니다.

    1. DENSE_RANK(): RANK()와 비슷하지만 동일한 값에 대해 중복된 랭킹이 없는 함수.
    SELECT
        column1,
        column2,
        DENSE_RANK() OVER (ORDER BY some_column) AS dense_rank
    FROM
        your_table;
    
    1. SUM(), AVG(), COUNT() 등의 집계 함수를 윈도우 함수로 사용:
    SELECT
        column1,
        column2,
        SUM(column3) OVER (PARTITION BY some_column) AS sum_per_partition
    FROM
        your_table;
    
    1. LAG()와 LEAD(): 현재 행의 이전 또는 다음 행의 값을 가져오는 함수.
    SELECT
        column1,
        column2,
        LAG(column2) OVER (ORDER BY some_column) AS previous_value,
        LEAD(column2) OVER (ORDER BY some_column) AS next_value
    FROM
        your_table;
    

    이러한 윈도우 함수들은 창을 정의하고 그 창 내에서 특정 작업을 수행하여 데이터를 보다 유연하게 분석하고 집계할 수 있게 해줍니다.

    결국, 윈도우 함수를 사용한 경우에는 데이터를 특정 기준에 따라 나누어 계산할 수 있어서 부분적인 결과를 얻거나, 특정 순서에 따라 계산을 수행할 때 유용합니다. 일반적인 집계 함수는 전체 데이터 집합을 기반으로 계산됩니다.

0개의 댓글