多表查询的分类
SELECT * FROM EMP,DEPT;
笛卡尔积:A中有6条数据,B中有4条数据,AB组合后,有6x4=24条数据
但是这24条数据里有很多是无效数据
因此多表查询为了消除无效数据
1. 连接查询
内连接
查询两个表交集的数据
SELECT * FROM EMP,DEPT where dep_id=did;
隐式内连接
1.查询 emp的 name, gender,dept表的dname
SELECT
emp. NAME,
emp.gender,
dept.dname
FROM
emp,
dept
WHERE
emp.dep_id = dept.did;
给表取别名
SELECT
t1. NAME,
t1.gender,
t2.dname
FROM
emp t1, -- 给表取别名
dept t2
WHERE
t1.dep_id = t2.did;
显式内连接
select * from emp INNER JOIN dept on emp.dep_id=dept.did; #INNER可以省略
select * from emp join dept on emp.dep_id=dept.did;
外连接
左外连接:相当于查询A表所有数据和交集部分数据
select * from emp left join dept on emp.dep_id = dept.did; #以emp表为准
select * from dept left join emp on emp.dep_id = dept.did; #以dept表为准
2.子查询
查询中嵌套查询,称嵌套查询为子查询。
单行单列
1.查询工资高于猪八戒的员工信息。
select salary from emp where name='猪八戒';
select * from emp where salary > 3600;
#两句和为一句
select salary from emp where salary>(select salary from emp where name='猪八戒');
多行单列
2.查询 ‘财务部’ 和 ‘市场部’ 所有的员工信息
select did from dept where dname ='财务部' or dname='市场部';
select * from emp where dep_id in (select did from dept where dname ='财务部' or dname='市场部');
多行多列
3.查询入职日期是 ‘2011-11-11’ 之后的员工信息和部门信息
-- 查询入职日期是 '2011-11-11' 之后的员工信息
select * from emp where join_date > '2011-11-11' ;
-- 将上面语句的结果作为虚拟表和dept表进行内连接查询
select * from (select * from emp where join_date > '2011-11-11' ) t1, dept where t1.dep_id = dept.did;
创建被查询的表
DROP TABLE
IF EXISTS emp;
DROP TABLE
IF EXISTS dept;
# 创建部门表
CREATE TABLE dept (
did INT PRIMARY KEY AUTO_INCREMENT,
dname VARCHAR (20)
);
# 创建员工表
CREATE TABLE emp (
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR (10),
gender CHAR (1),
-- 性别
salary DOUBLE,
-- 工资
join_date DATE,
-- 入职日期
dep_id INT,
FOREIGN KEY (dep_id) REFERENCES dept (did) -- 外键,关联部门表(部门表的主键)
);
-- 添加部门数据
INSERT INTO dept (dNAME)
VALUES
('研发部'),
('市场部'),
('财务部'),
('销售部');
-- 添加员工数据
INSERT INTO emp (
NAME,
gender,
salary,
join_date,
dep_id
)
VALUES
(
'孙悟空',
'男',
7200,
'2013-02-24',
1
),
(
'猪八戒',
'男',
3600,
'2010-12-02',
2
),
(
'唐僧',
'男',
9000,
'2008-08-08',
2
),
(
'白骨精',
'女',
5000,
'2015-10-07',
3
),
(
'蜘蛛精',
'女',
4500,
'2011-03-14',
1
),
(
'小白龙',
'男',
2500,
'2011-02-14',
NULL
);
MYSQL–事务
9/100
保存草稿
发布文章
weixin_48085301
未选择文件
1.事务简介
2.语法
(1)开启事务
事物中对表中数据的改变是暂时的
START TRANSACTION;
或者
BEGIN;
(2)提交事务
提交事务之后,对表中事务的改变是永久的
commit;
(3)回滚事务
回滚事务会回滚到开启事务之前,事务提交后无法回滚的
rollback;
只有提交或者回滚后的数据会写入硬盘
事务的四个特性(ACID)
事务
1.事务简介
2.语法
(1)开启事务
事物中对表中数据的改变是暂时的
START TRANSACTION;
或者
BEGIN;
(2)提交事务
提交事务之后,对表中事务的改变是永久的
commit;
(3)回滚事务
回滚事务会回滚到开启事务之前,事务提交后无法回滚的
rollback;
只有提交或者回滚后的数据会写入硬盘
3.事务的四个特性(ACID)