■ SQL
TERM SUMMARY OF SQL
JH
2024. 8. 24. 20:50
1. SQL 문법(구문)
기본 SQL 문
- SELECT: 데이터를 조회함.
- 예: SELECT * FROM employees;
- DISTINCT: 중복된 데이터를 제거하고 고유한 값만 반환함.
- 예: SELECT DISTINCT department FROM employees;
- INSERT INTO: 데이터를 테이블에 추가함.
- 예: INSERT INTO employees (name, position) VALUES ('John Doe', 'Manager');
- UPDATE: 기존 데이터를 수정함.
- 예: UPDATE employees SET salary = 70000 WHERE id = 1;
- DELETE: 데이터를 삭제함.
- 예: DELETE FROM employees WHERE id = 1;
추가적인 SQL 문
- CREATE TABLE: 새로운 테이블을 생성함.
- 예: CREATE TABLE employees (id INT PRIMARY KEY, name VARCHAR(50), salary INT);
- ALTER TABLE: 기존 테이블의 구조를 변경함.
- 예: ALTER TABLE employees ADD COLUMN birthdate DATE;
- DROP: 테이블이나 데이터베이스 등을 삭제함.
- 예: DROP TABLE employees;
- TRUNCATE: 테이블의 모든 데이터를 삭제함.
- 예: TRUNCATE TABLE employees;
- INDEX: 검색 속도를 높이기 위해 인덱스를 생성함.
- 예: CREATE INDEX idx_name ON employees (last_name);
- VIEW: 복잡한 쿼리 결과를 가상의 테이블로 저장함.
- 예: CREATE VIEW high_salary AS SELECT * FROM employees WHERE salary > 100000;
- TRANSACTION: 여러 SQL 문을 하나의 작업 단위로 묶어서 처리함.
- 예:
sqlCopy codeBEGIN TRANSACTION; UPDATE accounts SET balance = balance - 500 WHERE account_id = 1; UPDATE accounts SET balance = balance + 500 WHERE account_id = 2; COMMIT;
- 예:
- GRANT와 REVOKE: 사용자에게 권한을 부여하거나 회수함.
- 예: GRANT SELECT ON employees TO user1;
2. 조인(Join)
- INNER JOIN: 두 테이블에서 공통된 데이터만 반환함.
- 예: SELECT * FROM employees INNER JOIN departments ON employees.department_id = departments.id;
- LEFT JOIN: 왼쪽 테이블의 모든 데이터와 매칭되는 오른쪽 테이블의 데이터만 반환함.
- 예: SELECT * FROM employees LEFT JOIN departments ON employees.department_id = departments.id;
- RIGHT JOIN: 오른쪽 테이블의 모든 데이터와 매칭되는 왼쪽 테이블의 데이터만 반환함.
- 예: SELECT * FROM employees RIGHT JOIN departments ON employees.department_id = departments.id;
- FULL JOIN: 두 테이블의 모든 데이터를 반환하며 매칭되지 않는 부분은 NULL로 표시함.
- 예: SELECT * FROM employees FULL JOIN departments ON employees.department_id = departments.id;
- CROSS JOIN: 두 테이블의 모든 가능한 조합을 반환함.
- 예: SELECT * FROM employees CROSS JOIN departments;
3. 서브쿼리(Subquery)
- 서브쿼리는 쿼리 내에서 다른 쿼리를 포함하여 사용함.
- 예: SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);
4. 조건문(Conditional Statements)
IF 문
- IF 문은 주로 프로시저나 함수 내에서 조건을 처리할 때 사용됨.
- 예:
sqlCopy codeIF salary > 50000 THEN SET bonus = salary * 0.10; ELSE SET bonus = salary * 0.05; END IF;
- 예:
CASE 문
- CASE 문은 SQL 쿼리 내에서 조건에 따라 다른 결과를 반환함.
- 예:
sqlCopy codeSELECT employee_id, salary, CASE WHEN salary > 100000 THEN 'High' WHEN salary BETWEEN 50000 AND 100000 THEN 'Medium' ELSE 'Low' END AS salary_level FROM employees;
- 예:
WHERE 절의 조건문
- WHERE 절에서 조건을 사용하여 특정 조건을 만족하는 행만을 선택함.
- 예: SELECT * FROM employees WHERE salary > 50000;
5. SQL 함수
집계 함수(Aggregate Functions)
- COUNT(): 특정 열의 데이터 수를 계산함.
- SUM(): 숫자 데이터의 합계를 계산함.
- AVG(): 숫자 데이터의 평균을 계산함.
- MAX(), MIN(): 최대값 또는 최소값을 반환함.
문자열 함수(String Functions)
- UPPER(): 문자열을 대문자로 변환함.
- LOWER(): 문자열을 소문자로 변환함.
- CONCAT(): 두 개 이상의 문자열을 연결함.
- SUBSTRING(): 문자열의 일부분을 추출함.
- LENGTH(): 문자열의 길이를 반환함.
날짜 함수(Date Functions)
- NOW(): 현재 날짜와 시간을 반환함.
- DATEADD(): 특정 날짜에 시간을 더함.
- DATEDIFF(): 두 날짜 사이의 차이를 계산함.
- FORMAT(): 날짜 형식을 지정된 방식으로 변환함.
수학 함수(Math Functions)
- ROUND(): 숫자를 반올림함.
- ABS(): 절대값을 반환함.
- MOD(): 나머지를 계산함.
- POWER(): 제곱값을 계산함.
- CEILING()와 FLOOR(): 숫자를 올림 또는 내림함.
윈도우 함수(Window Functions)
- ROW_NUMBER(): 결과 집합 내에서 각 행의 순번을 반환함.
- RANK(): 순위를 매기되, 동일한 값이 있을 때 같은 순위를 부여함.
- DENSE_RANK(): 순위를 매기되, 같은 값이 있더라도 순위가 건너뛰지 않음.
- NTILE(n): 결과를 n개의 동일한 크기로 나누고, 각 그룹에 순번을 매김.
- LEAD(): 다음 행의 값을 반환함.
- LAG(): 이전 행의 값을 반환함.
집합 함수(Set Functions)
- UNION: 두 쿼리의 결과를 합치되, 중복된 행은 하나만 반환함.
- UNION ALL: 중복된 행을 포함하여 두 쿼리의 결과를 모두 합침.
- INTERSECT: 두 쿼리의 공통된 결과만 반환함.
- EXCEPT: 첫 번째 쿼리 결과에서 두 번째 쿼리 결과를 제외한 결과를 반환함.
기타 다양한 함수들
- COALESCE(): 여러 표현식 중 첫 번째로 NULL이 아닌 값을 반환함.
- NULLIF(): 두 값이 동일하면 NULL을 반환하고, 그렇지 않으면 첫 번째 값을 반환함.
- ISNULL(): 값이 NULL이면 대체 값을 반환함.
- CAST()와 CONVERT(): 데이터 타입을 변환함.