1. SQL 명령문이란?
· 데이터베이스를 처리하기 위해 고안된 언어로 자료를 검색하고 수정, 삭제하는 기능을 한다. (DB표준 언어)
· SQl 명령문의 종류로는 DDL, DML, DCL, DQL 등이 사용된다.
※DDL(Data Definition Language의 약자, 데이터 조작어)
· 테이블 구조 자체를 생성, 변경, 삭제 가능하며, 컬럼에 관련된 언어이다.
1)CREATE TABLE: 새로운 테이블 생성하는 명령어
· varchar2: 실제 입력된 문자열의 길이만큼 저장, number: 숫자 저장, date: 날짜 저장
2)ALTER TABLE: 기존 테이블의 구조를 변경하는 명령어
· ALTER TABLE ~ ADD: 기존 테이블에 새로운 컬럼을 추가하는 명령어
· ALTER TABLE ~ MODIFY: 테이블에 이미 존재하는 컬럼을 변경하는 명령어
· ALTER TABLE ~ DROP COLUMN: 테이블에 이미 존재하는 컬럼을 삭제하는 명령어
3)DROP TABLE: 테이블 제거하는 명령어
4)TRUNCATE: 데이터 삭제하는 명령어
· DELETE: 데이터는 삭제되지만 테이블 용량은 줄어 들지 않으며, 삭제한 것을 되돌릴 수 있다.
· TRUNCATE 명령어: 테이블은 삭제하지 않고 데이터, 용량 모두 삭제되며, 삭제한 것을 되돌릴 수 없다.
· DROP 명령어: 테이블 전체를 삭제한다. (용량, 데이터, 테이블 모두)
5)데이터 딕셔너리: 데이터베이스 자원을 효율적으로 관리하기 위한 다양한 정보를 저장하는 시스템 테이블
※DML(Data Manipulation Language의 약자, 데이터 정의어)
· 테이블의 내용을 추가, 수정, 삭제 가능하며, 행에 관련된 언어이다.
1)INSERT: 테이블에 새로운 로우를 추가할 때 사용, 컬럼명 표기 하지 않은 경우 원래의 기존 틀에 맞게 자동 입력된다.
2)UPDATE: 저장된 데이터를 수정할 때 사용
3)DELETE: 저장된 데이터를 삭제할 때 사용
※DCL(Data Control Language의 약자, 데이터 제어어)
· 데이터베이스에 접근하고 객체에 권한 제공 등의 역할을 하는 언어이다.
2. 명령어에 대해 배워보자.
※DESC: 테이블 구조 확인하기 위한 명령어
※SELECT: 테이블에 저장된 데이터를 조회하기 위한 명령어
※WHERE: SELECT문에서 마지막에 표기되며, 원하는 행을 검색하고자 할 때 사용
※DUAL table: 단순히 산술 연산 결과를 하나의 행으로 출력하기위한 테이블로 무엇인가를 확인하는 용도로 사용
※산술 연산자: +, -, / , * 등의 연산자를 사용
※비교 연산자: =, >, <, >=, <=, <>, !=, ^= 등의 연산자를 사용
※논리 연산자: AND, OR, NOT 키워드를 사용
※BETWEEN AND 연산자: 두 개의 조건 사이에 해당되는 행을 반환
※IN 연산자: OR 연산자와 비슷한 용도로 사용
※NULL 연산자: 컬럼의 값이 null인지 아닌지를 비교 혹은 검색할 때 사용
※DISTINCT 연산자: 동일한 데이터 값들이 중복 출력되지 않도록 하는 연산자
※별칭 연산자: 컬럼의 이름에 별칭 부여(의미를 알아 보기 힘든 경우에 사용), as + " " 사용하여 표기하며 as는 생략가능
※연결 연산자: || 수직바를 사용해서 표현하며, || 내에 있는 문자열을 사용하여 두 개의 컬럼 값을 연결해주는 연산자
※ORDER BY절
1)ASC(오름차순): 숫자-작은 값부터, 문자-사전 순으로 정렬
2)DESC(내림차순): 숫자-큰 값부터, 문자-사전 반대 순으로 정렬
※LIKE 연산자와 와일드 카드
1)% 기호는 컬럼 값에 해당 문자가 포함되는지 검색할 때 사용(%를 사용하는 위치에 따라 달라짐)
2)_ 기호는 컬럼 값에 해당 문자가 몇번째에 위치하는지 확인할 때 사용
※숫자 함수
1)ABS: 절대값을 구하는 함수
2)FLOOR: 소수점 아래를 버리는 함수
3)ROUND: 특정 자리에서 반올림하는 함수
4)TRUNC: 특정 자리에서 잘라내는 함수
5)MOD: 나누기 연산 후 나머지를 출력하는 함수
※날짜 함수
1)SYSDATE: 현재 날짜를 출력하는 함수(산술 연산자를 통해 연산도 가능)
2)MONTHS_BETWEEN: 두 날짜 사이의 개월수를 구하는 함수(일수로 반환)
3)ADD_MONTHS: 특정 개월 수를 더한 날짜를 구하는 함수(YY/MM/DD 형태로 반환)
4)NEXT_DAY: 해당 날짜부터 시작하여 명시된 요일을 만나면, 해당되는 날짜를 반환하는 함수
5)LAST_DAY: 해당 달의 마지막 날짜를 반환하는 함수
※문자 처리 함수
1)UPPER: 모든 문자를 대문자로 변환하는 함수
2)LOWER: 모든 문자를 소문자로 변환하는 함수
3)INITCAP: 이니셜만 대문자로 변환하는 함수
4)LENGTH: 문자 길이를 구하는 함수
5)LENGTHB: byte 수를 알려주는 함수 (영문:1byte, 한글:2byte)
6)INSTR: 특정 문자의 위치를 구하는 함수
7)SUBSTR: 특정 위치에서 선택 개수만큼의 문자를 추출하는 함수
8)SUBSTRB: 특정 위치에서 개수가 아닌 byte 수를 기준으로 문자를 추출하는 함수 (영문:1byte, 한글:2byte)
9)LPAD: 문자를 오른쪽 정렬 후 왼쪽에 생긴 빈 공백에 특정 기호로 채우는 함수
10)RPAD: 문자를 왼쪽 정렬 후 오른쪽에 생긴 빈 공백에 특정 기호로 채우는 함수
11)TRIM: 공백 혹은 특정 문자를 삭제하는 함수(단, 문자사이에 있는 공백과 특정 문자는 삭제하지 않음)
※형 변환 함수 **필수**
· 숫자, 문자, 날짜의 데이터형을 다른 데이터형으로 변환하는 함수 **필수**
1)TO_CHAR: 날짜형/숫자형을 문자형으로 변환하는 함수, to_char(날짜 or 숫자, '원하는 형태')
2)TO_DATE: 날짜처럼 생겼지만 데이터형이 날짜가 아니라 문자인 데이터를 날짜형으로 변환하는 함수
3)TO_NUMBER: 숫자처럼 생겼지만 데이터형이 숫자가 아니라 문자인 데이터를 숫자형으로 변환하는 함수
※NVL 함수: 값이 NULL인 경우, 0 또는 다른 값으로 변환해주는 함수
※DECODE 함수 **필수**
· 조건에 따라 맞는 데이터를 찾아 해당 값을 매칭하여 출력하는 함수 (java 언어에서 switch case 문과 같은 기능)
※CASE 함수
· decode 함수와 기능은 동일하지만, decode 함수는 비교 연산자(=)만 사용가능하고
case 함수는 다양한 비교 연산자(=, <>, ^=) 사용가능, case when [조건문] then [조건이 맞으면 반환]
※그룹 함수 *알아두기*
· 하나 이상의 행을 그룹화하는 함수
1)SUM: 해당 컬럼 값의 합을 구하는 함수
2)AVG: 해당 컬럼 값의 평균을 구하는 함수
3)MAX/MIN: 해당 컬럼 값 중에서 최대값/최소값을 구하는 함수
4)COUNT: 해당 컬럼 중에서 값을 가지고 있는 로우의 개수를 구하는 함수
값이 중복되는 경우에도 카운트 되며, 값이 NULL인 경우에는 카운트 되지 않는다.
※GROUP BY절 **필수**
· distinct과 비슷한 기능을 수행하며, 그룹 함수를 사용하여 어떤 컬럼값을 기준으로 적용할 것인지 기술 필수
(앞, 뒤 컬럼 표기가 동일해야함!)
· 아래 쿼리문이 오류가 나는 이유는?
SELECT DEPTNO, ENAME, SUM(SAL), AVG(SAL) FROM EMP GROUP BY DEPTNO;
GROUP BY 절에 DEPTNO만 명시하여 그룹지었기 때문에 오류가 발생한다.
DEPTNO, ENAME를 동시에 명시하는 경우 오류는 발생하지 않지만, ENAME이 다르기 때문에 그룹 짓는 의미가 사라진다.
※HAVING절
· GROUP BY절에 의해 생성된 결과 값 중 원하는 조건에 부합하는 자료를 추출할 때 사용
(group by절에서는 where이 아닌 having 사용)
※JOIN ***핵심 중에 핵심!!***
· 두 개 이상의 테이블에 대해서 결합하여 나타낼 때 사용
1)CARTESIAN PRODUCT
두 개 이상의 테이블이 조인될 때, 공통되는 컬럼에 의한 조인이 발생되지 않아 모든 데이터가 출력되는 경우
2)EQUI JOIN(동등조인)
조인 대상이 되는 두 테이블에서 공통적으로 존재하는 컬럼의 값이 일치되는 행을 연결하여 결과를 생성하는
조인 기법 (A = B, B = C 일 때, A = C와 같다)
3)NON-EQUI JOIN(비등가조인)
공통적으로 들어가는 컬럼이 없을 때 사용하는 조인 기법
4)SELF JOIN(자가조인)
자기 자신과 조인하는 기법으로, 하나의 테이블 내에서 조인을 해야 자료를 얻을 수 있는 경우에 사용
원하는 정보가 한 테이블에 있는 경우 사용하며, 테이블이 하나 더 존재하는 것처럼 판단되도록 테이블 별칭을 사용
5)OUTER JOIN
조인 조건에 만족하지 않는 행도 나타내는 조인 기법
2개 이상의 테이블이 조인될 때, 어느 한쪽의 테이블에는 해당하는 데이터가 존재하는데 다른 쪽 테이블에는 데이터가
존재하지 않는 경우 그 데이터가 출력되지 않는 문제를 해결하기 위해서 사용되는 조인 기법
※서브 쿼리 **필수**
1)단일행 서브 쿼리: 하나의 SELECT문 내에 또 다른 SELECT문이 사용되는 경우
2)다중행 서브 쿼리: 서브 쿼리의 결과 두 건 이상 출력되는 경우, IN/ANY/ALL 연산자를 사용
any는 범위를 의미하고, all은 최대값과 최소값을 반환한다.
3. 데이터 무결성을 위한 제약조건
· 데이터 무결성을 위한 제약 조건은 크게 4가지로 나뉘며, 제약 조건은 편집에서 확인 가능하다.
1)NOT NULL은 NULL을 허용하지 않아 반드시 값이 입력되도록 하는 제약 조건이다.
2)UNIQUE은 컬럼에 대해 중복된 값을 허용하지 않지만 NULL은 허용하는 제약 조건이다.
3)PRIMARY KEY은 NOT NULL + UNIQUE 조건을 결합한 조건으로, NULL과 중복된 값을 허용하지 않는 제약 조건이다.
4)FOREIGN KEY은 두 테이블을 서로 연결할 때 사용되는 제약 조건이다.
· 하나의 테이블의 PRIMARY KEY를 다른 테이블에서 참조하는 경우 관계가 형성되며, PRIMARY KEY가 포함 된 테이블이
부모, FOREIGN KEY가 포함 된 테이블이 자식 테이블이 된다. (부모-키 값을 제공하는 테이블, 자식-외래키가 포함된 테이블)
· 부모-자식 관계는 1:1, 1:N, N:N 형태로 형성되고, 1:N의 관계에서 기본적으로 부모가 1, 자식이 N 형태로 형성된다.
**연습문제는 면접족보를 참고해주세요!!**
'bitcamp > JSP' 카테고리의 다른 글
JSP_emp_연습문제 (0) | 2021.02.12 |
---|---|
JSP_MVC패턴 (0) | 2021.02.12 |
JSP_게시판 작성을 위한 DB 맛보기! (0) | 2021.02.11 |
JSP_bean_연습문제 (0) | 2021.02.11 |
JSP_쿠키/섹션/Bean/EL (0) | 2021.02.11 |