多表查询,用户权限DCL,数据库的备份与还原
一.多表查询
同时查询多张表获取到需要的数据组成完整的信息返回给用户。
多表查询分类:
数据准备:
-- 多表查询
create database crmpro;
use crmpro;
-- 创建部门表(主表)
CREATE TABLE dept (
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20)
);
INSERT INTO dept (NAME) VALUES ('开发部'),('市场部'),('财务部'),('销售部');
-- 创建员工表(从表)
CREATE TABLE emp (
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(10),
gender CHAR(1), -- 性别(sex)
salary DOUBLE, -- 工资
join_date DATE, -- 入职日期
dept_id INT -- 外键字段
);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('孙空','男',7200,'2013-02-24',1);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('猪戒','男',3600,'2010-12-02',2);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('唐僧','男',9000,'2008-08-08',2);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('白精','女',5000,'2015-10-07',3);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('蜘精','女',4500,'2011-03-14',1);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('沙僧','男',6666,'2017-03-04',null);
此时该表是一对多的关系
(1)笛卡尔积
多表查询时左表的每条数据和右表的每条数据组合,这种效果称为笛卡尔积 (交叉连接)
语法:
select ... from 左表,右表;
笛卡尔积:
-- 查询二张表
SELECT * FROM emp,dept;
SELECT COUNT(*) FROM emp,dept;
(2)内连接
* 功能
拿左表的记录去匹配由标的记录,若符合条件显示(二张表的交集)
* 语法
1)隐式内连接:看不到join关键字,条件使用where指定
select ... from 左表,右表 where 连接条件;
2)显示内连接【推荐】:使用Inner jion。。。on语句,可以省略inner。
select ... from 左表 [inner] join 右表 on 连接条件;
-- 内连接
-- 隐式内连接
SELECT * FROM emp e,dept d WHERE e.dept_id = d.id;
-- 显示内连接
SELECT * FROM emp e INNER JOIN dept d ON e.dept_id = d.id;
-- 查询唐僧的 id,姓名,性别,工资和所在部门名称
-- 1.确定查询表
SELECT * FROM emp e INNER JOIN dept d;
-- 2.确定连接条件
SELECT * FROM emp e INNER JOIN dept d ON e.dept_id = d.id;
-- 3.确定显示字段
SELECT e.id,e.name,e.gender,e.salary,d.name FROM emp e INNER JOIN dept d ON e.dept_id = d.id;
-- 4.确定业务条件
SELECT e.id,e.name,e.gender,e.salary,d.name FROM emp e INNER JOIN dept d ON e.dept_id = d.id WHERE e.name = '唐僧';
<