• 数据库 完整的查询语句,查询顺序及分页显示功能


    基本的查询语句 ​ select (* | 字段名 | 四则运算 | 聚合函数) from 表名称;

    取别名 当字段名显示较长时 可以添加别名 ​ select 字段名 as 别名 from 表名称; ​ as可以省略 ​ select 字段名 别名 from 表名称;

    计算每个人的总分 计算每个人的各科目平均分

    增删改查 ​ 增 ​ insert into 表名称(字段,...) values(值,....),(值,....); ​ values中的值的个数 和类型必须与 前方声明的字段一致 ​ insert into 表名称 values(值,....); ​ values中的值的个数 和类型必须与表的字段完全一致

            into 可以省略

          stu name char(20) default "张三",age int
          #insert into table_name values(20),(30),(40);
          # 错误name虽然有默认值 但是在这种语法下也必须赋值

      删
          delete from table_name where 条件;
          delete from table_name;
          truncate table table_name;
      改
          update table_name set 字段名称 = 新的值 where 条件;
          update table_name set 字段名称 = 新的值[,字段2 = 值2,...];
      查

     

    select语句的完整语法:

    select [distinct] (*|字段|四则运算|聚合函数) from 表名
      where 查询条件
      group by 分组
      having   分组后的过滤
      order by 排序
      limit     限制获取的条数

    必须的 select 字段 from 表名
    distinct 去除重复

    强调: 书写顺序必须按照上面的来

    执行顺序与书写顺序不一致

    # 伪代码 演示执行顺序
    def select():
      from()
      where()
      group by()
      having()
      order by()
      limit()
      distinct()

    # 从文件读取数据
    def from():
      with open("表名称")
      pass
    # 过滤从文件读取的数据
    def where():
      pass
    # 分组
    def group by()
      pass
    # 对分组后的数据 进行过滤
    def having():
      pass
    # 排序
    def order by():
      pass
    # 控制获取的条数
    def limit():
      pass
    # 去除重复
    def distinct():
      pass

    where 子查询 ​ = > < >= <= !=(<>) ​ in ​ between and ​ like ​ and or not

    select *from stu where not(math != 60); #in(1,2,3,4,5) #math 60 80 90 select *from stu where math in(60,80,90); select *from stu where math = 60 or math = 80 or math = 90;

    #英语及格并且 数学也及格 select *from stu where math >= 60 and english >= 60;

    #数学 在60-80之间 select *from stu where math between 60 and 90; select *from stu where math >= 60 and math <= 90;

    #like 长得像 模糊匹配 #% 任意个任意字符 #_ 一个任意字符

    select *from stu where name like "李%"; 所有姓李的 select *from stu where name like "%李%"; 名字带有李的 select *from stu where name like "%李"; 最后一个字是李的

     

     

     

    group by 分组查询

    什么是分组 ​ 把一个整体 按照某个标识分成不同的部分

    分组目的 ​ 通常分组都为了要统计数据

    语法 ​ select *from emp group by 某个字段;

    强调: ​ 用于分组的字段 通常应该是重复度高的 例如 部门 性别 ​ 而不应该id name.....

    语法要求: ​ select 后面的字段 必须是出现在group by后面的字段

    一旦分组后 组内的详细数据就被隐藏了 无法直接查看但是要知道 分组不是为了查看 而是为了统计 分组后就只能看到分组的那个字段

    聚合函数(统计函数) ​ 给他一堆数据 它统计后 返回一个数据 ​ (1,2,3,4,5) sum = 15

    sum  求和
    avg 平均数
    max 最大值
    min 最小值
    count 计数

    查询每个部门有哪些人

    group_concat() # 不常用 select dept,group_concat(name) from emp group by dept;

     

    可以有多个分组依据 比如先按部门 再按工作岗位

    select dept,job,avg(salary) from emp group by dept,job;

     

    注意注意: 聚合函数不能用在where后面

    如果要对分组数据进行过滤 必须使用having 因为 where在执行时,数据还没有读完 ,必须等到数据读完之后再进行过滤, where 与 having的区别就在于 执行时机不同

    select dept,group_concat(name),count() from emp group by dept having count() < 3;

     

    group by ​ where 后不能有聚合函数 ​ select 后面的字段 必须出现在group by的后面 ​ 通常聚合函数会与group by 连用 ​ 如果要对分组数据进行过滤 必须使用having ​ having与where 都是过滤 但是执行时机不同

     

    伪代码: from 从文件读数据 到内存 datas = [] with open("xxxx") as f: ​ while True: ​ data = f.read() ​ if avg(salary) > 5000;# 数据读取没有完成 不可能统计出结果 ​ datas.append(data)

     

    order by 排序 默认为升序 select *from emp order by salary; 用desc 来指定为降序 select *from emp order by salary desc; 可以义多个字段作为排序依据,并且可以单独设置顺序 select *from emp order by salary desc,id; # 先按照工资降序 如果工资相同则按照id 升序

    limit 控制要查询的记录数量 select *from emp limit a,b;

    a 表示起始位置 b 要获取的条数 如果只有a 则表示 获取的条数

    select *from emp limit 0,3;

    分页显示

    总共为10页 每一页显示 3条 页数 10 / 3 由余数则 + 1 = 4

    page = 1

    select *from emp limit 0,3

    page = 2

    (page - 1) * 3

    select *from emp limit 3,3

    page = 3 (page - 1) * 3 select *from emp limit 6,3

    起始位置的计算公式 limit (页数-1) * 每页的条数,每页条数

     

  • 相关阅读:
    数据转换16进制字符
    大数库GMP测试
    OpenSSL测试大数
    二开Jacoco + codediff 实现增量覆盖率报告
    goc 代码覆盖率
    epoll详解 NK
    深入浅出PID算法
    ubuntu18.04安装谷歌拼音输入法(Google Pinyin)
    Python PyQt5中弹出子窗口解决子窗口一闪而过的问题
    python 笔记14 多窗口传递数据
  • 原文地址:https://www.cnblogs.com/tangda/p/10555686.html
Copyright © 2020-2023  润新知