基本查询回顾下面的复合查询我们要用到基本查询用到的表员工表: emp部门表: dept薪资等级表:salagradehttps://blog.csdn.net/2601_95175861/article/details/161271536?spm1001.2014.3001.5501 在文章的最后面有创建语句可以自行复制然后跟着我走多表查询要求显示部门号为10的部门名员工名和工资首先进行多表查询时,我们就需要把两张表连起来一起看select * from emp,dept;说明在查询表的时候可以多个表连起来一起查就是一张表中拿第一条数据与第二张表所有数据中每个数据连在一起类似于穷举这里是叫做笛卡尔积,这里也可以给表查询的表取别名自己可以试试看看是不是emp中每条数据都对应连接dept中所有数据然而穷举的数据对应有些是没有意义的我们要的是员工表的每个数据的部门号对应部门表的部门号一般来说公司不会搞唯一键只会有个主键部门号就相当于唯一键约束所以部门号能确定员工在哪个部门所以我们可以用部门号相等的数据来对笛卡尔积的数据进行筛选要求显示部门号为10的部门名员工名和工资所以这个可以这样写 select ename, sal,dname from EMP, DEPT where EMP.deptnoDEPT.deptno andDEPT.deptno 10;注意 如果一个字段名不是你要查询的多表表中的唯一字段就要指名查哪个表的,比如虽然说这里的deptno两个表指名意义相同但也可以指名显示哪个表的deptno SQL语句为: 表名.deptno 这样写就是指名拿哪个表的数据虽然说在屏幕上显示的是两个表连起来了但是查询的字段并不是在一张表而是各自表中指明所以查询时需要写清楚自连接意思为一张表也能连接自己来做笛卡尔积但是需要把其中一张表弄个别名或两张表都弄别名才行显示员工FORD的上级领导的编号和姓名mgr是员工领导的编号–empno思路为自己与自己做笛卡尔积后筛选的条件为员工表FORD的mgr的数据与连接的员工表的empno也就是员工号相同就是找到了FORD的领导主要的难点就是笛卡尔积穷举出来的数据你自己要通过where 条件去筛选子查询显示SMITH同一部门的员工意思是select 语句中能嵌套select语句执行的顺序会是先执行where 条件的select语句也就是子查询这个语句是查询smith在哪个部门并且注意你提供的列数与子查询显示的列数需要相匹配比如如果这里改一下写成deptno(select deptno,ename from emp where ename‘smith’),就会报错因为你这只提供一列做相等运算符而等号右边有两个值 deptno和ename多行子查询in关键字查询和10号部门的工作岗位相同的雇员的名字岗位工资部门号但是不包含10自己首先10号部门的岗位有这些in语句就是里面的数据组成一个集合比如这里是十号部门的job中每个数据组成一个集合where 条件中的 job只要存在在这个集合当中就成立条件中的job属于被包含关系它只要属于这个集合的数据就是成立的all关键字显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号all关键字就是 where 条件中 该字段比这个集合当中所有人的工资都高就成立这里的子查询的sal就是30号部门所有人的工资。any关键字显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号包含自己部门的员工这里就是wehre 语句中 只要工资比30号部门的工资集合中任意一个人的工资高就条件成立多列子查询查询和SMITH的部门和岗位完全相同的所有雇员不含SMITH本人子查询中显示了两列所以接受也要是两列这就是多列子查询总结 这里的多表连接中所有的查询后显示出来的数据也能看作表也能与其他表做笛卡尔积但一定要给它取个别名多列子查询和多行子查询也就是把一个select语句作为另一个select的where条件而已自己先可以把一个个select查询的结果先自己显示出来根据情况再进行于where条件结合
MySQL——复合查询
基本查询回顾下面的复合查询我们要用到基本查询用到的表员工表: emp部门表: dept薪资等级表:salagradehttps://blog.csdn.net/2601_95175861/article/details/161271536?spm1001.2014.3001.5501 在文章的最后面有创建语句可以自行复制然后跟着我走多表查询要求显示部门号为10的部门名员工名和工资首先进行多表查询时,我们就需要把两张表连起来一起看select * from emp,dept;说明在查询表的时候可以多个表连起来一起查就是一张表中拿第一条数据与第二张表所有数据中每个数据连在一起类似于穷举这里是叫做笛卡尔积,这里也可以给表查询的表取别名自己可以试试看看是不是emp中每条数据都对应连接dept中所有数据然而穷举的数据对应有些是没有意义的我们要的是员工表的每个数据的部门号对应部门表的部门号一般来说公司不会搞唯一键只会有个主键部门号就相当于唯一键约束所以部门号能确定员工在哪个部门所以我们可以用部门号相等的数据来对笛卡尔积的数据进行筛选要求显示部门号为10的部门名员工名和工资所以这个可以这样写 select ename, sal,dname from EMP, DEPT where EMP.deptnoDEPT.deptno andDEPT.deptno 10;注意 如果一个字段名不是你要查询的多表表中的唯一字段就要指名查哪个表的,比如虽然说这里的deptno两个表指名意义相同但也可以指名显示哪个表的deptno SQL语句为: 表名.deptno 这样写就是指名拿哪个表的数据虽然说在屏幕上显示的是两个表连起来了但是查询的字段并不是在一张表而是各自表中指明所以查询时需要写清楚自连接意思为一张表也能连接自己来做笛卡尔积但是需要把其中一张表弄个别名或两张表都弄别名才行显示员工FORD的上级领导的编号和姓名mgr是员工领导的编号–empno思路为自己与自己做笛卡尔积后筛选的条件为员工表FORD的mgr的数据与连接的员工表的empno也就是员工号相同就是找到了FORD的领导主要的难点就是笛卡尔积穷举出来的数据你自己要通过where 条件去筛选子查询显示SMITH同一部门的员工意思是select 语句中能嵌套select语句执行的顺序会是先执行where 条件的select语句也就是子查询这个语句是查询smith在哪个部门并且注意你提供的列数与子查询显示的列数需要相匹配比如如果这里改一下写成deptno(select deptno,ename from emp where ename‘smith’),就会报错因为你这只提供一列做相等运算符而等号右边有两个值 deptno和ename多行子查询in关键字查询和10号部门的工作岗位相同的雇员的名字岗位工资部门号但是不包含10自己首先10号部门的岗位有这些in语句就是里面的数据组成一个集合比如这里是十号部门的job中每个数据组成一个集合where 条件中的 job只要存在在这个集合当中就成立条件中的job属于被包含关系它只要属于这个集合的数据就是成立的all关键字显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号all关键字就是 where 条件中 该字段比这个集合当中所有人的工资都高就成立这里的子查询的sal就是30号部门所有人的工资。any关键字显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号包含自己部门的员工这里就是wehre 语句中 只要工资比30号部门的工资集合中任意一个人的工资高就条件成立多列子查询查询和SMITH的部门和岗位完全相同的所有雇员不含SMITH本人子查询中显示了两列所以接受也要是两列这就是多列子查询总结 这里的多表连接中所有的查询后显示出来的数据也能看作表也能与其他表做笛卡尔积但一定要给它取个别名多列子查询和多行子查询也就是把一个select语句作为另一个select的where条件而已自己先可以把一个个select查询的结果先自己显示出来根据情况再进行于where条件结合