select * from 学生表 where exists (sele * from 班级表 where 班级编号=207
说明:关键字exists指定一个子查询,检测行的在在,如果子查询有结果集返回,将查询学生表中所有数据。
联接问题,这个问题一直都没好好的解决,在这里讨论一下。
联接--内联接(等联接、不等联接)
--外联接(左向外联接、右向外联接、完整外部联接)
--交叉联接
1等联接返回在联接中且有相等值的行,联接条件使用=
例 select * from 班级表 class inner join 学生表 student on claa.班级编号=student.班级编号
说明:inner关键字表示联接类型是内联接,join表示建立联接,on用来设置联接关系条件。该语名返回两个表中字段‘班级编号’相同的列的两个表的所有字段。
2不等联接 使用=以外的运算符的内联接称为不等联接。
例: sele disitict class1.* from 班级表 class1 inner join 班级表 class2 on class1.班级编号<>class2,班级编号 and class1.人数=class2.人数
说明:distinct除去重复的行,该语名使用的两个联接表实际上是同一个表,只是为表起了不同的别名,这各联接也称为自联接,该语名的作用是返回班级表中人数相同但班级不同的班级信息。
3左向外联接 也就是左联接,结果集会返回左表中所有符合where或having搜索条件的记录。
例: sele class.班级编号,class,班级名称,class,班主任,student.学生编号,student,学生姓名 from 班级表 class left outer join 学生表 student on class.班级编号=student.班级编号
说明:left outer 表示左向外联接,outer可省略。该语句会返回‘班级表’中所有的班级信息,而不是返回与‘学生表’中且有相同班级编号的班级信息。返回左表中所有信息,包括不符合查询条件的信息。
4右向外联接和左向外联接的用法是一样的,只是会返回右表的所有的信息,而不是只返回符合条件的信息。
5左右联接的区别(自己总结的不知对不对)左联接是左侧表的字段没有null值,如果右侧表的字段没有符合该列的,则右侧字段用null值填充,如果左侧有多个字段和右侧相联,则重复左侧的列填充,右联接是和左联接相反。
6完整外部联接可以认为是左、右联接的组合,会返回两个表中的所有记录。
7交叉联接 没有where子句的交叉联接返回表的笛卡尔积,即行数等表1和表2的行数的乘积,使用where子句的交叉联接等同于内联接。