Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

좋습니다.

3. SELECT로 특정 데이터 추출하기 본문

공부/ORACLE

3. SELECT로 특정 데이터 추출하기

KIMVELYY 2016. 7. 6. 19:58

* WHERE 조건과 비교 연산자

 

- 원하는 행 (ROW)만 얻으려면 다음과 같이 SELECT문에 WHERE절을 추가하여 조건을 제시해야함

 

SELECT [column1,column2]

FROM table

WHERE 조건절;

 

조건절의 구성

WHERE column      >=        3000;

           컬럼명    연산자   비교대상값

 

* 비교연산자

 

 연산자

 의미

 예제

 =

 같다

 SELECT NAME, AGE, PHONE FROM PROFILE

 WHERE AGE = 28;

 >, <

 보다크다, 보다작다

 SELECT NAME, AGE, PHONE FROM PROFILE

 WHERE AGE > 28;

 >=, <=

 보다 크거나 작다

 보다 작거나 크다

 SELECT NAME, AGE, PHONE FROM PROFILE

 WHERE AGE >= 28;

 <>, !=, ^=

 다르다

 SELECT NAME, AGE, PHONE FROM PROFILE

 WHERE AGE <> 28;

 

 


 

Q. 나이가 18살 이하인 사람의 이름,나이,휴대폰번호를 출력하는 SQL문을 작성해보자.

 

Table : PROFILE

 

Column : 이름 - NAME

             나이 - AGE

             휴대폰번호 - PHONE

 

 


 

* 문자 데이터 조회

 

- 이름이 ANNE인 사람의 NAME, AGE, PHONE을 출력

 

SELECT NAME, AGE, PHONE

FROM PROFILE

WHERE NAME = 'ANNE'

 

- SQL에서 문자열이나 날짜는 반드시 단일따옴표 안에 표시해야함

 

- SQL문에 사용되는 키워드인 SELECT나 FROM이나 WHERE등은 대소문자를 구별하지 않지만

테이블 내에 저장된 데이터값은 대소문자를 구분하므로 WHERE NAME = 'anne' 와 같이

기술하면 이름이 ANNE인 사람을 찾을수가 없다.

 

 


 

Q. 이름이 STEVE인 사람의 이름, 나이, 핸드폰번호를 출력하는 SQL문을 작성해보자.

 

 테이블명

유형 

칼럼명 

PROFILE 

이름 

NAME 

나이 

AGE 

핸드폰번호 

PHONE

 

 


 

* 날짜 데이터 조회

 

- 날짜는 문자열과 마찬가지로 단일 따옴표 안에 기술해야함

 

1989년 5월 18일 이후 출생한 사람을 출력하는 예제

 

SELECT *

FROM PROFILE

WHERE BIRTHDAY >= '1989/05/18'

 

* 논리 연산자

 

 연산자

의미 

 AND

 두 가지 조건을 모두 만족해야만 검색할 수 있다.

 SELECT *

 FROM PROFILE

 WHERE AGE = 18 AND NAME = 'ANNE'

OR

 두 가지 조건 중 한가지만 만족하더라도 검색할 수 있다.

 SELECT *

 FROM PROFILE

 WHERE AGE = 18 OR NAME = 'STEVE'

NOT

 조건에 만족하지 못하는 것만 검색한다.

 SELECT *

 FROM PROFILE

 WHERE NOT AGE = 18

 

* BETWEEN AND 와 NOT BETWEEN AND

 

- PROFILE 테이블에서 나이가 15세이상 19세이하인 사람의 정보를 출력하려고 하면?

 

SELECT *

FROM PROFILE

WHERE AGE >= 15 AND AGE <=19 ;

 

로 표현할 수 있다.

 

하지만, 오라클에서는 특정 범위의 값을 조회하기 위해 BETWEEN AND 연산자를 사용해서

출력할 수 있다.

 

SELECT *

FROM PROFILE

WHERE AGE BETWEEN 15 AND 19 ;

 

- PROFILE 테이블에서 나이가 15세 미만이거나 19세 초과인 사람의 정보를 출력하려고 하면?

 

SELECT *

