1,join 和 union

join连接属于表之间的水平操作,而union 是表之间的垂直操作。简单讲就是水平操作主要是为了获得列数据,垂直操作是为了获得行数据

cross  join       交叉连接    ansi  89  支持              ansi  92   支持inner  join        内连接     ansi  89  支持               ansi  92   支持

outer  join        外链接     ansi  89  未引入            ansi  92   支持

union

select  *  from a,b where a.x=b.x

select * from a INNER JOIN  b ON a.x=b.x

这两个语句的结果是相同的,逻辑查询和物理查询也是相同的

因为INNER 关键字可以省略所以下面的语句也是相同的

Select  *  from  a  JOIN b ON a.x=b.x

如果使用ansi 92格式,当两个表中的字段相同 如上面的a.x=b.x 可以简化成如下方式

select * from a INNER JOIN  b ON using (x)、

outer join  分两种 left outer join  和 right outer join

也可以省略outer  关键字

left join 时  左边的表每行都显示,没有数据时会使用null代替

right join 时 右边的表每行都显示,没有数据时会使用null代替

INNER JOIN 时 过滤条件可以写在ON子句中,而在OUTER JOIN时有过滤条件 必须是用where,否则会得出错误的结果集

使用union 时,两个表中的列数必须相同,列的数据类型也要相同,如果不同会进行数据类型转换

UNION          会自动过滤重复项
UNION all     不会去除重复项

union 单独使用等于 union  distinct   如果要显示相同的值使用union all或者如果确定无相同值是也可以使用union all 会加快查询速度

select  *  from  a union
select  * from  b    //union基本上是做多个表搜索时,对结果集并集时使用

2,逻辑查询中语句执行先后顺序和步骤

select 语句的 完整执行流程一共11个步骤,如果相关步骤不存在则直接跳过

select  (9)   distinct
<select list>

(1)  from <left table>

(2)   <join type>
 <right table>

(3)    on  <join
condition>

(4)    where <where
condition>

(5)    group by <group by
list >

(6)    with  {cube |
 rollup}

(7)    having <having
condition>

(10)   order by <order by list>

(11)   limit <limit number>

 

 

3,Any  some all 
exists  not exists

any关键字必须与比较操作符一起使用,any的意思是

【对于子查询返回的列中任一数值,如果比较结果是true,则返回true】

some是any的别名

select  *  from  t
 where  x>any(select  x  from  t2)

表示x大于子查询中任意一个值就返回true

select  *  from
 t  where  x>some(select  x  from  t2)

上面的语句是相等的

如果操作符变成“=”,如下

select  *  from
 t  where  x=any(select  x  from  t2)

select  *  from
 t  where  x in  (select  x  from  t2)

这两个语句也相等

all  关键字也必须同比较操作符一起使用,all的意思

【对于子查询返回的列中的所有值,如果比较结果为true,则返回true】

select  *  from
 t  where  x>all(select  x  from  t2)

表示x大于子查询中所有值才返回true

当使用“<>”时

select  *  from
 t  where  x<>any(select  x  from  t2)

select  *  from
 t  where  x not in(select  x  from  t2)

上面的语句是相等的

exists      使用exists时无论输入子查询是否返回行,exists都不会返回unknown,unknown被认为是false

not exists

select *  from  t  where
 x='city'  and exists  (select  *  from  b
 where  y>10)

exists 只关心子查询是否有行返回,而不关心返回的是什么值

他们和in 以及not in
 的区别就在于,他们的返回值不是true就是false,

而in 和not in 存在unknown的情况

4,索引优点:

1,一般是作用于where子句所给出的条件相匹配的行,一是在关联操作中与其他数据表所匹配的行。

2,对于使用mix() 和max()函数的查询的列

3,经常使用order by 和group
by的列

4,索引可以加快查询速度,不用扫描整个表

索引缺点

1,索引虽然加快查询的速度,但是会降低写入操作,比如插入,修改,删除数据

2,索引要占据磁盘空间,索引越多占据空间越大,

MySQL只对<,<=,=,>,>=,BETWEEN,IN,以及某些时候(以通配符%和_开头作查询时,MySQL不会使用索引)的LIKE才会使用索引

强制使用索引
select  * FROM oc_address FORCE INDEX (PRI) where address_id>2   //PRI 指主键索引 
忽略索引
select  * FROM TABLE1 IGNORE INDEX (FIELD1, FIELD2)

mysql易混淆知识点的更多相关文章

  1. Java-web易混淆知识点整理

    Java-web易混淆知识点 post和get区别 post: 数据不会显示在地址栏 安全 大小无限制 可以提交二进制文件 get: 数据显示在地址栏 不安全 get方式提交有大小限制(约4kb) 相 ...

  2. php易混淆知识点

    一.define(“constant”,  “hello world”);和const constant = “hello world”;的区别? (0).使用const使得代码简单易读,const本 ...

  3. 【PMP】易混淆知识点

    一.混淆概念 德尔菲技术 德尔菲技术是组织专家达成一致意见的一种方法.项目专家匿名参与其中.组织者使用调查问卷就重要的项目议题征询意见,然后对专家的答卷进行归纳,并把结果反馈给专家做进一步评论.这个过 ...

  4. C++易混淆知识点整理

    // 1 /////////////////////////////////////////////////////////////////////// // 常量指针:,指针可修改,变量不可修改(只 ...

  5. MySQL易忘知识点梳理

    一.零碎知识 1.mysql where子句区分大小写:WHERE BINARY 2.判断是否为null,只能用is null,is not null,不能用=null或!=null 3.函数 4.S ...

  6. C语言之数组与指针的易混淆知识点

    一.指针与数组 指针:指针本身也是一个变量,它的内容是指向的内容的地址.指针同样有类型的区分,char 的指针只能指向char型数据,int 指针指向int型数据.但是指针所占内存单元的大小(即其内容 ...

  7. C++之易混淆知识点二

    1.数据抽象与封装 数据抽象是一种接口和实现相分离的编程技术,设计者关心的是如何实现这些接口,而使用者仅仅知道这些接口,抽象地考虑这些接口做什么的就可以了,不必去考虑如何实现这一层次. 封装是将低层次 ...

  8. CSS易混淆知识点总结与分享-定位与布局

    CSS定位有四种模式:static.relative.absolute.fixed,其它static是默认值,下面分别讲解下各自的特点: static:静态定位,处于动态布局流中,按照页面中的各元素先 ...

  9. JavaScript易混淆知识点小回顾--数组方法与字符串方法;

    数组属性: arr.length;查看数组的长度 arr.Pop;删除数组最后一个元素; 数组的方法: arr.push();添加到数组末端; arr.shift();删除数组的第一个元素; arr. ...

随机推荐

  1. javascript_core_07之错误处理、函数作用域

    1.错误处理:保证程序发生错误时,不会被强制退出: ①处理方式:try{可能出错的正常语句:}catch(err){只有出现错误时才执行的错误处理代码:}finally{无论是否出错都必须执行的代码: ...

  2. ui-router API

    ui-router API 英文不咋地感觉找个API都要找半天, 拿好不谢 http://angular-ui.github.io/ui-router/site/#/api/ui.router

  3. Java EE开发平台随手记2——Mybatis扩展1

    今天来记录一下对Mybatis的扩展,版本是3.3.0,是和Spring集成使用,mybatis-spring集成包的版本是1.2.3,如果使用maven,如下配置: <properties&g ...

  4. C++中“类”相关知识点汇总

    一:类中默认的成员函数 一个空的class在C++编译器处理过后就不再为空,编译器会自动地为我们声明一些member function,如果你写 class Empty{}; 就相当于: class ...

  5. javascript类型系统——日期Date对象

    × 目录 [1]静态方法 [2]构造函数 [3]实例方法 前面的话 Date对象是javascript语言中内置的数据类型,用于提供日期和时间的操作接口.Date对象是在早期java中的java.ut ...

  6. Android属性动画之ObjectAnimator控制

    Android为我们提供了大量的动画效果,如何通过这些动画来达到我们需要的效果呢?今天就为大家总结一下ObjectAnimator动画控制事件. 该项目的的布局文件只有两个控件:ImageView和B ...

  7. codeforces B. Pasha and String(贪心)

    题意:给定一个长度为len的字符序列,然后是n个整数,对于每一个整数ai, 将字符序列区间为[ai,len-ai+1]进行反转.求出经过n次反转之后的序列! /* 思路1:将区间为偶数次的直接去掉!对 ...

  8. Microsoft Naive Bayes 算法——三国人物身份划分

    Microsoft朴素贝叶斯是SSAS中最简单的算法,通常用作理解数据基本分组的起点.这类处理的一般特征就是分类.这个算法之所以称为“朴素”,是因为所有属性的重要性是一样的,没有谁比谁更高.贝叶斯之名 ...

  9. 在WPF应用程序中利用IEditableObject接口实现可撤销编辑的对象

    这是我辅导的一个项目开发中的例子,他们是用WPF做界面开发,在学习了如何使用MVVM来实现界面与逻辑的分离,并且很好的数据更新之后,有一个疑问就是,这种双向的数据更新确实很不错,但如果我们希望用户可以 ...

  10. 简单的小工具wordlight——让VS变量高亮起来

    前段时间一直在使用matlab,今天需要使用vs2008,而用惯了matlab,习惯了其中一项选中变量高亮的设置,突然回来使用VS,感到各种不适应,顿时想到了一个词:矫情 呵呵,于是在网上找各种插件, ...