MySQL之多表查询

首先基于三个表:

 

自连接:指在同一张表中连接查询。

 

子查询:指嵌入在其他sql语句中的select语句,也叫嵌套查询

单行子查询:指子查询只返回单列,单行数据

多行子查询:指返回单列多行数据,都是针对单列而言的,

1.返回多行记录的子查询,使用关键字in.

2.在多行子查询中使用any

多列子查询:指查询返回多个列数据的子查询语句。

在from子句中使用子查询

子查询语句出现在from子句中。这里要用到数据查询的技巧,把一个子查询当做一个临时表使用。

 

自我复制(蠕虫复制)

合并查询

在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union,union all

1.union

该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行。

2.union all

该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。

 

 

外键

外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当
定义外键后,要求外键列数据必须在主表的主键列存在或为null。

 

表的内连和外连

内连接:内连接实际上就是利用where子句对两种表形成的笛卡尔积进行筛选。

select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;

笛卡尔积:不加过滤条件,得到的结果称为笛卡尔积。

外连接

外连接的分类:

分为左外连接和右外连接

左外连接:如果联合查询,左侧的表完全显示我们就说是左外连接。

select 字段名 from 表名1 left join 表名2 on 连接条件

右外连接:如果联合查询,右侧的表完全显示我们就说是右外连接。

select 字段 from 表名1 right join 表名2 on 连接条件。

 

 

索引

索引,提高数据库性能,不用加内存,不用改程序,不用调sql,只要执行正确的'create index',查询速度就可能提高成百上千倍。但是查询速度的提高是以插入,更新,删除的速度为代价的,这些操作,增加了大量的IO。所以他的价值,在于提高一个海量数据的检索速度。

索引的分类:主键索引,唯一索引,普通索引,全文索引 (解决中子文索引问题)

索引的说明:

1.占用磁盘空间

2.当添加一条记录,除了添加到表中,还要维护二叉树,速度有影响,但不大。

3.当我们添加一个索引,不能够解决所有查询问题,需要分别给字段建立索引

4.索引是以空间换时间

。唯一索引

特点:

1.一个表中,可以有多个唯一索引

2.查询效率高

3.如果在某一列建立唯一索引,必须保证这列不能有重复数据

4.如果一个唯一索引上指定not null,等价于主键索引

。普通索引

特点:

1.一个表中可以有多个普通索引,普通索引在实际开发中用的比较多

2.如果牟烈需要创建索引,但是该列有重复的值,那么我们就应该使用普通索引

。全文索引

当对文章字段或有大量文字的子墩进行紧缩时,会使用到全文检索。MySQL提供全文检索机制,但是有要去,要求表的存储引擎必须是MySAM,而且默认的全文索引支持英文,不支持中文。

如果对中文进行全文检索,可以使用sphinx的中文版(coreseek)。

创建索引的原则:

1.比较频繁作为查询条件的字段应该创建索引

2.唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件。

3.更新非常频繁的字段不适合创建索引。

4.不会出现在where子句中的字段不该创建索引。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值