SQL
来源:互联网 发布:饥荒攻略秘籍软件 编辑:程序博客网 时间:2024/05/22 16:47
SQL-执行顺序
(8)SELECT (9)DISTINCT (11)<Top Num> <select list>(1)FROM [left_table](3)<join_type> JOIN <right_table>(2)ON <join_condition>(4)WHERE <where_condition>(5)GROUP BY <group_by_list>(6)WITH <CUBE | RollUP>(7)HAVING <having_condition> //可以后跟聚合函数(如sum avg 或group by 后)(10)ORDER BY <order_by_list>每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。********************************where和having的执行级别不同在查询过程中聚合语句(sum,min,max,avg,count)要比having子句优先执行.而where子句在查搜索询过程中执行优先级别优先于聚合语句(sum,min,max,avg,count)。having就是来弥补where在分组数据判断时的不足。因为where执行优先级别要快于聚合语句。
关联
现有两张表,Table A 是左边的表。Table B 是右边的表。其各有四条记录,其中有两条记录name是相同的:
1.INNER JOIN 产生的结果是AB的交集
SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name
2.LEFT [OUTER] JOIN 产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代。
SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name
3.RIGHT [OUTER] JOIN 产生表B的完全集,而A表中匹配的则有值,没有匹配的则以null值取代。
SELECT * FROM TableA RIGHT OUTER JOIN TableB ON TableA.name = TableB.name
图标如left join类似。
4.FULL [OUTER] JOIN 产生A和B的并集。对于没有匹配的记录,则会以null做为值。
SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name
5.CROSS JOIN 把表A和表B的数据进行一个N*M的组合,即笛卡尔积。如本例会产生4*4=16条记录,在开发过程中我们肯定是要过滤数据,所以这种很少用。
SELECT * FROM TableA CROSS JOIN TableB
索引
使用规则:
- 不要索引数据量不大的表,对于小表来讲,表扫描的成本并不高。
- 不要设置过多的索引,在没有聚集索引的表中,最大可以设置249个非聚集索引,过多的索引首先会带来更大的磁盘空间,而且在数据发生修改时,对索引的维护是特别消耗性能的。
- 合理应用复合索引,有某些情况下可以考虑创建包含所有输出列的覆盖索引。
- 对经常使用范围查询的字段,可能考虑聚集索引。
- 避免对不常用的列,逻辑性列,大字段列创建索引。
注意,以下情况索引会失效:
- 如果条件中有or,
- 对于多列索引,不是使用的第一部分,则不会使用索引
- like查询是以%开头
- 如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引
- 如果mysql估计使用全表扫描要比使用索引快,则不使用索引
- 列表内容
阅读全文
0 0
- SQL
- SQL
- SQL
- sql
- sql
- SQL
- sql
- SQL (-)
- sql
- SQL
- SQL
- SQL
- sql
- sql
- sql
- sql
- SQL
- sql
- 判断一个数是不是素数
- error 65: access violation at 0x40021000 : no 'read
- 并行加密算法系列(一)之AES单个加密模式的可并行性分析
- 自己搭建内网可用的Jrebel License Server激活Jrebel
- OpenCV2.4.13中同一函数不同形参的理解,vector,list区别,findContours理解
- SQL
- deeplearning.ai-lecture2-week1-Initialization-homework
- 初识工厂设计模式
- (File类文件移植)
- JNI生成.h文件无法确定类的签名
- 分答项目_技能点:删除多条分类信息
- tensorflow报错:Couldn't open CUDA library libcupti.so.8.0. LD_LIBRARY_PATH
- auto-sklearn案例解析一
- 面向容器