카테고리 없음

데이터베이스 언어 SQL-3

윤돌_99 2021. 4. 19. 21:10

JOIN

 

- LEFT JOIN

SELECT 고객.고객아이디, 고객.고객이름, 주문.배송지
FROM 고객
LEFT OUETR JOIN 주문
ON 고객.고객아이디 = 주문.주문고객

 

- RIGHT JOIN 

SELECT 제품.제품번호, 제품.제품명, 주문.주문고객
FROM 주문
RIGHT OUETR JOIN 제품
ON 제품.제품번호 = 주문.주문제품

 

MySQL 내장 함수

 

함수 설명
ABS(숫자) 숫자의 절댓값을 계산
ABS(-4.5) => 4.5
CEIL(숫자) 숫자보다 크거나 같은 최소의 정수
CEIL(4.1) => 5
FLOOR(숫자) 숫자보다 작거나 같은 최소의 정수
FLOOR(4.1) => 4
ROUNG(숫자, m) 숫자의 반올림, m은 반올림 기준 자릿수
LOG(n, 숫자)  숫자의 자연로그 값을 반환
log(10) => 2.30259
POWER(숫자, n) 숫자의 n제곱 값을 계산
POWER(2,3) => 8
SQRT(숫자) 숫자의 제곱그 값을 계산
SQUT(9.0) => 3.0
SIGN(숫자) 숫자가 음수면 -1, 0이면 0, 양수면 1
SIGN(3.45) => 1

 

<문자함수의 종류>

반환 구분 함수 설명
문자값 반환 함수

s : 문자열
c : 문자
n : 정수
k : 정수

CONCAT(s1, s2) 두 문자열을 연결, CONCAT('마당', 서점') => ' 마당 서점'
LOWER(s) 대상 문자열을 모두 소문자로 변환
LOWER('MR.SCOTT')  => mr.scott
LPAD(s,n,c) 대상 문자열의 왼쪽부터 지정한 자리수까지 지정한 문자로 채움
LPAD('Page 1', 10, '*') => '****Page 1' 
REPLACE(s1, s2, s3) 대상 문자열의 지정한 문자를 원하는 문자로 변경
REPLACE('JACK & JUE', 'J', 'BL') => 'BLACK & BLUE'
RPAD(s, n, c) 대상 문자열의 오른쪽부터 지정한 자릿수까지 지정한 문자로 채움
RPAD('AbC', 5, '*') => 'AbC**'
SUBSTR(s, n, k) 대상 문자열의 지정된 자리에서부터 지정된 길이만큼 잘라서 반환
SUBSTR('ABCDEFG', 3, 4) => 'CDEF' 
TRIM(c FROM s) 대상 문자열의 양쪽에서 지정된 문자를 삭제(문자열만 넣으면 기본값으로 공백 제거)
TRIM('=' FROM '==BROWNING==') => 'BROWNING'
UPPER(s) 대상 문자열을 모두 대문자로 변환
UPPER('mr.scott') => 'MR.SCOTT'
숫자값 반환 함수 ASCLL(c) 대상 알파벳 문자의 아스키 코드 값을 반환, ASCII('D') => 68
LENGTH(s)) 대상 문자열의 Byte 반환, 알파벳 1byte, 한글 3byte (UTF8)
LENGTH('CANDIDE') => 7
CHAR_LENGTH(s) 문자열의 문자 수를 반환, CHAR_LENGTH('데이터') =>3

 

<날짜-시간 함수의 종류>

