多表联合查询:
1.带in的子查询
2.内连接查询
3.外连接查询:左连接查询和右连接查询
创建数据库supermarket,在其中创建 uesr、product、user_order 3个表,简单模拟商场的用户、商品、订单。
用户: id name age sex vip
商品: productid name price mount
订单总信息:orderid data address state userid
查找订单里的用户的信息
select * from user where in (select distinct userid from user_order);
select * from user where not in (select distinct userid from user_order);
distinct的作用是去重,同一用户会有多个订单信息。
多表查询不建议用in查询,因为:
子查询在完成后,会产生一张临时表,存储后,再供外部查询进行查询,等到整个sql语句结束后,再进行释放。
select * from user a,user_order b where a.id=b.userid and b.state=‘已付款’;
或者:连接查询(比如查询,a、b的重复内容,c=a∩b)
select a.* from user a inner join user_order b on a.id=b.userid where b.state=‘已付款’;
左连接(比如查询a、b中,a除了重复的内容,c = a-a∩b)
select a.* from user a left join user_order b on a.id=b.userid where b.userid is NULL;
右连接(c = b - a∩b)
select a.* from user a right join user_order b on a.id=b.userid where b.userid is not NULL;
索引:把添加索引的字段全部放在一颗B+树上,再次查找的时候,可以快速查找,其中有单列索引和多列索引(联合索引)。
单列索引:索引排序的时候,只用一个字段的值进行排序。
多列索引:索引排序时,用多个字段的值进行排序,先用第一个字段值进行排序,第一个字段相同,再用第二个字段进行排序,一次类推,顺序不能乱!
表中unique唯一键字段都是自动添加索引项的,分别被称为主键索引和唯一键索引。
创建索引:
create index name_index on user(name);
删除:
drop index name_index on user;
explain:是分析SQL语句的执行计划的
学会用explain查看SQL的执行计划,观察索引的使用情况。。。
设置一个合理的慢查询时间,可以有效的查看SQL执行的效率。
MySQL的日志有4种:
1:二进制日志 insert delete updata select
2: 查询日志 主要存储所有的select语句
3:错误日志 主要记录MySQL Server运行、启动、关闭、重启阶段的一些异常
4:慢查询日志 会把MySQL Server 运行中,所有运行时间超过指定long_query_time时间的select查询语句记录下来