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 문