GVKun编程网logo

SELECT UNION和ORDER BY在mysql ..如何?(select union select)

27

本文将为您提供关于SELECTUNION和ORDERBY在mysql..如何?的详细介绍,我们还将为您解释selectunionselect的相关知识,同时,我们还将为您提供关于03-mySQLsel

本文将为您提供关于SELECT UNION和ORDER BY在mysql ..如何?的详细介绍,我们还将为您解释select union select的相关知识,同时,我们还将为您提供关于03-mySQL select、CONCAT、order BY 数据查询语句、mysql Incorrect usage of UNION and ORDER BY 错误备忘、MySQL order by 在 union 中使用实例分析、mysql order by 对select查询结果集排序的实用信息。

本文目录一览:

SELECT UNION和ORDER BY在mysql ..如何?(select union select)

SELECT UNION和ORDER BY在mysql ..如何?(select union select)

我想从单个表中获取所有行,但是以不同的方式对其进行排序。例如我写

(SELECT * FROM table1
ORDER BY fieldA ASC LIMIT 3
)
UNION
(
SELECT * FROM table1
ORDER BY FieldB DESC
)

它的工作原理是,忽略了(FIELDB DESC)的二阶…有人知道为什么吗?谢谢

03-mySQL select、CONCAT、order BY 数据查询语句

03-mySQL select、CONCAT、order BY 数据查询语句

03-mySQL  select、CONCAT、order BY 数据查询语句

/*一、 插入

INSERT INTO SUBJECT (`name`, classhour, majorid)
VALUES
VALUES
    (''工商管理'', 40, ''16'')*/


-- 查询student表中的数据
-- SELECT *FROM student

-- 根据查询条件查询数据   WHERE
-- SELECT *FROM student
-- WHERE  majorid=''计算机''
-- select * FROM subject  where majorid=8

-- 查询课时数在40~55之间的科目数  BETWEEN...AND...
-- select *FROM `subject` WHERE classhour BETWEEN 40 and 55

-- 查询majorid是8或16的数据  in() / OR
-- SELECT * FROM  `subject` WHERE majorid in (8,16)
-- SELECT *FROM `subject`    WHERE majorid=8 or majorid=16

-- 查询majorid 不是16 的数据  not IN  !=
-- SELECT *FROM `subject` WHERE majorid !=16
-- SELECT *FROM `subject` WHERE majorid not IN(16)

-- 查找name=Annie的学生  SELECT 列 from 表 where 条件
-- SELECT * FROM student WHERE NAME=''Annie''

-- 查询考试不及格的成绩  >  <  
-- SELECT *FROM result WHERE  score<60

-- 查询科目编号majorid是16 并且 课时数classhour55以下的科目数据    AND
-- SELECT *FROM `subject` WHERE majorid=16 AND  classhour<55


-- 列别名   查询时使用,不修改原始表
-- 1.使用 as  给查询出的列取别名  select ''id'' AS ''编号'', NAME AS ''学科名'' FROM `subject`
-- select  NAME AS ''学科名'' FROM `subject`;
-- 2.给常量取别名 SELECT 1 as ''数字''
-- SELECT  1 AS  ''数字'' FROM    `subject`
-- 3.为组合生成的列 取别名    CONCAT(str1,str2,...) 函数进行字符串拼接
-- SELECT CONCAT(NAME,''&'',classhour ,''*'',majorid) AS  ''组合'' FROM `subject`
--     --SQL 中单引号和双引号都可以表示字符串
--      -‘+’符号只能做算数运算,不能当连字符用
-- 4.在取别名的时候  AS 关键字可以省略不写
--   SELECT id ''编号'', name ''名称'' FROM  major

-- 条件语句
-- 1.判断咧为空 IS NULL  和 不为空  IS NOT NULL
-- SELECT *FROM result  WHERE score IS NULL
-- SELECT *FROM result  WHERE score IS  NOT NULL
-- 2.限制查询出的行数   LIMIT 开始位置,返回行数    LIMIT 放在语句末尾
-- 查询五行
-- SELECT * FROM result LIMIT 5
-- 查询第一行到第五行的数据
-- SELECT * FROM result LIMIT  1,5
-- 查询第五行开始 往后追加五行
-- SELECT * FROM result LIMIT 5,5
-- -----------------------------------
-- 查询 majorid=8 和10 的科目名称 IN 的用法
-- SELECT *FROM  subject  WHERE  majorid in (8,10)
-- 查询不是 8和 10的数据   NOT IN
-- SELECT *FROM  subject  WHERE  majorid   not in (8,10)
-- 去除重复记录  DISTINCT
-- SELECT DISTINCT NAME FROM `subject`

/*
模糊查询
查询出所有姓张的学生信息
SELECT *FROM student where  name like ''张%''
查询出姓名中带有 马 字的学生信息
SELECT *from  student where name  like ''%马%''
查询出只有名字里有马的学生信息
select *from student  where  name like ''_马%''
通配符定义:
_  匹配一个 任意字符
%  匹配任意多个任意字符
*/


