SELECT문은 데이터베이스로부터 저장되어 있는 데이터를 검색하는데 사용합니다.

[Syntax]

SELECT [ALL | DISTINCT] [row_limitation] {*, column [alias],...}
   FROM table_name
[WHERE condition]
[ORDER BY  {column | integer} [ASC | DESC]]

- ALL | DISTINCT : 전체 행을 가져오거나(ALL) 중복되는 행을 제거(DISTINCT)하는 옵션
- *                : 테이블의 모든 컬럼을 출력
- table_name : 질의 대상 테이블명
- condition    : 조건을 만족하는 행들만 검색   
- ORDER BY :  질의 결과 정렬을 위한 옵션(ASC:오름차순(Default),DESC내림차순)

SQL문의 작성 방법

- SQL 문장은 대소문자를 구별하지 않습니다.

- SQL 문장은 한 줄 또는 여러 줄에 입력될 수 있습니다.

- 일반적으로 키워드는 대문자로 입력합니다.
  다른 모든 단어, 즉 테이블 이름, 열 이름은 소문자로 입력합니다.(권장)

- 여러 개의 SQL 문을 실행하는 경우 ';' 을 사용하거나 명령문 마지막 행 다음에 go 명령을 사용합니다.
- 하나의 SQL 문을 실행하는 경우는 세미콜론(;) 이나 go 문을 생략가능하다.


SELECT
 emp_id 사번, emp_fname as 성명
   FROM employee
  WHERE dept_id = 100

사번         성명
-------------------
102        'Fran'
105        'Matthew'
160        'Robert'

emp_id 와 emp_fname 은 각각 사번과 성명이라는 컬럼 별칭(alias)으로 만들어 출력했습니다. alias를 사용할 때 as라는 키워드를 사용해도 되고, 생략할수도 있습니다.



WHERE 절에서 사용될 수 있는 연산자

연산자

설       명

BETWEEN a AND b

a와b사이의 데이터를 출력 합니다.(a, b값 포함)

NOT BETWEEN a AND b

a와b사이에 있지않은 데이터를 출력 합니다

LIKE

문자 형태로 일치하는 데이터를 출력 합니다

NOT LIKE

 문자 형태와 일치하지 않는 데이터를 출력 합니다.

IS NULL

ULL값을 가진 데이터를 출력 합니다.

IS NOT NULL

NULL값을 갖지 않는 데이터를 출력 합니다

IN (list)

list의 값 중 어느 하나와 일치하는 데이터를 출력 합니다.

NOT IN (list)

list의 값과 일치하지 않는 데이터를 출력 합니다.


BETWEEN 연산자


SELECT emp_id, emp_fname, salary  FROM employee
  WHERE salary BETWEEN 20000 AND 50000

--> 급여가 20000 에서 50000 사이인 사원만 출력

emp_id        emp_fname            salary
-------------------------------------------
102            Fran                        45700.000
129            Philip                      38500.000
184            Melissa                   36490.000


IN 연산자

SELECT emp_id, emp_fname, salary FROM employee
WHERE emp_id IN ( 102, 249 )

--> 사번이 102, 249 인 사원의 사번화 성명 출력

emp_id            emp_fname
----------------------------
102                    Fran
249                    Rodrigo


NOT IN 연산자

SELECT emp_id, emp_fname FROM employee
WHERE emp_id  NOT IN ( 102, 249 )

--> 사번이 102, 249 번이 아닌 사원의 사번화 성명 출력

emp_id            emp_fname
----------------------------
105                    Matthew
129                    Philip
148                    Julie


LIKE 연산자
- 검색 STRING 값에 대한 와일드 카드 검색을 위해서 LIKE연산자를 사용 합니다.
- LIKE 연산자는 대소문자 구분
- % : 여러개의 문자열을 나타내는 와일드 카드
- _  : 하나의 문자를 나타내는 와일드카드
- [] : 해당 범위에 들어간 문자열을 나타내는 와일드카드
- [^] : 해당하는 범위의 문자를 제외한 문자를 나타내는 와일드 카드

구 분

설        명

LIKE ‘Red%’

컬럼이 'Red'로 시작하는 데이터만 검색

LIKE ‘%A’

컬럼이 'A'로 끝나는 데이터만 검색

LIKE ‘%KIM%’

컬럼에 'KIM'이라는 문자가 있는 데이터만 검색

LIKE ‘%K%M%’

컬럼에 'K' 문자와 'I'문자가 있는 데이터만 검색

LIKE ‘_A%’

컬럼에 'A' 문자가 두 번째 위치한 데이터만 검색

LIKE 'sm[iy]th'

컬럼값이 'smith', 'smyth' 인 경우만 검색

LIKE 'sm[a-r]th'

