본문 바로가기
DB/MySQL

FROM 절

by 가므자 2012. 3. 5.
FROM 절
FROM 절은 사용하려는 테이블을 지정하기 위해서 사용된다. 이는 테이블 참조를 통해서 수행될 수 있는데, 테이블 참조는 가능하다면 가명이 따라오는데 테이블 명세로 구성할 수 있다.
<from clause> ::=
FROM <table reference> [{, <table reference>}...]

<table reference> ::=
<table specification> [<pseudongym>]

<table specification> :: = <table name>

예제) "JJY"가 생성한 STUDENT 테이블의 전체 내용을 "KIM"이 보고자 할 때 적절한 SELECT 명령문을 왕성하라 (KIM은 STUDENT 테이블을 질의 할 수 있느 권한이 있다고 가정한다.)

>SELECT *
>FROM JJY.STUDENT;

새로운 복합 이름인 JJY.STUDENT(소유자의 이름과 테이블사이에는 마침표로 구분되어 있음)은 테이블 명세이다. 소유자를 지정하는 것은 가끔 테이블 이르므이 자격으로써 참조된다.

열 명세
<table specification>.<column specification>

예제)각 학생의 학번을 나타내어라
> select stu_no
> from student;

>select student.stu_no
>form student;

다중 태이블 명세
ATTEND 테이블은 각 학생의 수강년도, 학기, 수강과목코드, 교수코드에 관한 정보는 가지고 있지만, 이름에 대한 정보는 가지고 있지 않기 때문에 학생 신상 테이블인 STUDENT 테이블에서 가져와야 한다. 그러므로 2개의 테이블이 필요하다.

예제) 각 학생의 학번과 이름, 수강년도, 학기, 수강과목코드, 교수코드를 나타내어라.
mysql> select student.stu_no, stu_name, att_year, att_term, sub_code, prof_code
> form student, attend
> where student.stu_no = attend.stu_no; # 두개 이상의 테이블을 지정할 때는 각 테이블에서 사용하고 있는 열의 이름이 중복되어 사용되는 경우 "테이블 명세.열의 명세"의 형식으로 사용

FROM절의 중간 결과 행의 수 : A 테이블의 행 수 * B 테이블의 행 수
FROM절의 중간 결과 열의 수 : A 테이블의 열 수 * B 테이블의 열 수

예를 들면
STUDENT 테이블의 행수가 15행이고, 열의 수가 13열
ATTEND 테이블의 행수가 18 이고, 열의 수가 11열

행수 : 15*18 = 270행
열수 : 13+11 =24열

예제)
mysql > select s.stu_no, stu_name, att_div
> from student s, attend a
> where s.stu_no = a.stu_no;

가명(Alias)
가명은 테이블의 임시 대체 이름이다. 앞의 예제에서 열의 접근 권한을 줄때 전체 테이블의 이름을 지정해야만 한다.
이 때 테이블의 이름을 사용하는 대신에 가명을 사용할 수 있는데, 가명은 From절에서 선언한다.

예제)
mysql > select s.stu_no, stu_name, att_div
> from student s, attend a #가명 S와 A
> where s.stu_no = a.stu_no;

FROM 절의 다양한 예제
예제) 수강 테이블의 학번과 이름, 수강과목코드, 교수코드, 교수명을 나타내어라.
mysql> select s.stu_no, stu_name, sub_code, p.prof_code, prof_name
> from student s, sttend a, professor p
> where s.stu_no = a.stu_no and
>a.prof_code =p.prof_code;

예제) 적어도 한번 이상 장학금을 받은 학생의 이름을 나타내어라.
mysql > select distinct s.stu_no, stu_name
> from student s, fee f
> where s.stu_no =f.stu_no and
> not jang_code is null; #NULL 값을 같지 않는다.

예제) 2007년에 등록한 학생의 학번과 이름을 나타내어라.
mysql > select distinct s.stu_no, s.stu_name
> from student s, fee f
> where s.stu_no = f.stu_no
> and fee_year =2007;

반드시 가명을 사용해야 하는 경우
FROM 절에서 동일한 테이블 이름이 한번 이상 사용될 때 발생.

예제) 박정인 학생보다 나이가 더 많은 학생의 이름과 생년을 나타내어라.
mysql> select s.stu_name, s.birth_year
> from student s, student st
> where st.stu_name = '박정인'
> and s.birth_year < st. birth_year

'DB > MySQL' 카테고리의 다른 글

PHP와 mysql을 이용해서 게시판 만들기  (1) 2012.03.05
WHERE 절  (0) 2012.03.05
7장 SELECT 명령문의 절  (0) 2012.03.05
테이블 생성 및 삭제하기  (0) 2012.03.02
6장 SELECT 명령문과 공통 요소  (0) 2012.03.02

댓글