检索出的数据看似没有任何特定的数据,但检索出的数据并不是纯粹的随机顺序显示的,如果不排序,数据一般以它在底层表中出现的顺序显示,这可以是数据最初添加到表中的顺序。但是如果数据进行过更新或删除,则此顺序会受到MySQL重用回收存储空间的影响
如果不明确规定排序顺序,则不应该假定检索出的数据的顺序有意义
SQL语句由子句构成,有些子句是必须的,有些是可选的,一个子句通常由一个关键字和所提供的数据组合而成,如select的from子句
为了明确排序用select出的数据,可使用order by子句,order by子句取一个或多个列的名字,据此对输出进行排序
使用order by对表中指定列以字母顺序排序数据
经常需要按不止一个列进行数据排序,如要显示公司雇员可能希望按姓和名排序(首先按姓排序,然后在每个姓中再按名排序),如果多个雇员有相同的姓,这样很有用
为了按多个列排序,只要指定列名,列名之间用 , 分隔即可 注意:在多个列排序时,排序完全按所规定的顺序进行,对上面的例子prod_price进行了排序,参考雇员的姓和名排序方式,只有多个行具有相同的prod_price时才对产品按照prod_name进行排序,如果prod_price中所有的值都是唯一的,那么不会按prod_name排序
数据排序默认为升序(从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子句指定搜索条件
数据库一般包含大量的数据,很少需要检索表中所有行,通常会根据特定操作或报告的需要提取表数据的子集,只检索所需要数据需指定 搜索条件,搜索条件也成为 过滤条件
在select语句中,数据根据where子句中指定的搜索条件进行过滤,where子句在表名(from后)给出,如果同时使用了order by 和where子句,order by子句应该位于where之后 上述例子采用了简单的相等测试,它检查一个列是否具有指定的值并对此进行过滤,但SQL能做的不仅仅是相等测试这么简单
where子句的操作符:
= //等于 <> //不等于 != //不等于 < //小于 <= //小于等于 > //大于 >= //大于等于 between //在指定的两个值之间检查值相等:
MySQL在执行匹配时默认不区分大小写
检查小于值: 检查小于等于值:
为了检查某个范围内的值,可以使用between操作符,在使用between时,必须指定所需范围的低端值和高端值,这两个值必须用and连接
创建表时,表设计人员可以指定其中的列是否可以不包含值,一个列不包含值时,称其包含空值null 过滤数据时,一定要验证返回数据中确实给出了被过滤列具有null的行
为了进行更强的过滤控制,MySQL允许给出多个where1子句,这些子句可以通过 and子句 或or子句的方式使用
使用and连接子句条件,and意为取交集,and指示DBMS只返回满足条件的行,还可以添加多个过滤条件,每加一条就要用一个and
or操作符指示MySQL检索匹配任一条件的行,or告诉DBMS匹配任一条件而不是所有条件,意为取并集
下面是一条select语句使用and和or的组合建立的where子句,目的是列出10美元以上且由1002或1003制造的所有产品: 观察结果,明显不符合预期,原因是:SQL在处理or之前先处理了and,and的优先级更高
为了解决这个问题,使用( )来规定运算顺序,任何时候使用and和or操作符的where子句,都应该使用( )明确分组操作符,消除歧义
in操作符用来指定条件范围,范围中的每个条件都可以进行匹配
in的作用类似与 or,但是在使用长的合法选项清单时,in操作符更清楚且直观,运算速度比or更快,且in的最大优点在于它可以包括其它select语句
where子句中的not操作符只有一个功能,就是否定它之后的任何条件
列出除了1002和1003之外所有供应商制造的产品:
MySQL支持使用not对 in,between和exusts子句取反
前面介绍的所有操作符都是针对已知值进行过滤的,但怎样搜索产品中包含文本anvil的所有产品,直接使用相等操作是必然不行的,必须使用通配符,利用通配符可以创建比较数据的搜索模式
为了在搜索子句中使用通配符,必须使用like子句,like指示MySQL后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较
在搜索串中,%表示任何字符出现任意次数%可以匹配多个字符
如找到jet起头的产品:
MySQL的搜索模式是区分大小写的
通配符可以在搜索模式中的任意位置使用,并且可以使用多个通配符:
_的用途和%一样,但下划线只匹配单个字符而非多个字符
与%能匹配0个,1个或多个字符不一样,_总是匹配一个字符
MySQL的通配符很有用,但这是有代价的: 通配符搜索处理一般要比其它的搜索耗时更长
一些使用通配符的技巧: 1,不要过度使用通配符 2,最好不要把通配符放在搜索模式的开始处,把通配符置于搜索模式的开始处是最慢的 3,仔细注意通配符的位置,如果放错可能不会返回想要的数据