컬럼값이 smath,smbth,smcth,…,smrth 범위에 해당하는 값

LIKE 'sm[a-zA-Z]th'

컬럼값이  smath,…,smzth, smAth,…,smZth 범위에 해당하는 값으로 대소문자를 구분하지 않고 조회하는 경우

LIKE '[^a-r]ough'

컬럼값이 첫글자가 소문자 a에서 r까지의 글자를 제외한 문자tough은 해당되나 rough, bougth는 해당되지 않는다.

SELECT emp_id, emp_fname FROM employee
WHERE upper(emp_fname) LIKE '%A%'

--> 'A' 문자가 들어있는 사원 정보를 보여줍니다.
upper() 라는 함수를 이용 emp_fname 컬럼값을 대문자로 변환 후 검색.

emp_id            emp_fname
----------------------------
102                    Fran
105                    Matthew
184                    Melissa
191                    Jeannette



관계연산자

연산자

설       명

a = b

컬럼 a 값이 b 와 같은 경우

a > b, a >= b

컬럼 a 가 b 보다 큰경우, a 가 b보다 같거나 큰 경우

a < b, a<= b

컬럼 a 가 b 보다 작은경우, a 가 b보다 같거나 작은 경우

조건a AND 조건b

조건a와 조건b 가 모두 true(참) 인 경우.

OR

조건a나 조건b 둘 중 하나가 true(참) 인 경우

!, !>, !<, !=, !>=, !<=

! 연산자가 사용되는 경우 해당 조건의 반대의 경우

Some(list) 또는  Any(list)

- 다른 관계연사자와 결합되어서 사용
- list에 해당하는 여러개의 값을 가지고 비교연산을 한다.

Exists(list)

list 에 해당하는 결과가 하나라도 있으면 True 를 리턴



AND 연산자

SELECT emp_id, emp_fname FROM employee
WHERE dept_id = 100 AND emp_id > 500

--> 부서 코드가 100 인 조건과 사번이 500 보다 큰 조건,
      두가지 조건을 모두 만족하는 직원들을 검색.

emp_id            emp_fname
----------------------------
501                    David
529                    Dorothy
582                    Peter
604                    Albert


OR 연산자

SELECT emp_id, emp_fname FROM employee
WHERE dept_id = 100 OR dept_id = 200

--> 부서 코드가 100 이거나 200 인 부서의 사원들을 검색

emp_id            emp_fname
----------------------------
102                    Fran
105                    Matthew
160                    Robert



Some, Any연산자

- Some 연산자나 Any 연산자나 동일한 기능을 제공
- 다른 관계연산자와 결합된 형태로 사용

SELECT id, cust_id FROM sales_order
WHERE order_date > SOME(SELECT ship_date 
                                            FROM sales_order_items WHERE id = 2005)

--> sub-query 에서 조회된 결과들 중 가장 큰 값(<)을 선택해서 조건에 사용한다.

id            cust_id
--------------------
2007            106
2008            107
2009            108

* 참고로 위의 예문은 아래와 같이 조회하더라도 동일한 결과를 얻을 수 있다
SELECT id, cust_id FROM sales_order
WHERE order_date > (SELECT MAX(ship_date) FROM sales_order_items 
                               WHERE id = 2005)



Exists 연산자

SELECT fname, lname FROM customer 
WHERE EXISTS (SELECT * FROM sales_order)

--> 판매기록이 있는 모든 고객명 출력
      

fname        lname
-----------------------------
Almen        de Joie
Grover        Pendelton
Ling Ling    Andrews
Bubba        Murphy



ORDER BY
(ASC[오름차순], DESC[내림차순]) 
    - ORDER BY 절은 데이터의 정렬을 위해 사용합니다.
    - ASE, DESC를 지정하지 않는 경우 ASC[오름차순]이 디폴트값이다.

SELECT emp_id, emp_fname FROM employee
WHERE dept_id = 100
ORDER BY emp_id ASC

또는
SELECT emp_id, emp_fname FROM employee
WHERE dept_id = 100
ORDER BY 1 ASC

emp_id            emp_fname
----------------------------
102                    Fran
105                    Matthew
160                    Robert

- ORDER BY 절에서 직접 컬럼명 또는 Alias를 지정하지 않고 컬럼을 순서에 해당하는 정수
   값을 사용해도 된다. 이 경우 첫 번째 컬럼의 순서는 1 이다

'컴퓨터관련' 카테고리의 다른 글

sybase 문자열함수...펌  (0) 2009.06.19
sybase 집계함수...펌  (0) 2009.06.19
sybase insert, delete...펌  (0) 2009.06.19
sybase db에 연결하는 법...펌  (0) 2009.06.19
sybase db 구동하는 법...펌  (0) 2009.06.19

+ Recent posts