• mysql高级查询


    数据库高级查询语句与其基本运算

    1. 高级查询命令

    一、普通查询

    • select ···聚合函数 from 表名
    • where ···
    • group by ····
    • having ······
    • order by ···
    • linit ···

    1.常用聚合函数

    方法 功能
    avg(字段名) 该字段的平均值
    max(字段名) 该字段的最大值
    min(字段名) 该字段的最小值
    sum(字段名) 该字段所有记录的和
    count(字段名) 统计该字段记录的个数

    例子:比如我有以下该表

    eg1:找出表中id值最大的一条记录

    select sum(id) from user;
    

    eg2:找出表中总的记录数

    select count(id) from user;
    

    2.group by :给查询的结果进行分组

    group by 后字段名必须要为select 后的字段,查询字段和group by 后字段不一致,则必须对该字段进行聚合处理(聚合函数)

    eg1:

    select sum(id) from user group by id;
    

    3.having语句: 对分组聚合后的结果进行进一步筛选

    eg1::如对user表中密码为111111的用户进行查询,再进一步筛选为 状态是未激活

    select * from user where password = '111111' group by id having state = '未激活';
    查询结果为空
    

    4.distinct语句:不显示字段重复值

    1. select  username from user
    2. select distinct username from user
    

    语句1 的结果是:
    ,语句二的结果是

    5.查询表记录时做数学计算

    运算符: + - * / %

    eg:查询是把id变为2倍

    select username,id * 2 from user
    

    二、嵌套查询(子查询)

    • 定义:把内层的查询结果做为最外层的查询条件
    • 语法格式:select ···from 表名 where 条件(select··· )

    eg: 把id小于平均id 的记录显示出来

    select * from user where id < (select avg(id) from user);
    

    三、多表查询

    1. 笛卡尔积

      select 字段名列表 from 表名列表
      
    2. 多表查询

      select 字段名列表 from 表名列表 where 条件
      

    1.常用术语

    • 冗余(Redundancy):存储两次数据,以便使系统更快速。
    • 主键(Primary key):主键是唯一的。同一张表中不允许出现两个键值,一个键值只对应着一行。
    • 外键(Foreign key):用于连接两个表。

    2.表连接的方式

    • 内连接

    • 外连接

    • 自连接

      数据准备 -> 两张表如下:


    内连接

    内连接就是标间的主键与外键相连,只取得键值一致的,可以获取对方表中的数据连接方式。

    语法: select 列名1,列名2,······ from 表1 inner join 表2 on 表1.外键= 表2.主键 where 条件语句;

    select * from student inner join college on student.college_id = college.college_id;
    

    结果为

    外连接

    与取得双方表中数据的内连接相比,外连接只能取得其中一方存在的数据,外连接又分为左连接和右连接两种情况。

    1. 左外连接

      ​ 左外连是以左表为标准,只查询在左边表中的存在的数据,当然需要两个表中的键值一致。

      语法为: select 列名1 from 表1 left outer join 表2 on 表1.外键 = 表2.外键 where 条件语句;
      

      结果为:

      可见,左外连接是以左边中的全部数据为基准进行查询。 奥利给和新二近视没有学校id 也可以被查出来。

    2. 右外连接

      同理,右外连接是以右表作为基准,进行检索

      select name,collegename from student right OUTER join college on student.college_id = college.college_id;
      

    注意事项:

    • 内连接是抽取量表间键值一致的数据, 而外连接(左连接,右连接)时,是以其中一个表的全部记录作为基准进行检索。
    • 左连接和右连接只有数据基准的区别,本质上是一样的,具体使用哪一种连接要根据情况而定。
    • 无论是外连接还是内连接,在查询时最好使用【表名.列名】的方式指定所需要查询的列名,否则一旦两个表中出现了列名一直的数据时,可能会报错。
    • 表的别名:在查询的过程中,如果遇到了特别复杂的数据表名,可以通过取别名的方式来实现,使用【AS】语句

    自连接

    ​ 本质上是把一张表当做两张表使用。所以在信息查询时需要进行对自身连接(自连接),则我们要为表定义别名;

  • 相关阅读:
    Xcode waring: no rule to process file *** 警告提示
    Assigning to "id<CALayerDelegate> _Nullable" from incompatible type "ZXCapture *const __strong" 的警告提示信息
    图片编码简介
    oc温习八:static、extern、const 的了解
    转:Objective-C新特性__nonnull和__nullable
    oc温习七:结构体与枚举
    oc温习六:预处理指令
    oc温习五:字符串
    OC温习四:数组
    oc温习三:常用函数
  • 原文地址:https://www.cnblogs.com/wfszmg/p/13708017.html
Copyright © 2020-2023  润新知