sql多表查寻与索引
sql多表查寻与索引
多表查询
总结:内连接就是两个表的交集 ,左外连接就是左边表加两表交集 ,右外连接就是右边表加两表交集
1.外连接
1.左连接 left join 或 left outer join
SQL语句:select * from student left join score on student.Num=score.Stu_id;
2.右连接 right join 或 right outer join
SQL语句:select * from student right join score on student.Num=score.Stu_id;
3.完全外连接 full join 或 full outer join
SQL语句:select * from student full join score on student.Num=score.Stu_id;
通过上面这三种方法就可以把不同的表连接到一起,变成一张大表,之后的查询操作就简单一些了。
2.内连接
join 或 inner join
SQL语句:select * from student inner join score on student.Num=score.Stu_id;
此时的语句就相当于:select * from student,score where student.ID=course.ID;
隐式内连接
select * from A,B where 条件
隐式连接使用别名:
select * from A 别名1,B 别名2 where 别名1.xx=别名2.xx;
显式内连接
select * from A inner join B on 条件 (inner可以省略)
显式连接使用别名:
select * from A 别名1 inner join B 别名2 on 别名1.xx=别名2.xx
索引
对数据库表中一列或多列的值进行排序的一种结构,只有当经常查询索引列中的数据时,才需要在表上创建索引。
merit:查询速度快
defect:占用磁盘空间,并且降低添加、删除和更新行的速度
常用索引类型
普通索引:没有任何限制 create index index_name on table(column(length))
唯一索引:索引列的值必须唯一,但允许为空值:不允许任何两行具有相同索引值的索引。
主键索引:主键,一个表,只能有一个逐渐,不允许为空
组合索引:指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用,组合索引遵循最左前缀集合。
MySQL数据库底层默认使用的索引数据库结构是B树中的B+树
B+Tree(B-Tree变种)
B+Tree特性:
1.非叶子节点不存储data,只存储索引(冗余),可以放更多的索引
2.叶子节点包含所有索引字段
3.叶子节点用指针连接,提高区间访问的性能
创建索引
1 | CREATE INDEX ind_user_info_name ON user_info(name); |
唯一索引
1 | CREATE UNIQUE INDEX uni_user_info_pass ON user_info(pass); |
唯一性索引的另一个作用,控制该列不能有相同值
复合性索引
1 | CREATE UNIQUE INDEX uni_user_info_pass ON user_info(name,pass); |