DDL : database definition languange

CREATE

CREATE TABLE table1(
    부품번호 INTEGER,
    부품내역 VARCHAR(20),
     제고량 INTEGER
);

뭐 이따위로 정의한다.

테이터형
CHAR(n) : 최대 n자 까지의 고정길이 데이터 형
VARCHAR(n) : 최대 n자 까지의 가변길이 데이터 형
DECIMAL(m,n) : 소수점을 나타내기 위한 데이터 형 3.141592 => m = 7 , n = 6
INTEGER :양이나 음을 위한 데이터 형식
FLOAT : 부동 소수점 형태의 숫자를 위한 데이터형
BOOLEAN : 참거짓

--------------------------------------------------------------------------------------------

DML : database manipulation language

SELECT

SELECT 항목1,항목2
FROM 테이블
WHERE 조건;

-----

DISTINCT   ... distinct 명령어를 이용해서 중복된 행을 제거할 수 있다.

SELECT DISTINCT 항목1,항목2  
FROM...

-----

LIKE  ... 비슷한 char를 검색하는데 사용할 수 있다.

select..
from..
WHERE 공급자명 LIKE '%신%';

ex)
대%   => 대진공업, 대흥사 , 맨앞에 대가 들어가는 모든 문자열
%진% => 진아공업사, 삼진사, 진이 들어가는 모든 문자열
_신% => 2번째 글자에 신이 들어가는 문자열
삼진__ =>삼진으로 시작해서 총 4글자인 문자열

-----

BETWEEN .... 그 비트윈이다

select...
from...
WHERE 재고량 [NOT]BETWEEN 200 and 3000;

-----

IN

select..
from..
where 속성 [NOT] IN ('값1', '값2', '값3' );

-----

IS NULL ...항목명이 공값인지를 확인하기 위하여 사용된다.

select...
from...
where 부품내역 IS NULL;

-----

ODER BY ... 출력 항목들을 특별한 순서대로 정렬하고 싶을 때 사용

select..
from...
where...
ODER BY 항목명 [ASC/DESC], 두번째항목 [A/D]...

asc : 오름차순이며 디폴트는 이값을 가진다. 1234 ㄱㄴㄷㄹ
desc: 내림차순 321 ㄷㄴㄱ

-----

수식과 집단함수

집단함수 : SELECT 절이나 GROUP BY의 조건절 HAVING 문에서 사용


GROUP BY ... 요약할 항목을 지정하고 수식을 이용하여 표현. 중복된 값 제거

select 항목1, sum(항목명2).  MAX(항목명2) AS 최대값
from...
where...
GROUP BY 항목  --> 항목1 말고는 출력할 수 없다. 요약하고자 하는 정보 외의 행을 건드리지 않기위함일까??

수식
AVG(항목명)
COUNT(항목명 or *)
MAX(항목명)
MIN(항목명)
SUM(항목명)

수식 AS 행 제목  --> 을 통해서 수식의 결과를 나타내는 행에 제목을 부여할 수 있다.

도움글:
http://ryu1hwan.tistory.com/entry/SQL%EB%AC%B8-%EA%B8%B0%EC%B4%88%EC%97%90%EC%84%9C%EC%A4%91%EA%B8%89%EA%B9%8C%EC%A7%80L4GROUP-BY%EB%AC%B8


HAVING ... group by로 정렬 된 결과 테이블에 다시한번 조건문을 달 때 사용한다. 반드시 group by와 함께 사용한다.

ex) 부품번호가 140번 이하인 부품 중, 주문 단가 평균이 200원 이하인 부품의 번호와 주문 총액을 주문 총액이 적은 순으로 출력하라(주문액 = 단가 * 주문량)

SELECT 부품번호, SUM(단가 * 주문량)
FROM 주문 
WHERE 부품번호 <= 140
GROUP BY 부품번호
HAVING AVG(단가) < =200
ODER BY 2;

------

JOIN

select t1.속성1 , t2.속성
from table1 t1, table2 t2
where t1.속성 = t2.속성 ;

뭐 대충 이렇게 생겼다. 중요한건 서로다른 두 테이블들의 정보를 연결해서 조회한다는 것

이와같이 일반적인 JOIN문을 INNER JOIN, EQUI JOIN이라고 한다.


OUTER JOIN : join의 한 종류로서 기준이 되는 테이블의 데이터가 무조건 출력되도록 한다.

select t1.속성1 , t2.속성
from table1 t1, table2 t2
where t1.속성(+) = t2.속성 ;  => 기준이 되는 속성에 (+)를 붙여준다. (oracle)


또는

select t1.속성1 , t2.속성
from table1 t1 LEFT JOIN table2 t2
ON t1.속성 = t2.속성 ;                                

와같이 사용한다. RIGHT JOIN은 (+)의 위치와 LEFT 를 RIGHT로 바꿔주면 되곘다.

주의사항
select t1.속성1 , t2.속성
from table1 t1, table2 t2
where t1.속성(+) = t2.속성 
AND t1.속성2 = t2.속성2;

와 같이 한 문장에만 조인을 해버리면 and뒤에 문장 떄문에 일반 join문으로 처리된다.


FULL JOIN : 양쪽 다터

----
SELECT 중첩문

결합조건(조인)을 사용하면 복수테이블의 전체레코드를 검색하기 때문에 시간이 오래걸림
SELECT중첩문을 사용하면 검색조건에 부합하는 항목만 추출하여 상의질이에 전달하므로 보다 효율적인 검색 가능

select 공급자번호, 위치
from 공급자
where 공급자번호 IN(  select 공급자번호
                                from 주문
                                where 부품번호 IN (105 , 107)) ;

ll

select t1.공급자번호, t2.위치
from 공급자 t1, 주문 t2

where t2.부품번호 IN(105,107)
and t1.공급자번호 = t2.공급자번호


ALL / ANY / SOME
select 중첩문에서만 사용할 수 있는 연산자이며 비교연산자와 함께 사용한다.

selet 부품, 재고량
from 부품
where 재고량 > All (select 재고량
                            from 부품
                            where 부품내역 = '너트');


위와같은 중첩문이 있을떄 () 안의 결과가 

재고량
200
155

이라고 한다면 전체 문장의 결과는 '부품테이블의 제고량이 200도 넘고 155도 넘는 항목만 출력한다
some 이나 any를 사용한다면 200을 넘거나 155를 넘는 혹은 둘다 넘는 항목들이 출력되어진다.


자체결합 SELF JOIN
ex)

select s1.공급자번호, s1,공급자명, s1.위치
from 공급자 s1, 공급자 s2
where s1.공급자 = s2.공급자
and s1.공급자 <> s2.공급자; ====> != 의 의미

=> 같은 행의 중복이 안되도록 주의하자

상관내포절 : select 중첩문에서 하위질의와 상위질의의 평가가 같이 연결되어있는 경우

EXISTS : where [NOT] EXIST (중첩문)  , 중첩문의 결과가 있으면 true , 없으면 false

--------------------------------------------------------------------------------------------

DCL : database contrl Language

'~ 2014 > Database' 카테고리의 다른 글

트랜잭션  (0) 2014.06.15
클러스터드 인덱스 / 넌클러스터드 인덱스 / primary 인덱스  (0) 2014.06.15
트리거 trigger  (0) 2014.06.14

+ Recent posts