excel做网站链接,自己制作app的应用程序,品牌网站官网,上海房产网安居客文章目录 多表查询内连接隐式内连接显示内连接 外连接左外连接右外连接 子查询 事务事务隔离级别 多表查询
有时我们不仅需要一个表的数据#xff0c;数据可能关联到俩个表或者三个表#xff0c;这时我们就要进行夺标查询了。
数据准备#xff1a;
创建一个部门表并且插入… 文章目录 多表查询内连接隐式内连接显示内连接 外连接左外连接右外连接 子查询 事务事务隔离级别 多表查询
有时我们不仅需要一个表的数据数据可能关联到俩个表或者三个表这时我们就要进行夺标查询了。
数据准备
创建一个部门表并且插入数据
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), -- 性别salary double, -- 工资join_date date, -- 入职日期dept_id int,foreign key (dept_id) references dept(id) -- 外键关联部门表(部门表的主键)
)查看数据信息。
select * from emp;
select * from dept;查询员工以及其部门的全部信息
select * from emp,dept where emp.dept_id dept.id;这里我们可以看到我们查询出emp表以及dept表俩个表中的数据了但是其中存在冗余数据因此我们要查询出我们所需要的具体数据来提高我们的查询数据。
查询员工的姓名及其部门名称
select emp.name 员工姓名,dept.name 部门名称 from emp,dept where emp.dept_id dept.id;通过起别名的方式来使sql代码简单
select e.name 员工姓名,d.name 部门名称 from emp e , dept d where e.dept_id d.id;内连接
用左边表的记录去匹配右边表的记录
隐式内连接
看不到 JOIN 关键字条件使用 WHERE 指定 语法
SELECT 字段名 FROM 左表, 右表 WHERE 条件示例
select e.name 员工姓名,d.name 部门名称 from emp e , dept d where e.dept_id d.id;显示内连接
使用 INNER JOIN ... ON 语句, 可以省略 INNER 语法
SELECT 字段名 FROM 左表 [INNER] JOIN 右表 ON 条件示例
查询员工的全部信息
select * from emp inner join dept on emp.dept_id dept.id;查询员工姓名为猪八戒的全部信息只要员工姓名和部门名称信息
select e.name as 员工名称,d.name as 部门名称 from emp e inner join dept d on e.dept_id d.id and e.name 猪八戒外连接
左外连接
用左边表的记录去匹配右边表的记录如果符合条件的则显示否则显示 NULL 语法 SELECT 字段名 FROM 左表 LEFT [OUTER] JOIN 右表 ON 条件数据准备 在部门表中增加一个销售部
insert into dept (name) values (销售部);使用左外连接查询保证左表的数据全部显示
select * from dept left outer join emp on dept.id emp.dept_id;这里我们可以看到部门表的信息全部显示了但是右表中没有匹配的数据则全部为null。
右外连接
用右边表的记录去匹配左边表的记录如果符合条件的则显示否则显示 NULL 语法
SELECT 字段名 FROM 左表 RIGHT [OUTER ]JOIN 右表 ON 条件数据准备
insert into emp values (null, 沙僧,男,6666,2013-12-05,null); 使用右外连接查询在内连接的基础上保证右表的数据全部显示
select * from dept right outer join emp on dept.id emp.dept_id;子查询
一个查询的结果做为另一个查询的条件有查询的嵌套内部的查询称为子查询子查询要使用括号
子查询结果
单行单列子查询结果只要是单行单列肯定在 WHERE 后面作为条件多行单列: 结果集类似于一个数组父查询使用 IN 运算符多行多列: 子查询结果只要是多列肯定在 FROM 后面作为表
示例 **单行单列**查询最低工资的员工信息
select * from emp where salary (select min(salary) from emp)**多行单列**查询员工工资低于6000的部门名称
select name from dept where id in (select id from emp where salary 6000)**多行多列**查询出 2011 年以后入职的员工信息包括部门名称
select * from dept d, (select * from emp where join_date 2011-1-1) e where d.id e.dept_id ;事务
要么成功都成功要么失败都失败
功能SQL 语句开启事务start transaction;提交事务commit;回滚事务rollback;
数据准备
CREATE TABLE account (id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(10),balance DOUBLE
);INSERT INTO account (NAME, balance) VALUES (张三, 1000), (李四, 1000);手动事务提交 过程图解 示例成功
start transaction;-- 张三账号-500
update account set balance balance - 500 where name张三;
-- 李四账号500
update account set balance balance 500 where name李四;commit;当我们开启事务之后对张三和李四账户进行金额修改的时候我们可以 看到金额都为1000并没有发生改变但是当我们进行提交的时候账户的金额发生了改变。
示例失败 恢复数据张三和李四分别拥有1000元
-- 张三账号-500
update account set balance balance - 500 where name张三;
-- 李四账号500
update account set balance balance 500 where name李四;rollback;当我们开启事务之后对张三和李四账户进行金额修改我们可以看到金额都为1000并没有发生改变我们使用事务的回滚账户金额依然没有变。
自动提交事务 MySQL 默认每一条 DML(增删改)语句都是一个单独的事务每条语句都会自动开启一个事务语句执行完毕自动提交事务
事务原理图解 事务在开启之后所有操作都会被保存到日志文件当中事务日志只有在得到commit命令才会同步到数据表中其他任何情况都会清空事务日志(rollback断开连接)
事务隔离级别
事务特性含义原子性Atomicity每个事务都是一个整体不可再拆分事务中所有的 SQL 语句要么都执行成功要么都失败。一致性Consistency事务在执行前数据库的状态与执行后数据库的状态保持一致。隔离性Isolation事务与事务之间不应该相互影响执行时保持隔离的状态。持久性Durability一旦事务执行成功对数据库的修改是持久的。就算关机也是保存下来的。
MySQL 数据库有四种隔离级别
级别名字隔离级别脏读不可重复读幻读数据库默认隔离级别1读未提交read uncommitted是是是2读已提交read committed否是是Oracle 和 SQL Server3可重复读repeatable read否否是MySQL4串行化serializable否否否
欢迎java热爱者了解文章作者将会持续更新中期待各位友友的关注和收藏。。。