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과는 다른 의미로 사용된다.
.
임의 한 문자를 매치
*
앞의 문자를 임의의 수많큼 반복. 임의의 개수의 모든 문자를 매치하기위해서는 '.*'를 사용해야 한다.
^
정규식에서 첫문자로 사용될 때 문자열의 시작부분을 매치.
$
정규식에서 마지막 문자로 사용될 때 문자열의 끝부분을 매치.
[]
[] 내의 한 문자를 매치. ^는 논리 부정으로 사용되며, -는 범위를 지정하는데 사용된다.
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
연습
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 문)하면 존손관계를 찾아 낼 수 있다.