날짜: 1996-05-06 | 글쓴이: 도아 | 6412 번 | 프린트 | 메일로보내기

제 6강 - mSQL - 검색


mSQL에서 제공하고 있는 Select문의 기능은 표준 SQL에서 제공하는 모든 기능을 제공하지는 못한다. 현재 mSQL은

  • 다른 문내에 Select 문의 사용
  • 복잡한 함수(예, count(), avg())

등의 기능을 지원하지 못한다.

Select문은 원하는 테이블에서 조건에 맞는 데이터를 얻어내는 경우에 사용된다. 이 때 조건은 WHERE구문에 의해서 제공된다. mSQL의 select문은 다음과 같은 기능을 제공한다.

  • Joins - 테이블 엘리어싱을 이용한 두 테이블의 결합
  • DISTINCT - 중복되는 데이터의 제거
  • ORDER BY - 정렬
  • 정규식(Regular expression)에의한 매칭 - LIKE, RLIKE, CLIKE
  • WHERE 구문 내에서 열끼리의 비교
  • 복잡한 조건문
간단한 SELECT 문 사용형식

SELECT column [, column ]** FROM table
WHERE column OPERATOR VALUE

WHERE에서 사용할 수 있는 OPERATOR는 <, >, =, <=, >=, <>, LIKE, RLIKE, CLIKE있으며, VALUE는 문자 값이나 column명이다. 또한 SELECT의 where문은 중복조건을 표현하기위해 whewe 문내에 ( )를 포함할 수 있다.

where (age < 20 or age > 30) and sex = 'male'
사용예

이 예는 emp_details이라는 테이블에서 dept가 'finance'인 사람들을 검색해서 first_name과 last_name으로 구성된 새로운 테이블을 출력한다.

SELECT first_name, last_name FROM emp_details 
WHERE dept = `finance'
연습

Student 테이블에서 student_id가 0924201인 사람을 찾아 student_id, sname, phone를 출력하라. SELECT문 - 정렬 사용형식

SELECT column [, column ]** FROM table
WHERE column OPERATOR VALUE 
ORDER BY column [DESC]
사용예

위의 예에서 리턴된 데이터를 last_name에 의해서 오름차순으로 정렬한 후에 first_name에 의해서 내림차순으로 정렬하고 싶으면 다음과 같이 하면 된다.

SELECT first_name, last_name FROM emp_details 
WHERE dept = `finance' 
ORDER BY last_name, first_name DESC

first_name은 내림 차순으로 정렬하기 위해 first_name 뒤에 DESC란 키워드를 붙였다. 연습

Student 테이블에서 lecture_id가 1인 사람을 찾이 student_id, sname, phone을 출력하고, 그 결과를 student_id에대해 내림차순으로 정렬하라. SELECT문 - 중복 데이타 삭제 사용형식

SELECT DISTINCT column [, column ]** FROM table
WHERE column OPERATOR VALUE 
ORDER BY column [DESC]
사용예

검색된 결과에서 중복되는 행들을 삭제하기위해서 DISTINCT가 사용된다. 다음의 예를 보자.

SELECT DISTINCT first_name, last_name FROM emp_details 
WHERE dept = `finance' 
ORDER BY last_name, first_name DESC
연습

Student 테이블에서 모든 사람의 lecture_id를 출력하고 중복되는 데이터를 삭제하라. 정규식 연산자

표준 SQL은 아주 간단한 정규식 연산자를 제공하고 있지만 mSQL은 where 조건문에서 사용할 수 있는 세가지 정규식 연산자를 제공하고 있다. mSQL은 이 표준 정규식 연산자를 LIKE 연산자로 제공하고 있으며 기능적 보강을 위해 UNIX에서 사용되는 연산자를 RLIKE 연산자로 제공하고 있다. mSQL에서 사용할 수 있는 정규식은

  • LIKE - 표준 SQL 정규식 연산자
  • CLIKE - 대소문자를 구분하지 않는 LIKE 연산자
  • RLIKE - 완전한 UNIX 정규식 연산자

LIKE 연사자 외에 CLIKE나 RLIKE는 표준 SQL 연산자가 아니므로 mSQL에서만 사용가능하다. LIKE, CLIKE

표준 SQL에서 지원하는 연산자로서 다음과 같은 기능을 제공한다.

_
임의의 문자 하나를 매치한다.
%
임의의 하나 이상의 문자를 매치한다.
\
''나 '%'와 같은 문자의 특수한 의미를 없애준다. 예를 들어 '\%'는 '%'를 매치하고 ''는 ''를 매치한다.
사용예

이 예는 dept가 'finance'이고 last_name이 어떤 문자 뒤에 'ughes'가 따라오는 형식을 가지고 있는 데이터를 선택하게 된다.

SELECT first_name, last_name FROM emp_details 
WHERE dept = `finance' and last_name like `_ughes'
RLIKE

RLIKE는 UNIX의 표준 정규식을 지원한다. UNIX의 표준 정규식은 표준 SQL에서 지원하고 있는 정규식 보다 훨씬 강력한 기능과 편의를 제공한다. UNIX의 정규식은 _를 사용하지 않으며 % 역시 표준 SQL과는 다른 의미로 사용된다.