FROM PROFILE

WHERE AGE < 15 OR AGE > 19 ;

 

로 표현가능하지만 NOT BETWEEN AND로 표현할 수 있다.

 

SELECT *

FROM PROFILE

WHERE AGE NOT BETWEEN 15 AND 19 ;

 

- BETWEEN AND 연산자는 숫자형 뿐만 아니라 문자형,날짜형에도 사용가능

  단, 값을 단일 따옴표로 둘러야 한다.

 

태어난 해가 1989년인 사람들의 정보를 출력하는 예제

 

SELECT *

FROM PROFILE

WHERE BIRTHDAY BETWEEN '1989/01/01' AND '1989/12/31' ;

 

* IN 연산자

 

- PROFILE 테이블에서 나이가 13살 이거나 15살이거나 19살인 사람을 검색하기 위한 쿼리문을 작성하면?

 

SELECT *

FROM PROFILE

WHERE AGE = 13 OR AGE = 15 OR AGE = 19 ;

 

위 예제를 보면 OR연산자로 묶인 비교 연산자 내의 컬럼이 AGE로 동일하다.

 

동일한 필드가 여러개의 값 중에 하나인 경우인지를 살펴보기 위해서

비교연산자와 OR 연산자를 사용하여 복잡하게 쿼리문을 작성하지 않고

IN연산자를 사용하여 간단하게 표현할 수 있다.

 

SELECT *

FROM PROFILE

WHERE AGE IN (13, 15, 19) ;

 

위 IN연산자를 사용한 예제와 OR연산자를 사용한 예제는 결과가 동일하다.

 

만일 13살, 15살, 19살이 아닌 사람을 검색하려면

NOT IN으로 대체하면 된다.

 

SELECT *

FROM PROFILE

WHERE AGE NOT IN (13, 15, 19) ;

 

* LIKE 연산자와 와일드카드

 

- LIKE 연산자는 검색하고자 하는 값을 정확히 모를 경우에도 검색이 가능하도록 하기위해

  와일드카드와 함께 사용하여 원하는 내용을 검색하도록 한다.

 

형식

Column_name LIKE pattern (와일드카드)

 

- LIKE 다음에 오는 pattern을 기술해야 하는데 pattern에는 두가지 와일드카드가 사용된다.

 

와일드카드

의미 

%

문자가 없거나, 하나 이상의 문자가 어떤 값이 와도 상관없다.

_

하나의 문자가 어떤 값이 와도 상관없다.

 

- 와일드카드 ( % ) 사용하기

 

PROFILE 테이블에서 찾으려는 이름이 A로 시작하는 것은 알지만 그 뒤의 문자는 모를경우

WHERE NAME = 'A' 로 검색을 시도하면 검색이 불가능 하다.

이는 'A' 한 글자에 대한 검색이기 때문이다.

 

이처럼 검색하고자 하는 값을 정확히 모를 경우 와일드카드인 %를 사용한다.

 

SELECT *

FROM PROFILE

WHERE NAME LIKE 'A%' ;

 

위 예제의 경우 LIKE 'A%' 로 인해 A로 시작하는 이름중 A뒤로 몇글자가 와도 상관없다는 의미가 된다.

반대로 WHERE NAME LIKE '%A' 는 마지막 글자가 A

WHERE NAME LIKE '%A%' 는 중간에 포함된 문자들중 A가 있는것을 검색한다.

 

- 와일드카드 ( _ ) 사용하기

 

_ (under score) 역시 %와 마찬가지로 어떤 문자가 오든 상관없다는 의미로 사용된다.

하지만 차이점은 %는 몇개의 문자가 와도 상관없지만 _ 는 한 문자에 대해서 와일드카드 역할을 한다.

 

SELECT *

FROM PROFILE

WHERE NAME LIKE 'A_' ;

 

위 예제는 A로 시작하는 두글자의 이름을 가진 사람의 정보를 찾는다.

 

SELECT *

FROM PROFILE

WHERE NAME LIKE '_A%' ;

 

이런식으로 사용하게되면 이름의 두번째 글자가 A인 사람의 정보를 찾는다.

 