-- 排序
-- order BY <列名> 根据某列排序 升序 ASC
-- SELECT * from  result order by  score  
-- 降序  DESC
-- SELECT * from  result order by  score  DESC
-- 多列排序
-- select *from `subject` Order by majorid ASC , classhour  DESC

/*综合应用
1.已知student 的emali  中有空值
2.在使用email 正序排序的时候如何将空值放在查询结果末尾
3.运用知识点 
case when 语句
多列 排序
表别名
列别名
SELECT 
CASE
WHEN emali IS NULL THEN 
''1''
ELSE 
''0''
END AS tem ,
stu.*
FROM
student stu
ORDER BY
tem,
stu .email

*/

-- 文本处理函数
-- `LEFT`(str,len) 返回从左边起左边指定长度的字符
-- SELECT name ,LEFT(name ,2)FROM student
-- `RIGHT`(str,len) 返回从右边起左边指定长度的字符
-- SELECT NAME,RIGHT(name ,3) FROM student
-- LOWER(str)将字符串转换为小写
-- SELECT NAME , LOWER(name ) from student
-- UPPER(str) 将字符串转换为大写
-- SELECT name ,UPPER(name ) from student
-- LENGTH(str)返回字符串的长度
-- SELECT name ,LENGTH(name ) from student
-- LTRIM(str) 去掉字符串左边空格
-- SELECT name ,ltrim(NAME) FROM student;
-- RTRIM(str) 去掉字符串右边的空格
-- SELECT name , RTRIM(name )FROM  student;
-- TRIM(str) 去掉字符串左右两边的空格
-- SELECT name ,TRIM( name ) from student

-- 日期时间函数


-- 聚合函数
-- MIN(expr)求最小值;
-- MAX(expr)求最大值;
-- COUNT(expr)统计个数;
-- SUM(expr) 求和
-- AVG([DISTINCT] expr)求平均值
-- 1.统计student 表中人数  结果=9
-- SELECT COUNT(*) FROM student 
-- 注:COUNT(expr) 函数的参数可以为 *、列名‘或一个数字
--    若为列则不会统计该列 NULL(为空)的数据

/*- 求 majorid 为8 的课时数
- 1.求最大课时是多少  结果1=65
SELECT MAX(classhour)FROM `subject` WHERE majorid=8;
-- 2.求最少课时 结果2 45
SELECT MIN(classhour) from `subject` WHERE majorid=8;
-- 3.平均课时  结果3 56.8333
SELECT AVG( classhour) from `subject` WHERE majorid=8
注: 常见问题
聚合函数用来统计多条数据的值,因此使用聚合函数的
查询语句,select子句中的其他列是没有意义的
• 例如: score 与 studentno 没有直接关系
• select avg(score),studentno from result where
subjectid=1

*/


 

mysql Incorrect usage of UNION and ORDER BY 错误备忘

mysql Incorrect usage of UNION and ORDER BY 错误备忘

出现这个错误的语句是酱紫的

select xxx from aaa order by xxx
union all
select yyy from bbb order by yyy

错误原因居然是,如果同时用了union all 和 order by,union all的子句要加上括号。

所以下面的写法就不会报错了。

(select xxx from aaa order by xxx)
union all
(select yyy from bbb order by yyy)

 

MySQL order by 在 union 中使用实例分析

MySQL order by 在 union 中使用实例分析

下面是用于例子测试的两张原始数据表:

article 文章表:

aid title content
1 文章1 文章1正文内容...
2 文章2 文章2正文内容...
3 文章3 文章3正文内容...

blog 日志表:

bid title content
1 日志1 日志1正文内容...
2 文章2 文章2正文内容...
3 日志3 日志3正文内容...

UNION 子句中使用 ORDER BY

子句中使用 ORDER BY,即将 SELECT 子句的结果先排序,然后再把这些子句查询的结果进行集合。

在子句中使用 ORDER BY,由于优先级问题,需要将整个子句加圆括号(),且必须与 LIMIT 结合使用:

1

2

3

(SELECT aid,title FROM article ORDER BY aid DESC LIMIT 10)

UNION ALL

(SELECT bid,title FROM blog ORDER BY bid DESC LIMIT 10)

登录后复制

返回查询结果如下:

aid title
3 文章3
2 文章2
1 文章1
3 日志3
2 文章2
1 日志1

UNION 整句中使用 ORDER BY

如果想使用 ORDER BY 或 LIMIT 来对全部 UNION 结果进行分类或限制,则应对单个 SELECT 语句加圆括号,并把 ORDER BY 或 LIMIT 放到最后一个的后面。

1

2

3

4

(SELECT aid,title FROM article)

UNION ALL

(SELECT bid,title FROM blog)

ORDER BY aid DESC

登录后复制

返回查询结果如下:

aid title
3 文章3
3 日志3
2 文章2
2 文章2
1 文章1
1 日志1

