DQL命令查询数据(一)

一,SELECT语法——排序

SELECT   [ALL | DISTINCT] 
{  * |  table.* | [ table.field1 [ as  alias1] [, table.field2 [as  alias2]][, …]] }
FROM  table_name  [ as  table_ alias  ]
    [ left|out|inner  join  table_name2 ]    #多表连接查询
    [ WHERE  … ]   	#指定结果需满足的条件
    [ GROUP BY …]	#指定结果按照哪几个字段来分组
    [ HAVING …]	#过滤分组的记录必须满足的次要条件
    [ ORDER BY… ]	#指定查询记录按一个或者多个条件排序
    [ LIMIT  {   [ offset,] row_count    |   row_count OFFSET offset   }] ;  #分页查询

  1. [ ] 括号代表可选的;
  2. { } 括号代表必须的;
  3. # MySQL语句中的注释符,也可以用 /*该处为注释*/

排序可以是升序(ASC)或者降序(DESC),如果不指定ASC或DESC,结果集默认按ASC升序排序。

#把成绩都降低10%后加5分,再查询及格成绩,并按照成绩从高到低排序。
SELECT studentno AS 学生编号,(studentresult*0.9+5 ) AS 综合成绩
FROM `result`
WHERE (`studentresult`*0.9+5) >=60
ORDER BY studentresult DESC;
#把成绩都降低10%后加5分,再查询及格成绩,并按照成绩从高到低排序,如果成绩
#相同,再按照课程编号进行排序。
SELECT studentno AS 学生编号,(studentresult*0.9+5 ) AS 综合成绩
FROM `result`
WHERE (`studentresult`*0.9+5) >=60
ORDER BY studentresult DESC,subjectno;

二、SELECT语法——分页查询

SELECT   [ALL | DISTINCT] 
{  * |  table.* | [ table.field1 [ as  alias1] [, table.field2 [as  alias2]][, …]] }
FROM  table_name  [ as  table_ alias  ]
    [ left|out|inner  join  table_name2 ]    #多表连接查询
    [ WHERE  … ]   	#指定结果需满足的条件
    [ GROUP BY …]	#指定结果按照哪几个字段来分组
    [ HAVING …]	#过滤分组的记录必须满足的次要条件
    [ ORDER BY… ]	#指定查询记录按一个或者多个条件排序
    [ LIMIT  {   [ offset,] row_count    |   row_count OFFSET offset   }] ;  #分页查询
# offset:偏移量
# row_count:显示的记录数

1、LIMIT 子句

LIMIT 子句:MySQL查询语句中使用LIMIT子句限制结果集

#查询课程编号为1的,考试日期为2019年的考试的前5名同学的学号和成绩
#应用1:限制显示的结果集的行数(小说排行榜  新闻只显示最新的5条)
SELECT studentno,studentresult 
FROM result
WHERE subjectno=1 AND YEAR(examdate)=2019
ORDER BY studentresult DESC
LIMIT 5

2、MySQL查询语句中使用LIMIT子句限制结果集

LIMIT 子句:MySQL查询语句中使用LIMIT子句限制结果集

#应用2:分页查询(分页显示数据)
#查询学生表的学号、姓名、电话 ,每页显示2条记录
#第一条记录的偏移量为0
#第一页
#偏移量 0 1
SELECT studentno,studentname,phone FROM student
LIMIT 0,2

三、SELECT语法——分组查询

SELECT   [ALL | DISTINCT] 
{  * |  table.* | [ table.field1 [ as  alias1] [, table.field2 [as  alias2]][, …]] }
FROM  table_name  [ as  table_ alias  ]
    [ left|out|inner  join  table_name2 ]    #多表连接查询
    [ WHERE  … ]   	#指定结果需满足的条件
    [ GROUP BY …]	#指定结果按照哪几个字段来分组
    [ HAVING …]	#过滤分组的记录必须满足的次要条件
    [ ORDER BY… ]	#指定查询记录按一个或者多个条件排序
    [ LIMIT  {   [ offset,] row_count    |   row_count OFFSET offset   }] ;  #分页查询

GROUP BY作用:使用GROUP BY关键字对查询结果分组 
1.对所有的数据进行分组统计

2.分组的依据字段可以有多个,并依次分组

3.与HAVING结合使用,进行分组后的数据筛选 


GROUP BY子句经常和聚合函数结合使用完成分组统计功能


四、WHERE与HAVING对比: 


WHERE子句 
用来筛选 FROM 子句中指定的操作所产生的行 
GROUP BY子句 
用来分组 WHERE 子句的输出 
HAVING子句 
用来从分组的结果中筛选行

五、子查询

子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其他子查询中的查询。
子查询在WHERE语句中的一般用法

SELECT … FROM 表名 WHERE 字段X  比较运算符(子查询)

1.习惯上,外层查询称为父查询,圆括号中嵌入的查询称为子查询。

2.执行SQL语句时,先执行子查询,返回所有来自子查询的结果,再执行外围的父查询,返回查询的最终结果(即求解 方式为由里及外)。

3.将子查询和比较运算符联合使用,必须保证子查询返回的值不能多于一个(否则会出现提示信息:错误代号1242 Subquery returns more than 1 row)。(可以尝试用 in)
 

2、IN子查询

IN后面的子查询可以返回多条记录。
常用IN替换等于(=)的子查询。

SELECT … FROM 表名 WHERE 字段X  IN(子查询)
#查询课程名称为”JavaOOP”且考试分数大于60分的学生信息(学号、姓名和联系电话)。
SELECT studentno,studentname,phone FROM student  WHERE studentno IN
(SELECT studentno FROM result WHERE studentresult>60 AND 
subjectno=(SELECT subjectno FROM `subject`WHERE subjectname='JAVAOOP'))

3、EXISTS 子查询 

EXISTS 子查询:带有EXISTS的子查询不返回任何记录的数据,只返回逻辑值“True”或“False”。
有结果为“True”,执行语句;无结果为“False”,不执行语句。

EXISTS 子查询:带有EXISTS的子查询不返回任何记录的数据,只返回逻辑值“True”或“False”。
有结果为“True”,执行语句;无结果为“False”,不执行语句。

SELECT …… FROM 表名 WHERE EXISTS(子查询);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值