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);