MySQL中select语句使用order按行排序

本文介绍MySQL数据库中执行select查询语句,并对查询的结果使用order by
子句进行排序。再来回顾一下SQL语句中的select语句的语法:Select
语句的基本语法:Select 列的集合 from 表名 where 条件 order by
排序字段和方式如果要对查询结果按某个字段排序,则要使用order by
子句,如下:select * from 表名 order by 字段名称
排序方式下面来看两个例子,第一个查询test表中所有数据,并按t_id正序排列;第二个查询与第一个相反,是逆序排列。mysql
select t_id,t_name from test order by t_id;+——+——–+| t_id |
t_name |+——+——–+| 1 | name1 || 2 | name2 |+——+——–+2
rows in set (0.00 sec)mysql select t_id,t_name from test order by
t_id desc;+——+——–+| t_id | t_name |+——+——–+| 2 |
name2 || 1 | name1 |+——+——–+2 rows in set (0.00
sec)注意:正序排序时,可以使用asc作为排序方式的关键词,也可以不使用。逆序时,一定要使用desc作为关键词。关于MySQL中select语句使用order按行排序,本文就介绍这么多,希望对大家有所帮助,谢谢!

 

mysql> create database if not
exists mydb2 character set
utf8;

mysql> create table employee(

   ->   id int,

   ->  name varchar(20),

   ->  sex varchar(20),

   ->  birthday date,

   ->  entry_date date,

   ->  job varchar(20),

   -> salsay float(5,1),

   ->  resume text);

Query OK, 0 rows affected (1.05 sec)

Insert

语法L

INSERT
INTO       table[(column[, column…])]

VALUES        (value[,value…]);

l      插入的数据应与字段的数据类型相同。

l      数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。

l      在values中列出的数据位置必须与被加入的列的排列位置相对应。

l       字符和日期型数据应包含在单引号中。

l      插入空值,不指定或insert into table value(null)

l      注意:字符和日期要包含在单引号中。

 

mysql> insert into employee values(1,’java’,’male’,’1990-04-23′,’1990-05-08′,’pm

‘,5000.1,’hello’);

Query OK, 1 row affected (0.11 sec)

mysql> insert into employee
values(2,’mysql’,’male’,’1990-04-23′,’1990-05-08′,’pm’,5000.1,’hello’);

Query OK, 1 row affected(0.07 sec)

 

mysql> select *from employee;

+——+——-+——+————+————+——+——–+——–+

| id  | name  | sex  | birthday  | entry_date | job  | salsay | resume|

+——+——-+——+————+————+——+——–+——–+

|   1 | java  | male | 1990-04-23| 1990-05-08 | pm   | 5000.1 | hello  |

|   2 | mysql | male | 1990-04-23 | 1990-05-08| pm   | 5000.1 | hello  |

+——+——-+——+————+————+——+——–+——–+

2 rows in set (0.00 sec)

–删除

语法:

delete from tbl_name       

       [WHEREwhere_definition]   

l      如果不使用where子句,将删除表中所有数据。

l      delete语句不能删除某一列的值(可使用update)

l      使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop
table语句。用于删除数据量不大的数据

l      同insert和update一样,从一个表中删除记录将引起其它表的参照完整性问题,在修改数据库数据时,

