在对数据进行查询的时候,有时候需要查询出表中某一行数据,或者对数据的空值进行处理
查询表中第n行数据,可以先将前n行的数据查询出来,再将表中的前n-1行数据查询出来,最后通过使用NOT EXIST操作将表中第N行的数据显示出来
SELECT
id,
`name`,
current_price
FROM
(SELECT * FROM goods LIMIT 6) AA
WHERE
NOT EXISTS (
SELECT
*
FROM
(SELECT * FROM goods LIMIT 5) BB
WHERE
AA.id = BB.id
)
随机查询可以在表中随机查询抽出几行数据,供用户查看
在mysql中,随机查询可以通过RAND()函数来实现,它可以生成一个0~1之间的随机数
SELECT id,name,current_price FROM goods
ORDER BY RAND() LIMIT 5;
在结果集中添加行号,可以方便查看
--- id 按照从大到小顺序重新排序,并对每行的数据进行编号 ---
SELECT
(
SELECT
COUNT(id)
FROM
goods A
WHERE
A.id >= B.id
) id,
`name`,
introduction,
current_price
FROM
goods B
ORDER BY
1;
空值从技术上来说就是”未知的值“。但是空值并不包括0,一个或者多个空格组成的字符串,以及零长度的字符串。在实际应用中,空值还说明没有向数据库输入相应的数据,或者某个特定的记录行不需要使用该列。在实际操作中,下列几种情况可能使一列成为空值。
在表中有可能会出现空值,由于空值是未知的值,在对其进行查询的时候不可以像查询其他的值那样用比较或运算等。此时可以用IS NULL 操作符对空值进行查询,它可以查询到列中所有的控制
SELECT id,`name`,introduction FROM goods
WHERE introduction IS NULL;
SELECT id,`name`,introduction FROM goods
WHERE introduction IS NOT NULL;
通常需要把空值转化成一个有效的值,便于对数据的理解,或者防止表达式出错。 ISNULL()函数可以对控制转换成为有效的值,而NULLIF()函数可以根据指定的条件来生成空值
SELECT id,`name`,ISNULL(addtime) AS time FROM goods
列的数值不为NULL的时候,ISNULL()函数将返回原值,当为NULL的时候,ISNULL()函数将对其进行处理,用数值来替代
理论上讲SLECET语句所返回的结果集都是无序的,结果集中的记录之间顺序主要取决于物理位置,对结果集的排序的唯一方式就是在SELECT查询中嵌入ORDER BY子语句,ORDER BY 子语句用来指定最后结果集中的顺序
当使用SELECT语句查询数据表的时候,数据库系统并不能将数据以特定顺序呈现给用户,如果查询的表的数据比较大,则用户浏览起来很不方便,考虑到效率问题,在SQL中读取数据表的行时引入了一种索引的方法,结果集的行可能就会按照索引的顺序进行排列。
如果想控制每行的数据在结果集中的出现的顺序,可以向SELECT语句添加ORDER BY子句。 它使数据库对查询结果排序,这样就无需对自己编写的应用程序进行手工排序,ODEDER BY 子句必须放在查询语句的末尾,语法如下
ORDER BY { oder_by_expression [ ASC | DESC ] } [,.....n]
参数说明
参数 | 描述 |
---|---|
order_by_expression | 指定要排序的列,可以将排序的列指定为列名或者列的别名(可以由表名或者视图名限定)和表达式,或者指定为代表列选择列表内的名称,别名或者表达式的位置的负整数。可以指定多个排序列,ORDER BY子句的排序定义排序结果集的结构 |
ORDER_BY | 子句可以包括未出现在此选择列表的项目,而且如果指定SELECT DISTINCT或者如果SELECT 语句包含union运算符的时候,列名或者列的别名必须是第一选择列表内的列名或者列的别名 |
ASC | 指定按递增顺序(升序),从低到高排序,默认是递增顺序 |
DESC | 指定按递减顺序(降序),从高到底排序 |
# 对商品价格进行降序排列
SELECT id,`name` , current_price FROM goods
ORDER BY current_price DESC;
# 对商品价格进行升序排列
SELECT id,`name` , current_price FROM goods
ORDER BY current_price ASC;
# 对商品价格进行排列,别名
SELECT id 编号,`name` 名称, current_price 价格 FROM goods
ORDER BY current_price DESC;
# 对商品价格进行排列,别名如果出现空格,则需要使用引号
SELECT id 编号,`name` 名称, current_price `商品 价格` FROM goods
ORDER BY current_price DESC;
有时按照一列进行排序之后,如果查询的记录比较多,那么查询结果可能依然不是很清晰,此时可以按照多个列进行排序。SQL指定多列排序,初级排序是对查询结果进行分类排序,第二级排序是对初级排序分好类的数据再次排序,以此类推
实际编程中经常需要对多列进行数据排序,例如要显示员工清单,可能需要按照姓名进行排序(首先按照姓排序,然后再对每一个姓的集合中按照名字排序),对于多个员工具有相同姓的情况,这样做很有意义
如果需要对多列进行字段排序,可以对所有要用于排序的列加以限制,当对多列数据进行排序时,优先顺序应该从左到右依次降低,所以在查询语句的ODRDER BY语句的各个列排序很重要
# 按照商品的价格列和商品名称列对结果进行排序
# 首先按照价格排序,然后按照名称排序
SELECT id,`name`,current_price FROM goods
ORDER BY current_price,`name`;
对多列排序时,排序顺序有一定的规则。实际上,如果对主排列没有重复值,则不行行次排列,如果在主排列中出现重复值,则需要进行次排列
说明,在ORDERY BY子句中的第一列为主排序,第二列为次排序
如果希望某个列上进行降序列,而在其他列上进行升序排列,可以使用DESC关键字对希望降序排列进行限制,如果要对多个列进行降序排序,必须对每个指定DESC关键字
#对数据表的前几行数据进行排序
SELECT id,`name`,current_price FROM goods
ORDER BY current_price DESC LIMIT 3;
#对数据表的后几行数据进行排序
SELECT id,`name`,current_price FROM goods
ORDER BY current_price LIMIT 3;
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。