数据库的备份和还原
1.命令行:
*语法: mysqldump -u用户名 -p密码 数据库名称> 保存路径
*还原:
1.登录数据库
2.创建数据库
3.使用数据库
4.执行文件。Source 文件路径
2.图形化工具
##多表查询
*查询语法:
Select
列名列表
From
表名列表
Where...
*笛卡尔积:
*有两个集合a,b,取这两个集合的所有组成情况。
*要完成多表查询,需要消除无用的数据。
*多表查询分类:
1.内连接查询:
1.1隐式内连接:使用where条件
举例:
-- 查询所有员工信息和对应的部门信息
select * from dept,emp where dept.id = emp.dept_id;
-- 查询员工表的名称、性别、部门表名称
select emp.NAME,gender,dept.name from dept,emp where dept.id = emp.dept_id;
select emp.NAME,gender,dept.name from dept,emp where dept.id = emp.dept_id;
--最好用这种格式
SELECT
t1.name, -- 员工表的姓名
t1.gender, -- 员工表的性别
t2.name -- 部门表的名称
FROM
emp t1, -- 员工表
dept t2 -- 部门表
where
t1.dept_id=t2.id;
1.2显式内连接
语法:select 字段列表 from表名1 inner join 表名2 on 加入条件
举例: select * from dept INNER JOIN emp ON dept.id=emp.dept_id;
-- inner 可以省略
select * from dept JOIN emp ON dept.id=emp.dept_id;
1.3内连接查询注意:
1.从哪些表中查询数据
2.条件是什么
3.查询哪些字段
2.外连接查询:
2.1左外连接:
*语法:select 字段列表 from 表1 left (outer )join 表2 on 条件
*查询的是左表所有数据以及其交集部分
2.2右外连接
*语法:select 字段列表 from 表1 right(outer )join 表2 on 条件
*查询的是右表所有数据以及其交集部分
3.子查询:
*概念:查询中嵌套查询,称嵌套查询为字查询
例子:-- 查询工资最高的员工信息
-- 1.查询最高工资是多少
SELECT MAX(salary) from emp ;
-- 2.查询员工信息,并工资等于最高工资的
SELECT * from emp where salary = 28000;
-- 用一条sql语句查出来,子查询
SELECT * from emp where emp.salary = (sELECT MAX(salary) from emp);
*子查询不同情况
1.子查询的结果是单行单列的:
*子查询可以作为条件,使用运算符去判断。 运算符 >, >=, <, <=,=
*例子:-- 查询员工工资小于平均工资的人
select * from emp where emp.salary <(SELECT AVG(salary) from emp);
2.子查询的结果是多行单列的:
* 子查询可以作为条件,使用运算符in判断
*例子-- 查询 '财务部'和'市场部' 所有的员工信息
SELECT id from dept WHERE `name`in('财务部' ,'市场部');
SELECT * from emp where emp.dept_id in(2,3);
SELECT * from emp where emp.dept_id in (SELECT id from dept WHERE `name`in('财务部' ,'市场部'));
3.子查询的结果是多行多列的:
*查询员工的入职日期是2019-03-02以后的员工信息和部门信息
例子:-- 查询员工的入职日期是2019-03-02以后的员工信息和部门信息
-- 子查询
SELECT * from dept t1,
(SELECT * from emp WHERE emp.join_date > '2019-03-02') t2
WHERE t1.id = t2.dept_id;
---- 普通内连接
SELECT * from emp t1,dept t2
WHERE t1.dept_id=t2.id AND t1.join_date > '2019-02-02';