프로그래밍[Univ]/데이터베이스(DB)

[DB] Select문

Cloud Travel 2012. 3. 21. 21:42
* select
 - 데이터베이스에서 원하는 데이터를 검색하고 추출하는 문법(Projection or selection) 
 - select [All | Distinct  ] row_list(schema_list)   // projection 열 추출
    [from table_list]
    [where condition]    // selection 행 추출
    [group by row_list [condition]]
    [order by row_list [asc|desc]]  // 출력 순서 지정
  > All = * // Distinct = 중복 결과 제거
  > ALIAS : 이름 변경
  > Expression : 기본적인 연산 및 함수 사용 가능
   ex) select id 학번, name 이름, money-100 from student;
         // id를 학번으로 변경, name을 이름으로 변경, money-100연산 결과를 가진 테이블이 선택된다.
  > 큰 따음표 ""를 이용해 keyword를 무시 가능하다.
   ex) select id "as" from student; 
         // id를 as로 변경하여 추출한다.
  > date type이나 문자열은 작은 따음표로 ''둘러 싸야한다. (||를 이용하여 문자열을 합해준다)
   ex) select 'Name is ' || name ||'. Student Id is '|| id || '.' from student;
  > Where에서의 조건에 들어가는 연산자
   ⓐ 비교 연산 : =, !=, >, <, <=, >=
   ⓑ IN : A IN B, A값이 B에 포함 되 있는가?
   ⓒ BETWEEN a AND b : a와 b 사이에 있는 값
   ⓓ IS NULL, IS NOT NULL : NULL 검사
   ⓔ AND, OR : 논리 연산
   ⓕ NOT : 만족하지 않는가?
   ⓖ EXIST : subquery일 경우 사용되며, 결과 Row가 하나라도 있는가?
   ⓓ LIKE : 문자열의 부분 매칭 
    > Wildcard를 이용한 문자열 부분 매칭
    > % : 임의의 길이의 문자열
    > _ : 한 글자
   > Escape : escape뒤의 문자열로 시작하는 문자는 와일드 카드로 사용되지 않는다.
    ex) name like 'Kim%' > Kim으로 시작하는 문자열 가능 (Kim, KimJin, KimJiWo...)
          name like 'Lee_' > Lee뒤에 하나의 문자가 오는 경우(Leea, Leeb ...)
          name like 'Kim/%%' escape '/' > escape로 /가 지정됨, Kim%로 시작하는 임의의 길이의 문자열 매칭
  ※ 논리 연산의 경우 NULL이 있으면 거의 NULL 이지만, NULL이 아닌 경우도 있다.
   ex) NULL OR TRUE = TRUE
         NULL AND FALSE = FALSE
 > order by ASC 오름차순, DESC내림 차순(default asc)
   ex) select * from student order by id desc, money;
          // id로 내림 차순을 하고 id가 같으면 money값을 오름차순으로 한다.
          // , 마다 조건을 새로 적는 방식

* Function
 - 많은 함수가 존재하며, 라이브러리를 참조하길 바란다. 많이쓰이는 함수나 유용한 것만 쓰겟다.
 - NVL(expr1, expr2) : expr1이 NULL이면 expr2를 출력 
 - NVL(expr1, expr2, expr3) : expr1이 NULL이면 expr2를 출력, expr1이 NOT NULL이면 expr3출력
 - NULLIF(expr1, expr2) : epxr1과 expr2가 같으면 NULL
 ※ 위의 3개의 함수를 쓸대에는 데이터 Type에 주의해서 쓰자 
 - Data type 변환 함수 // number -> char -> date -> char -> number
  > TO_NUMBER(s,fmt)
  > TO_DATE(s, fmt)
  > TO_CHAR(d or n, fmt)
  ※ 각각 변환 함수에 포멧팅이 존재하는걸 인지하자.

* Condition Expr ( case문 )
  > select name case id
                        when '1' then money+1  
                        when '2' then money+2  
                        else money end Lastmoney 
     // name 과 Lastmoney 두개의 attribute가 생긴다. 각가의 결과는 id 값에 따라 달라지게 된다.