- LIKE 연산자 역시 NOT LIKE 로 사용하게 되면 LIKE의 부정의 의미로 사용된다.

 

SELECT *

FROM PROFILE

WHERE NAME NOT LIKE '%S%' ;

 

위 예제는 이름의 S를 포함하지 않는 사람의 정보를 찾는다.

 

* NULL

 

- NULL의 정의

 

1. 0 (zero) 가 아니다.

2. 빈 공간도 아니다.

3. 미확정 (해당사항없음), 알수없는 (Unknown)값을 의미한다.

4. 어떤 값인지 알 수 없지만 어떤 값이 존재하고 있다.

5. ? 혹은 ∞ 의 의미이므로 연산, 할당, 비교가 불가능하다.

 

- 만약 PROFILE 테이블에서 휴대폰번호를 검색할때 휴대폰이 없어서 값이 NULL인 사람을 검색한다면?

 

SELECT *

FROM PROFILE

WHERE PHONE = NULL ;

 

만약 위처럼 한다면 선택된 레코드가 없다고 나온다.

즉, NULL의 경우 연산이 불가능하므로 = 연산자로 판단할 수 없기 때문이다.

 

- IS NULL / IS NOT NULL

 

어떤 컬럼의 NULL값을 검색해야 할때는 = 대신 IS NULL 연산자를 사용해야 한다.

 

형식

Column IS NULL ;

 

그럼 이제 위 예제인 휴대폰이 없어 값이 NULL인 사람을 검색해보자.

 

SELECT *

FROM PROFILE

WHERE PHONE IS NULL ;

 

이번에는 휴대폰을 가지고 있는 사람을 검색해보자. (PHONE 칼럼의 값이 NULL이 아닌사람)

 

SELECT *

FROM PROFILE

WHERE PHONE IS NOT NULL ;

 

* 정렬을 위한 ORDER BY

 

- 정렬 방식에는 오름차순 (ascending), 내림차순 (descending) 이 있다.

 

 

ASC (오름차순)

DESC (내림차순)

숫자

작은 값부터 정렬

큰 값부터 정렬 

문자

사전 순서로 정렬

사전 반대 순서로 정렬

날짜

빠른 날짜 순서로 정렬

늦은 날짜 순서로 정렬

NULL

가장 마지막에 나온다.

가장 먼저 나온다.

 

- 오름차순 (ASC)

 

오름차순은 작은값부터 큰값으로 정렬하는 것을 의미한다.

다음은 PROFILE 테이블에서 생년월일을 기준으로 오름차순 정렬한 예제이다.

 

SELECT *

FROM PROFILE

ORDER BY BIRTHDAY ASC ;

// 만약 ASC를 생략한 경우 ORDER BY는 디폴트가 ASC로 지정되어 있기 때문에 오름차순이 된다.

 

- 내림차순 (DESC)

 

내림차순은 반대로 큰값부터 작은 값으로 정렬한다.

 

SELECT *

FROM PROFILE

ORDER BY BIRTHDAY DESC ;

// 위 같은 경우 BIRTHDAY는 날짜형이라는 가정하에 늦은 날짜 순으로 정렬된다.

   즉 생년월일 이므로 생년월일이 가장 늦은, 나이가 어린 사람에서 많은사람 순으로 정렬된다.

 

- ORDER BY 에서 정렬방식에 여러가지 조건 제시

 

만약 나이가 많은 사람부터 적은 사람 순으로 출력하면서, 만일 생년월일이 같을 경우

이름의 철자가 빠른사람 순으로 정렬해볼수 있다.

 

SELECT *

FROM PROFILE

ORDER BY BIRTHDAY ASC, NAME ASC ;

// 콤마 ( , )로 구분한다. (and 연산자 X)

 

'공부 > ORACLE' 카테고리의 다른 글

6. 오라클 SQL 조인  (0) 2016.07.16
5. 오라클 SQL - 그룹 함수  (0) 2016.07.15
4. SQL 의 주요 함수  (0) 2016.07.07
2. SQL의 기본  (0) 2016.07.06
1. 데이터베이스의 개념  (0) 2016.07.05