子查询
子查询:一个select语句中包含另一个select语句(SELECT查询嵌套语句)
#1.工资高于JONES的员工
#第一步:我们需要知道jones员工的工资是多少
SELECT sal FROM emp WHERE ename='JONES'
#第二步:查询工资高于jones的员工---->查询工资高于2975的员工信息
SELECT * FROM emp WHERE sal>2975
#将2975替换成查询语句
SELECT * FROM emp WHERE sal>(SELECT sal FROM emp WHERE ename='JONES')
#查询与SCOTT同一个部门的员工
#第一步:我们需要知道Scott这个员工是哪个部门的
SELECT deptno FROM emp WHERE ename = 'SCOTT';
#第二步:查询与scott同一个部门的员工
SELECT * FROM emp WHERE deptno = 20;
SELECT * FROM emp WHERE deptno = (SELECT deptno FROM emp WHERE ename = 'SCOTT');
#工资高于30号部门的所有人的员工信息
#第一步我们需要知道30号部门工资的最大值
SELECT MAX(sal) FROM emp WHERE deptno =30;#2850
#第二步:工资高于2850的员工信息
SELECT * FROM emp WHERE sal>2850;
SELECT * FROM emp WHERE sal>(SELECT MAX(sal) FROM emp WHERE deptno =30);
#第二种写法
SELECT sal FROM emp WHERE deptno = 30;
SELECT * from emp WHERE sal>ALL(SELECT sal FROM emp WHERE deptno = 30);
#查询工作和工资与MARTIN完全相同的人
#第一步:查询MARTIN的工作和工资
SELECT job,sal FROM emp WHERE ename = 'MARTIN';
#第二步查询工作为SALESMAN工资为1250的员工信息
SELECT * FROM emp WHERE job='SALESMAN' AND sal = 1250
SELECT * FROM emp WHERE job=(SELECT job FROM emp WHERE ename = 'MARTIN') AND sal=(SELECT sal FROM emp WHERE ename = 'MARTIN');
#上面的写法可以实现需求,但是比较复杂,可以换一个简单一点的方法
SELECT * FROM emp WHERE (job,sal) in (SELECT job,sal FROM emp WHERE ename='MARTIN')
#查询有两个以上直接下述的员工信息
#第一步:查询mgr字段,显示mgr字段出现共两次以上的
SELECT mgr FROM emp GROUP BY mgr HAVING COUNT(mgr)>=2
#第二步:右两个直接下属的员工信息----查询员工编号为
SELECT * from where empno =7566 or empno=7968 or empno=7839 or empno=7788
SELECT * from emp WHERE empno in (7566,7968,7839,7788)
#合并上述语句来写
SELECT * from emp WHERE empno in (SELECT mgr FROM emp GROUP BY mgr HAVING COUNT(mgr)>=2);
SELECT sal FROM(
SELECT empno,ename,sal FROM emp)
WHERE sal>2500
子查询总结:
原来进行查询的时候,过滤条件是直接给出明确的数据
现在进行子查询,过滤条件不再是直接给出,而是间接的给出
所有,你需要在查询之前将这个间接条件获取到
MySQL数据库的备份与恢复
生成SQL脚本 导出数据
在控制台使用mysqldump命令可以用来生成指定数据库的脚本文本,但要注意,脚本文本中只包含数据库的内容,而不会存在创建数据库的语句!所以在恢复数据时,还需要自已手动创建一个数据库之后再去恢复数据。
mysqldump –u用户名 –p密码 数据库名>生成的脚本文件路径 |
执行SQL脚本 恢复数据
前提:必须先创建数据库名
执行SQL脚本需要登录mysql,然后进入指定数据库,才可以执行SQL脚本!!!
执行SQL脚本不只是用来恢复数据库,也可以在平时编写SQL脚本,然后使用执行SQL 脚本来操作数据库!大家都知道,在黑屏下编写SQL语句时,就算发现了错误,可能也不能修改了。所以我建议大家使用脚本文件来编写SQL代码,然后执行之!
SOURCE C:\mydb1.sql |
注意,在执行脚本时需要先行核查当前数据库中的表是否与脚本文件中的语句有冲突!例如在脚本文件中存在create table a的语句,而当前数据库中已经存在了a表,那么就会出错!
还可以通过下面的方式来执行脚本文件:
mysql -uroot -p123 mydb1<c:\mydb1.sql
mysql –u用户名 –p密码 数据库<要执行脚本文件路径 |
这种方式无需登录mysql!
注意:在CMD下 命令不能加;