mysql复盘,⑤多表查询

SELECT * FROM student;
SELECT * FROM classinfo;
SELECT * FROM score;
SELECT * FROM subject;
– 交叉连接:两个表的数据两两组合产生的结果
SELECT * FROM student CROSS JOIN classinfo;
SELECT * FROM student JOIN classinfo;
SELECT * FROM student, classinfo;
– 两个表两两组合后,会产生大量的垃圾(错误)数据,
– 在两两组合后基础上找出正确的数据
– 怎么找?
– 在where子句中写入连接条件,两个表共同字段
– 在表中有相同列时,在列名之前加上表名的前缀

– 等值连接
– 1.把两张表连接成一张大表,就把当成单表去用
SELECT stuid,name,student.cid,cname FROM student,classinfo
– 2.加入连接条件,取出正确数据(就是两个表同名的字段)
– 在连接的基础进行筛选
WHERE student.cid=classinfo.cid;
– 3.确定其他筛选条件

– 查询张三mysql的考试成绩 显示学生姓名、科目名、班级名、成绩
– 1.把多个表连成一张大表
select student.name,subname,cname,socre from student,classinfo,subject,score
– 2.确定每个表之间的连接条件
where student.cid=classinfo.cid
AND student.stuid=score.stuid
AND score.subid=subject.subid
– 3.确定其他筛选条件
AND student.name=‘张三’ and subname=‘MySQL’;

– 别名
select name,cname FROM student as stu,classinfo as c
where stu.cid=c.cid;
– 查询比张三小的学生信息
– 用子查询更好一点

– 内连接:inner JOIN
– 1.把两个表连成一张大表
select stuid,name,student.cid,cname from student inner join classinfo
– 2.确定两个表的连接条件
on student.cid=classinfo.cid

– 内连接:两个表两个表的相连,确定两个表之间连接条件
– 等值:把所有的表连到一块,综合确定每个表之间的连接条件
– 查询张三mysql的考试成绩 显示学生姓名、科目名、班级名、成绩
– 两个表变成了一张大表
SELECT name,subname,cname,socre FROM student inner join classinfo
– 连接条件
on student.cid=classinfo.cid
– 连接第三张表
INNER JOIN score
ON student.stuid=score.stuid
INNER JOIN subject
ON score.subid=subject.subid
where name=‘张三’ and subname=‘mysql’;

select * from student;
select * from score;
– 查询所有学生课程的考试成绩,
– 查询结果保留学生ID、姓名、性别、课程ID、成绩
– 内连接:查询结果是两个表匹配的数据
SELECT student.stuid,name,sex,subid,socre from student INNER JOIN score
ON student.stuid=score.stuid;

– 外连接:
– 左外连接:以左表为主表,去右表找匹配数据,如果匹配成功显示出来
– 如果匹配不成功,以null填充,代表左表中是数据都会被查询出来
select student.stuid,name,sex,subid,socre from student LEFT JOIN score
ON student.stuid=score.stuid;

– 右外连接:以右表为主表,去左表找匹配数据,如果匹配成功显示出来
– 如果匹配不成功,以null填充,代表右表中是数据都会被查询出来
select student.stuid,name,sex,subid,socre from student right JOIN score
ON student.stuid=score.stuid;

select student.stuid,name,sex,subid,socre from score LEFT JOIN student
ON student.stuid=score.stuid;

– 左右外连接可以相互转换,调一下表的位置,以后建议大家用左外连接
– 代替右外连接,因为DB2不支持右外连接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值