MySQL基础语法2
标签(空格分隔): 数据库
多表连接查询
内连接
数据表的连接查询比较常用的有内连接和外连接查询两种。我们先来介绍下内链接查询,是通过INNER JOIN … ON 关键字实现的;具体语法如下:
SELECT field1,field2,…fieldn from table_name INNER JOIN join_table ON join_condition;
这里注意的是on后面其实跟的就是外键约束中相对应的两个列名!
select * from commodity inner join commoditytype;
mysql> select * from commodity inner join commoditytype on c_type=ct_id;
mysql> #查询出所有的玩具商品
mysql> select c_name,ct_name from commodity inner join commoditytype on ct_id=c_type where ct_name='玩具';
mysql> #查询出所有不是玩具的商品
mysql> select c_name,ct_name from commodity inner join commoditytype on ct_id=c_type where ct_name!='玩具';
外连接
外连接分2种,左连接和右连接;它们用法上一样一样的,查询逻辑上互为相反;具体语法如下:
SELECT field1,field2,…fieldn from table_name LEFT|RIGHT JOIN join_table ON join_condition;
左连查询和右连查询的区别是,以执行语句中的哪个表为主表,所谓主表即以主表为准,主表中有的数据才显示,主表中没有的数据即使附表中有也不显示在结果中!
mysql> #左连接
mysql> select * from commodity left join commoditytype on c_type=ct_id;
mysql> select * from commoditytype left join commodity on c_type=ct_id;
子查询
对了连接查询确实能将两张表格同时查询输出,但有是我只是想用一张表的数据作为条件去查另一张表,我们需要用到子查询了;我们一起来看下面这条查询语句:
select * from table_a where sal > (select sal from table_b where name = ‘TomCat’);
这其实就是一条简单的子查询语句,先从b表中查询出tomcat的售价,那括号内的查询结果一定是单行单例的一个值了,那么再通过这个值去查询出售价大于这个值的所有商品;
注意:这里的返回值必须是单行单例的值!
mysql> select c_name from commodity where c_type=(select ct_id from commoditytype where ct_name='玩具');
那单行多列怎么查?再来看下面这条查询语句:select * from table_a where (sal,name) = (select sal,name from table_b where name = ‘TomCat’
);先从b表中查询出tomcat的售价,输出的结果有2个列属于单行多列,分别是售价和名字,那么再通过这两个值去查询和这两个值相等的所有商品;
注意:单行多列使用场景极少。
单列多行:
select * from table_a where sal IN (select sal from table_b;);
//查询结果在返回字段结果内的
select * from table_a where sal NOT IN (select sal from
table_b;); //查询结果不在返回字段结果内的
select * from table_a where sal >=ANY (select sal from
table_b;); //查询结果在返回字段结果内任意满足
select * from table_a where sal >=ALL (select sal from
table_b;); //查询结果在返回字段结果内全部满足
mysql> select c_name from commodity where c_type in (select ct_id from commoditytype where ct_name='玩具' or ct_name='文具');
MySQL的事务处理
特点:
1.事务就是将一组SQL语句放在同一批次内去执行
2.如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行
事务的ACID原则:
原子性
一致性
隔离性
持久性
MySQL的事务的实现
1.使用set语句来改变自动提交模式
SET AUTOCOMMIT = 0; # 关闭自动提交模式
SET AUTOCOMMIT = 1; # 开启自动提交模式
注意:
MySQL中默认是自动提交
使用事务时应先关闭自动提交
2.事务的处理方法
start transaction #开始一个事务,标记事务的起始点
commit #提交一个事务给数据库
rollback #将事务回滚,数据库回到本次事务的初始状态
set autocommit = 1;#还原数据库的自动提交