整句中使用 ORDER BY,去掉 SELECT 子句中的圆括号虽然结果是一样的,但为了语句清晰,建议不要省略圆括号。

UNION ORDER BY 应用于别名

如果 SELECT 中使用到了字段别名,则 OEDER BY 必须引用别名:

1

(SELECT a AS b FROM table) UNION (SELECT ...) ORDER BY b

登录后复制

 

mysql order by 对select查询结果集排序

mysql order by 对select查询结果集排序

mysql order by 语法:

1

2

SELECT field1, field2,...fieldN table_name1, table_name2...

ORDER BY field1, [field2...] [ASC [DESC]]

登录后复制

说明: 

  • 你可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。
  • 你可以设定多个字段来排序。
  • 你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升排列。
  • 你可以添加 WHERE...LIKE 子句来设置条件。

 

mysql order by实例

首先创建一张表:

1

2

3

4

5

6

7

8

9

10

11

mysql&gt; CREATE TABLE Employee(

    -&gt;     id            int,

    -&gt;     first_name    VARCHAR(15),

    -&gt;     last_name     VARCHAR(15),

    -&gt;     start_date    DATE,

    -&gt;     end_date      DATE,

    -&gt;     salary        FLOAT(8,2),

    -&gt;     city          VARCHAR(10),

    -&gt;     description   VARCHAR(15)

    -&gt; );

Query OK, 0 rows affected (0.03 sec)

登录后复制

向表中插入若干数据:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

mysql&gt; insert into Employee(id,first_name, last_name, start_date, end_Date,salary,City,      Description)

    -&gt;values (1,''Jason'',    ''Martin''''19960725''''20060725'', 1234.56, ''Toronto''''Programmer'');

Query OK, 1 row affected (0.02 sec)

 

mysql&gt;

mysql&gt; insert into Employee(id,first_name, last_name, start_date, end_Date,salary,City,       Description)

    -&gt;values(2,''Alison'',   ''Mathews''''19760321'', ''19860221'', 6661.78, ''Vancouver'',''Tester'');

Query OK, 1 row affected (0.00 sec)

 

mysql&gt;

mysql&gt; insert into Employee(id,first_name, last_name, start_date, end_Date,salary,City,       Description)

    -&gt;values(3,''James'',    ''Smith'',    ''19781212'', ''19900315'', 6544.78, ''Vancouver'',''Tester'');

Query OK, 1 row affected (0.00 sec)

 

mysql&gt;

mysql&gt; insert into Employee(id,first_name, last_name, start_date, end_Date,salary,City,       Description)

    -&gt;values(4,''Celia'',    ''Rice'',     ''19821024'', ''19990421'', 2344.78, ''Vancouver'',''Manager'');

Query OK, 1 row affected (0.00 sec)

 

mysql&gt;

mysql&gt; insert into Employee(id,first_name, last_name, start_date, end_Date,salary,City,       Description)

    -&gt;values(5,''Robert'',   ''Black'',    ''19840115'', ''19980808'', 2334.78, ''Vancouver'',''Tester'');

Query OK, 1 row affected (0.00 sec)

 

mysql&gt;

mysql&gt; insert into Employee(id,first_name, last_name, start_date, end_Date,salary,City,       Description)

    -&gt;values(6,''Linda'',    ''Green'',    ''19870730'', ''19960104'', 4322.78,''New York''''Tester'');

Query OK, 1 row affected (0.00 sec)

 

mysql&gt;

mysql&gt; insert into Employee(id,first_name, last_name, start_date, end_Date,salary,City,       Description)

    -&gt;values(7,''David'',    ''Larry'',    ''19901231'', ''19980212'', 7897.78,''New York'',''Manager'');

Query OK, 1 row affected (0.00 sec)

 

mysql&gt;

mysql&gt; insert into Employee(id,first_name, last_name, start_date, end_Date,salary,City,       Description)

    -&gt;values(8,''James'',    ''Cat'',     ''19960917''''20020415'', 1232.78,''Vancouver'', ''Tester'');

Query OK, 1 row affected (0.02 sec)

登录后复制

查询数据并对结果集排序:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

mysql&gt; SELECT first_name, start_date FROM employee ORDER BY start_date;

+------------+------------+

| first_name | start_date |

+------------+------------+

| Alison     | 1976-03-21 |

| James      | 1978-12-12 |

| Celia      | 1982-10-24 |

| Robert     | 1984-01-15 |

| Linda      | 1987-07-30 |

| David      | 1990-12-31 |

| Jason      | 1996-07-25 |

| James      | 1996-09-17 |

+------------+------------+

8 rows in set (0.02 sec)

登录后复制

今天关于SELECT UNION和ORDER BY在mysql ..如何?select union select的分享就到这里,希望大家有所收获,若想了解更多关于03-mySQL select、CONCAT、order BY 数据查询语句、mysql Incorrect usage of UNION and ORDER BY 错误备忘、MySQL order by 在 union 中使用实例分析、mysql order by 对select查询结果集排序等相关知识,可以在本站进行查询。

本文标签: