本文共 2404 字,大约阅读时间需要 8 分钟。
关系数据库对数据操作的运算---关系运算----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/