Mysql的连接、子查询

Mysql的连接、子查询

前几天我们介绍Django的数据操作,写完那篇文章之后我就开始想到我之前学的mysql操作了,感觉熟悉又陌生。是时候找个机会把它复习巩固一下了,不然就会忘了之前的所学内容了。但由于Mysql的内容有些多,今天就复习一下数据库的连接、子查询、索引吧。

1.连接

我在这里给大家举个例子:

我这里有两个表,一个是学生表,一个是班级表,要想使这两个表联合起来,就需要进行连接查询。

表结构如下:

class表;

student表;

内连接  inner  join   on

要想把两个表合并倒一块,就需要进行如下操作。

SELECT * FROM student INNER JOIN class ON student.id =student_id;

  结果输出:

左连接:left  join   on

连接的两张表中以左侧的表为准,右侧的表匹配左侧的表,如果有左侧数据没有对应右表,则显示null.在这里的意思是,如果有学生还没加入班,那右侧班级数据显示Null.

右连接:

和左连接意思相近,我这里就不作赘述了。

全连接:

我在这里只举了左连接的例子,大家可以根据我的表去实践一下。或者自己创建表实际一下,我在这里就不作赘述了。

2.子查询  

 in  将一个查询语句嵌套到另一个查询语句中

在子查询中需要注意的是,嵌套的语句一般根据外键查询符合某种条件的id,外语句通过id查询需要的结果。要查询的字段一般都写在外语句。

这里我们查询:班主任是杨丽萍的学生的名字

1.先查询杨丽萍学生的id

SELECT student_id FROM class WHERE boss='杨丽萍'

2.再根据学生id去查询相应的名字。

 SELECT `name` FROM  student WHERE id

3.将两个条件用in 进行结合

SELECT `name` FROM student WHERE id IN (SELECT student_id FROM class WHERE boss='杨丽萍')

  结果输出:

3.索引

  1. 概念

索引在MySQL中是一种,是存储引擎用于快速找到记录的一种数据结构。索引对于良好的检索性能,非常关键,尤其是当表中的数据量越大,索引对于性能的提升越显得重要。

索引优化是对查询性能优化最有效的手段。索引能够轻易将查询性能提高好几个数量级。索引相当于书的目录,要查某一部分的内容,如果不使用目录,则需要从几百页中逐页去查,这个开销是巨大的。

     2.索引方法

mysql的索引方法有两种,一种是BTREE,一种是HASH. B树索引是主流使用,一般都选择这个。hash索引有很多的约束,比如Hash 索引仅仅能满足”=,IN”和”<=>”查询,不能使用范围查询,还有Hash 索引不能利用部分索引键查询。

     3.索引类型

Normal 普通索引:这个是最基本的索引,大多数情况可以用这个。

创建方式: CREATE INDEX 索引名ON `表名`(`字段`);

Unique 唯一索引: 唯一索引,与普通索引类似,但是不同的是唯一索引要求所有的类的值是唯一的,这一点和主键索引一样.但是他允许有空值。例如身份证号、学号等

创建方式:CREATE UNIQUE INDEX 索引名 ON `表名`(`字段`);

Full Text 全文索引:表示全文收索,在检索长文本的时候,效果最好,短文本建议使用Index,例如用于搜索很长一篇文章

创建方式:CREATE Full Text INDEX 索引名 ON `表名`(`字段`);

      4.使用索引

一开始我也在找索引的使用方法,然后找不到。到最后才发现,索引对用户是透明的,它的使用方式就和咱们平常的方式一样。具体的执行过程由数据库内部的数据引擎来做。

例子:CREATE INDEX id_Index ON `student`(`id`);

   select * from student where id= 1;

这里就用了索引,只是我们感觉不到。

   第二种创建、使用索引的方式:

(这是原始表)

(这是创建索引)

      5. 索引优点

建立索引可以大大提高检索的数据,以及减少表的检索行数

查询中使用索引 可以提高性能

在表连接的连接条件 可以加速表与表直接的相连

      6.索引缺点

索引文件会占用物理空间,除了数据表需要占用物理空间之外,每一个索引还会占用一定的物理空间

当数据进行增删改操作时,还需要对索引进行维护,这样就会降低了数据的维护速度。

      7.索引注意事项

在经常需要搜索的列上,可以加快索引的速度

主键列上可以确保列的唯一性

不要在列上进行运算,这样会使得mysql索引失效,也会进行全表扫描

定义为textimagebit数据类型的列不应该增加索引,

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值