[SQL] 기초부터 다시 다지기~! (1) DML

2024. 2. 14. 10:49Lang/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