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

    二、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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

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

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

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

    三、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
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    GROUP BY作用:使用GROUP BY关键字对查询结果分组

    1. 对所有的数据进行分组统计
    2. 分组的依据字段可以有多个,并依次分组
    3. 与HAVING结合使用,进行分组后的数据筛选

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

    四、WHERE与HAVING对比:

    WHERE子句

    • 用来筛选 FROM 子句中指定的操作所产生的行

    GROUP BY子句

    • 用来分组 WHERE 子句的输出

    HAVING子句

    • 用来从分组的结果中筛选行

    五、子查询

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

    SELECTFROM 表名 WHERE 字段X  比较运算符(子查询)
    
    • 1
    1. 习惯上,外层查询称为父查询,圆括号中嵌入的查询称为子查询。
    2. 执行SQL语句时,先执行子查询,返回所有来自子查询的结果,再执行外围的父查询,返回查询的最终结果(即求解 方式为由里及外)。
    3. 将子查询和比较运算符联合使用,必须保证子查询返回的值不能多于一个(否则会出现提示信息:错误代号1242 Subquery returns more than 1 row)。(可以尝试用 in)

    2、IN子查询

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

    SELECTFROM 表名 WHERE 字段X  IN(子查询)
    
    • 1
    #查询课程名称为”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'))
    
    • 1
    • 2
    • 3
    • 4

    3、EXISTS 子查询

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

    • 子查询有返回结果: EXISTS子查询结果为TRUE,执行外层查询;
    • 子查询无返回结果: EXISTS子查询结果为FALSE, 外层查询不执行;
    SELECT …… FROM 表名 WHERE EXISTS(子查询);
    
    • 1
  • 相关阅读:
    【力扣】415. 字符串相加(大数相加)<模拟>
    【原创】浅谈指针(十)链表的写法
    Flowable动态配置监听器
    axios和SpringMVC数据交互(一维二维数组,JSON/form形式,@RequestBody/@RequestParam)
    基于Java开发小说自检测系统
    短路语法 [SUCTF 2019]EasySQL1
    Android 10.0 根据包名屏蔽手势导航左右滑动返回手势
    Android开发_记事本(1)
    Airtest学习笔记之自定义启动器
    mongodb6创建账号
  • 原文地址:https://blog.csdn.net/jule_zhou/article/details/126606553