database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Tutorials 11335 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 11335
오라클 기본강좌(2)-SELECT
작성자
정재익(advance)
작성일
2002-07-12 21:28
조회수
12,481

원본출처 : http://www.tech-farms.com/TFmanager/read.php?id=oracle1lect&page=1&category=&keyfield=&keyword=&select_arrange=head_no&desc=asc&no=3

 

2. SELECT

 

가). SELECT

데이터베이스로부터 데이터를 추출하기 위하여 사용하는 SQL문.

select [distinct]{*,column[alias],...}

from table

[where condition(s)]

[order by {column,expr}[asc|desc]];

 

 

(1) 사용자 소유한 모든 테이블 보기

사용자가 소유한 모든 테이블을 display합니다.

SQL> select * from tab;

TNAME TABTYPE CLUSTERID

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

CIRCLE TABLE

MEMBER TABLE

 

 

※'*'는 테이블의 모든 데이터,테이블등을 display합니다.

'*'자리에 보고 싶은 순서대로 column명을 명시하면 지정된 column의 내용을 display합니다.

column명은 ','로 구분합니다.

문장의 끝에는 ';'을 붙입니다.

tab는 사용자가 소유한 모든 테이블 명을 display합니다.

(2) 테이블의 구조보기

member테이블의 구조를 display합니다.

SQL> desc member

Name Null? Type

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

NO NOT NULL NUMBER

NAME NOT NULL VARCHAR2(10)

TEL VARCHAR2(15)

ADDR VARCHAR2(50)

JUMSU NUMBER

CODE NOT NULL NUMBER

GAIP DATE

 

 

(나). FROM

갖고 올 정보의 테이블 명을 정의해줄 때 사용하는 문

(1) 테이블의 내용보기

member테이블의 내용을 display합니다.

SQL> select * from member;

NO NAME TEL ADDR JUMSU CODE GAIP

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

1 이정석 324-7912 서울 종로구 창신동 14-1 81 103 01-SEP-99

2 강호식 298-4871 서울 관악구 신림3동 45-2 70 104 29-AUG-98

3 이순민 392-9012 대전시 중구 무수동 301-2 95 101 30-APR-97

4 김희수 391-9192 대전시 동구 가오동 300-050 44 102 20-MAR-97

5 강경자 329-3915 대구시 달서구 용산동 704-2 80 103 30-APR-96

.....

15 rows selected.

 

(2) 테이블의 column 선택하여 보기

member테이블의 이름과 전화번호의 값을 display합니다.

SQL> select name,tel from member;

NAME TEL

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

이정석 324-7912

강호식 298-4871

이순민 392-9012

김희수 391-9192

강경자 329-3915

.....

15 rows selected.

 

(3) 중복 행 선택방지(DISTINCT)

결과에서 중복 행을 제거하기 위해 사용합니다.

 

circle테이블상에 있는 모든 서클명을 display합니다.

SQL> select name from circle;

NAME

----------

수영부

테니스부

볼링부

탁구부

요리부

요리부

6 개의 행이 선택되었습니다.

 

circle 테이블상에 있는 모든 유일한 서클명을 display합니다.

SQL> select distinct name from circle;

NAME

----------

볼링부

수영부

요리부

탁구부

테니스부

 

(4) 테이블의 column 계산하여 보기

점수를 100으로 나눈값을 display합니다.

SQL> select name,jumsu/100 from member;

NAME JUMSU/100

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

이정석 .81

강호식 .7

이순민 .95

김희수 .44

강경자 .8

.....

15 rows selected.

 

※jumsu/100의 계산 결과는 display용도로만 사용됩니다.

+,-,*,/,()는 SQL에서 이용가능한 산술 연산자이면 from절을 제외한 모든 sql문장에서 산술연산자를 사용할 수 있습니다.

(5) Column Aliases

결과화면의 heading을 이름과, 가입일자로 변경하여 display합니다.

SQL> select name "이름",gaip "가입일자" from member;

이름 가입일자

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

이정석 01-SEP-99

강호식 29-AUG-98

이순민 30-APR-97

김희수 20-MAR-97

강경자 30-APR-96

.....

15 rows selected.

 

(6) 리터럴 문자열

column heading을 '회원정보'로 하고 이름,전화번호,점수에 구두점을 추가하여 display합니다.

SQL> select name||','||tel||','||jumsu"회원정보" from member;

