数据一般查询时是以它在底层中出现的顺序显示,这可以是最初添加到表中的数据的顺序,但如果数据后来进行过更新或删除,则这个顺序将会受到MYSQL重用回收存储空间的影响
#####子句
SQL语句由字句构成,有些字句是必需的,而有的是可选的,一个字句通常由一个关键字和所提供的的数据组成。例如select语句的from字句;
为了明确地排序用select语句检索出的数据,可使用order by 字句,order by 字句取一个或多个列的名字,据此输出进行排序,
按单列排序
select * from goods order by shop_price
select * from goods order by cat_id,shop_price
order by默认排序顺序是升序排序,使用desc 关键字可以做降序排序
select * from goods order by shop_price desc
对多列排序,其中一列做降序排序(desc关键字只应用到直接位于其前面的列名)
select * from goods order by cat_id,shop_price desc
使用order by和limit的组合,能够找出一个列中最高或最低值(limit关键字必须位于order by 关键字后 面)
如:找到商品价格最高值
select * from goods order by shop_price desc limit 1
数据库表一般包含大量的数据,很少需要检索表中所有行。通常只会根据特定操作或报告的需要提取表数据的子集。只检索所需数据需要制定搜索条件,搜索条件也称为过滤条件。
在select语句中,数据根据where子句中指定的搜索条件过滤(where子句在order by子句前面)
select * from goods where goods_id=3
where子句操作符
操作符 | 说明 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
between and | 在指定的两个值之间 |
检索商品价格大于3000的
select * from goods where shop_price >3000
select * from goods where shop_price between 1000 and 3000
在创建表时,表设计人员可以指定其中的列是否可以布不包含值。在一个列不包含值时,称其为包含空值NULL,select语句由一个特殊的where字句,可用来检索具有NULL值得列。这个字句就是is null
如:返回商品名字为null的值
select * from goods where goods_name is null
##高级数据过滤
#####组合where字句:以and字句的方式或or字句的方式
and 关键字用来指示检索满足所有给定条件的行
or 关键字用来检测匹配任一条件的行
查询cat_id等于3并且shop_price价格大于2000的值
select * from goods where cat_id=3 and shop_price>2000
select * from goods where cat_id=3 or cat_id=2
mysql运行and和or结合进行复杂的过滤,但计算的顺序是有限处理and操作符,所以做两者之间的组合时一般用()作分组
select * from goods where cat_id=3 or cat_id=2 and shop_price>3000
select * from goods where cat_id=3 or cat_id=2 and shop_price>3000
建议:任何时候使用具有and和or操作符的where字句,都应该使用圆括号明确地分组操作符
####IN操作符
in操作符用来指定条件范围,范围中的每个条件都可以进行匹配。in的合法取值范围由逗号分隔,并且全部在圆括号中
select * from goods where cat_id in (1,2);
#####in操作符优点
1.in操作符一般比or操作符执行更快
2.in操作符可以包含其他select语句,使得能够更动态地建立where子句
where子句中的not操作符只有一个功能,哪就是否定它之后所跟的任何条件
select * from goods where cat_id not in (1,2);
mysql中的not,一般使用对in/between和exists子句的取反