.
임의 한 문자를 매치
*
앞의 문자를 임의의 수많큼 반복. 임의의 개수의 모든 문자를 매치하기위해서는 '.*'를 사용해야 한다.
^
정규식에서 첫문자로 사용될 때 문자열의 시작부분을 매치.
$
정규식에서 마지막 문자로 사용될 때 문자열의 끝부분을 매치.
[]
[] 내의 한 문자를 매치. ^는 논리 부정으로 사용되며, -는 범위를 지정하는데 사용된다.
연습

Student 테이블에서 성이 '김'사람을 찾아라. SELECT -Join

mSQL의 Select문은 여러개의 테이블에 대해서 관계 연산자를 사용해서 여러 테이블을 Join하는 경우에도 사용될 수 있다. 사용형식

두 개의 테이블을 결합하는 기능은 실제 결합된 테이블을 생성하는 것이 아니라 기존에 존재하는 테이블을 이용해서 새로운 테이블을 생성하는 기능이다. 이 테이블 Join 기능 때문에 관계형 DB의 설계가 가능해 진다.

SELECT table1.column, table2.column FROM table1, table2
WHERE table1.column OPERATOR table2.column
ORDER BY table1.column [DESC], table2.column
사용예

하나의 테이블은 스탭들의 상세정보를 가지고 있고 또 한 테이블은 각각의 스탭들에 의해서 진행되고 있는 프로젝트들의 리스트를 가지고 있으며, 스탭들은 유일한 사원번호를 가지고 있다고 하자. 그러면 누가 어떤 프로젝트를 진행하고 있는지 다음과 같은 query에 의해서 알 수 있다.

SELECT emp_details.first_name, emp_details.last_name, project_details.project 
FROM emp_details, project_details 
WHERE emp_details.emp_id = project_details.emp_id 
ORDER BY emp_details.last_name, emp_details.first_name

emp_details과 project_details이라는 테이블(FROM 문)로부터 emp_id가 같은 사람을 찾아(WHERE 문) first_name, last_name, project필드로 테이블을 구성(SELECT 문)하라는 SQL 질의이다. 따라서 이와 같은 질의를 이용하면 테이블과 테이블을 결합하는 것이 가능하다. mSQL은 테이블 Join을 할 때 Join될 수 있는 테이블의 개수에 제한을 두지 않는다. 한가지 주의할 것은 위의 예에서도 알 수 있듯이 테이블을 Join할 경우 테이블 이름과 함께 필드명을 써 줘야 한다는 것이다. 테이블의 Join - 관계형 DB

관계형 DB
연습

Student 테이블의 lecture_id와 Lecture 테이블의 lecture_id가 같은 사람을 찾아 pname, lname, student_id, sname을 출력하라. SELECT -Alias

검색하려는 테이블 명이 지나치게 긴경우에 테이블 alias 기능을 사용할 수 있다. 이 테이블 alias 기능을 이용하면 하나의 테이블을 두 개의 테이블 처럼 사용할 수 있으며, 결과적으로 하나의 테이블을 결합할 수도 있다.

mSQL은 테이블 자체를 결합하거나 할 수 있는 테이블 에리어스를 지원한다. 이와 같이 테이블 자체를 결합하는 경우는 자주 발생하지는 않지만 한 테이블 내의 각행이 다른 행들관 관계가 있는 경우 아주 유용한 기능이다. 사용형식

SELECT t1.column, t2.column FROM table1=t1, table2=t2
WHERE t1.column OPERATOR t2.column
ORDER BY t1.column [DESC], ta2.column
사용예

이러한 테이블의 예로서 다음과 같이 본인의 이름과 부모의 이름을 포함하고 있는 테이블있다고 하자. 그러면 부모/자식의 관계를 갖는 여러 행이 존재하게되며 다음과 같은 테이블 에리아스를 이용해서 조손관계를 찾아낼 수 있다.

SELECT t2.name, t1.child, t1.membership from rel=t1, rel=t2 
where t1.name = t2.child

먼저 같은 데이블에대해 두 개의 테이블 에리어스를 정의(FROM 문)하고, 이렇게 alias 된 두 테이블로부터 name = child가 같은 행을 찾아(where 문) name와 child를 결합해서 출력(SELECT 문)하면 존손관계를 찾아 낼 수 있다.

Table Name = rel(t1)
name child membership
이맹호 호랭이 정회원
남성기 뭔성기 정회원
이영기 기영이 회원
김영필 영필김 회원
영필김 필인감 준회원
기영이 철수야 준회원
Table Name = rel(t2)
name child membership
이맹호 호랭이 정회원
남성기 뭔성기 정회원
이영기 기영이 회원
김영필 영필김 회원
영필김 필인감 준회원
기영이 철수야 준회원


다음글: 제 7강 - mSQL - 시스템 변수 (5557)1996-05-07
이전글: 제 5강 - mSQL - 데이터의 삽입, 삭제, 수정 (6132)1996-05-05

세상사는 이야기

  • 찾아라! 아이폰 순정용 >
  • 만원대 피젯 스피너를 >
  • 망하는 길을 택한 쿠팡 >
  • 물놀이에 적당한 가성 >
  • 컴퓨터를 IPTV로 2, po >
  • 컴퓨터를 IPTV로 만들 >
  • Warning.or.kr도 우회 >
  • 한국의 100대 부자, 어 >
  • 세상을 바꾼 크롬: 크 >
  • 장난(?)으로 시작한 여 >


  • RSS 구독 (익명 | 회원 | 강좌 | 포럼)
    (C) 1996 ~ 2017 QAOS.com All rights reserved.