회원정보

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

이정석,324-7912,81

강호식,298-4871,70

이순민,392-9012,95

김희수,391-9192,44

강경자,329-3915,80

.....

15 rows selected.

 

 

(다). ORDER BY

지정된 column의 순서대로 행들을 정렬할 때 사용하는 문

(1) Order by절을 사용한 행들의 정렬

점수 값을 오름 차순하여 이름과 점수를 display하여줍니다.

SQL> select name,jumsu from member order by jumsu;

NAME JUMSU

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

김희수 44

장하리 48

강호식 70

정호수 70

이정석 80

.....

17 개의 행이 선택되었습니다.

 

점수값을 내림차순하여 이름과 점수를 display하여줍니다.

SQL> select name,jumsu from member order by jumsu desc;

NAME JUMSU

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

김찬옥 99

이석준 99

남호정 97

이순민 95

이민순 93

.....

15 rows selected.

 

 

※'order by' 정렬할 column명을 명시합니다.

desc는 내림차순 정렬합니다.

asc는 오름차순 정렬합니다. default값으로 생략이 가능합니다.

 

(라). WHERE

(1) Where절을 이용한 행의 제한

코드 값이 101인 이름과 코드 값만을 display합니다.

SQL> select name,code from member where code=101;

NAME CODE

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

이순민 101

이민순 101

남호정 101

장희순 101

김길수 101

 

(2) Between 연산자

코드 값의 범위에 해당하는 이름과,코드를 display합니다.

SQL> select name,code from member

2 where code between '101' and '103';

NAME CODE

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

이정석 103

이순민 101

김희수 102

강경자 103

이민순 101

.....

9 rows selected.

 

 

※between... and... 두 개의 값 사이(두 개의 값도 포함)의 값을 display합니다.

부정연산자인 경우 not between... and...

(3) IN 연산자

코드 값이 101,103인 이름,코드 값을 display합니다.

SQL> select name,code from member

2 where code in(101,103);

NAME CODE

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

이정석 103

이순민 101

강경자 103

이민순 101

남호정 101

.....

7 rows selected.

 

※in(리스트) 리스트의 값 중 어느 하나라도 일치하는 값을 display합니다.

부정연사자인 경우 not in(리스트)

(4) LIKE 연산자

이름이 '이'로 시작하는 모든 이름을 찾아 display합니다.

SQL> select name from member

2 where name like '이%';

NAME

----------

이정석

이순민

이민순

이수영

이석준

 

※like 문자형태와 일치하는 값을 display합니다.

부정연사자인 경우 not like

주소에 '송정'이 들어있는 행을 display합니다.

SQL> select name,addr from member

2 where addr like '%송정%';

NAME ADDR

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

장희순 광주시 광산구 송정1동 10-1

 

(5) IS NULL 연산자

연락처가 null인 값을 display합니다.

SQL> select name,tel from member

2 where tel is null;

NAME TEL

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

이수영

 

 

※is null 연산자를 사용해 null값을 check합니다.

where tel=''로는 검색할 수 없습니다.

부정연산자인 경우 is not null

(6) 다중 조건에 의한 Query

김씨 성을 갖은 사람 중 점수가 90점 이상인 이름 및 점수를 display합니다.

SQL> select name,jumsu from member

2 where jumsu between '90' and '100'

3 and name like '김%';

NAME JUMSU

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

김찬옥 99

 

 

김씨성을 갖은 사람 중 점수가 90점에서 100점 사이인 회원의 이름 및 점수를 display합니다.

SQL> select name,jumsu from member

2 where jumsu between '90' and '100'

3 or name like '김%';

NAME JUMSU

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

이순민 95

김희수 44

이민순 93

김찬옥 99

남호정 97

.....

9 rows selected.

 

(7) 우선 순위 규칙

101써클에 속하는 회원 중 점수가 90이상이 되는 회원과 102번 써클에 속하는 전회원에 대해 이름,점수,코드번호를 display합니다.

SQL> select name,jumsu,code

2 from member

3 where jumsu>=90

4 and code=101

5 or code=102;

NAME JUMSU CODE

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

이순민 95 101

김희수 44 102

이민순 93 101

남호정 97 101

장희순 90 101

.....

6 rows selected.

 

101이나 102써클에 속하는 회원 중 점수가 90이상이 되는 회원에 대해 이름,점수,코드번호를 display합니다.

