解惑一:
1、创建表和插入数据
create
table
Personnel
(
emp_id
integer
primary
key
,
first_name
char
(
20
)
not
null,
last_name
char
(
20
)
not
null)
create
table
Phones
(
emp_id
integer
not
null,
phone_type
char
(
3
)
not
null
check
(
phone_type
in
(
'hom'
,
'fax'
)),
phone_nbr
char
(
12
)
not
null,
primary
key
(
emp_id
,
phone_type
),
foreign
key
(
emp_id
)
references
Personnel
(
emp_id
))
insert
into
Personnel
(
emp_id
,
first_name
,
last_name
)
values
(
1
,
'La'
,
'Done'
),
(
2
,
'Guo'
,
'Yin'
),
(
3
,
'Tim'
,
'Gour'
)
insert
into
Phones
(
emp_id
,
phone_type
,
phone_nbr
)
values
(
1
,
'hom'
,
'8845123'
),
(
2
,
'hom'
,
'8845123'
),
(
3
,
'hom'
,
'8845123'
)
go
2、创建视图
create
view
FaxPhones
(
last_name
,
first_name
,
emp_id
,
fax_phone
)
as
select
e1
.
last_name
,
e1
.
first_name
,
e1
.
emp_id
,
f1
.
phone_nbr
from
(
Personnel
as
e1
left
outer
join
Phones
as
f1
on
e1
.
emp_id
=
f1
.
emp_id
and
f1
.
phone_type
=
'fax'
)
go
create
view
HomePhones
(
last_name
,
first_name
,
emp_id
,
home_phone
)
as
select
e1
.
last_name
,
e1
.
first_name
,
e1
.
emp_id
,
f1
.
phone_nbr
from
(
Personnel
as
e1
left
outer
join
Phones
as
f1
on
e1
.
emp_id
=
f1
.
emp_id
and
f1
.
phone_type
=
'hom'
)
go
select
h1
.
last_name
,
h1
.
first_name
,
home_phone
,
fax_phone
from
HomePhones
as
h1
,
FaxPhones
as
f1
where
h1
.
emp_id
=
f1
.
emp_id
go
解惑二:
1、from子句中,从Personel表中,左外连接Phones表,匹配emp_id和phone_type标识
select
e1
.
last_name
,
e1
.
first_name
,
h1
.
phone_nbr
as
Home
,
f1
.
phone_nbr
as
Fax
from
(
Personnel
as
e1
left
outer
join
Phones
as
h1
on
e1
.
emp_id
=
h1
.
emp_id
and
h1
.
phone_type
=
'hom'
)
left
outer
join
Phones
as
f1
on
e1
.
emp_id
=
f1
.
emp_id
and
f1
.
phone_type
=
'fax'
解惑三:
select
e1
.
emp_id
,
e1
.
first_name
,
e1
.
last_name
,
max
(
case
when
p1
.
phone_type
=
'hom'
then
p1
.
phone_nbr
else
null
end
)
as
home_phone
,
max
(
case
when
p1
.
phone_type
=
'fax'
then
p1
.
phone_nbr
else
null
end
)
as
fax_phone
from
Personnel
as
e1
left
outer
join
Phones
as
p1
on
p1
.
emp_id
=
e1
.
emp_id
group
by
e1
.
emp_id
,
e1
.
first_name
,
e1
.
last_name
解惑四:
select
p1
.
last_name
,
p1
.
first_name
,
(
select
t1
.
phone_nbr
from
Phones
as
t1
where
t1
.
emp_id
=
p1
.
emp_id
and
t1
.
phone_type
=
'hom'
)
as
home_phone
,
(
select
t2
.
phone_nbr
from
Phones
as
t2
where
t2
.
emp_id
=
p1
.
emp_id
and
t2
.
phone_type
=
'fax'
)
as
fax_phone
from
Personnel
as
p1