Mysql多表查询
1.备份数据:(生成SQL脚本)
进入cmd到c盘根目录
执行语句:
语法:mysql 用户名 密码 数据库 > 脚本路径与名称
mysqldump -uroot -proot mydb > c:\mydb1.sql
2.恢复数据:
1.我们于进入cmd,连接数据库
mysql -uroot -proot
2.执行脚本:
语法: source 生成和脚本的路径
use 数据库名;
source c:\mydb1.sql
3.在dos命令下直接导入:
语法: mysql 用户名 密码 数据库 < 脚本路径与名称
mysql -uroot proot mydb<c:\mydb1.sql
多表查询:
多表查询有如下几种:
合并结果集;
连接查询
内连接
外连接
左外连接
右外连接
全外连接(MySQL不支持)
自然连接
子查询
-----合并结果集:
---作用:合并结果集就是把两个select语句的查询结果合并到一起
----要求:被合并的两个结果:列数、列类型必须相同。
-----创建表
create table t1(
id int,
name char(4)
);
insert into t1 values(1,'a');
insert into t1 values(2,'b');
insert into t1 values(3,'c');
insert into t1 values(4,'d');
insert into t1 values(5,'e');
select * from t1;
create table t2(
id int,
name char(4)
);
insert into t2 values(4,'d');
insert into t2 values(5,'e');
insert into t2 values(6,'f');
insert into t2 values(7,'g');
insert into t2 values(8,'h');
select * from t1;
select * from t2;
-----union 合并结果后把相同的数据去除
select * from t1 union select * from t2;
------union all 合并结果后所有数据出现
select * from t1 union all select * from t2;
-----------连接查询:
select * from t1,t2;
-----
------使用主外键关系做为条件来去除无用信息
select * from emp,dept where emp.deptno=dept.deptno;
----查询其中列信息
select emp.ename,emp.sal,dept.deptno from emp,dept where emp.deptno=dept.deptno;
----- 使用别名:
select a.ename,a.sal,b.deptno from emp as a,dept as b where a.deptno=b.deptno;
-----标准Sql 语句内连接
select * from emp as e inner join dept as d on e.deptno=d.deptno;
外连接
----外连接的特点:查询出的结果存在不满足条件的可能。
-----左链接
--创建产品表
create table 产品
(
产品编号 int not null,
产品名称 varchar(20) not null
);
------创建产品销量表
create table 产品销量(
产品编号 int not null,
销量 int
);
---左连接-
select * from 产品 left outer join 产品销量 on 产品.产品编号=产品销量.产品编号
-----右连接
select * from 产品 right outer join 产品销量 on 产品.产品编号=产品销量.产品编号;
子查询
select * from emp;
-----查询工资比scott高的
1.查询scott的月薪
select sal from emp where ename='SCOTT';
2.查处高于scott的月薪
select * from emp where sal >3000;
3.合并语句:
select * from emp where sal >(select sal from emp where ename='SCOTT');
-----工资高于30部门所有人的信息
1.查出30部门所有人工资:
select sal from emp where deptno=30;
2.查询高于30部门所有人工资的员工信息
select * from emp where sal>all (select sal from emp where deptno=30);
----查询工资与scott完全相同的信息
1.查询SCOTT的月薪
select sal from emp where ename='SCOTT';
2.查询工资与scott完全相同的信息
select * from emp where sal in (select sal from emp where ename='SCOTT');