★DB 기초 SQL
내가 공부한 것을 기록하며 복습하기(ORACLE)
SQL(Structured Query Language) : 구조화된 질의 언어 , 데이터를 조회, 수정, 갱신, 삭제 등을 할 수 있는 명령어
SQL문 정리
DDL (Data Definition Language) : 데이터 정의어, 데이터 베이스를 정의하는 언어
(create 생성, alter 수정, drop 삭제, truncate 초기화)
DML (Data Manipulation Language) : 데이터 조작어, 정의된 데이터 베이스를 조작하는 언어
(select 조회, insert 삽입, update 수정, delete 삭제)
DCL (Data Control Language) : 데이터 제어어, 데이터의 보안, 권리 권한 부여 등을 하는 언어
(grant 수행 권한부여, revoke 수행 권한 박탈/취소)
TCL (Transaction Control Language) : 트랜잭션을 처리하기 위한 명령어이다.(commit 저장, rollback 원상복구)
SQL문 자세한 이용법
1. DDL
테이블 사용
EX)
CREATE TABLE MEMBER
(
MEM_ID NUMBER(10) NOT NULL, --순번
MEM_NAME VARCHAR2(40) NOT NULL, --성명
MEM_DATE DATE , --입사일자
);
P.K, F.K 생성
EX)
CREATE TABLE MEMBER
(
MEM_ID NUMBER(10) NOT NULL, --순번
MEM_NAME VARCHAR2(40) NOT NULL, --성명
MEM_DATE DATE , --입사일자
Constraint 인덱스키명 Primary Key (필드명1, 필드명2)
Constraint 외부키명 Foreign key (필드명2) Reference 외부테이블명(외부필드명)
);
※ 테이블 복사 (CREATE 새로만들 테이블명 AS SELECT * FROM 복사할 테이블;)
하지만 기본키와 외래키는 복사 되지 않는다.
테이블 변경
EX)
ALTER TABLE MEMBER
ADD ( MEM_MAIL VARCHAR2(60) NOT NULL) --추가
ALTER TABLE MEMBER
MODIFY (MEM_DATE NOTNULL) --수정
삭제
EX)
DROP COLUMN MEM_DATE --컬럼삭제
DROP TABLE MEMBER --테이블삭제
1. DML
데이터 삽입
EX)
INSERT INTO MEMBER (MEM_ID, MEM_NAME) <- 생략시 MEMBER에 모두 삽입
VALUES (1, '홍길동');
INSERT INTO MEMBER (MEM_ID, MEM_NAME)
VALUES (2, '신짱구');
데이터 검색
EX)
사원 성명이 신짱구인 사원의 번호를 검색
SELECT [DISTINCT] MEM_ID --DISTINCT는 중복을 피해서 검색한다.
FROM MEMBER
WHERE MEM_NAME = '신짱구' ;
GROUP BY
HAVING
ORDER BY DESC | ASC; --생략되면 ASC(오름차순), DESC(내림차순)
※ ' * ' : 아스트리크, 테이블의 모든 컬럼을 조회할 때 쓴다.
※ 데이터 검색을 위한 연산자(산술, 비교, 논리 연산자)
산술연산자 : +, -, *, /, ()
비교연산자 : =, !=, <(이상도 가능),>(이하도 가능),<>(=라는 의미)
논리연산자 : AND, OR, NOT
연산자의 우선순위는 (), NOT, AND, OR 이다. (이 순서로 실행됨)
기타연산자 : IN(둘 이상의 표현식 검색시 사용, NOT과 활용가능)
★LIKE 연산자 : _ , %(와일드카드)를 활용한 문자형태가 같은 ROW 검색
_ : 한 문자, % : 여러 문자 -> 이 _, %를 검색하려면 ESCAPE 사용
※ 컬럼명을 프로그램 실행시 바꿔서 보는법 (별칭:ALTAS)
SELECT MEM_ID 사원코드, "사원코드", AS "사원코드"
MEM_NAME 성명, "성명", AS "성명" →이와 같은 3가지 형식으로 쓴다.
FROM MEMBER ;
결과물은 컬럼명이 MEM_ID, MEM_NAME가 아닌 사원코드, 성명으로 보여진다.
(결과 조회시에만!!!)
※ NULL값으로 삽입 또는 변경하고 정렬을 한다면 ASC일때는 마지막에
DESC일때는 맨 처음에 위치한다.
데이터 변경
EX)
UPDATE MEMBER
SET MEM_NAME = '신영만'
WHERE MEM_ID = '1';
※ 주의 UPDATE (변경하고자 하는 테이블) SET (변경할 데이터) WHERE (변경하기를 원하는 데이터 검색조건)
함수
문자함수( || ) : || 연산자는 둘 이상의 문자열을 연결하는 연산자
- CONCAT : 두 문자열을 연결하여 반환
- CHR, ASCII : 아스키 값을 문자로 문자를 아스키 값으로 반환
- LOWER, UPPER, INITCAP : 해당 문자나 문자열을 소문자로 반환, 대문자로 반환, 첫 글자를 대문자로 나머지는 소문자로 반환 EX) SELECT LOWER('Hello SQL') FROM DUAL; → hello sql 반환 , 다른 것들도 사용법 동일
- LPAD, RPAD(X, Y, Z) : 지정된 길이(Y)에서 X를 채우고 남은 공간을 Y로 채운다. (L은 우측에 X를 채운다, 남은 좌측은 Z를 채운다. R은 반대.) EX) SELECT LPAD ('Hello SQL' , 10, '*') FROM DUAL; → *Hello SQL 반환
- LTRIM, RTRIM(X, Y) : 좌, 우측 공백 문자를 제거 EX) SELECT '<' || LTRIM(' AAA ') || '>' FROM DUAL; → 'AAA ' 출력
- TRIM : 위의 LTRIM 과 RTRIM 결합 EX) SELECT '<' || TRIM(' AAA ') || '>' FROM DUAL; → 'AAA'출력
- ★ SUBSTR(X, Y, Z) : 문자열의 일부분 X를 선택, Y위치부터 길이 Z만큼의 문자 리턴 EX) SELECT SUBSTR('Hello SQL', 7, 3) FROM DUAL; → SQL 반환
- REPLACE(X, Y, Z) : X에 포함된 Y문자를 Z값으로 치환 EX)SELECT REPLACE('Hello SQL', 'Hello', 'Goodbye') FROM DUAL; → Goodbye SQL 출력
- INSTR(X, Y, M, N) : X문자열에서 Y문자가 처음 나타나는 위치 숫자 출력, M은 시작위치, N은 N번째 EX)SELECT INSTR('Hello SQL Goodbye SQL', 'SQL', 1, 2) FROM DUAL; → 19 반환
- LENGTH, LENGTHB(X) : LENGTH는 문자열 X의 길이값 반환, LENGTHB는 문자열 X의 BYTE 값 반환 EX) SELECT LENGTH('Hello SQL') FROM DUAL; → 9 반환 , SELECT LENGTHB('안녕 SQL') FROM DUAL; →10 반환 , 주의) 한글은 하나에 3BYTE
숫자함수
- ABS(N) : N절대값으로 변환
- SIGN(N) : N을 양수(1), 음수(-1), 0(0) 으로 변환
- POWER(N,M) : N의 M 제곱
- SQRT(N) : N의 제곱근
- GREATEST, LEAST(N,M·····) : 열거한 항목 중 가장 큰 또는 가장 작은 값 항목 반환, N의 데이터 값에 따라 M항목도 판단. EX) SELECT GREATEST(1, 2, 3) FROM DUAL; → 3반환
- ROUND(N,1) : 지정된 자릿수에서 반올림 EX) SELECT ROUND(3.14, 1) FROM DUAL; → 3.1 반환
- TRUNC(N,1) : ROUND와 동일 하지만 반올림이 아닌 절삭 EX) SELECT TRUNC(3.16, 1) FROM DUAL; → 3.1 반환
- MOD(C, N) : C를 N으로 나눈 나머지
- FLOOR/ CEIL(N) : N과 같거나 작은 수 중 가장 큰 정수/ N과 같거나 큰 수 중에 가장 작은 정수 소수점 이하의 값이 존재하면 무조건 올림하는 함수 EX) SELECT FLOOR(3.0123456) FROM DUAL; → 3 반환 , SELECT CEIL(3.0123456) FROM DUAL; → 4 반환
날짜함수
- SYSDATE / SYSTIMESTAMP : 시스템에서 제공하는 현재 날짜와 시간 값/ 연, 월, 일, 시, 분, 초, 1000분의 1초
- ADD_MONTH(DATE, N) : DATE에 월을 더한 날짜
- NEXT_DAY(DATE, CHAR), LAST_DAY(DATE) : 해당 날짜 이후의 가장 빠른 요일의 날짜, 월의 마지막 날짜
- ROUND(DATE, FORMAT('YY', 'MM'...)) : 형식 기준으로 날자를 반올림한 날짜
- TRUNC(DATE, FORMAT('YY', 'MM'...)) : 형식 기준으로 날짜를 버림한 날짜
- MONTH_BETWEEN(DATE1, DATE2) : 두 날짜 사이 달수 반환
- ★EXTRACT(FORMAT, FROM DATE) : 날짜에서 필요한 부분만 추출 EX)EXTRACT(MONTH, FROM SYSDATE) FROM DUAL;
형 변환(CONVERSION) 함수
- CAST(X, AS TYPE) : 명시적으로 형 변환 EX) SELECT CAST('1995/01/01' AS DATE) FROM DUAL; → 1995/01/01
- TO_CHAR/ TO_NUMBER/ TO_DATE : 숫자, 문자, 날짜를 지정한 형식의 문자열 반환, 숫자형식의 문자열을 숫자로 반환, 날짜형식의 문자열을 날짜로 반환 → SELECT TO_CHAR(CAST('2008-12-25' AS DATE) , 'YYYY.MM.DD HH24:MI') FROM DUAL;
- TO_CHAR : 숫자, 문자, 날짜를 지정한 형식의 문자열 반환(9: 유효한 숫자인 경우 출력, 0: 무효한 숫자인 경우 '0' 출력, L: 지역화폐기호, MI: 음수인 경우 우측에 마이너스 표시, PR: 음수인 경우 <>로 묶는다, ,(comma) .(dot): 해당 위치에 comma, dot표시) EX) SELECT TO_CHAR(1234.6 , 'L9,999,00') FROM DUAL; → ₩1234.60
- TO_NUMBER : 숫자형식의 문자열을 숫자로 반환 EX) SELECT TO_NUMBER('₩1,200', 'L9,999') + 1 FROM DUAL; → 1201출력
- TO_DATE : 날짜형식의 문자열을 DATE형으로 변환 EX) SELECT TO_DATE('2009-03-05', 'YYYY-MM-DD') + 3 FROM DUAL; → 2009-03-08
NULL 처리함수 : NULL은 아무 값도 없는 걸 의미한다.
(요즘 시대에는 집 전화번호가 NULL값을 허용하는 대표적인 예이다.)
- 특정 값을 NULL처리하는 것은 이전의 UPDATE문을 활용할 수 있다.
- IS NULL, IS NOT NULL : NULL값인지 아닌지 비교 EX) WHERE절에 비교데이터 뒤 IS(NOT)NULL을 사용한다.
- NVL(N,M) : N이 NULL이 아니면 N 반환, NULL이면 M 반환 EX) SELECT에 NVL을 사용한다.
- NVL2(N,R,M) : N이 NULL이 아니면 R 반환, NULL이면 M 반환 EX) SELECT에 NVL2을 사용한다.
- NULLIF(N,M) : N과M을 비교하여 같으면 NULL 다르면 N 반환
- COALESCE(A,B,C,D,E ...) : 파라미터 중 NULL이 아닌 첫 번째 파라미터 반환
표현식
- ★DECODE : IF문과 비슷한 역활 EX) SELECT DECODE(9, 10, 'A', 9, 'B', 8, 'C', 'D') FROM DUAL;
- CASE WHEN : ① SIMPLE CASE EXPRESSION : EX) SELECT CASE '나' WHEN '철호' THEN '아니다' WHEN '나' THEN '맞다' ELSE '모르겠다' END RESULT FROM DUAL; ② SEARCHED CASE EXPRESSION : SELECT CASE WHEN '나'='나' THEN '맞다' ELSE '아니다' END RESULT FROM DUAL;
기본 TCL : 트랜잭션이란 작업의 기본단위, 최소단위
트랜잭션의 특성
1. 원자성 : 트랜잭션에서 정의된 연산의 경우 전체 실행 또는 전체 실행 안됨의 경우만 가능하다.
2. 일관성 : 실행 전 데이터베이스에 문제가 없다면, 실행 후에도 문제가 없어야 한다.
3. 고립성 : 실행 중 타 트랜잭션에 영향으로 결과에 문제가 발생해서는 안 된다.
4. 지속성 : 성공적으로 수행되면 해당 트랜잭션으로 갱신한 데이터베이스의 내용은 지속적으로 저장된다.
트랜잭션 제어문
- COMMIT : 변경사항을 확정시키고 트랜잭션을 종료
- ROLLBACK : 변경사항을 취소시키고 트랜잭션을 종료
- SAVEPOINT : 현재의 트랜잭션 중에서 ROLLBACK 시킬 위치를 지정
※ 주의사항 : COMMIT을 하지 않았더라도 DDL을 잘못쓰면 자동으로 COMMIT된다. EX) CREATE문을 사용하여 정상적으로 작동하지 않고 오류를 띄워도 자동 COMMIT.
공부를 하며 업데이트 할 예정입니다.