《MySQL 必知必会》C5-C8

it2023-09-13  91

文章目录

第五章 排序检索数据1 使用select的子句order by进行排序(1) 排序数据(2) 按多个列排序(3) 指定排序方向 第六章 过滤数据1 使用where子句2 where子句的操作符(1) 检查单个值(2) 不匹配检查(3) 范围值检查(4) 空值检查 第七章 数据过滤1 组合where子句(1) and操作符(2) or操作符(3) 计算次序 2 in 和 not 操作符(1) in操作符(2) not操作符 第八章 用通配符过滤1 like操作符(1) % 通配符(2) _ 通配符 2 使用通配符的技巧

第五章 排序检索数据

1 使用select的子句order by进行排序

(1) 排序数据

检索出的数据看似没有任何特定的数据,但检索出的数据并不是纯粹的随机顺序显示的,如果不排序,数据一般以它在底层表中出现的顺序显示,这可以是数据最初添加到表中的顺序。但是如果数据进行过更新或删除,则此顺序会受到MySQL重用回收存储空间的影响

如果不明确规定排序顺序,则不应该假定检索出的数据的顺序有意义

SQL语句由子句构成,有些子句是必须的,有些是可选的,一个子句通常由一个关键字和所提供的数据组合而成,如select的from子句

为了明确排序用select出的数据,可使用order by子句,order by子句取一个或多个列的名字,据此对输出进行排序

使用order by对表中指定列以字母顺序排序数据

(2) 按多个列排序

经常需要按不止一个列进行数据排序,如要显示公司雇员可能希望按姓和名排序(首先按姓排序,然后在每个姓中再按名排序),如果多个雇员有相同的姓,这样很有用

为了按多个列排序,只要指定列名,列名之间用 , 分隔即可 注意:在多个列排序时,排序完全按所规定的顺序进行,对上面的例子prod_price进行了排序,参考雇员的姓和名排序方式,只有多个行具有相同的prod_price时才对产品按照prod_name进行排序,如果prod_price中所有的值都是唯一的,那么不会按prod_name排序

(3) 指定排序方向

数据排序默认为升序(从A到Z),还可以使用order by子句以降序(从Z到A)排列,降序使用 desc 关键字,升序的关键字是 asc 但既不指定asc也不指定desc则假定为asc 对多个列排序时,desc关键字只应用到直接位于其前面的列名 上面例子中,prod_price列指定desc,对prod_name列不指定,因此prod_price列以降序排序,而prod_name列仍按照升序排序(同prode_price)

也可以使用order by子句和 limit 子句组合,找出一个列中最高或最低的值,order by子句必须位于from子句后,limit子句必须位于order by子句后,使用子句的次序不对将产生错误 注:排序中MySQL默认A与a相同

第六章 过滤数据

使用select语句的where子句指定搜索条件

1 使用where子句

数据库一般包含大量的数据,很少需要检索表中所有行,通常会根据特定操作或报告的需要提取表数据的子集,只检索所需要数据需指定 搜索条件,搜索条件也成为 过滤条件

在select语句中,数据根据where子句中指定的搜索条件进行过滤,where子句在表名(from后)给出,如果同时使用了order by 和where子句,order by子句应该位于where之后 上述例子采用了简单的相等测试,它检查一个列是否具有指定的值并对此进行过滤,但SQL能做的不仅仅是相等测试这么简单

2 where子句的操作符

where子句的操作符:

= //等于 <> //不等于 != //不等于 < //小于 <= //小于等于 > //大于 >= //大于等于 between //在指定的两个值之间

(1) 检查单个值

检查值相等:

MySQL在执行匹配时默认不区分大小写

检查小于值: 检查小于等于值:

(2) 不匹配检查

(3) 范围值检查

为了检查某个范围内的值,可以使用between操作符,在使用between时,必须指定所需范围的低端值和高端值,这两个值必须用and连接

(4) 空值检查

创建表时,表设计人员可以指定其中的列是否可以不包含值,一个列不包含值时,称其包含空值null 过滤数据时,一定要验证返回数据中确实给出了被过滤列具有null的行

第七章 数据过滤

1 组合where子句

为了进行更强的过滤控制,MySQL允许给出多个where1子句,这些子句可以通过 and子句 或or子句的方式使用

(1) and操作符

使用and连接子句条件,and意为取交集,and指示DBMS只返回满足条件的行,还可以添加多个过滤条件,每加一条就要用一个and

(2) or操作符

or操作符指示MySQL检索匹配任一条件的行,or告诉DBMS匹配任一条件而不是所有条件,意为取并集

(3) 计算次序

下面是一条select语句使用and和or的组合建立的where子句,目的是列出10美元以上且由1002或1003制造的所有产品: 观察结果,明显不符合预期,原因是:SQL在处理or之前先处理了and,and的优先级更高

为了解决这个问题,使用( )来规定运算顺序,任何时候使用and和or操作符的where子句,都应该使用( )明确分组操作符,消除歧义

2 in 和 not 操作符

(1) in操作符

in操作符用来指定条件范围,范围中的每个条件都可以进行匹配

in的作用类似与 or,但是在使用长的合法选项清单时,in操作符更清楚且直观,运算速度比or更快,且in的最大优点在于它可以包括其它select语句

(2) not操作符

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

列出除了1002和1003之外所有供应商制造的产品:

MySQL支持使用not对 in,between和exusts子句取反

第八章 用通配符过滤

1 like操作符

前面介绍的所有操作符都是针对已知值进行过滤的,但怎样搜索产品中包含文本anvil的所有产品,直接使用相等操作是必然不行的,必须使用通配符,利用通配符可以创建比较数据的搜索模式

为了在搜索子句中使用通配符,必须使用like子句,like指示MySQL后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较

(1) % 通配符

在搜索串中,%表示任何字符出现任意次数%可以匹配多个字符

如找到jet起头的产品:

MySQL的搜索模式是区分大小写的

通配符可以在搜索模式中的任意位置使用,并且可以使用多个通配符:

(2) _ 通配符

_的用途和%一样,但下划线只匹配单个字符而非多个字符

与%能匹配0个,1个或多个字符不一样,_总是匹配一个字符

2 使用通配符的技巧

MySQL的通配符很有用,但这是有代价的: 通配符搜索处理一般要比其它的搜索耗时更长

一些使用通配符的技巧: 1,不要过度使用通配符 2,最好不要把通配符放在搜索模式的开始处,把通配符置于搜索模式的开始处是最慢的 3,仔细注意通配符的位置,如果放错可能不会返回想要的数据

最新回复(0)