• MySQL学习总结(五)表数据查询


    查询数据记录,是指从数据库对象表中获取所要查询的数据记录,该操作可以说是数据最基本的操作之一,也是使用频率最高、最重要的数据操作。

    1、单表数据记录查询

    1.1、简单数据查询

    SELECT field1,field2,…,fieldn FROM table_name,filed可以是表中所有的字段,也可以是部分字段。

    SELECT * FROM table_name ,从表中查询所有的数据。*符号可以代替所有的字段,但是这种方式不够灵活,只能按照表中字段的顺序固定进行显示,不能够随便改变字段的显示顺序。

    1.2、避免重复数据查询

    例如查询雇员表中,job的数据,雇员表的数据如下:

    QQ截图20160530103121

    我们从数据表中发现工作一列的记录数据是有重复的,如果直接查询  SELECT job FROM t_emp,会发现结果也是有重复的,此时我们需要一个关键字 DISTINCT,SELECT DISTINCT job FROM t_emp,此时就会将结果重复的记录给去除了,如下:

    QQ截图20160530103533QQ截图20160530103542

    同理,我们也可以去除多列的重复的字段,DISTINCT后面的所有的字段只要有一个字段不一样,就表示不是重复记录。例如SELECT DISTINCT job,mgr FROM t_emp 和 SELECT DISTINCT mgr,job FROM t_emp ,虽然查询字段的顺序不一样但是记录结果是一致的。

    QQ截图20160530103700QQ截图20160530103715

     

    1.3、在查询中实现运算

    例如在员工表中,已经有了员工的工资了,但是我们想要员工的年薪,则可以如此实现:SELECT ename,sal,sal*12 AS yearsal FROM t_emp ,其中AS是MySQL中提供的一种修改字段名的机制。AS也可以不要,直接写字段名。

    QQ截图20160530104513

     

    1.4、条件数据查询

    SELECT field1,field2,…,fieldn FROM table_name WHERE CONDITION,前面我们已经介绍过关于关系运算符。

    查询范围内的记录数据:SELECT ename,sal FROM t_emp WHERE sal BETWEEN 1000 AND 2000.

    查询某项工作的员工记录数据:SELECT ename,job FROM t_emp WHERE job='CLERK'.

    查询某个集合内记录数据,SELECT field1,field2,…,fieldn FROM table_name WHERE  filed in(value1,value2,…,valuen)

    QQ截图20160530105629

     

    查询不在集合内的记录数据,SELECT field1,field2,…,fieldn FROM table_name WHERE  filed NOT in(value1,value2,…,valuen)

    注意:如果查询集合中有NULL值的话,使用IN的时候查询结果不会有改变,使用NOT IN的时候,则不会有任何结果。

    模糊查询:例如查询以字母M开头的员工的数据记录,

    QQ截图20160530110130

     

    1.5、排序查询

    SELECT field1,field2,…,fieldn FROM table_name WHERE CONDITION ORDER BY field

    ASC 升序,DESC 降序,默认是升序排序。

    例如:SELECT * FROM t_emp ORDER BY sal ASC,hiredate DESC,这表示先按工资升序排序,再按日期降序排序。

     

    1.6、限制查询数据

    SELECT field1,field2,…,fieldn FROM table_name WHERE CONDITION LIMIT OFFSET_START,ROW_COUNT,

    OFFSET_START 表示数据记录的起始偏移量,ROW_COUNT表示要查询的数据条数。其中OFFSET_START可以指定也可以不指定,LIMIT关键字经常被应用于分页系统中。

    不指定初始位置,如果显示记录数小于总的记录数,则会显示指定的条数。如果显示的记录数大于总的记录数,则会显示所有的记录数。

    指定初始位置,LIMIT 0,5,表示从第一条记录开始显示,共显示5条记录, LIMIT 5,5,表示从第六条记录开始,共显示5条记录。

     

    1.7、统计函数

    COUNT(),统计表中的记录数

    AVG(),计算某个字段的平均值

    SUM(),计算某个字段的和

    MAX().计算某个字段的最大值

    MIN(),计算某个字段的最小值

    在实际应用中,统计函数经常与分组一起使用,对于MySQL所支持的统计函数,如果所操作的表中没有任何数据记录,COUNT函数返回0,其他的返回NULL。

    分组GROUP BY。如果想要显示每个分组的字段的话,则可以通过函数GROUP_CONCAT() 来显示。

    例如,将员工表按照部门号分组,并且显示每组中员工的个数以及名字。

    QQ截图20160530140249

     

    如果想对分组进行条件限制,绝对不能通过关键字WHERE来实现,因为该关键字主要是用来实现条件限制数据记录,可以通过HAVING来实现条件限制分组记录数据。

    例如,对员工表按照部门进行分组,然后显示每组平均工资高于2000的员工名字。

    QQ截图20160530140923

     

    2、多表数据记录查询

    MySQL中可以通过两种语法形式来实现连接查询,一种是在FROM子句中利用逗号区分多个表,在WHERE子句中通过逻辑表达式来实现匹配条件从而实现表的连接。另一种方式,在FROM子句中使用JOIN…ON关键字,而连接条件写在ON子句中,推荐使用第二种方式。

    第一种语法:SELECT filed1,field2…fieldn FROM table_name1,table_name2 WHERE table_name1.fieldx=table_name2.fieldy.

    第二种语法:SELECT filed1,field2…fieldn FROM table_name1 JOIN table_name2 ON table_name1.fieldx=table_name2.fieldy.

     

    2.1、内连接查询

    内连接可以是多个表的连接,也可以是一个表的连接也称之为自连接。

    例如,在员工表中查询每一个员工的姓名、职位以及领导名字。通过分析,我们可以知道,员工的领导同样也是员工,这就是自连接。

    QQ截图20160530142138

     

    2.2、外连接查询

    外连接可以分为三种,左外连接LEFT、右外连接RIGHT、全外连接FULL。

    左外连接指的是新关系中执行匹配条件时以关键字LEFT JOIN左边的表为参考表,如果左边表中数据对应的右边表没有数据的时候,依然会显示,而INNER JOIN则会去掉该条记录。

    同样是上面的例子,如果是左连接的时候查询结果会有不同,如下所示:

    QQ截图20160530142539

     

    右外连接指的是新关系中执行匹配条件时以关键字RIGHT JOIN右边的表为参考表,如果右边表中数据对应的左边表没有数据的时候,依然会显示,而INNER JOIN则会去掉该条记录。

     

    2.3、合并查询数据记录

    在MySQL中可以通过关键字UNION来实现并操作,可以将多个SELECT语句查询结果合并在一起。

    UNION 会把查询结果直接合并在一起,同时会去掉重复的数据记录。

    UNION ALL会把查询结果直接合并在一起,并没有去掉重复的记录。

     

    2.4、子查询

    所谓的子查询就是指一个查询之中嵌套了其他的若干个查询,即在一个SELECT查询语句的WHERE或这FROM子句中包含另一个SELECT查询语句。

    2.4.1、子查询结果返回单行单列

    例,查询员工表中,工资比员工SMITH工资高的员工信息。

    QQ截图20160530143900

    2.4.2、子查询结果返回单行多列

    例,查询员工表中,工资和置为都和员工SMITH一样的所有的员工信息。

    QQ截图20160530144025

     

    2.4.3、子查询结果返回多行多列

    此时,子查询语句一般会在主查询语句的WHERE子句里出现,并且通常会包含IN、ANY、ALL、EXISTS等关键字。

    关键字ANY用来表示主查询的条件满足子查询返回结果中的任意一条记录。

    =ANY 其功能与IN一样,

    >ANY 比子查询中返回数据记录中的最小的还要大的数据记录。

    <ANY 比子查询中返回数据记录中的最大的还要小的数据记录。

    关键字ALL用来表示主查询的条件为满足子查询返回结果中所有数据记录。

    >ALL 比子查询返回数据记录还要大的数据记录。

    <ALL 比子查询返回数据记录还要小的数据记录。

  • 相关阅读:
    设置nginx中文件上传的大小限制度
    百度编辑器(ueditor)踩坑,图片转存无法使用
    帝国cms更换Ueditor编辑器上传图片加水印
    帝国cms7.5整合百度编辑器ueditor教程
    帝国CMS万能标签ecmsinfo介绍
    帝国CMS排行榜调用标签
    通过案例理解position:relative和position:absolute
    帝国CMS万能标签标题截取后自动加入省略号
    linux 安装字体
    Ecms7.5版CK编辑器保留word格式如何修改
  • 原文地址:https://www.cnblogs.com/woshikh/p/5542423.html
Copyright © 2020-2023  润新知