SQL> select name,jumsu,code

2 from member

3 where jumsu>=90

4 and (code=101

5 or code=102);

NAME JUMSU CODE

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

이순민 95 101

이민순 93 101

남호정 97 101

장희순 90 101

이석준 99 102

 

 

※AND는 OR보다 우선 순위가 높습니다.

모든 조건들의 결과는 연결 연산자의 우선순위에 의해 결정되는 순서로 조합됩니다.

동등한 우선순위의 연산자가 바로 옆에 사용될 시 좌측에서 우측으로 수행됩니다. 우선순위

연산자

 

 

1

모든 비교 연산자

(=,<>,>,>=,<,<=,IN,LIKE,IS NULL,BETWEEN)

 

2

AND

 

3

OR

 

 

(마). JOIN

한 개 이상의 테이블에서부터 데이터를 조회시 사용합니다.

Select table.column,table.column...

from table1,table2

where table1.column1=table2.column2;

 

 

(1) Equijoin

Circle의 코드 값과 member의 코드 값을 비교하여 circle의 써클명과 member의 이름과,코드 값을 display합니다.

SQL> select member.name,member.code,circle.name

2 from member,circle

3 where member.code=circle.code;

NAME CODE NAME

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

이정석 103 볼링부

강호식 104 탁구부

이순민 101 수영부

김희수 102 테니수부

강경자 103 볼링부

.....

15 rows selected.

 

 

member의 코드와 circle의 코드를 where절에서 비교하여 circle의 써클명을 display합니다.

 

SQL> select name,code from member;

NAME CODE

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

이정석 103

강호식 104

이순민 101

김희수 102

강경자 103

.....

15 rows selected.

 

SQL> select code,name from circle;

CODE NAME

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

101 수영부

102 테니수부

103 볼링부

104 탁구부

105 요리부

 

 

 

(2) 추가적인 검색 조건

circle의 써클명, member의 이름,코드 중 이름이 '김'으로 시작하는 회원만을 display합니다.

SQL> select member.name,member.code,circle.name

2 from member,circle

3 where member.code=circle.code

4 and member.name like '김%';

NAME CODE NAME

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

김희수 102 테니스부

김찬옥 105 요리부

김길수 101 수영부

 

(3) 테이블 Alias 사용

결과화면의 heading을 이름,코드,써클명으로 변경하여 display하고, circle의 써클명과 member의 이름 및 코드 값을 display합니다.

SQL> select m.name "이름",m.code "코드",c.name "써클명"

2 from member m,circle c

3 where m.code=c.code;

이름 코드 써클명

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

이정석 103 볼링부

강호식 104 탁구부

이순민 101 수영부

김희수 102 테니스부

강경자 103 볼링부

.....

15 rows selected.

 

(4) Non-Equijoin

한 테이블의 어떤 column도 join할 테이블의 한 column에 직접적으로 일치하지 않을 시 사용합니다.

 

member의 점수는 g의 하한값과 상한값의 사이에 있어야 합니다.

SQL> select * from g;

NO LOW HIGH GR

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

1 90 100 수

2 80 89 우

3 70 79 미

4 60 69 양

5 0 59 가

 

 

member의 이름,점수와 g의 등급을 평가합니다.

SQL> select m.name,m.jumsu,gg.gr

2 from member m,g gg

3 where m.jumsu between low and high;

NAME JUMSU GR

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

이순민 95 수

이민순 93 수

김찬옥 90 수

남호정 97 수

이수영 91 수

.....

17 개의 행이 선택되었습니다.

 

(5) Outer Join

정상적으로 조인 조건을 만족하지 못하는 행들을 보기 위해 사용합니다.

Outer join 연산자는 "(+)"입니다.

조인시킬 값이 없는 조인측에 "(+)"를 위치 시킵니다.

select table.column,table.column

from table1,table2

where tble1.column(+)=table2.column;

 

(6) Self Join

한 개의 테이블을 두 개의 별도의 테이블처럼 사용하기 위해 테이블 alias를 사용하여 한 테이블을 자체적으로 조인 할 수 있습니다.

 

(바). Group 함수

그룹당 한 개의 결과를 주기 위해 행들의 집합에 대해 연산합니다.

(1) MIN,MAX 함수

이름의 첫 번째 이름과, 마지막 이름을 display합니다.

