mysql(DOS)命令3

@【多表查询】
#########################################################################################################
<多表查询的规律>
1. 不管我们查询几张表,表连接查询会产出笛卡尔积,我们需要消除笛卡尔积,拿到正确的数据。我们需要找 到表与表之间通过哪个字段关联起来的 (通常是 外键=主键 )

2. 消除笛卡尔积规律:2张表需要1个条件,3张表需要2个条件,4张表需要3个条件。(条件数量=表的数 量-1),每张表都要参与进来

 3. 多表连接查询步骤: 
	1. 确定要查询哪些表 
		2. 确定表连接条件 
			3. 确定查询字段 

#########################################################################################################
<内连接>–查出两张表中等值的记录,不等值得记录不显示

a).隐式内连接:看不到 JOIN 关键字,条件使用 WHERE 指定 --SELECT  字段名  FROM  左表, 右表  WHERE  条件; (官方)

     格式:select 字段 from 表名1,表名2 where 主表.主键=从表.从键;(个人)

b).显示内连接:显示内连接:使用 INNER  JOIN  ...   ON 语句, 可以省略 INNER --SELECT  字段名  FROM  左表 INNER  JOIN  右表  ON  条 件;(													             官方)
     格式:select 字段 from 表名1 join 表2 on 主表.主键=从表.从键; (个人)

<左外连接>–结果:查出左表的所有记录,右表的等值记录

[官方]:使用 LEFT?OUTER?JOIN?...?ON , OUTER 可以省略 SELECT?字段名?FROM?左表?LEFT?OUTER?JOIN?右表?ON 条件; 用左边表的记录		去匹配右边表的记录,如果符合条件的则显示;否则,显示NULL 可以理解为:在内连接的 基础上保证左表的数据全部显示

[个人]:格式:select 字段 from 表1 left Join 表2 on 主表.主键=从表.主键;

<右外连接>–结果:查出右表的所有记录,左表的等值记录

[官方]:右外连接:使用 RIGHT?OUTER?JOIN?...?ON , OUTER 可以省略 SELECT?字段名?FROM?左表?RIGHT?OUTER?JOIN?右表 ON?条件; 		用右边表的记录去匹配左边表的记录,如果符合条件的则显示;否则,显示NULL 可以理解为:在内连 接的基础上保证右表的数据全部显示

[个人]:格式:select  字段 from 表1 right join 表2 on 主表.主键=从表.主键;

<子查询>–: 子查询结果只要是 单列 ,肯定在 WHERE 后面作为 条件> >SELECT?查询字段?FROM?表?WHERE?字段=(子查询);
子查询结果只要是 多列 ,肯定在 FROM 后面作为 表 >>>>SELECT?查询字段?FROM?(子查询)?表别名?WHERE?条件;

		##||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~||##
		##||注意:字查询需要放在( )中:字查询结果的3种情况	||##
		##||         a).字查询的结果是一个值的时候		||##
		##||      b).字查询的结果是单列多行的时候		||##
		##||   c).字查询的结果是多列多行的时候	     	||##
		##||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~||##子查询:写在另一个查询内部的查询叫:子查询。
<值>
举例:#查询最高工资员工的全部信息
                      >SELECT * FROM employee e WHERE salary=(SELECT MAX(salary) FROM employee);

       #最高工资是谁
        >SELECT NAME, MAX(salary) FROM employee;

<单列多行> 用in替换= 
举例:# 查询工资大于5000的员工,来自于哪些部门的名字 
        >SELECT d.name FROM depertment d WHERE d.id IN(SELECT dept_id FROM employee WHERE salary >5000); 

查询开发部与财务部所有的员工信息 
         >select * from employee e where dept_id in(select id from depertment d where d.name in('开发部','财务部'))

<多列多行>
举例:#查询出2011年以后入职的员工信息,包括部门名称 
        >SELECT * FROM (SELECT * FROM employee WHERE join_date >'2010-12-31') e,depertment d WHERE e.id=d.`id`;

#########################################################################################################
@【事务】

查询提交方式:show variables like ‘autocommit’;
关闭自动提交:set autocommit=off;
:提交:commit;
:回滚:rollback

4种隔离级别:
1).read uncommitted:读未提交   		
2).read committed:读已提交[oracle默认]
3).repeatable read:可重复读[MySQL默认]			
4:)serializable:序列化(排队)
开启临时事务:start transaction;--结束后续跟commit或者rollback;
**事务的4大特性**:

	1.	原子性(Atomicity)
	事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

	2.	一致性(Consistency)
	事务前后数据的完整性必须保持一致

	3.	隔离性(Isolation)【通过隔离级别】
	是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离,不能相互影响。

	4.	持久性(Durability)
	指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

效率:
	a > b > c > d
安全性:
	d > c > b > a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值