
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" 컬럼에 해당 값을 넣습니다.
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"이라는 새로운 컬럼을 만들어 각 행에 대해 조건에 따라 다른 값을 가집니다.
mysql 데이터 타입 확인 방법
MySQL에서 특정 테이블의 컬럼 데이터 타입을 확인하려면 DESCRIBE 명령어나 SHOW COLUMNS 명령어를 사용할 수 있습니다. 아래는 각각의 사용 예시입니다.
sqlCopy code
DESCRIBE 테이블명;
예를 들어, "employees" 테이블의 구조를 확인하려면 다음과 같이 사용합니다.
sqlCopy code
DESCRIBE employees;
sqlCopy code
SHOW COLUMNS FROM 테이블명;
DESCRIBE 명령어 대신에 SHOW COLUMNS 명령어를 사용해도 동일한 결과를 얻을 수 있습니다. 아래는 예시입니다.
sqlCopy code
SHOW COLUMNS FROM employees;
두 명령어 중 어떤 것을 사용해도 테이블의 구조와 각 컬럼의 데이터 타입, 길이, 속성 등을 확인할 수 있습니다.
서브쿼리
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);
이렇게 서브쿼리를 활용하면 더 복잡한 조건이나 비교를 수행할 수 있습니다.
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을 사용하면 두 개 이상의 테이블을 연결하여 필요한 정보를 한 번에 가져올 수 있습니다.
WINDOW 함수
SQL에서 윈도우 함수(Window Function)은 행과 행 간의 관계를 활용하여 특정 창(Window) 내에서 계산을 수행하는 함수입니다. 윈도우 함수는 주로 분석적인 쿼리나 집계 작업에서 사용되며, 창을 정의하고 그 안에서 특정 작업을 수행하는 데에 유용합니다.
일반적으로 사용되는 윈도우 함수에는 다음과 같은 것들이 있습니다:
SELECT
column1,
column2,
ROW_NUMBER() OVER (ORDER BY some_column) AS row_num
FROM
your_table;
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를 사용하여 급여를 기준으로 순위를 매깁니다.
이 쿼리는 각 부서에서 급여를 기준으로 순위를 부여한 결과를 반환합니다.
SELECT
column1,
column2,
DENSE_RANK() OVER (ORDER BY some_column) AS dense_rank
FROM
your_table;
SELECT
column1,
column2,
SUM(column3) OVER (PARTITION BY some_column) AS sum_per_partition
FROM
your_table;
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;
이러한 윈도우 함수들은 창을 정의하고 그 창 내에서 특정 작업을 수행하여 데이터를 보다 유연하게 분석하고 집계할 수 있게 해줍니다.
결국, 윈도우 함수를 사용한 경우에는 데이터를 특정 기준에 따라 나누어 계산할 수 있어서 부분적인 결과를 얻거나, 특정 순서에 따라 계산을 수행할 때 유용합니다. 일반적인 집계 함수는 전체 데이터 집합을 기반으로 계산됩니다.