MySQL基础语法2

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;#还原数据库的自动提交
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值