zoukankan      html  css  js  c++  java
  • Day 35 MySQL基础(三)

    MySQL基础(二)

    分组数据

    创建分组

    分组是在select语句的group by子句中建立的.

    select vend_id, count(*) as num_prods
    from products
    group by vend_id
    

    上面的select指定了两个列,vend_id包含产品供应商的id,num_prods为计算字段(用count(*)函数建立).group by子句指示MySQL按vend_id排序并分组数据.这导致对每个vend_id而不是整个表计算num_prods一次.

    再具体使用group by子句之前,需要知道一些重要的规定:

    • group by子句可以包含任意数目的列.这使得能对分组进行嵌套,为数据分组提供更细致的控制
    • 如果在group by中嵌套了分组,数据将在最后规定的分组上进行汇总.换句话说,在建立分组时,指定的所有列都一起计算(所以不能从个别的列取回数据)
    • group by子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数).如果在select中使用表达式,则必须在group by子句中指定相同的表达式
    • 除聚集计算语句外,select语句中的每个列都必须在group by子句中给出
    • 如果分组列中有null值,则null将作为一个分组返回.如果列中有多行null,它们将分为一组
    • group by子句必须出现在where子句后,order by子句前

    过滤分组

    除了能使用group by子句进行分组外,MySQL还允许过滤分组,规定包括哪些分组,排除哪些分组.

    我们已经看到了where子句的作用.但是,在这个例子中where不能完成任务,因为where过滤指定的是行而不是分组.事实上,where没有分组的概念

    MySQL提供了另外的子句,那就是having子句.having非常类似于where.事实上,目前为止所学过的所有类型的where子句都可以用having来替代.唯一的差别是where过滤行,而having过滤分组.

    下面看一个例子:

    select vend_id, count(*) as num_prods
    from products
    group by vend_id
    having count(*) > 2
    

    排序

    order by 字段名

    默认按正序排序,可以在最后加上desc则按倒序排列

    可以同时对多个列进行不同的排序

    limit

    select语句返回所有匹配的行,它们可能是指定表中的每个行.为了返回第一行或前几行,可以使用limit子句

    select prod_name from products limit 5
    

    我们还可以指定要检索的开始行和行数

    select prod_name from products limit 5, 5
    

    limit 5, 5表示MySQL返回从行5开始的5行.第一个数为开始的位置,第二个数为要检索的行数.

    注意: 第一行的索引为0.如limit 1, 1表示第二行的数据

    外键

    FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性

    使用的原因:
    a. 减少占用的空间
    b. 只需要修改department表中一次, 其余的表中的数据就会相应的修改

    表连接

    inner join

    left join

    right join

    full join

  • 相关阅读:
    zabbix4.4安装和简要设置
    SAMBA服务
    NFS服务
    Rsync+inotify数据同步
    Linux上FTP部署:基于mariadb管理虚拟用户
    rsyslog日志服务部署
    Typora自动生成标题编号
    编译安装LAMP
    303. 区域和检索
    [leetcode]53. 最大子序和*
  • 原文地址:https://www.cnblogs.com/2222bai/p/11767296.html
Copyright © 2011-2022 走看看