ORDER BY salary ASC;
这里其实就多了一句
ORDER BY salary ASC;
然后salary就能升序排列了,猜得出来,salary是控制的栏目,ASC应该是升序有关的指令。那么把
ASC
改成
DASC
呢?
明显变成降序了。如果不写
ASC
也ok,默认升序排列。
这里我们顺便学两个六级单词得了(
别想了,六级逃不掉的
)
单词
|
音标
|
含义
|
缩写
|
巧记
|
前缀
|
ascend
|
英[əˈsend]
|
升高; 爬上坡
|
ASC
|
a-scend
|
a前缀
往上 增多
|
descend
|
英[dɪˈsend]
|
下降; 走下坡
|
DESC
|
de-scend
|
de前缀
往下 否定 下降
|
另外,为啥我鼠标一点就能解决的事情还需要敲代码搞定?
你可以尝试,跟老板或者客户说:“诶boss,用的时候记得打开SQLyog点一下哈”。
其实这里我们已经发现,学的都是SELECT语句附加的一个个成分:
FROM 缩小搜索范围到具体哪张表
WHERE 筛选 需要具体哪些数据 (之前我们提到的 行-类的实例 列-类的属性)
有没有想过,我们目前能针对
什么项目
进行排序?就是表的
栏目
如果把每一行看做
类的实例
,那列就是
类的属性
,而在表中,属性就是
变量
,比如salary是一个整形变量。
既然变量可以排序,那含有变量的表达式也可以咯?没错!
案例
我们想对中产阶级 也就是表中工资在4000~8000的人,进行年终奖的计算,并且还要降序排序一波再输出。
年终奖就是(1+commission_pct)*salary — 你懂的
提示:没有年终奖的人,commission_pct为
NULL
代码:
USE data1;
SELECT
CONCAT_WS('-',
`last_name`,
`first_name`
) AS 姓名,
`salary` * (1+IFNULL(`commission_pct`,0)) AS 年终工资
employees
WHERE
salary BETWEEN 4000 AND 8000
ORDER BY 年终工资 DESC;
这里有两个槽点:
1 不仅salary能够排序,salary
* (1+IFNULL(commission_pct
,0)),也能够排序
2 可以用别名(AS,而且支持中文!)当做一个组合变量排序。这样代码更加简洁直观
3 别名也就是这里能用 别的还是不行 如下,试着把上面代码的where部分改成下面的样子:
WHERE
年终工资 BETWEEN 4000 AND 8000
所以正确写法还是挺苟且的:
案例
尝试利用获取字符串长度的LENGTH()函数 输出的结果进行筛选+排序
last_name 字母数在1~5之间,并且升序输出:
USE data1;
SELECT
last_name,
CONCAT_WS('-',
`last_name`,
`first_name`
) AS 姓名,
`salary` * (1+IFNULL(`commission_pct`,0)) AS 年终工资
employees
WHERE
LENGTH(last_name) BETWEEN 1 AND 5
ORDER BY LENGTH(last_name) ASC;
之前在ORDER BY后面添加的就是一个排序的规则
案例都是2500的工资,其顺序咋确定呢?
我们可以再加一个排序规则
代码:ORDER BY 年终工资 ASC, LENGTH(last_name) DESC;
这样,年终工资升序,如果同样工资,按次级排序顺序,即,last_name字符串长度的降序
注意:第一个排序规则(年终工资 ASC
)是老大,后面跟着的(LENGTH(last_name) DESC
)都是小弟,次级的,作为补充的
下一站:数据库学习之MySQL (九)—— 数学函数与字符串函数
作用: 通过哪个或哪些字段进行排序
含义: 排序采用 order by 子句,order by 后面跟上排序字段,排序字段可以放多个,多个采用逗号间隔,order by默认采用升序(asc),如果存在 where 子句,那么 order by 必须放到where 语句后面。
(1)、按照薪水由小到大排序(系统默认由小到大)
例如: select ename,sal from emp order by sal;
(2)、取得job 为 MANAGER 的员工,按照薪水由小到大排序(系统默 认由小到大)
了解 ——对不同数据类型的数据进行排序的规则。
在一条SELECT语句中,如果不使用ORDER BY子句,结果中行的顺序是不可预料的。使用ORDER BY子句后可以保证结果中的行按一定顺序排列。
语法格式:
ORDER BY {列名 | 表达式 | 列编号} [ASC | DESC] , ...
说明:ORDER BY子句后可以是一个列名、一个表达式或一个正整数。正整数表示按结果表中该位置上的列排序。
关键字ASC表示升序排列,DESC表示降序排列,系统默认值为ASC。
简单排序
【例】 将book表中的书按单价降序排序
SELECT *
from book
ORDER BY 单价 DESC;
ORDER BY 列名
ORDER BY 列编号
注意:编号表示列所在结果集中的位置
【例】 将book表中的书按数量升序排序
SELECT 图书编号,书名,单价,数量
from book
ORDER BY 4 ASC;
说明:4表示数量在结果中的位置
【例】 将book表中的书按单价降序排序
create [unique|fulltext|spatial] index 索引名 on 表名(字段名 [长度] [asc|desc]);
MySQL也能利用索引来快速地执行ORDER BY和GROUP BY语句的排序和分组操作。
通过索引优化来实现MySQL的ORDER BY语句优化:
1、ORDER BY的索引优化
如果一个SQL语句形如:
SELECT
需要排序的字段跟在order by之后;
asc|desc表示排序的规则,asc:升序,desc:降序,默认为asc;
支持多个字段进行排序,多字段排序之间用逗号隔开。
单字段排序
mysql> create table test2(a int,b varchar(10));
Query OK, 0 rows
文章目录1. 语法2. 案例(1)按照工资升序,找出员工名和薪资。(2)按照工资降序,找出员工名和薪资。(3)按照工资的降序排列,当工资相同的时候在按照名字的升序排列。(4)找出员工岗位是SALESMAN 的员工,并按照工资的降序排列(5)另一种升序降序的写法3. 总结sql语句的执行顺序3.1 简单的查询语句3.2 带有where,order by 的查询语句
1. 语法
order by 语句用于根据指定的列对结果集进行排序。
order by 语句默认按照升序对记录进行排序。
如果希望按照升序对记录进
1、单一字段排序order by 字段名称
作用: 通过哪个或哪些字段进行排序
含义: 排序采用 order by 子句,order by 后面跟上排序字段,排序字段可以放多个,多个采用逗号间隔,order by默认采用升序(asc),如果存在 where 子句,那么 order by 必须放到where 语句后面。
(1)、按照薪水由小到大排序(系统默认由小到...
MySQL的order by语句可以用于对查询结果集进行排序,常常需要使用多个字段来进行排序。在多字段排序时,遵循以下规则:
1. 排序字段的顺序按照order by语句中的先后顺序进行,先根据第一个排序字段排序,如果有相同的值,则根据第二个排序字段排序,以此类推。
2. 对于数字类型的字段,排序是根据数值大小进行的。对于文本类型的字段,排序则根据字面的字符顺序进行,即按照字典顺序排序。
3. 对于字符串类型的字段,如果希望进行不区分大小写的排序,则可以使用lower或upper函数进行转换,例如:order by lower(name)。
4. 可以在排序规则中指定升序(asc)或降序(desc),默认是升序。如果需要使用降序排序,则需要在字段后加上desc。
5. 如果存在NULL值,排序结果可能不稳定。可以使用order by字段1,字段2,coalesce(字段3,0)来指定NULL值排序规则。
总之,MySQL的order by语句可以很灵活地进行多字段排序,并且可以指定不同字段的排序规则,需要根据实际情况进行灵活运用。
### 回答2:
在MySQL中,ORDER BY多字段的排序规则分为以下三种:
1. 升序排序(ASC):使用ASC来排序,将会按照指定的字段按照从小到大的顺序进行排列。例如:
```mysql
SELECT * FROM `mysql_demo` ORDER BY `age` ASC, `name` ASC;
2. 降序排序(DESC):使用DESC来排序,将会按照指定的字段按照从大到小的顺序进行排列。例如:
```mysql
SELECT * FROM `mysql_demo` ORDER BY `age` DESC, `name` DESC;
3. 混合排序:在使用多个字段进行排序时,有时需要将一个字段按照升序排序,另一个字段按照降序排序。这时需要使用升序排序和降序排序的组合。例如:
```mysql
SELECT * FROM `mysql_demo` ORDER BY `age` ASC, `name` DESC;
在混合排序中,将按照`age`字段进行升序排序,如果`age`相同则按照`name`字段进行降序排序。
需要注意的是,当使用多个字段进行排序时,排序字段的顺序将会影响结果。例如:
```mysql
SELECT * FROM `mysql_demo` ORDER BY `name` ASC, `age` DESC;
在这个例子中,首先将按照`name`进行升序排序,如果`name`相同则按照`age`进行降序排序。如果将`name`和`age`的顺序颠倒,则会按照`age`进行降序排序,如果`age`相同则按照`name`进行升序排序。因此,在使用多个字段进行排序时,需要根据实际需求确定排序字段的顺序。
### 回答3:
在 MySQL 中,ORDER BY 子句用于指定排序的规则。对于多字段排序,可以使用多个排序字段来定义排序规则。一般来说,多字段排序是根据所需的字段中的第一个字段进行排序,并且在第一个字段具有相同值的记录中,使用第二个字段进行排序,以此类推。
例如,假设有一个包含以下字段的表:
id | name | age | gender
如果我们想按照年龄和性别来对记录进行排序,我们可以使用以下SQL语句:
SELECT * FROM table_name
ORDER BY age DESC, gender ASC;
在上面的SQL语句中,我们首先根据年龄字段进行降序排序,这意味着年龄最大的记录将会排在前面。如果某些记录拥有相同的年龄值,则这些记录将按照性别字段进行升序排序,这意味着男性记录将排在女性记录之前。
此外,还可以使用 ORDER BY 子句中的一个特殊关键字,即 NULLS FIRST 或 NULLS LAST,来控制空值的排序。例如,我们可以使用以下 SQL 语句来将空值排在最前面:
SELECT * FROM table_name
ORDER BY age DESC NULLS FIRST;
总之,在 MySQL 中,ORDER BY 子句可用于根据一个或多个字段对记录排序。多字段排序时,第一个排序字段是最重要的,随后的字段是副要素,可以用来细化排序规则。同时,还可以使用 NULLS FIRST 或 NULLS LAST 来控制空值在排序中的位置。