2024. 2. 14. 10:49ㆍLang/SQL
최근 ORM 위주로 개발하거나 그게 아니더라도 복잡한 쿼리를 짤 일이 없었다보니 리마인드할 필요가 생겼다.
그간 공부했던 SQL을 기초부터 다시 다지고 이전보다 효율적인 설계와 쿼리문 작성을 할 수 있도록 스펙UP 하자!
( 기본적인 진행은 Oracle을 기준으로 하고 MySQL을 추가 설명하는 것으로 하겠다.)
< 기초문법 1편_DML>
DML ( Data Manipulation Language, 데이터 조작어 )
1. 데이터 조회 ( SELECT ) => 기초!
2. 데이터 삽입 ( INSERT ) => 기초!
3. 데이터 수정 ( UPDATE ) => 기초!
4. 데이터 삭제 ( DELETE ) => 기초!
5. 합병 ( MERGE )
6. 서브 프로그램 호출 ( CALL )
7. 동시성 제어 ( LOCK TABLE )
8. 데이터 접근 경로 해석 (EXPLAIN PLAN)
1. 데이터 조회 ( SELECT )
- 명령어
1) SELECT
: 테이블에서 조회할 데이터 컬럼 선택
<옵션>
- AS : 컬럼의 별칭 설정 (alias)
- 집계함수 : AVG, SUM, COUNT 등
- 산술 연산자: +, -, *, / 등
- 문자열 함수: CONCAT, SUBSTRING, TRIM, UPPER, LOWER 등
- 날짜 함수: NOW, DATE, YEAR, MONTH, DAY 등
- 조건 함수: CASE, IF, COALESCE 등
- 변환 함수**: CAST, CONVERT 등
2) FROM
: 데이터를 조회하고 싶은 테이블 선택
<옵션>
- AS : 테이블의 별칭 설정 (alias)
- JOIN** : 복수의 테이블의 행을 결합
- 서브쿼리** : 파생테이블 생성
3) WHERE
: 데이터를 조회할 조건 입력
<O 옵션>
- 비교연산자 : =, <, >, <=, >=, <>
- 논리 연산 : AND, OR, NOT
< X 사용불가 >
- 집계함수
4) GROUP BY
: 특정 속성을 기준으로 그룹화 하여 조회할 때 속성 지정
<옵션>
- 상수
5) HAVING
: 그룹 함수를 포함한 조건 키워드
- 집계함수 : AVG, SUM, COUNT 등 => 그룹별 데이터 집계
6) ORDER BY
: 조회한 데이터 정렬 기준 지정
- ACS : 오름차순
- DESC : 내림차순
- COLLATE** : 특정 문자열 대소문자 구분 규칙을 적용하여 결과 집합을 정렬
- 적용 순서
2) FROM -> 3) WHERE -> 4) GROUP BY -> 5) HAVING -> 1) SELECT -> 6) ORDER BY
- 예시
< 쉬운 예시>
SELECT ENAME AS Employee_Name
FROM EMP
WHERE SAL > 2000
GROUP BY ENAME
HAVING COUNT(ENAME) > 1
ORDER BY ENAME ASC;
<어려운 예시>
SELECT
E.ENAME AS Employee_Name,
D.DNAME AS Department_Name,
COUNT(E.ENAME) AS Number_of_Employees,
AVG(E.SAL) AS Average_Salary
FROM
EMP E
INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO
WHERE
E.HIREDATE > DATE '1981-01-01'
GROUP BY
E.ENAME, D.DNAME
HAVING
COUNT(E.ENAME) > 1 AND AVG(E.SAL) > 2000
ORDER BY
Average_Salary DESC;
2. 데이터 삽입 ( INSERT )
- 명령어
1) INSERT INTO
: 데이터 삽입을 원하는 테이블과 그 컬럼을 설정
- 양식 => INSERT INTO 테이블명 ( 컬럼명1, 컬럼명2... )
2) VALUES
: 입력하고 싶은 데이터를 INSERT INTO에 기입한 컬럼 순서대로 입력
- 양식 => VALUE ( 데이터1, 데이터2 .... )
- 예시
INSERT INTO EMP (ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES ('SMITH', 'CLERK', 7902, DATE '1980-12-17', 800, NULL, 20);
3. 데이터 수정 ( UPDATE )
- 명령어
1) UPDATE
: 데이터를 수정하고 싶은 테이블 선택
- 양식 => UPDATE 테이블명
2) SET
: 수정하고 싶은 컬럼과 데이터 입력
- 양식 => SET 컬럼명 = 데이터
<O 옵션>
- 상수
- 산술 연산
- 다른 컬럼 값
- 문자열함수
- 날짜 함수
<X 사용불가>
- 집계함수 : AVG, SUM, COUNT, MIN, MAX 등
- 윈도우 함수 : ROW_NUMBER, RANK, DENSE_RANK, LEAD, LAG 등
- 서브쿼리에서의 집계 함수 :
-- 사용불가 예시 --
-- 이렇게 서브쿼리에서의 집계함수는 사용이 불가하다.
UPDATE EMP
SET AVG_SAL = (SELECT AVG(SAL) FROM EMP WHERE DEPTNO = E.DEPTNO)
WHERE ENAME = 'SMITH';
3) WHERE
: 데이터를 수정할 조건 입력
- 예시
UPDATE EMP
SET SAL = 1000
WHERE ENAME = 'SMITH';
4. 데이터 삭제 ( DELETE )
- 명령어
1) DELETE
: 데이터를 수정하고 싶은 테이블 선택
- 양식 => UPDATE 테이블명
2) WHERE
: 데이터를 수정할 조건 입력
- 예시
DELETE FROM EMP
WHERE ENAME = 'SMITH';
'Lang > SQL' 카테고리의 다른 글
[SQL] Join 개념 정리 - mysql 기준 (0) | 2025.01.12 |
---|---|
[OracleDB] SCOTT 계정 활성화 (19c 버전) (0) | 2024.07.03 |