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不支持右外连接