博客
关于我
---mysql查询
阅读量:194 次
发布时间:2019-02-28

本文共 2404 字,大约阅读时间需要 8 分钟。

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和等值链接等同

 

 

 

 

转载地址:http://xgms.baihongyu.com/

你可能感兴趣的文章
NIFI1.21.0_Mysql到Mysql增量CDC同步中_补充_插入时如果目标表中已存在该数据则自动改为更新数据_Postgresql_Hbase也适用---大数据之Nifi工作笔记0058
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_补充_更新时如果目标表中不存在记录就改为插入数据_Postgresql_Hbase也适用---大数据之Nifi工作笔记0059
查看>>
NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
查看>>
NIFI1.21.0_Postgresql和Mysql同时指定库_指定多表_全量同步到Mysql数据库以及Hbase数据库中---大数据之Nifi工作笔记0060
查看>>
NIFI1.21.0最新版本安装_连接phoenix_单机版_Https登录_什么都没改换了最新版本的NIFI可以连接了_气人_实现插入数据到Hbase_实际操作---大数据之Nifi工作笔记0050
查看>>
NIFI1.21.0最新版本安装_配置使用HTTP登录_默认是用HTTPS登录的_Https登录需要输入用户名密码_HTTP不需要---大数据之Nifi工作笔记0051
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增加修改实时同步_使用JsonPath及自定义Python脚本_03---大数据之Nifi工作笔记0055
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_插入修改删除增量数据实时同步_通过分页解决变更记录过大问题_01----大数据之Nifi工作笔记0053
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表或全表增量同步_实现指定整库同步_或指定数据表同步配置_04---大数据之Nifi工作笔记0056
查看>>
NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现update数据实时同步_实际操作05---大数据之Nifi工作笔记0044
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_生成插入Sql语句_实际操作02---大数据之Nifi工作笔记0041
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_不带分页处理_01_QueryDatabaseTable获取数据_原0036---大数据之Nifi工作笔记0064
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
查看>>
NIFI从Oracle11G同步数据到Mysql_亲测可用_解决数据重复_数据跟源表不一致的问题---大数据之Nifi工作笔记0065
查看>>