2020. 10. 26. 09:55ㆍ교육과정/KOSMO
키워드 : SQL / ON DELETE CASCADE / ON DELETE SET NULL / 정렬 (ORDER BY) / 숫자형 함수 / 문자형 함수 / 날짜형 함수 / dual 테이블
****
1. SQL 키워드 복습
(1) DDL - 구조에 대한 작업시
- CREATE TABLE 테이블명 ([컬럼명 데이터타입]) ... [ ] 는 여러개를 다룰 때
- DROP TABLE 테이블명;
- ALTER TABLE 테이블명 ADD ([컬럼명 데이터타입]);
MODIFY ([컬럼명 데이터타입)];
DROP ([컬럼명 데이터타입]);
(2) DML (CRUD)
- INSERT INTO VALUES
- SELECT FROM WHERE
- UPDATE SET WHERE
- DELETE FROM WHERE
(3) DCL - 셀프
- GRANT : 권한 부여
- REVOKE : 권한 제거
2. SQL 기본문법 복습 연습문제
※ 타 계정의 테이블을 복사해올 수 있다.
>> 이 때, 제약조건은 포함되지 않기에, 제약조건이 필요할 경우 다시 추가해야 한다.
3. 데이터 삭제 작업 중 자식레코드가 있을 경우의 처리 방법 (정책)
- ON DELETE CASCADE
- ON DELETE SET NULL
(1) 특별한 처리 X 기본 케이스
(2) on delete cascade 속성
(3) on delete set null 속성
4. SELECT 정렬 (ORDER BY)
SELECT * FROM 테이블명 ORDER BY 컬럼이름 DESC(or)ASC, 컬럼이름 DESC(or)ASC;
DESC : ABC 오름차순
ASC : ABC 내림차순
nulls last : null값을 제일 나중에 출력
5. 숫자형 함수
ABS (n) |
절대값 |
SIGN (n) |
양수(→1), 음수(→-1), 0(→0)을 구분 |
ROUND (n, i ) |
숫자 n을 소숫점 i자리에서 반올림 |
TRUNC (n, i ) |
숫자 n을 소숫점 i자리에서 자름 |
CEIL (n) |
가장 큰 정수 |
FLOOR (n) |
가장 작은 정수 |
MOD (n2, n1) |
n2에서 n1을 나눈 나머지 연산 |
POWER (n2, n1) |
n2의 n1 제곱값 |
SQRT (n) |
n의 제곱근의 값 |
6. 문자형 함수
LOWER (str) |
알파벳을 소문자로 변환 |
UPPER (str) |
알파벳을 대문자로 변환 |
INITCAP (str) |
첫번째 글자만 대문자로 변환 |
CONCAT (str1, str2) |
두 문자열을 연결 ( || 도 같은 결과) |
SUBSTR (str, i, n) |
문자열 중 i번째에서 n개의 일부 문자를 선택 ** |
INSTR (str, ch, n, i ) |
문자열 중에서 ch 문자열이 n번째부터 i번째있는 위치 |
LENGTH (str) |
문자열의 길이 |
LPAD / RPAD (str, n, ch) |
n 자리수 만큼 확보 후 빈 공백에 특정 문자로 채움 |
TRIM / LTRIM / RTRIM |
문자를 제거 (*)양쪽 공백 제거에 사용 |
TRANSLATE ( column, str1, str2 ) |
문자열에서 str1을 str2로 대체 |
REPLACE ( column, str1, str2 ) |
문자열에서 str1을 str2로 대신 |
**
(+) JAVA에서는 substring(3,6)일 경우 0부터 시작하여 3번째 문자열부터 6번째 전까지를 선택
(+) 오라클에서는 SUBSTR(str, 3,6)일 경우 1부터 시작하여 3번째부터 8번째까지 총 6개의 문자를 선택
※ dummy 테이블인 dual
7. 날짜형 함수
- 시스템의 날짜를 가져오는 함수 : SYSDATE, CURRENT_DATE, SYSTIMESTAMP, CURRENT_TIMESTAMP (*) 이 함수들은 사용시 () 필요없음 (*) sysdate와 current_date의 차이는 current_date는 세션 시간을 따름. 만일 한 명은 한국에서 한 명은 미국에서 본사 시스템에 접속시 각각 세션에 따른 시간을 확인하게 됨.
- 날짜 연산 |
|||||
연산 |
결과 |
설 명 |
|||
Date + number |
Date |
일수에 날짜를 더함 |
|||
Date - number |
Date |
일수에 날짜를 뺌 |
|||
Date - Date |
일수 |
일수에 다른 일수를 뺌 |
|||
Date + number / 24 |
Date |
시간을 날짜에 더함 |
|||
- 날짜 함수 |
|||||
MONTHS_BETWEEN |
두 날짜 사이의 월수를 계산 |
||||
ADD_MONTHS |
월을 날짜에 더함 |
||||
NEXT_DAY |
다음 요일에 대한 날짜 |
||||
LAST_DAY |
월의 마지막 날을 계산 |
||||
ROUND |
날짜를 반올림 |
||||
TRUNC |
날짜를 절삭 |
8. HR 계정의 employees 테이블을 이용한 연습문제
9. SQL 문법 마무리 연습문제
※ 기존에 레코드가 있는 상태에서 null 값을 변경하고자 할 때는 UPDATE를 해야 한다. (INSERT가 아님)
※ 특정월 이후부터의 정보를 검색하고자 할 때
EXTRACT(MONTH FROM jumunil) >= 11
jumunil >= EXTRACT(MONTH FROM jumunil)
jumunil >= to_date('161101')
jumunil > '16/10/31'
※ 중복배제 DISTINCT
(+) 객체지향의 장점 관련 추가사항
C : 절차적 언어
C++, java : 객체 지향 언어
python, scala : 함수형 언어
(1) C의 형식
int 부서번호;
부서명;
int 사원번호;
사원명;
업무;
월급;
void main() {
}
void method() {
)
>> 쭉 나열했을 때 하나의 선처럼 보임
>> 정보 수정이 필요할 경우 전체를 스캔해서 찾아야 함
(2) java의 형식
class 부서{
int 부서번호;
String 부서명;
int 사원번호;
String 사원명;
String 업무;
String 월급;
void main() {
}
}
>> 부서에 대한 정보 수정이 필요할 경우 해당 클래스를 찾아서 수정하면 된다.
** 객체가 달라도 함수명 동일하게 사용하기 위해 오버라이딩 사용
** 같은 클래스 내에서 인자 갯수는 다르면서 함수명 동일하게 사용하기 위해 오버로딩 사용