This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| data_manipulation_language [2015/03/19 12:40] – [Data Manipulation Language] ledyx | data_manipulation_language [2015/09/13 16:37] (current) – 제거됨 ledyx | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | = Data Manipulation Language = | ||
| - | DML 명령어의 경우, 조작하려는 테이블을 메모리 버퍼에 올려놓고 작업을 하기 때문에 __**실시간으로 테이블에 영향을 미치는 것은 아니다.**__ 따라서 __**COMMIT**__ 명령어를 입력하여 Transaction을 종료시켜 실제 테이블에 반영시켜야 한다! | ||
| - | {{tag> | ||
| - | = INSERT = | ||
| - | <sxh sql> | ||
| - | --유형1 : 칼럼 순서대로 기술 필요X. 빠진 칼럼은 Default로 " | ||
| - | INSERT INTO 테이블명(속성명1, | ||
| - | VALUES (데이터1, | ||
| - | |||
| - | --유형2 : 칼럼 순서대로 빠짐없이! | ||
| - | INSERT INTO 테이블명 | ||
| - | VALUES (데이터1, | ||
| - | </ | ||
| - | |||
| - | |||
| - | |||
| - | = UPDATE = | ||
| - | <sxh sql> | ||
| - | UPDATE 테이블명 | ||
| - | SET 속성명1=데이터1[, | ||
| - | [WHERE 조건]; | ||
| - | </ | ||
| - | |||
| - | |||
| - | |||
| - | = DELETE = | ||
| - | <sxh sql> | ||
| - | DELETE [FROM] 테이블명 | ||
| - | [WHERE 조건]; | ||
| - | </ | ||
| - | * Table 전체 데이터 삭제 경우, Log를 저장하지 않아(= ROLLBACK 불가) 시스템 부하가 적은 **TRUNCATE TABLE** 권장. | ||
| - | |||
| - | |||
| - | |||
| - | = SELECT = | ||
| - | <sxh sql> | ||
| - | SELECT [Predicate] [테이블명|테이블별칭.]속성명[ [AS] 별칭][, [테이블명|테이블별칭.]속성명[ [AS] 별칭][, ...]] | ||
| - | --전체 칼럼 지정은 " | ||
| - | FROM 테이블명1[ [AS] 별칭][, 테이블명2[ [AS] 별칭], ...] | ||
| - | --※ TABLE에 별칭(Alias)를 지정했을 경우, SELECT와 WHERE절에 별칭을 반드시 사용해야 한다! | ||
| - | [WHERE 조건] | ||
| - | [GROUP BY 표현식|속성명[, | ||
| - | [HAVING 조건]] --GROUP에 대한 조건 기술 | ||
| - | [ORDER BY 표현식|속성명 [ASC|DESC][, | ||
| - | |||
| - | |||
| - | -- 별칭 지정 방법2 : 공백, 특수문자 포함 or 대소문자 구분이 필요한 경우 | ||
| - | SELECT [Predicate] [테이블명.]속성명 [AS] " | ||
| - | ... | ||
| - | </ | ||
| - | * Predicate : 검색할 Tuple을 제한할 목적으로 사용되는 조건 | ||
| - | * ALL : Default 옵션으로 생략 가능. 중복된 데이터가 있어도 모두 출력. (기본합) | ||
| - | * DISTINCT : 중복 데이터 제거, 1건으로 처리 후 출력. (중복 제거) | ||
| - | * DISTINCTROW : Tupe 전체에 대한 중복 제거. (DISTINCT와 동의어. ORACLE 지원X. MySQL, CUBRID에서 지원.) | ||
| - | |||
| - | * 임의의 문자열/ | ||
| - | |||
| - | |||
| - | == SELECT문의 실행(읽는) 순서 == | ||
| - | <code sql> | ||
| - | ⑤ SELECT | ||
| - | ① FROM | ||
| - | ② WHERE | ||
| - | ③ GROUP BY | ||
| - | ④ HAVING | ||
| - | ⑥ ORDER BY | ||
| - | |||
| - | 추출 대상 테이블 참조 | ||
| - | → 추출 대상 데이터만 거르기 | ||
| - | → 행들을 소그룹화 | ||
| - | → 소그룹의 대상 데이터만 거르기 (HAVING) | ||
| - | → 데이터 값 출력/ | ||
| - | → 데이터 정렬 | ||
| - | </ | ||
| - | |||
| - | 증명1) SELECT 절에 없는 칼럼을 ORDER BY 절에 사용. (⑤ SELECT → ⑥ ORDER BY) | ||
| - | <sxh sql> | ||
| - | SELECT EMPNO | ||
| - | FROM EMP | ||
| - | ORDER BY MGR; | ||
| - | </ | ||
| - | |||
| - | 증명2) Sub Query(인라인 뷰에서 정의된 SELECT) 칼럼을 Main Query에서 사용 (① FROM → ~ → ⑤ SELECT) | ||
| - | <sxh sql> | ||
| - | SELECT EMPNO -- 만약 FROM절에서 정의되지 않은 테이블|표현식(칼럼) 사용하면 Error. | ||
| - | FROM (SELECT EMPNO, ENAME | ||
| - | FROM EMP | ||
| - | ORDER BY MGR); | ||
| - | </ | ||
| - | |||
| - | == 연산자 (주로 SELECT)== | ||
| - | 연산자를 사용할 경우, 칼럼 Label이 길어지고 칼럼에 새 의미를 부여하기 때문에 **별칭(Alias)**를 부여하는 것이 좋다! | ||
| - | === 산술 연산자 === | ||
| - | * (데이터가 수치 연산이 가능한 Type(NUMBER, | ||
| - | * 우선 순위 : **() > ***** > **/** > **+** > **-** | ||
| - | <sxh sql> | ||
| - | SELECT NAME 이름, ROUND(WEIGHT/ | ||
| - | FROM SCHOOL; | ||
| - | </ | ||
| - | < | ||
| - | 표 | ||
| - | </ | ||
| - | |||
| - | === 합성(CONCATENATION) 연산자 === | ||
| - | * **SELECT** 절에서만 사용 가능. | ||
| - | * 칼럼/ | ||
| - | * Oracle : **||** / SQL Server : **+** | ||
| - | <sxh sql> | ||
| - | SELECT NAME || '의 키는 ' || HEIGHT || ' | ||
| - | FROM SCHOOL; | ||
| - | </ | ||
| - | < | ||
| - | 표 | ||
| - | </ | ||
| - | |||
| - | == WHERE 절 == | ||
| - | * Column명 (보통 조건의 좌측 위치) | ||
| - | * 비교 연산자 | ||
| - | * 문자, 숫자, 표현식 (보통 조건식이 우측 위치) | ||
| - | * 비교 Column명 (JOIN 사용시) | ||
| - | |||
| - | === 연산자 (WHERE, HAVING 사용) === | ||
| - | * 우선 순위 | ||
| - | * () > NOT > 비교 연산자, SQL 연산자 > AND > OR | ||
| - | ==== 비교 연산자 ==== | ||
| - | 표 | ||
| - | |||
| - | ===== 문자 유형 비교 방법 ===== | ||
| - | * 비교 연산자 양쪽 모두 CHAR인 경우 | ||
| - | * 길이가 서로 다르면, 짧은 쪽에 **Space** 추가 하여 같게 만들고 비교 | ||
| - | * 서로 다른 문자 나올 때까지 비교 | ||
| - | * 달라진 첫 번째 문자의 값에 따라 크기 결정 | ||
| - | * Blank 수만 다르면, 서로 같은 값으로 결정. | ||
| - | |||
| - | * 비교 연산자 한쪽 VARCHAR인 경우 (**※ VARCHAR은 __NOT NULL__까지 길이를 가진다!**) | ||
| - | * 서로 다른 문자 나올 때까지 비교 | ||
| - | * 길이가 다르면, 짧은 것이 끝날 때까지만 비교한 후에 | ||
| - | * 길이가 같고 다른 것이 없다면, 같다고 판단 | ||
| - | |||
| - | * 상수값과 비교할 경우 | ||
| - | * 상수 쪽을 상대 변수 타입과 동일하게 바꾸고 비교 | ||
| - | |||
| - | ==== SQL 연산자 ==== | ||
| - | 표 | ||
| - | |||
| - | ==== 논리 연산자 ==== | ||
| - | 표 | ||
| - | |||
| - | == GROUP BY, HAVING 절 == | ||
| - | * GROUP BY 절 : 특정 속성 같은 값이 같은 소그룹에 대한 **통계** 정보 | ||
| - | * GROUP BY 절을 사용하게 되면, < | ||
| - | :: ☞ GROUP BY **이후**에 수행 절인([[Data Manipulation Language# | ||
| - | * HAVING 절 : 소그룹의 조건 | ||
| - | 예) 최대키가 190cm 이상인 포지션의 평균키 출력 | ||
| - | <sxh sql> | ||
| - | SELECT POSITION, MIN(HEIGHT), | ||
| - | FROM PLAYER | ||
| - | GROUP BY POSITION | ||
| - | HAVING MAX(HEIGHT) >= 190; | ||
| - | </ | ||
| - | {{ : | ||
| - | |||
| - | |||
| - | * 주 활용법 | ||
| - | **[[# | ||
| - | **[[#DECODE | " | ||
| - | |||
| - | |||
| - | == ORDER BY절 == | ||
| - | * 특정 칼럼을 기준으로 **정렬**하여 출력하는 데 사용 | ||
| - | * 특징 | ||
| - | ** Default : ASC | ||
| - | ** NULL? Oracle에서는 가장 큰 값으로 간주 ☞ ASC일 경우 가장 마지막 (SQL Server에서는 반대) | ||
| - | ** **Alias(별칭)**이나 **SELECT 절의 칼럼 순서(__정수__)**로 매핑할 수 있다. | ||
| - | ***예) DEPT 테이블 정보를 부서명, 지역, 부서번호 내림차순으로 정렬 | ||
| - | <sxh sql> | ||
| - | SELECT DNAME, LOC CITY, DEPTNO | ||
| - | FROM DEPT | ||
| - | ORDER BY 1, CITY, 3 DESC; -- 가장 마지막에 붙인 옵션이 전체 적용. | ||
| - | </ | ||