首页 > 解决方案 > 如何将多个表中的属性分组到一个表中

问题描述

我有这两张桌子。

 CREATE TABLE doctor(
    code_doctor char(5) primary key not null,
    name varchar(30) not null,
    gender char(1) check(gender='L' or gender='P'),
    address varchar(30),
    salary numeric
    )

CREATE TABLE schedule_doctor(
code_schedule char(5) primary key not null,
day varchar(10) CHECK (day IN ('monday', 'tuesday', 'wednesday', 'thursday', 'friday','saturday')),
shift varchar(10) CHECK (shift='morning' or shift='evening'),
code_doctor char(5) foreign key references doctor(code_doctor) on update cascade on delete
cascade
)

如何在一张表中显示医生姓名、日期、班次?

标签: sql-servertsql

解决方案


您可以使用join, AJOIN子句用于组合来自两个或多个表的行

SELECT d.NAME AS DoctorName,
   sd.DAY,
   sd.shift
FROM   doctor d
   INNER JOIN schedule_doctor sd
        ON  d.code_doctor = sd.code_doctor 

或者LEFT JOIN关键字返回左表中的所有记录doctor,以及右表中匹配的记录schedule_doctor。如果没有匹配,则结果NULL来自右侧。

SELECT d.NAME AS DoctorName,
   sd.DAY,
   sd.shift
FROM   doctor d
   LEFT JOIN schedule_doctor sd
        ON  d.code_doctor = sd.code_doctor 

推荐阅读