SQL-2 DML과 여러 함수

Yoon·2023년 2월 26일
0

SQL (Oracle, MySQL)

목록 보기
2/5

2. SQL

  • 이후 글 쓰기 앞서 LOCAL테이블의 데이터가 필요함

개념

Structured Query Language

  • 구조적 질의 언어
  • DB와의 통신을 위한 언어
  • 데이터 조회, 정의, 조작을 위한 언어

종류

DML : INSERT, DELETE, UPDATE, SELECT

  • 데이터 조작 언어 (Data Manipulation Language)
  • 데이터를 조회하거나, 검색, 등록, 수정, 삭제

DDL : CREATE, DROP, ALTER, TRUNCATE

  • 데이터 정의 언어
  • (Data Definition Language)
  • 테이블 생성, 수정, 변경, 삭제

DCL : GRANT, REVOKE

  • 데이터베이스 접근 권한 제어 언어
  • (Data Control Language)

TCL : COMMIT, ROLLBACK, SAVEPOINT

  • 트랜잭션 (논리적 작업단위) 제어를 위한 언어
  • (Transaction Control Language)

3. DML

DML 구조

INSERT문 구조

INSERT INTO 테이블명 [ (열이름1, 열이름2, ...) ]
VALUES (값1, 값2, ...);

UPDATE문 구조

UPDATE 테이블명 SET
열이름1 = 값1, 열이름2 = 값2,...
[ WHERE 조건식 ];

DELETE문 구조

DELETE FROM 테이블명 [ WHERE 조건식 ];

SELECT문 기본 구조

SELECT 열이름1 [ AS 별칭 ], 열이름2, ....
FROM 테이블명
[ WHERE 조건식 ] ORDER BY 열이름 [ ASC OR DESC ]];

참고사항

SELECT문을 사용할 때 반드시 먼저 고려해야 할 부분

  • 어디서 가져올 것인가
  • 어떻게 가져올 것인가
  • 무엇을 출력할 것인가

LIKE 연산자

특정 단어를 포함하는 경우 조건, %: 0개 이상의 문자, _: 1개 이상의 문자

  • 예제 1
    이름이 두 자인 이씨 학생 조회
SELECT * FROM student WHERE name LIKE '이_';
  • 예제 2
    '인'자로 끝나는 학생 조회
SELECT * FROM student WHERE name LIKE '%인';

집합연산 UNION

UNION(중복제거), UNION ALL(중복포함)

/*
전공코드가 202인 학생정보와
부전공코드가 101인 학생정보 한꺼번에 조회
*/
SELECT
	studno, name, major1 
FROM student WHERE major1 = 202 
UNION ALL
SELECT
	studno, name, major1 
FROM student WHERE major2 = 101;  -- 하정환학생 데이터가 두개 조회 됨

/*
전공코드가 202인 학생정보와
부전공코드가 101인 학생정보 한꺼번에 조회
*/
SELECT
	studno, name, major1 
FROM student WHERE major1 = 202 
UNION
SELECT
	studno, name, major1 
FROM student WHERE major2 = 101;  
-- 하정환학생 데이터가 하나로 맨위로 올라와서 조회 됨

NULL과 NVL, NVL2 함수

NULL

  • 값이 없다는 의미(값 자체가 존재하지 않음)
  • 숫자의 0, 문자의 "과는 다름
  • 값이 없으므로 연산 불가
/*
직원의 이름과, 현재급여, 연봉(급여*12+보너스) 조회
*/
SELECT ename, salary, salary*12+bonus FROM emp;
-- 보너스가 null인 경우 연산불가
/*
NULL인 경우 다른 값으로 처리해주는 함수 사용
*/
SELECT ename, salary, salary*12+NVL(bonus,0) FROM emp;
-- 보너스가 null인 경우 0으로 출력
-- NVL(a,b): a가 NULL인 경우 b로 출력
/*
보너스가 없으면(null) 'X’, 있으면 'O'라고 출력
*/
SELECT ename, salary, bonus, NVL2(bonus,'O', 'X') FROM emp;
-- 보너스가 null인 경우 0으로 출력
-- NVL(A, 'B', 'C') A기 NULL인 경우 C 출력 NULL이 아니면 B출력

