Database/Theory

[Database/Theory]04. SQL syntax(2) - Query

양승길 2016. 6. 6. 22:14

04. SQL syntax(2) - Query

- SELECT

1
SELECT s/n [,s/n] FROM t/n [WHERE] [GROUP BY] [HAVING BY] [ORDER BY]
cs

    [WHERE], [GROUP BY], [HAVING BY], [ORDER BY]의 순서는 무관하나 

    QUERY의 효율성에 최적화된 방식이다.


  * Expression 산술식

    SELECT문에서 가져올 데이터에 대하여 특정 계산을 통해 목적에 맞는 결과 값이 나온다.

    이를 통해 코딩할 때, 번거로움이 한층 사라진다.

1
2
3
4
5
SELECT salary * 12 [AS] 연봉 FROM table;
/* (특정 Title의 내용을 변경 할 때)(AS=>ALIAS) */
 
SELECT salary * 12 [AS] "연봉 (상여금 제외)" FROM table;
/* (title 내용에 공백이 필요할 때 Double Quotation이 필요하다.) */
cs

  * ||  출력할 값 Append

1
  SELECT name||'님' from emp_test;
cs

   * DISTINCT c/n [,c/n]

     중복 배제 출력. 여러 Title을 출력할때 그 조합에 대하여 중복을 검사한다.

     한 Column이 중복된 값을 가질지라도 다른 Column이 중복된 값이 아니면 중복되어 출력된다.

     SELECT DISTINCT name, dept_name FROM emp_test;


  * WHERE 

    기본 연산자

1
2
3
4
5
6
7
s/= value
s/>= value /* (문자도 가능) */
 
/*
  <, >, =, >=, <=, !=(or <>), 
  (DataType이 DATE인 경우 s/n >= 'value')
*/
cs

    연산자 우선순위

1
2
s/>= value AND, OR ...
/* (우선순위 : Not -> AND -> OR) */
cs

    BETWEEN

1
2
3
4
5
6
s/n BETWEEN valueA AND valueB 
/*
  조건 : valueA < valueB. valueA >= valueB일 경우 에러가 발생하지 않지만 출력이 안나온다.
         valueA, valueB값 포함하여 출력, 문자도 마찬가지 적용가능
         NOT BETWEEN도 적용가능
*/
cs

    LIKE   

1
2
3
4
5
6
7
s/LIKE '김%' /* 김으로 시작하는 문자들을 가진 value */
s/LIKE '김_' /* 김으로 시작하는 1개의 문자를 가진 value */
/*
  응용 : _김_, 김__, 김%, %김%
  %는 무한개로 써도 1개 쓰는거랑 같다.
  DATE에도 적용가능
*/
cs

    IN(value [,value])

    ()안에 있는 값이 있는 것을 출력, NOT IN 적용 가능.    


    ESCAPE

    Keyword를 일반 문자로 변환하는 Keyword

1
WHERE name LIKE '__/%' ESCAPE '/';

cs

1
2
ALL(value, value), ANY(value, value)
/* 최소값, 최대값 */
cs


    ORDER BY c/n [ASC | DESC][,c/n]

    정렬.

    NULL은 최대값으로 인식.(NULL자료를 조절하고 싶다면 NULLS FIRST 혹은 NULLS LAST를 작성한다.)

    정렬 방식의 Default는 ASC.(전제척 순서 : 숫자 -> 문자(영어 -> 한글) 순으로)

    c/n에 들어갈 수 있는 값 : expr | column | ALIAS | column index

    c/n은 테이블에 있는 것중에 무엇이든 가능하다.(SELECT 앞에 있는 c/n이 없어도 무관)

    출력할 c/n이 여러개 있을 때, 가장 앞쪽에 있는 c/n부터 순차적으로 정렬한다.