---mysql查询

mysql查询

关系数据库对数据操作的运算---关系运算----sql语言

关系数据库对数据的操作---关系运算

sql是关系数据库对数据的操作的一种封装的结构化查询语言,即sql是对关系运算封装的一门结构化查询语言,实际每一个sql语句的底层都是关系运算

1关系运算包含什么?

选择关系运算:该运算按给定的条件,从表中选出满足条件的行形成一个新表(临时表)作为运算结果    单表运算(行分割)

投影关系运算:该运算按给定的条件,从表中选出满足条件的属性值形成一个新表(临时表)作为运算结果    单表运算(列分割)

连接关系运算:是把给定两个表上的行按照给定条件进行拼接而形成新表(临时表)    多表运算

2各种关系运算的高层语言支持sql

(1)sql的select支持选择/投影/连接关系运算

select语法

select 

【all |distinct  】:重复行是否应被返回

【high_priority 】:优化器给select更高的优先权,是查询立刻执行,加快查询速度

【straight_join  】:告诉优化器将表联合在一起,加快查询速度

【 sql_small_result     |  sql_big_result  | sql_buffer_result】:来告知mysql优化器结果集合大小,以方便mysql做下一步优化

【sql_cache  |  sql_no_cache】:告知mysql是否要把查询结果存储在查询缓存中

【from】

【where】

【group by】

【having】

【order by】

【limit 】

所有被使用的select子句都必须按照如上顺序排序

提一下MySQL查询优化的原理吧,恩,很多时候面试都会问我们怎么对mysql进行查询优化呢?我们往往答得都是操作上的东西(不能使用SELECT *、不使用NULL字段、合理创建索引、为字段选择合适的数据类型)但是MySQL查询优化的本质是怎样的呢?

实际MySQL的优化器在每一次查询的时候,利用我们的SQL语句,对SQL语句进行查询计划的制定并执行,如果你的sql是最优的,那么你的优化器就会越顺着他的方式去工作,自然查询效率就会大大提高,我们总是希望MySQL能够获得更高的查询性能,最好的办法是弄清楚MySQL是如何优化和执行查询的。一旦理解了这一点,就会发现:很多的查询优化工作实际上就是遵循一些原则让MySQL的优化器能够按照预想的合理方式运行而已。

mysql架构

MySQL逻辑架构整体分为三层,最上层为客户端层,并非MySQL所独有,诸如:连接处理、授权认证、安全等功能均在这一层处理。

MySQL大多数核心服务均在中间这一层,包括查询解析、分析、优化、缓存、内置函数(比如:时间、数学、加密等函数)。所有的跨存储引擎的功能也在这一层实现:存储过程、触发器、视图等。

最下层为存储引擎,其负责MySQL中的数据存储和提取。和Linux下的文件系统类似,每种存储引擎都有其优势和劣势。中间的服务层通过API与存储引擎通信,这些API接口屏蔽了不同存储引擎间的差异。

到了公司之后,会有专门做数据优化的人员,(⊙v⊙)嗯,可以大大减轻开发人员的工作啊!

(2)select具体使用

模式匹配like  %代表0/多个字符  _代表单个字符

eegexp运算符:正则表达式

in:select * from s where name in(select name from b);

is null/is not null

子查询:in/>= /all any some 

group by用于对字段进行分组 group by性别,专业

having用来在group by子句之后选择行 ,作为group by子句的选择条件

order by将结果排序desc/aesc

limit用于限制结果的行数 limit 5==limit 0,5(1-5) limit 3,5(4--5)

union :将许多select的结果放在一个结果集 select * from nn where a="1" union select * from nn where a="2"

定义列别名:select name as 姓名 from xs;

计算列值:select chengji*1.2 as chengjishangsheng from xs;

聚合函数:count /max/min/sum/avg/std/

连接关系运算:是把给定两个表上的行按照给定条件进行拼接而形成新表(临时表)    多表运算

(1)全连接(笛卡尔积连接)

讲将各表用逗号连接,就是全连接,连接条件关键字where

全连接select xx.b, nn.c from xx,nn(无条件的笛卡尔积)

包含等值连接,最常用的连接条件select xx.b, nn.c from xx,nn where xx.a=nn.a;(等值条件的笛卡尔积)

(2)join连接

讲将各表用join连接,连接条件关键字on   

内连接:讲将各表用 inner join/join连接  select xx.b, nn.c from xx  inner join nn on xx.a=nn.a;(内连接和等值链接是等价的)

外连接:左外连接、右外连接、自然连接    讲将各表用 left outer、right outer join   ,natural join连接

左外连接:结果表=匹配行+左表有的但右表不匹配的行,将右表的相应列置为null

右外连接:结果表=匹配行+右表有的但左表不匹配的行,将左表的相应列置为null

自然连接:

交叉连接:讲将各表用 cross join连接

交叉连接和全连接等同,如果有连接条件,则与等值连接等同,inner join和等值链接等同

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值