SQL> select min(name),max(name)

2 from member;

MIN(NAME) MAX(NAME)

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

강경자 정호수

 

(2) AVG,SUM함수

점수의 총점과 평균을 display합니다.

SQL> select sum(jumsu),avg(jumsu) from member;

SUM(JUMSU) AVG(JUMSU)

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

1210 80.666667

 

(3) COUNT 함수

101 써클에 가입한 회원의 수를 display합니다.

SQL> select count(*)

2 from member

3 where code=101;

COUNT(*)

---------

5

 

※count(*)는 한 테이블에서 중복 행 및 널 값을 갖고 있는 행들도 포함하여 행의 수를 돌려줍니다.

count(expr)은 expr에 의해 식별되는 column상에 널 값이 아닌 행들의 숫자를 돌려줍니다.

(사). Group By

한 테이블의 행들을 원하는 그룹들로 나누기 위해 사용합니다.

select column,group_function

from table

[where condition]

[group by group_by_expression]

[order by column];

 

 

써클 코드별 회원 수를 구하여 display합니다.

SQL> select code,count(*) "회원수"

2 from member

3 group by code;

CODE 회원수

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

101 5

102 2

103 2

104 3

105 3

 

※select절에 그룹 함수를 포함하고 있을 시 group by절에 각 column이 명시되지 않으면 각각의 그룹별 결과를 얻을 수 없습니다.

where절을 사용하여 행들을 그룹으로 나누기 전에 미리 조건에 맞지 않은 행들을 제외시킬 수 있습니다.

부서명과, 부서의 최고 점수를 구하여 display합니다.

SQL> select circle.name,max(member.jumsu)

2 from member,circle

3 where member.code=circle.code

4 group by circle.name;

NAME MAX(MEMBER.JUMSU)

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

볼링부 80

수영부 97

요리부 91

탁구부 81

테니스부 99

 

 

※group by 절에 명시된 column의 순서대로 올림차순 정렬이 일어납니다.

order by 절을 사용하여 이런 정렬순서를 바꿀 수 있습니다.

 

(아). HAVING

그룹을 제한시 사용합니다.

select column,group_function

from table

[where condition]

[group by group_by_expression]

[having group_condition]

[order by column];

 

 

코드별로 평균이 80점이 넘는 써클의 코드와 평균이 display됩니다.

SQL> select code,avg(jumsu) 점수

2 from member

3 group by code

4 having avg(jumsu)>80

5 order by avg(jumsu);

CODE 점수

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

103 80.5

101 91.4

 

※having절에서 조건을 만족하는 그룹들이 display됩니다.

평균점수가 90이 넘는 써클과 평균점수를 display합니다.

SQL> select code,avg(jumsu) from member

2 group by code

3 having avg(jumsu)>90;

CODE AVG(JUMSU)

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

101 91.4

110 93

111 99

 

 

(자). Subqueries

테이블 자체 데이터에 의존하는 조건으로 테이블의 행들을 검색할 필요가 있을 시 유용합니다.

select select_list

from table

where expr operator

(select select_list from table);

 

(1) 단일행 subquery

'김찬옥'과 같은 써클에 있는 회원이 display됩니다.

SQL> select name,code

2 from member

3 where code=

4 (select code

5 from member

6 where name='김찬옥');

NAME CODE

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

김찬옥 105

이수영 105

장하리 105

 

※subquery는 괄호로 묶어야 합니다.

비교 연산자뒤에 subquery를 작성합니다.

subquery에 order by절을 추가하지 마십시오.

mainquery의 코드와 subquery의 결과 코드을 비교하여 같은 코드를 display합니다.

[Top]
No.
제목
작성자
작성일
조회
11338오라클 기본강좌(4)-VIEW 의 생성, 삭제
정재익
2002-07-12
10043
11337오라클 기본강좌(3)-시퀀스 생성, 수정, 삭제
정재익
2002-07-12
13558
11336오라클 기본강좌(3)-함수
정재익
2002-07-12
17020
11335오라클 기본강좌(2)-SELECT
정재익
2002-07-12
12481
11334오라클 기본강좌(1)-테이블 관리
정재익
2002-07-12
22183
11333Oracle ODBC 설정법
정재익
2002-07-12
7709
11327Linux 용 오라클 제품관련 FAQ
정재익
2002-07-12
6521
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.047초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다