MySQL必知必会 第7-9章

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL必知必会 第7-9章相关的知识,希望对你有一定的参考价值。

参考技术A

在第六章介绍的所有 WHERE 子句在过滤时,使用的都是单一的条件。为了进行更强的过滤控制,mysql允许给出多个WHERE子句,并通过 AND 或 OR 操作符的方式组合使用。

AND 操作符可以使用对多列的条件进行累加过滤。

OR操作符可以使用对多列的条件进行累加过滤。

WHERE 子句可包含任意数目的 AND 和 OR 操作符。但是 AND 的优先级比 OR 高,应使用适当的圆括号分组操作符。

注意: 任何时候都不应该过分依赖默认计算次序,使用圆括号可以增加可读性,消除歧义。

IN 操作符用来指定条件范围,范围中每个条件都可以进行匹配。 IN 的合法值由逗号分隔,并全部括在圆括号中。

使用 IN 的优点为:

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

注意: MySQL支持使用NOT对IN、BETWEEN和EXISTS子句取反,这与其他大多数DBMS允许使用NOT对各种条件取反有很大区别。

之前介绍的都是针对已知值的过滤。而对进行未知内容的匹配,可以使用通配符创建比较数据的搜索模式来完成。通配符的匹配,需要通过LIKE操作符指示MySQL完成。

% 表示任何字符出现任意次。例如,为了找到所有以 jet 起头的产品,可使用以下 SELECT 语句

注意:

下划线( _ )通配符只匹配单个字符而不是多个字符。

通配符使用技巧:

正则表达式是用来匹配文本的特殊串(字符集合),所有种类的程序设计语言、文本编辑器、操作系统等都支持正则表达式。

MySQL中的正则表达式仅是正则表达式的一个子集。

为搜索两个串之一,使用( | )。

如果想匹配特定的单一字符,可以使用[]将一组指定的内容括起来。

注意:

集合可用来定义要匹配一个或多个字符,此时可以使用 - 来定义一个范围,例如 [0-9] 表示数字0到9, [a-z] 表示字母a到z。

正则表达式语句由具有特定含义的特殊字符构成。例如 | 或 - 等。如果要表示一些特殊的字母,如含 . 的值,则应该使用 \\\\\\ 为前导。 \\\\\\- 表示查找 - , \\\\\\. 表示查找 . 。

注意:

为方便常见字符集的查找,可以使用预定义的字符集。称为字符类。如下图所示:

目前为止使用的所有正则表达式都试图匹配单词出现。但有时需要对匹配的数目进行更强的控制,此时可以使用下列正则表达式重复元字符来完成。

注意: 使用正则表达式时,编写某个特定的表达式几乎总是有多种方法。

目前为止,所有例子都是匹配一个串中任意位置的文本,为了匹配特定位置的文本,需要使用定位符。

注意:

《mysql必知必会》学习_第14章_20180806_欢

第14章:使用子查询。

子查询是镶嵌在其他查询里面,相当其他的select查询的条件来。

P91 

select order_num from where prod_id=\'tnt2\';   #检索条件为prod_id=tnt2的order_num#

select cust_id from orders where order_num in (20005,20007);    #检索满足条件 order_num在范围(20005,20007)的cust_id#

select cust_id from orders where order_num in (select order_num from orderitems where prod_id =\'tnt2\' );  #检索 满足条件:///在表orderitems中满足prod_id=tnt2 的order_num,orderitems.order_num =orders.order_num  /// 这部分的order_num在orders中对应的cust_id # ##实际上,就是上面的两个语句组合而成的##

 

 P92

select cust_name,cust_contact from customers where cust_id in (10001,10004); #检索表customers满足客户Id在范围(10001,10004)内,对应的cust_name,cust_contact #

 

select cust_name,cust_contact from customers where cust_id in (select cust_id from orders where cust_num in (select cust_num from orderitems where prod_id =\'tnt2\') ); #镶嵌了两个子查询,从最里面的括号的条件开始运行#

 P94

select count(*) as orders from orders where cust_id=10001;  #检索cust_id=10001的个数#

select cust_name,cust_state,(select  count(*) from orders where orders.cust_id =customers.cust_id) as orders from customers order by cust_name ;  #关联两个表,检索满足条件orders.cust_id = customers.cust_id 的行数(count(*)),cust_name,cust_state #

注意:关联多个表的时候,要指明列的时候,表示哪个表哪个列的时候:表点列(如customers.cust_name) !!!

 

以上是关于MySQL必知必会 第7-9章的主要内容,如果未能解决你的问题,请参考以下文章

MySQL必知必会

《 MySQL必知必会》笔记_持续更新

MySQL必知必会-资源下载

《mysql必知必会》学习_第23章_20180809

读MYSQL必知必会的总结

MYSQL必知必会,详尽入门,一文帮你学会SQL必知必会