함수 반환형 설명
STR_TO_DATE(string, format) DATE 문자열(STRING) 데이터를 날짜형(DATE)으로 반환
STR_TO_DATE('2019-02-14', %Y-%m-%d') => 2019-02-14
DATE_FORMAT(date, format) STRING 날짜형(DATE) 데이터를 문자열(VARCHAR)로 변환
DATE_FORMAT('2019-02-14',  '%Y-%m-%d') => 2019-02-24
ADDDATE(date, interval) DATE DATE 형의 날짜에서 INTERVAL 지정한 시간만큼 더함
ADDDATE('20019-02-14, INTERVAL 10 DAY) => 2019-02-24
DATE(date) DATE DATE 형의 날짜 부분을 반환
SELECT DATE('2003-12-31 01:02:03')
=> 2003-12-31
DATEDIFF(date1, date2) INTEGER DATE 형의 date1 = date2 날짜 차이를 반환
SELECT DATEDIFF('2019-02-14', '2019-02-04') =>10
SYSDATE DATE DBMS 시스템상의 오늘 날짜를 반환하는 함수
SYSDATE() => 2018-06-30 21:00:00

 

뷰(View)

- 다른 테이블을 기반으로 만들어진 가상 테이블

- 데이터를 실제로 저장하지 않고 논리적으로만 존재하는 테이블이지만, 일반 테이블가 동일한 방법으로 사용

- 다른 뷰를 기반으로 새로운 뷰를 만드는 것도 가능

- 뷰를 통해 기본 테이블의 내용을 쉽게 검색 가능하지만, 기본 테이블의 내용을 변화시키는 작업은 제한적으로 이루어    진다. 

 

● 뷰 생성 : CREATE VIEW 문

CREATE VIEW 뷰_이름[(속성_리스트)]
AS SELECT 문
[ WITH CHECK OPTION ];

EX) CREATE VIEW 우수고객(고객 아이디, 고객이름, 나이) AS SELECT 고객아이디, 고객이름, 나이

      FROM 고객 WHERE 등급 = 'vip' WITH CHECK OPTION;

 

● 뷰 활용 : SELECT 문

- 뷰는 일반 테이블과 같은 방법으로 원하는 데이터를 검색할 수 있다. 

- 검색 연산은 모든 뷰에 수행 가능

SELECT * FROM 우수고객 WHERE 나이 >= 25;

 

● 뷰 활용 : INSERT, UPDATE, DELETE 문

- 뷰에 대한 삽입, 수정, 삭제 연산은 실제로 기본 테이블에 수행되므로 결과적으로는 기본 테이블이 변경된다.

- 뷰에 대한 삽입, 수정, 삭제 연산은 제한적으로 수행된다. (변경 가능한 뷰 VS 변경 불가능한 뷰)

 

> 변경 불가능한 뷰의 특징

   - 기본 테이블의 기본키를 구성하는 속성이 포함되어 있지 않는 뷰

   - 기본 테이블에 있던 내용이 아닌 집계 함수로 새로 계산된 내용을 포함하는 뷰

   - DISTINCT 키워드를 포함하여 정의한 뷰

   - GROUP BY 절을 포함하여 정의한 뷰

   - 여러 개의 테이블을 조인하여 정의한 뷰는 변경이 불가능한 경우가 많음

 

● 뷰의 장점

- 질의문은 좀 더 쉽게 작성할 수 있다.

- 데이터의 보안 유지에 도움이 된다.

- 데이터를 좀 더 편리하게 관리할 수 있다. 

 

● 뷰 삭제 : DROP VIEW 문 

뷰를 삭제해도 기본 테이블은 영향을 받지 않는다.

DROP VIW 뷰_이름;

 

만약 삭제할 뷰에 제약조건이 존재한다면?

- 삭제할 뷰를 통해 만들어진 또다른 뷰가 있다면

- 뷰 삭제가 수행되지 않는다.

- 관련 제약조건을 먼저 삭제해야 한다. 

 

삽입 SQL

프로그래밍 언어로  작성된 응용 프로그램 안에  삽입하여 사용하는 SQL문

 

● 주요 특징

- 프로그램 안에서 일반 명령문이 위치할 수 있는 곳이면 어디든 삽입 가능

- 일반 명령문과 구별하기 위해 삽입 SQL 문 앞에 EXEC SQL을 붙임

- 프로그램에 선언된 일반 변수를 삽입 SQL 문에서 사용할 때는 이름 앞에 콜론( : )을 붙여서 구분함

 

커서(cursor)

- 수행 결과로 반환된 여러 행을 한 번에 하나씩 가리키는 포인터

- 여러 개의 행을 결과로 반환하는 SELECT 문을 프로그램에서 사용할 때 필요

 

● 삽입 SQL 문에서 사용할 변수 선언 방법

- BEGIN DECLARE SECTION과 END DECLARE SECTION 사이에 선언

 

● 커서가 필요 없는 삽입 SQL

- CREATE TABLE 문, INSERT 문, DELETE 문, UPDATE 문

- 결과로 행 하나만 반환하는 SELECT 문