子查询有一个重要运用,就是通过子查询连接两个关系表
1. 查找数学86分和65分的同学的国家:select country from student_family in (select id from student_info where math=(86,65)); 注:在WHERE子句中使用子查询(如这里所示),应该保证SELECT语句具有与WHERE子句中相同数目的列。通常,子查询将返回单个并且与单个列匹配,但如果需要也可以使用多个列。子查询通常用IN连接而不是where;
2.下面再来看一条select语句的子句,select name ,(xxx) from student_family; 注:这种查询方式,是对每一行再进行了一次select,在select里嵌套的select一般必须是聚合计算;
2.联接查询
1.内联接,又称为等值联接,是通过等值的方式将两个表链接在一起:select student_info.id,student_info.name,from student_info,student_family where student_info.id=student_family.id; 连接通常是做一个笛卡尔积,需要通过where进行过滤;
2.内连接还有另一种书写方式,这种方式是推荐的书写方式:select student_info.id,student_info.name,from student_info inner jion student_family onstudent_info.id=student_family.id; 通过inner jion 和on关键字来达到同样的目的;
3.自联结就是将一个表自己进行连接,假如我们想要知道和amy相同年龄的人所在的国家:select country from student_family AS s1,student_family AS s2 where s1.age=s2.age and s2.name='amy'; 这条语句用到了两个知识点:自联结为了区分两个相同的表,使用了表别名(表别名仅用于区分表格,不作为返回字段),第二个知识点是自联结语句通常比子查询性能要高很多;
4.左外联接:左外链接是以左边的表格作为所有检索数据全部显示,右边表格只显示符合条件的,不符合的以null显示;举例:select student_info.name from student_info left join student_family on student_info.name=student_family.name; 左外联接采用on关键字和left join来达到查询;
注:什么是外连接?https://zhidao.baidu.com/question/338244729.html