实际开发中往往数据来自于不同的表,所以需要多表查询,多表查询是对多张表的数据取笛卡尔积。那么笛卡尔积是什么呢?
笛卡尔积:
先遍历第一张表,依次取出表中的第一条记录,再拿出这条记录和第二张表再进行排列组合。
注意: 关联查询可以对关联表取别名。
语法:
select 字段 from 表1 别名1[inner] join 表2 别名2 on 连接条件 and 其他条件
select 字段 from 表2 别名2 where 连接条件 and 其他条件;
(1)查询"xuxian"同学的成绩
select student.name,score.score,score.course_id
from student,score where student.name='xuxian'
and student.id=score.student_id;
select student.name,score.score,score.course_id
from student join score on student.name='xuxian'
and student.id=score.student_id;
(2)查询所有同学的总成绩,及学生的个人信息
select student.name,student.id,score.student_id,sum(score.score)
from student,score
where student.id=score.student_id group by student.id;
select student.name,student.id,score.student_id,sum(score.score)
from student join score
on student.id=score.student_id group by student.id;
(3)查询所有同学的成绩,及同学的个人信息
select student.id,student.name,course.name, score.score
from student,course, score
where student.id=score.student_id
and course.id=score.course_id;
外连接分为左外连接和右外连接,如果联合查询,左侧的表完全显示的我们称为左外连接;右侧完全显示我们就称为右外连接。
假设有两张表,此时学生表中的王五,在分数表中没有成绩,分数表中4,在学生表中没有学生存在。
-- 左外连接,表1完全显示
select 字段名 from 表1 left join on 表2 on 连接条件;
--示例
select student.name, student.id,score.score from student left join on student.id=score.student_id;
-- 右外连接,表2完全显示
select 字段名 from 表1 right join on 表2 on 连接条件;
--示例
select student.name, student.id,score.score from student right join on student.id=score.student_id;
自连接是指在同一张表连接自身进行查询。
显示所有的“计算机原理”成绩比“Java成绩高的成绩信息”
select * from score s1,score s2
where s1.student_id=s2.student_id
and s1.course_id=1
and s2.course_id=3
and s1.score<s2.score;
子查询是指嵌入到其他sql语句中的select语句,也叫做嵌套查询。
单行子查询:返回一行记录的子查询。
查询于“buxiaobiye"的同班同学:
select name from student where
classes_id=
(select classes_id from student
where name='buxiangbiye');
多行子查询:返回多行记录的子查询
查询"english"或“chinese"课程的成绩信息。
select * from score
where score.course_id in
(select id from course
where name='chinese' or name='english');
select * from score
where exists
(select score.course_id from course
where(name='chinese' or name='english')
and course.id=score.course_id);
exists:一边进行外层查询,一边进行里查询.
在from子句中使用子查询:子查询语句出现在from子句中。这里要用到数据查询的技巧,把一个子查询当作一个临时表可以使用。
在实际开发中,为了合并多个select执行的结果,可以把使用集合操作符union,union all.使用union和union all时,前后查询的结果集中,字段需要一致。
该操作符用于取得两个结果的并集。当使用该操作符时,会自动去掉结果集中的重复行。
查询id<3,或者名字为"english"的课程:
select * from course where id<3
union
select * from course where name='english';
该操作符用于取得两个结果集的并集,当使用该操作符时,不会去掉结果中的重复行。
示例:查询id小于3,或者名字为"java"的课程
select * from course where id<3
union all
select * from course where name='java';
可以看到结果中Java出现了两次,没有去掉重复行。
本文将研究 ES6 的 for ... of 循环。 旧方法 在过去,有两种方法可以遍历 javas...
微信文件传输助手是微信电脑版与手机微信之间相互传输图片等文件的好工具,但很...
一、正则表达式概述 二、正则表达式在VBScript中的应用 三、正则表达式在VavaScr...
ADO对象: Connection Command Recordset Record Stream ASP支持的对象很多,可...
歌词编辑器 歌词编辑器 第一步:选择要播放的歌曲并播放 第二步:填写全部的歌词...
一石激起千层浪,继中国区浩浩荡荡的大裁员告一段落之后,甲骨文并未因此收起手...
前言 相信大家都知道在IDE中代码的智能提示几乎都是标配,虽然一些文本编辑器也...
【排序算法】之lowb三人组冒泡、插入、选择 什么是lowb三人组 冒泡排序bubble so...
vbs:把一段文字中指定字符颜色变成红色的正则 functionc(Tstr,Word) Dimre Setre...
计算属性computed: 支持缓存,只有依赖数据发生改变,才会重新进行计算 不支持...