함수

함수는 사용하는 목적

  • 데이터의 값을 계산하거나 조작 (단일 행 함수)
  • 행을 그룹핑해서 계산한 요약값 (그룹 함수)
  • 데이터 타입 변환

1.문자관련 함수

자주 사용되는 문자열 함수

2.숫자관련 함수

자주 사용되는 숫자 함수

3.날짜관련 함수

  • 현재 날짜(시간) 가져오기
SELECT SYSDATE FROM dual;
  • 날짜 사이의 일자 구하기
SELECT TRUNC(SYSDATE - TO_DATE('2021-01-01')) FROM dual;
  • MONTHS_BETWEEN : 두 날짜 사이의 개월 수 구하기
SELECT name, birthday, MONTHS_BETWEEN(SYSDATE, birthday) 
FROM student;
  • TO_CHAR : 문자열로 변환하는 함수
SELECT TO_CHAR(SYSDATE, ‘YYYY-MM-DD’) FROM dual;


select to_char(sysdate, 'yyyy"년"mm"월"dd"일" HH24"시"mi"분"ss"초"') from dual;
/*
HH24는 24시 기준으로 표기해주며, HH로 작성할 시 12시 기준으로 출력된다
*/ 

4.랭킹함수

ROW_NUMBER() : 중복없이 전체 순서 지정
RANK() : 중복 랭킹 제외 후 순서 지정
DENSE_RANK() : 중복 랭킹 하나의 순서로 지정

/* 급여 순으로 랭킹 출력 */
SELECT
    salary, ROW_NUMBER() OVER(ORDER BY salary DESC) as rank1,
    RANK() OVER(ORDER BY salary DESC) as rank2,
    DENSE_RANK() OVER(ORDER BY salary DESC) as rank3
FROM emp;

조건함수

1.DECODE 함수

✓ 데이터의 값이 조건과 일치하는지 그렇지 않은지에 따라 다르게 출력
✓ 프로그래밍 언어에서 IF~ELSE와 같은 구조
✓ SQL문에서 정말 자주 사용되는 함수

DECODE(컬럼명, 조건값, 조건값과 같은 경우, 조건값과 다른 경우)

예제 1) 학생명과 학년이 1학년이면 신입생이라고, 그렇지 않으면 재학생이라고 출력

SELECT name, DECODE(grade, 1, ‘신입생’, ‘재학생’) FROM student;

예제 2) 학생명과 학년이 1학년이면 신입생이라고, 2학년이면 2학년, 3학년이면 3학년, 4학년이면 4학년이라고 출력

select name, grade, 
	decode(grade, 1, '신입생', 
    	decode(grade, 2, '2학년', 
        	decode(grade, 3, '3학년', '4학년'))) 
from student;
2.CASE 함수

✓ 특정 조건에 따라 출력할 데이터 설정
✓ 프로그래밍 언어에서 SWITCH 문과 유사한 구조
✓ 비교연산과 같은 조건 사용 가능

CASE 컬럼|데이터
WHEN 조건1 THEN 조건1이 참인 경우 출력값
WHEN 조건2 THEN 조건2가 참인 경우 출력값
...
ELSE 모든 조건이 일치하지 않는 경우 출력값
END

예제 1) 학생명과 학년이 1학년이면 신입생이라고, 2학년이면 2학년, 3학년이면 3학년, 4학년이면 4학년이라고 출력

SELECT name, 
	CASE grade
		WHEN 1 then ‘신입생’ WHEN 2 then ‘2학년’ 
		WHEN 3 then ‘3학년’ ELSE ‘4학년’
	END 
FROM student;

0개의 댓글