SQL笔记03

基本查询

  • SELECT * FROM <表名>
  • SELECT关键字可以直接计算, 不适用FROM关键作用: SELECT 1验证数据库是否连接成功
  • SELECT查询结果始终是个二维表

条件查询

  • WHERE设定查询条件

  • 第一种:

    • SELECT * FROM <表名> WHERE <条件表达式>
  • 第二种:

    • 条件表达式: <条件1> AND <条件2>
    • 或者是OR满足两个条件之一就可以
  • 第三种:

    • NOT
    • 可以使用<>表示
  • NOT优先级最高, 其次是ANDOR

  • ()可以改变优先级

  • IN: SELECT * FROM students WHERE score in (90, 91);

  • The IN operator is a shorthand for multiple OR conditions.

  • BETWEEN: The BETWEEN operator is inclusive: begin and end values are included.

  • SELECT * FROM students WHERE score BETWEEN 60 AND 90;

常用表达式条件

  • =: 相等
  • >: 大于
  • >=: 大于或相等
  • <: 小于
  • <>: 不等
  • LIKE: 判断相似: SELECT * FROM students WHERE name LIKE '%明'; %进行相似匹配

投影查询

  • 只希望返回某些列数据
  • SELECT 列1, 列2, 列3 FROM...
  • 结果集的列表列名, 可以有别名
  • SELECT 列1 列1别名, 列2, 列2别名 FROM..

排序

  • 查询结果通常按照主键id排序

  • ORDER BY按照从低到高排

  • 默认升序, ASC

  • 再加上DESC表示倒序

  • SELECT id, name, gender, score FROM students ORDER BY score DESC;

  • 根据两个数据, 排序时, 先根据第一个排序, 第一个相同的时候, 再根据第二个排序

  • 排序方式跟在条件WHERE后面

分页

  • 分页通过截取实现: LIMIT <M> OFFSET <N>

  • SELECT * FROM students ORDER BY score DESC LIMIT 3 OFFSET 0;

  • 结果集从0开始, 最多取3条

  • SQL记录集的索引从0开始

    • LIMIT: 总是设定为pagesize
    • OFFSET: 计算: pagesize * (pageIndex - 1)
  • OFFSET: 超出最大值, 返回空数组

  • 注意:

    • OFFSET: 默认是0
    • MySQL: OFFSET可以省略
    • <N> 越大, 查询效率越低

聚合查询

  • 统计总数, 平均数等计算, 可以使用聚合函数

  • COUNT(): 查询所有的列的行数

  • SELECT COUNT(*) num FROM students;: 设置别名, 便于统计

  • 聚合查询配合添加查询, 查询满足条件的列数

  • 常用聚合函数

    • SUM: 计算某一列的合计值, 该列必须是数值类型
    • AVG: 计算某一列的平均值, 该列必须是平均值
    • MAX: 计算某一列的最大值
    • MIN: 计算某一列的最小值
    • MAXMIN不限定数值类型, 如果是字符类型, 会返回排序最后和排序最前的字符
    • FLOOR: 向下取整
    • CEILING: 向上取整
  • 如果没有查询到任何数据, COUNT返回0, 其他返回NULL

  • GROUP BY: 对数据进行分组查询计算

  • SQL引擎, 不能把多个name的值放入同一行记录中. 聚合查询的列中, 只能放入分组的列

多表查询

  • SELECT * FROM <表1> <表2>
  • 结果是两个表的乘积
  • 重复的属性名, 通过设置别名解决
  • 也可以对表, 设置别名 SELECT s.id sid, s.name, s.gender, s.score, c.id cid, c.name cname FROM students s, classes c;
  • 多表查询, 也可以添加where条件

连接查询

  • 先确定一个主表作为结果集, 其他表有选择的连接到主表
  • 内连接查询 INNER JOIN
    1. 确定主表 FROM <表1>
    2. 确定需要连接的表: INNER JOIN <表2>
    3. 确定连接条件: ON <条件1>
    4. 可选: 使用WHERE, ORDER BY
  • 外连接: LEFT OUTER JOIN
  • 包含关系:
    • INNER: 两张表都存在的数据
    • LEFT OUTER JOIN: 左表存在的数据
    • RIGHT OUTER JOIN: 右表存在的数据
    • FULL OUTER JOIN: 左右都存在的数据 MySQL不支持

FROM x, y使用笛卡尔积, 效率低, 所以不能用WHERE替代内连接运算

原文地址:https://www.cnblogs.com/zhangrunhao/p/13181230.html