본문 바로가기

컴퓨터/데이터베이스

2008년 9월 11호

*조인
1. 교차조인(cross join)
   1) ansi-sql
      select
      from 테이블명1 cross join 테이블명2
   2) 다른 방법
      select
      from 테이블명1, 테이블명2
2. 내부조인(inner join)=자연조인=등조인
   1) ansi-sql
      select
      from 테이블명1 [inner] join 테이블명2
           on (테이블명1.컬럼명=테이블명2.컬럼명)
           [inner] join 테이블명3 on (테이블명1.컬럼명=테이블명3.컬럼명)
      where 검색조건
   2) 다른 방법
      select
      from 테이블명1, 테이블명2, 테이블명3
      where 테이블명1.컬럼명=테이블명2.컬럼명
            and 테이블명1.컬럼명=테이블명3.컬럼명
            and 검색조건
3. 외부조인(outer join)
 3.1 좌외부조인(left outer join)
   1) ansi-sql
      select
      from 테이블명1 left [outer] join 테이블명2
           on (테이블명1.컬럼명=테이블명2.컬럼명)
      where 검색조건
   2) 다른 방법
      select
      from 테이블명1, 테이블명2
      where 테이블명1.컬럼명 *= 테이블명2.컬럼명
            and 검색조건
 3.2 우외부조인(right outer join)
 3.3 완전외부조인 (full outer join)
   1) ansi-sql
      select
      from 테이블명1 full [outer] join 테이블명2
           on (테이블명1.컬럼명=테이블명2.컬럼명)
      where 검색조건
   2) 다른 방법
      select
      from 테이블명1, 테이블명2
      where 테이블명1.컬럼명 *=* 테이블명2.컬럼명
            and 검색조건
4. 셀프 조인
   1) ansi-sql
      select
      from 테이블명1 별칭1 [inner] join 테이블명1 별칭2
           on (별칭1.컬럼명=별칭2.컬럼명)
      where 검색조건
   2) 다른 방법
      select
      from 테이블명1 별칭1, 테이블명1 별칭2
      where 별칭1.컬럼명=별칭2.컬럼명
            and 검색조건
p256 <실습9>
use sqldb2b
go
create table stdtbl
(stdname nvarchar(10) not null primary key,
 addr nchar(4) not null)
go
create table clubtbl
(clubname nvarchar(10) not null primary key,
 roomno nchar(4) not null)
go
create table stdclubtbl
(num int identity not null primary key,
 stdname nvarchar(10) not null
         foreign key references stdtbl(stdname),
 clubname nvarchar(10) not null
         foreign key references clubtbl(clubname))
insert into stdtbl values('박지성','서울')
insert into stdtbl values('박주영','경기')
insert into clubtbl values('수영','101호')
insert into clubtbl values('바둑','102호')
insert into clubtbl values('축구','103호')
insert into stdclubtbl values('박지성','바둑')
insert into stdclubtbl values('박지성','축구')
* identity: 자동으로 1부터 증가하는 값을 시스템이 입력하므로
            사용자가 명시적으로 값을 입력할 수 없다.
            identity_insert 환경변수를 on하면 사용자는 명시적으로
            컬럼명을 기술하고 값을 줄 수 있다.
set identity_insert stdclubtbl off
insert into stdclubtbl(num,stdname,clubname) values(12,'박지성','축구')
select * from stdclubtbl
delete from stdclubtbl where num in (11,12)
p257
2.동아리에 가입한 학생을 학생이름,주소,동아리이름,방번호가 나오도록 출력!