MySQL学习之(四)查询语句

目录

1单表查询

ORDER BY

HAVING

Group by分组查询语句

Limit

选择列

列别名

替换查询结果中的数据


1单表查询

顺序严格地排序。例如,一个HAVING子句必须位于GROUP BY子句之后,并位于ORDER BY子句之前。

ORDER BY

语法:[GROUP BY {列名 | 表达式 | 列编号} [ASC (升序)| DESC(降序)], ...

  

例:将员工信息按出生日期从大到小排序

 SELECT * FROM employees WHERE 1=1

 ORDER BY Birthday DESC

HAVING

语法:[HAVING 条件]

条件的定义和WHERE子句中的条件类似,不过HAVING子句中的条件可以包含聚合函数,而WHERE子句中则不可以。

SQL标准要求HAVING必须引用GROUP BY子句中的列或用于聚合函数中的列。不过,MySQL支持对此工作性质的扩展,并允许HAVING引用SELECT清单中的列和外部子查询中的列

 

例:查找雇员数超过2人的部门名称和员工数量

SELECT departments.`DepartmentName`,COUNT(*) AS '人数'

 FROM employees,departments

 WHERE employees.`DepartmentID`=departments.`DepartmentID`

 GROUP BY departments.`DepartmentName`

 HAVING COUNT(*)>2

Group by分组查询语句

 语法:

[GROUP BY {列名 | 表达式 | 列编号} [ASC (升序)| DESC(降序)]

[LIMIT {[偏移量,] 行数|行数OFFSET偏移量}]

GROUP BY子句后通常包含列名或表达式。MySQL对GROUP BY子句进行了扩展,可以在列的后面指定ASC(升序)或DESC(降序)。GROUP BY可以根据一个或多个列进行分组,也可以根据表达式进行分组,经常和聚合函数一起使用。

 

例:按部门列出该部门工作的员工人数

SELECT departments.`DepartmentName`,COUNT(*) AS '人数'

 FROM employees,departments

 WHERE employees.`DepartmentID`=departments.`DepartmentID`

 GROUP BY departments.`DepartmentName`

Limit

LIMIT子句是SELECT语句的最后一个子句,主要用于限制被SELECT语句返回的行数。

语法格式:

  LIMIT {[offset,] row_count

             | row_count OFFSET offset}

语法格式中的offset和row_count都必须是非负的整数常数,offset指定返回的第一行的偏移量,row_count是返回的行数。例如,“LIMIT 5”表示返回SELECT语句的结果集中最前面5行,而“LIMIT 3,5”则表示从第4行开始返回5行。值得注意的是初始行的偏移量为0而不是1。

例:查找Members表中注册时间最靠前的5位会员的信息。

SELECT *

FROM Members

ORDER BY 注册时间

LIMIT 5;

 

查找Book表中从第4条记录开始的5条记录。

    SELECT *

FROM Book

ORDER BY 学号

LIMIT 3, 5;

为了与PostgreSQL兼容,MySQL也支持LIMIT row_count OFFSET offset语法。所以将上面例子中的LIMIT子句换成“LIMIT 5 OFFSET 3”,结果一样

选择列

语法:SELECT 字段列表 FROM 表名称

例:USE Bookstore;

    SELECT 会员姓名,联系电话,注册时间

FROM Members;

说明:当在SELECT语句指定列的位置上使用*号时,表示选择表的所有列,如要显示Members表中所有列,不必将所有字段名一一列出,使用

SELECT * FROM Members;

 

列别名

语法:SELECT column_name [AS] column_alias

【例】

SELECT 书名 AS name, 作者 AS auther, 出版社 AS publisher

    FROM Book

WHERE 图书类别= '计算机';

注意:当自定义的列标题中含有空格时,必须使用引号将标题括起来。

      SELECT 学号 AS 'Student number', 姓名 AS 'Student name',

      总学分 AS mark

      FROM XS

      WHERE 专业名= '计算机';

 

替换查询结果中的数据

语法:CASE

       WHEN 条件1 THEN 表达式1

      WHEN 条件2 THEN 表达式2

        ……

       ELSE 表达式

END

例:

SELECT 图书编号, 书名,

        CASE

         WHEN 数量 IS NULL THEN  '尚未进货'

          WHEN 数量 < 5 THEN  '需进货'

          WHEN 数量 >=5 and 数量<=50 THEN  '库存正常'

         ELSE  '库存积压'

         END  AS  库存

     FROM Book;


持续更新中。。。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值