多表查询:多张表关联在一起进行查询,在多表查询中会频繁的使用表的别名。
连接:
内连接(等值连接):
select 列名 from 表1 别名 inner join 表2 别名[...inner join 表n 别名] on 条件
select 列名 from 表1 别名,表2 别名....表n 别名 where 条件
查询学生表和班级表,要求显示学生表中的姓名、年龄、数学成绩、以及每名学生相对应的班级信息:
查询学生表和班级表,要求显示学生表中的姓名、年龄、数学成绩、以及每名学生相对应的班级信息,并且年龄在30岁以上,数学成绩及格:
查询每个班级有多少名同学,并且要显示出班级名称及、班级的地址:
交叉连接:查询后的结果是笛卡尔积
语法:
select 列名from 表1 别名cross join 表2 别名 [....cross join 表n 别名]
select 列名 from 表1 别名, 表2 别名 [,.....表n]
表示两个表中的每一行数据任意组合
自连接:自己连接自己本身,将一张表当成两张甚至多张表来使用
语法:
select 列名 from 表 别名 join 表 别名 [...join 表 别名] on 条件
select 列名 from 表 别名, 表 别名 [...表 别名] where 条件
查询t_emp表中每名员工及其领导的姓名:
外连接:左外连接、右外连接、全外连接
左连接:在两张在进行互相匹配时,如果左表的内容没有匹配项,显示左表的内容,右边显示空值。
语法:
select 列名 from 表1 别名 left [outer] join 表2 别名 on 条件
select 列名 from 表1 别名, 表2 别名 where 条件(+)
查询student表和class表,如果在student表中没有与class匹配的班级信息,那么同样显示student表中的学生信息:
右连接:
在两张表进行匹配时,如果右表的内容没有匹配项,显示右表的内容,左边显示空值。
语法:
select 列名 from 表1 别名right [outer] join 表2 别名on条件
select 列名 from 表1 别名, 表2 别名 where 条(+)件
查询student表和class表,如果在student表中没有与class表中匹配的班级,同样显示class中班级的信息:
全连接:在两张表进行匹配的时候,如果一边有不匹配的项,在另一边显示空值。
语法:
select 列名from 表1 别名 full join 表2 别名 on 条件
子查询:在查询中的条件可能是一条select语句,查询的结果也可能不是一张表,有时也可以是一条select语句的查询结果,查询的字段也可能不是某张表的字段,而是一条select语句的查询结果。
查询student表和class表,查询数学成绩比关羽高的学生的信息及对应的班级信息,查询字段有,姓名、年龄、数学成绩、班级名称、班级地址:
查询student表和class表,查询数学成绩比关羽高,并且年龄比周瑜大的学生的信息及对应的班级信息,查询字段有,姓名、年龄、数学成绩、班级名称、班级地址:
查询数学成绩最高分的学生信息及班级信息:
查询其它班级的数学成绩与一班的数学成绩相同的学生信息: