《MySQL必知必会》学习笔记三------掌握部分

来源:互联网 发布:手机淘宝 没有链接 编辑:程序博客网 时间:2024/04/30 04:04

MySQL必知必会知识预览
第一章——了解SQL
第二章——MySQL简介
第三章——使用MySQL
第四章——检索数据
第五章——排序检索数据
第六章——过滤数据
第七章——数据过滤
第八章——用通配符进行过滤
第九章——用正则表达式进行搜索
第十章——创建计算字段
第十一章——使用数据处理函数
第十二章——汇总数据
第十三章——分组数据
第十四章——使用子查询
第十五章——联结表
第十六章——创建高级联结
第十七章——组合查询
第十八章——全文本搜索
第十九章——插入数据
第二十章——更新和删除数据
第二十一章——创建和操纵表
第二十二章——使用视图
第二十三章——使用储存过程
第二十四章——使用游标
第二十五章——使用触发器
第二十六章——管理事务处理
第二十七章——全球化和本地化
第二十八章——安全管理
第二十九章——数据库维护
第三十章——改善性能

————————————– 华丽的分隔符 ————————————————–

第六章(where关键字)

一、SQL过滤与应用过滤

数据也可以在应用层进行过滤,为此目的,SQL的select语句为客户机应用检索出超出实际所需要的数据,然后客户机代码对返回数据进行循环,以提取所需要的行。
但是。这种做法并不支持。因为这样让客户机代码处理数据库的工作将会大大影响应用的性能,并且所创建的应用完全不具备可收缩性。而且,服务器不得不发送多余的数据,将会导致网络带宽的浪费。
order by 与where子句同时使用时,应该讲order by 置于where之后。

二、where子句操作符

Where子句所支持的所有操作符 :
=、 <> 、!=
< 、<= 、> 、>=
between….and

select prod_name,prod_price from products where prod_name = ‘fuses’; //prod_name 为 ‘fuses’
select prod_name,prod_price from products where prod_id <> 1003; // prod_id不为1003的所有行
select prod_name,prod_price from products where prod_id != 1003;// prod_id不为1003的所有行
select prod_name,prod_price from products where prod_price between 3 and 8;//价格在3到8之间的行,包括3和8

三、空值检查NULL

NULL : 无值,它与0,空字符串或仅仅包含空格不同( IS NULL )

select cust_id,from customers where cust_email IS NULL ;//检索出没有设置email的顾客;

注意:NULL与不匹配
在通过过滤选择出不具有特定值的行时,可能希望返回具有NULL值的行,但是,不行,因为未知具有特殊的含义,数据库不知道是否 匹配,所以在匹配过滤或者不匹配过滤时不返回他们。

第七章(NOT、IN操作符)

一、组合where子句

利用AND子句或者OR子句的方式,可以使多个where子句联系 在一起,组织成更强大的过滤控制。

AND 操作符 用在where子句中的关键字,用来指示检索满足所有给定条件的行。
OR 操作符 用在where子句中的关键字,用来指示检索匹配任一条件的行。

select prod_id,prod_name from products where vend_id=1003 and prod_prices<= 10;
//检索由供应商为1003制造,并且价格小于10的所有产品。

select prod_id,prod_name from products where vend_id=1003 or vend_id=1004;
//检索由供应商为1003或者由供应商为1004制造的所有产品

二、计算次序&and和or的优先级

Where子句中可能包含任意数目的and和or操作符,但是对于优先级顺序为and高于or,所有在组合时,尽量使用括号进行匹配。

Select name.price from products where id=1002 or id=1003 and price>=10;
//由供应商1003制造的价格为10美元(含)以上的产品,或者由供应商1002制造的所有产品

Select name.price from products where( id=1002 or id=1003 )and price>=10;
//有供应商1002或者1003提供价格大于等于10美元的所有产品

注意:在复杂的语句时,不要过分依赖默认计算顺序,使用括号能很好的消除歧义。

三、IN操作符

IN操作符用来指定操作范围,范围中的每个条件都可以进行匹配。圆括号在where子句的另外一种形式。

select prod_name,prod_price from products where vend_id IN (1002,1003) ORDER BY prod_name;
//检索 供应商为1002和 1003制作的所有产品。

注意:“IN 操作符与OR具有相同的功能,但是IN具有以下优点:
* a. 在使用长的合法选项清单时,IN操作符的语法更清楚切直观。*
* b. 在使用IN时,计算的次序更容易管理(因为使用的操作符更少)。*
* c. In操作符比OR操作符清单执行的更快。*
* d. In的最大优点是可以包含其他select语句,使得能够动态地建立where子句。*


四、NOT操作符

NOT操作符有且只有一个功能,就是否定它之后所跟的任何条件。

select prod_name,prod_price from products where vend_id NOT IN (1002,1003) ORDER BY prod_name;
//检索 供应商不为1002和 1003制作的所有产品。

注意:为什么使用NOT ?
对于简单的where子句,使用NOT确实没有什么优势。但是在更复杂的子句中,NOT是非常有用的。例如在与IN操作符联合使用时,NOT使找出与条件列表不匹配的行非常简单。

MySQL中的NOT
MySQL支持使用NOT对IN、BETWEEN、和EXISTS子句取反,这与多数DBMS允许使用NOT对各种条件取反有很大的差别。


第八章(通配符和LIKE操作符)


通配符:用来匹配值的一部分的特殊字符。
搜索模式:有子面值、通配符或者两者组合构成的搜索条件。
LIKe操作符:在搜索子句中使用通配符,必须使用like操作符,like指示MySQL后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较。

百分号(%)通配符表示任何字符出现任意次数(包括0)。 //不能匹配NULL
下划线(_)通配符表示只匹配单个字符

select prod_id ,prod_name from products where prod_name LIKE ‘%jet%’;
//检索 prod_name 符合搜索模式 ‘jet%’,的所有行。以jet开头的词。

注意 :根据MySQL的配置方式,搜索是可以区分大小写的,默认的是不区分大小写。

最简单的方式就是在like的后面加个binary,适用于表的结构不易改变的情况下。大多数人发现这个问题的时候,往往表的结构是不能改变的,所以,这种方法还是很好的。(还有其余方式是更改表结构的,以后总结)

select prod_id ,prod_name from products where prod_name LIKE binary ‘%jet%’;
//检索 prod_name 符合搜索模式 ‘jet%’,的所有行。以jet开头的词。区分大小写

select prod_id ,prod_name from products where binary prod_name LIKE ‘%jet%’;
//检索 prod_name 符合搜索模式 ‘jet%’,的所有行。以jet开头的词。区分大小写

注意:NULL
通配符表示任何字符出现任意次数。但是不能匹配NULL。

注意:使用通配符的技巧
MySQL的通配符很有用,但是这种功能是有代价的:通配符搜索的处理一般要比前面讨论的其他搜索所化的时间更长。
1. 不要过度使用通配符。如果其他操作符能够达到相同的目的,应该使用其他操作符。
2. 在确实需要使用通配符时,除非绝对,有必要,否则不要把他们用在搜索模式的开始处,把通配符置于搜索模式的开始处,搜索起来是最慢的。

0 0
原创粉丝点击