连接查询(多表查询)
from 表1 [连接方式] join 表2 [on 连接条件];
交叉连接:
select * from 表1 join 表2
交叉查询查出的数据比较混乱 所以用的比较少。
内连接:
from 表1 [inner] join 表2 on 表1.字段1=表2.字段2;
用的比较多 需要调用两个或者以上的表的时候
例如-- 查询所有学生的Sname、Cno和Degree列。
SELECT sname,cno,degree FROM student JOIN score ON student.sno=score.sno;
后面可以再添加查询条件 where 或者分组group by 也可以加模糊查询 like等都可以
左[外]连接:
from 表1 left [outer] join 表2 on 连接条件。
右[外]连接:
from 表1 right [outer] join 表2 on 连接条件。
左外和右外 基本类似的 连接左边或者右边 数据 没有的补全null 用的也很少
全[外]连接
from 表1 full [outer] join 表2 on 连接条件;
全外就是 左右外链接结合
in子查询
in的基本语法形式为:
where 操作数 in (值1,值2, ....)
则in子查询就是:
where 操作数 in ( 列子查询 );
这个子查询 和内连接是实现一个功能的 只不过实现方式不一样 而且 这个只能时间一个标的数据
例如-- 查询李诚老师教的课程名称
SELECT cname FROM teacher,course WHERE course.`tno`=teacher.`tno` AND tname='李诚'; ----内连接
SELECT cname FROM course WHERE tno=(SELECT tno FROM teacher WHERE tname='李诚')----子查询
联合查询
联合查询的关键字是: union
就是把两个硬连起来 用的也不多