l      删除表中数据也可使用TRUNCATE
TABLE语句,它和delete有所不同。TRUNCATE(复制表结构->一次性删除整表->自动恢复表结构,适合删除数据量较大的数据,不能按条件进行删除

l      DELETE(逐行删除记录),按行删除表的记录,但会保留表,适合删除数据量不大的数据,可按条件删除

drop table:删除表的本身

删除记录时,一定要留意表间的关联关系

mysql> deletefrom employee where id=1;

Query OK, 1 row affected (0.10 sec)

 

mysql> select * from employee;

+——+——-+——+————+————+——+——–+——–+

| id  | name  | sex  | birthday  | entry_date | job  | salsay |resume |

+——+——-+——+————+————+——+——–+——–+

|   2 | mysql | male | 1990-04-23 | 1990-05-08| pm   | 5000.1 | hello  |

+——+——-+——+————+————+——+——–+——–+

1 row in set (0.00 sec)

 

–更新

l      使用 update语句修改表中数据。

语法:

UPDATE       澳门金沙vip,tbl_name   

       SETcol_name1=expr1[, col_name2=expr2 …]  
 

       [WHEREwhere_definition

l      UPDATE语法可以用新值更新原有表行中的各列。

l      SET子句指示要修改哪些列和要给予哪些值。

l      WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行

–先再插入几条数据

mysql> insert into employee
values(3,’c#’,’female’,’1991-04-23′,’1995-05-08′,’pm’,6000.1,’how’);

Query OK, 1 row affected (0.09 sec)

 

mysql> insert into employee values(4,’oracle’,’male’,’1950-04-23′,’1980-05-08′,’pm’,1000.1,’are’);

Query OK, 1 row affected (0.13 sec) 

 

mysql> insert into employee values(5,’sqlserver’,’female’,’1970-04-23′,’1980-05-08′,’crm’,4000.1,’you’);

Query OK, 1 row affected (0.19 sec)

–将所人员的工资修改为5000

mysql> select * from employee;

+——+———–+——–+————+————+——+——–+——–+

| id  | name      | sex    | birthday  | entry_date | job  | salsay
|resume |

+——+———–+——–+————+————+——+——–+——–+

|   2 | mysql     | male   | 1990-04-23| 1990-05-08 | pm   | 5000.1 |
hello  |

|   3 | c#        | female | 1991-04-23| 1995-05-08 | pm   | 6000.1 |
how    |

|   4 | oracle    | male   | 1950-04-23| 1980-05-08 | pm   | 1000.1 |
are    |

|   5 | sqlserver | female | 1970-04-23| 1980-05-08 | crm  | 4000.1 |
you    |

+——+———–+——–+————+————+——+——–+——–+

4 rows in set (0.00 sec)

 

mysql> update employee set salsay=5000;

Query OK, 4 rows affected (0.05 sec)

Rows matched: 4  Changed: 4 Warnings: 0

 

mysql> select * from employee;

+——+———–+——–+————+————+——+——–+——–+

| id  | name      | sex    | birthday  | entry_date | job  | salsay |
resume|

+——+———–+——–+————+————+——+——–+——–+

|   2 | mysql     | male   | 1990-04-23| 1990-05-08 | pm   | 5000.0 |
hello  |

|   3 | c#        | female | 1991-04-23| 1995-05-08 | pm   | 5000.0 |
how    |

|    4| oracle    | male   | 1950-04-23| 1980-05-08 | pm   | 5000.0 |
are    |

|   5 | sqlserver | female | 1970-04-23| 1980-05-08 | crm  | 5000.0 |
you    |

+——+———–+——–+————+————+——+——–+——–+

4 rows in set (0.00 sec)

 

–修改id为2的员工的工资为8000

mysql> update employee set salsay=8000
where id=2;

Query OK, 1 row affected (0.05 sec)

Rows matched: 1  Changed: 1 Warnings: 0

 

mysql> select * from
employee where id=2;

+——+——-+——+————+————+——+——–+——–+

| id  | name  | sex  | birthday  | entry_date | job  | salsay |resume |

+——+——-+——+————+————+——+——–+——–+

|   2 | mysql | male | 1990-04-23 | 1990-05-08| pm   | 8000.0 | hello  |

+——+——-+——+————+————+——+——–+——–+

1 row in set (0.00 sec)

 

=========================select=======================

mysql> create table student(

   ->  id int,

   ->  name varchar(20),

   ->  chinese float,

   ->  english float,

    ->  math float

   -> );

Query OK, 0 rows affected (1.37 sec)

 

mysql>

mysql> insert into
student(id,name,chinese,english,math) values(1,’张小明’,89,78,90);

Query OK, 1 row affected (0.12 sec)

 

mysql> insert into
student(id,name,chinese,english,math)
values(2,’李进’,67,98,56);

Query OK, 1 row affected (0.06 sec)

 

mysql> insert into
student(id,name,chinese,english,math) values(3,’王五’,87,78,77);

Query OK, 1 row affected (0.37 sec)

 

mysql> insert into
student(id,name,chinese,english,math) values(4,’李一’,88,98,90);

Query OK, 1 row affected (0.06 sec)

 

mysql> insert into
student(id,name,chinese,english,math)
values(5,’李来财’,82,84,67);

Query OK, 1 row affected (0.04 sec)

 

mysql> insert into
student(id,name,chinese,english,math)
values(6,’张进宝’,55,85,45);

Query OK, 1 row affected (0.09 sec)

 

mysql> insert into
student(id,name,chinese,english,math)
values(7,’黄蓉’,75,65,30);

Query OK, 1 row affected (0.05 sec)

 

mysql> insert into
student(id,name,chinese,english,math) values(8,’张一李’,75,65,30);

Query OK, 1 row affected (0.25 sec)

 

mysql> insert into
student(id,name,chinese,english,math) values(9,’何李’,75,65,30);

Query OK, 1 row affected (0.06 sec)

 

mysql> insert into
student(id,name,chinese,english,math) values(10,’单’,75,65,30);

Query OK, 1 row affected (0.14 sec)

 

mysql> insert into
student(id,name,chinese,english,math) values(11,’李’,75,65,NULL);

Query OK, 1 row affected (0.11 sec)

 

mysql> insert into
student(id,name,chinese,english,math) values(12,’jack’,75,65,40);

Query OK, 1 row affected (0.08 sec)

 

mysql> insert into
student(id,name,chinese,english,math)values(13,’marry’,75,65,60);

Query OK, 1 row affected (0.12 sec)

 

mysql>

mysql> select * from student;

+——+———–+———+———+——+

| id  | name      | chinese | english |math |

+——+———–+———+———+——+

|   1 | 张小明    |     89 |      78 |   90 |

|   2 | 李进      |     67 |      98 |   56 |

|   3 | 王五      |     87 |      78 |   77 |

|   4 | 李一      |     88 |      98 |   90 |

|   5 | 李来财    |     82 |      84 |   67 |

|   6 | 张进宝    |     55 |      85 |   45 |

|   7 | 黄蓉      |     75 |      65 |   30 |

|   8 | 张一李    |     75 |      65 |   30 |

|   9 | 何李      |     75 |      65 |   30 |

|  10 | 单        |     75 |      65 |   30 |

|  11 | 李        |     75 |      65 | NULL |

|  12 | jack      |      75 |     65 |   40 |

|  13 | marry     |      75 |     65 |   60 |

+——+———–+———+———+——+

13 rows in set (0.00 sec)

 

l      基本select语句

语法:

SELECT [DISTINCT]
*|{column1,column2. column3..}

              FROM   table;

l      Select指定查询哪些列的数据。

l      column指定列名。

l      *号代表查询所有列。

l      From指定查询哪张表。

l      DISTINCT可选,指显示结果时,是否剔除重复数据

查询表中所有学生的信息

select * from student;

select
id,name,match,chinese,english from
student;

select name,id,match,english,chinese
from student;

–查询表中所有学生的姓名和英语成绩

mysql> select name,english from student;

+———–+———+

| name      | english |

+———–+———+

| 张小明    |     78 |

| 李进      |     98 |

| 王五      |     78 |

| 李一      |     98 |

| 李来财    |     84 |

| 张进宝    |     85 |

| 黄蓉      |     65 |

| 张一李    |     65 |

| 何李      |     65 |

| 单        |     65 |

| 李        |     65 |

| jack      |     65 |

| marry     |     65 |

+———–+———+

13 rows in set(0.00 sec)

–select distinct/*/列名 from表名

–使用distinct过滤重复数据

mysql> select distinct english
from student;

+———+

| english |

+———+

|      78 |

|      98 |

|      84 |

|      85 |

|      65 |

+———+

5 rows in set(0.00 sec)

 

— select 表达式/对列名加别名 from 表名  NULL+X=NULL

语法:

SELECT
*|{column1|expression,column2|expression,..}

        FROM   table;

 

-在所有学生数学分数上加10分的特长分

–SELECT column as别名 from 表名;使用as别名

 

mysql> select name,math+10 as
数学 from student;

+———–+——–+

| name      | 数学   |

+———–+——–+

| 张小明    |   100 |

| 李进      |    66 |

| 王五      |    87 |

| 李一      |   100 |

| 李来财    |    77 |

| 张进宝    |    55 |

| 黄蓉      |    40 |

| 张一李    |    40 |

| 何李      |    40 |

| 单        |    40 |

| 李        |  NULL |

| jack      |    50 |

| marry     |    70 |

+———–+——–+

13 rows in set(0.00 sec)| marry     |         75 |

+———–+————+

13 rows in set(0.00 sec)

–统计每个学生的总分:

mysql> select
name,math+english+chinese as 总分 from student;

+———–+——–+

| name      | 总分   |

+———–+——–+

| 张小明    |   257 |

| 李进      |   221 |

| 王五      |   242 |

| 李一      |   276 |

| 李来财    |   233 |

| 张进宝    |   185 |

| 黄蓉      |   170 |

| 张一李    |   170 |

| 何李      |   170 |

| 单        |   170 |

| 李        |  NULL |

| jack      |   180 |

| marry     |   200 |

+———–+——–+

13 rows in set(0.00 sec)

–where子句,出现在from后面,where是按行筛选

 

 

 

比较运算符

>   <   <=   >=   =    <>

大于、小于、大于(小于)等于、不等于

BETWEEN  …AND…

显示在某一区间的值

IN(set)

显示在in列表中的值,例:in(100,200)

LIKE ‘张pattern’

模糊查询(重点)

IS NULL/IS NOT NULL

判断是否为空

 

逻辑运算符

and &&

多个条件同时成立

or ||

多个条件任一成立

not !

不成立,例:where not(salary>100);

Like语句中,%代表零个或多个任意字符,_代表一个字符,例first_name like
‘_a%’;

–查询姓名为张小明的记录

mysql> select * from student
where name=’张小明’;

+——+———–+———+———+——+

| id   | name     | chinese | english | math |

+——+———–+———+———+——+

|    1 | 张小明    |      89 |     78 |   90 |

+——+———–+———+———+——+

1 row in set(0.00 sec)

–查询英语大于90的学生

mysql> select * from student where english>90;

+——+——–+———+———+——+

| id   | name  | chinese | english | math |

+——+——–+———+———+——+

|    2 | 李进   |      67 |     98 |   56 |

|    4 | 李一   |      88 |     98 |   90 |

+——+——–+———+———+——+

2 rows in set(0.00 sec)

–查询总分大于200的

mysql> select name,
(chinese+english+math) as总分from
student where
(chinese+english+math)>200;

+———–+——–+

| name      | 总分   |

+———–+——–+

| 张小明    |   257 |

| 李进      |   221 |

| 王五      |   242 |

| 李一      |   276 |

| 李来财    |   233 |

+———–+——–+

5 rows in set(0.00 sec)

–查询英语分数在80-90之间的同学。

mysql> select *

    -> from student

    -> where english>=80 and
english<=90;

+——+———–+———+———+——+

| id   | name     | chinese | english | math |

+——+———–+———+———+——+

|    5 | 李来财    |      82 |     84 |   67 |

|    6 | 张进宝    |      55 |     85 |   45 |

+——+———–+———+———+——+

2 rows in set(0.00 sec)

或 (推荐下面的方式)

mysql> select *

    -> from student

    -> where english between 80 and 90;

+——+———–+———+———+——+

| id   | name     | chinese | english | math |

+——+———–+———+———+——+

|    5 | 李来财    |      82 |     84 |   67 |

|    6 | 张进宝    |      55 |     85 |   45 |

+——+———–+———+———+——+

2 rows in set (0.00 sec)            

–查询数学分数为89,90,91的同学。

 

–方式一

mysql> select *

    -> from student

    -> where math=89 or math= 90
or math=91;

+——+———–+———+———+——+

| id   | name     | chinese | english | math |

+——+———–+———+———+——+

|    1 | 张小明    |      89 |     78 |   90 |

|    4 | 李一      |      88 |     98 |   90 |

+——+———–+———+———+——+

2 rows in set(0.00 sec)

–方式二

mysql> select * from student
where math in(89,90,91);

+——+———–+———+———+——+

| id   | name     | chinese | english | math |

+——+———–+———+———+——+

|    1 | 张小明    |      89 |     78 |   90 |

|    4 | 李一      |      88 |     98 |   90 |

+——+———–+———+———+——+

2 rows in set(0.00 sec)

–查询数学分数不为89,90,91的同学。

mysql> select * from student
where math not in(89,90,91);

+——+———–+———+———+——+

| id   | name     | chinese | english | math |

+——+———–+———+———+——+

|    2 | 李进      |      67 |     98 |   56 |

|    3 | 王五      |      87 |     78 |   77 |

|    5 | 李来财    |      82 |     84 |   67 |

|    6 | 张进宝    |      55|      85 |   45 |

|    7 | 黄蓉      |      75 |     65 |   30 |

|    8 | 张一李    |      75 |     65 |   30 |

|    9 | 何李      |      75 |     65 |   30 |

|   10 | 单        |      75 |     65 |   30 |

|   12 | jack      |     75 |      65 |   40 |

|   13 | marry     |     75 |      65 |   60 |