最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

6)表连接

来源:博客园

1、内连接:符合关联条件的记录被检索出来,不符合条件的过滤掉;

两张表内连接格式:

select 字段列表    from 表1 [inner] join 表2 on 关联条件;

初始两张表中数据:


【资料图】

现需要将学生表中姓名、学号和班级表中的班级号放在一张表中;

select student.student_no,student.student_name,classes.class_name    from student inner join classes     on student.class_no = classes.class_no;

可以看到上述表中,由于表中没有一个不匹配的字符,所有都显示出来;

接下来我们将在表中新增加两项;让其不能匹配;

然后再执行与上述相同的内连接命令时,结果表与之前相同;这就是内连接,不会将不匹配的项显示出来;

此处,为方便书写,还可以将字段列表起别名,但是注意:表一旦命名别名,在当前语句中,就只能使用别名了,不能使用原表名;两张表中,没有重名的字段可以直接使用字段,不需要前面加表名或别名;

select s.student_no,s.student_name,c.class_name    from student s join classes c    on s.class_no = c.class_no;

下面这种就是错误的书写:

对于两种表中不相同的字段名可以直接写字段名,可以省略前缀的表名;

select student_no,student_name,class_name    from student s join classes c    on s.class_no = c.class_no;

三表连接:

select 字段列表    from 表1 join 表2 on 关联条件1        join 表3 on 关联条件2;

向choose空表中插入数据;

这儿我偷懒,直接加减当前日期;方便后续时间排序用;若插入失败,多试几次,加减时间可能溢出了,貌似只能对秒起作用?

insert into choose values(null,"2023001",2,40,now()),    (null,"2023001",1,50,now()-10),    (null,"2023002",3,60,now()+20),    (null,"2023002",2,70,now()+1),    (null,"2023003",1,80,now()-9),    (null,"2023004",2,90,now()-12),    (null,"2023005",3,null,now()-14),    (null,"2023005",1,null,now()+5);

插入 完数据,就可以进行表连接了:三表连接的注意先后顺序;

关联条件:student.student_no=choose.student_no;course.course_no=choose.course_no;

#三表连接:学号、姓名、课程、成绩;select student.student_no 学号,student.student_name 姓名,course.course_name 课程名称,choose.score 成绩    from student join choose on student.student_no=choose.student_no         join course on course.course_no=choose.course_no;

2、外连接:外连接 结果集 = 内连接结果集 + 匹配不上的记录;

关键词: