• SQL分类之DQL:查询表中的记录


    DQL:查询表中的记录

    select * from 表名;

    1.语法

    select 
      字段列表
    from
      表名列表
    where 
      条件列表
    group by
      分组字段
    having
      分组之后的条件
    order by
      排序
    limit 
      分页限定

    2.基础查询

      1.多个字段的查询

    select 字段名1,字段名2... from 表名;
    mysql> insert into abc003 values(1,'cai',18),(4,'test',30),(5,"ddd",66);
    ERROR 2006 (HY000): MySQL server has gone away
    No connection. Trying to reconnect...
    Connection id:    216
    Current database: abc001
    
    Query OK, 3 rows affected (0.13 sec)
    Records: 3  Duplicates: 0  Warnings: 0
    
    mysql> select * from abc003;
    +------+-------+------+
    | id   | name  | age  |
    +------+-------+------+
    |    1 | cai   |   18 |
    |    2 | chuan |   20 |
    |    3 | qi    |   99 |
    |    4 | test  |   30 |
    |    5 | ddd   |   66 |
    +------+-------+------+
    5 rows in set (0.00 sec)
    mysql> select id,name from abc003;
    +------+-------+
    | id   | name  |
    +------+-------+
    |    1 | cai   |
    |    2 | chuan |
    |    3 | qi    |
    |    4 | test  |
    |    5 | ddd   |
    +------+-------+
    5 rows in set (0.10 sec)

    注意:

    • 如果查询所有字段,则可以使用*来替代字段列表。

      2.去除重复

    distinct

      3.计算列

    一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)

    ifnull(表达式1,表达式2);
    • 表达式1:那个字段需要判断是否为null
    • 如果改字段为null后的替换值。

      4.起别名

    as :as也可以省略

    条件查询where

    https://www.runoob.com/sql/sql-where.html

    1.where子句后跟条件

    2.运算符
    
    >,<,>=,<=,=,<>
    BETWEEN...AND
    IN(集合)
    LIKE
    IS NULL
    and or &&
    or or ||
    not or !
    mysql> select * from abc003 where id=2;+------+-------+------+
    | id   | name  | age  |
    +------+-------+------+
    |    2 | chuan |   20 |
    +------+-------+------+
    1 row in set (0.12 sec)
    
    mysql> select * from abc003 where id>1 and id<4;
    +------+-------+------+
    | id   | name  | age  |
    +------+-------+------+
    |    2 | chuan |   20 |
    |    3 | qi    |   99 |
    +------+-------+------+
    2 rows in set (0.10 sec)

    其他

    1. 排序查询
    2. 聚合函数
    3. 分组查询
    4. 分页查询

    1.排序查询

    语法:order by 子句
    order by 排序字段1 排序方式1,排序字段2 排序方式2...
    mysql> select * from abc003 order by name;
    ERROR 2006 (HY000): MySQL server has gone away
    No connection. Trying to reconnect...
    Connection id:    218
    Current database: abc001
    
    +------+-------+------+
    | id   | name  | age  |
    +------+-------+------+
    |    1 | cai   |   18 |
    |    2 | chuan |   20 |
    |    5 | ddd   |   66 |
    |    3 | qi    |   99 |
    |    4 | test  |   30 |
    +------+-------+------+
    5 rows in set (0.10 sec)
    
    mysql> select * from abc003 order by id desc;
    +------+-------+------+
    | id   | name  | age  |
    +------+-------+------+
    |    5 | ddd   |   66 |
    |    4 | test  |   30 |
    |    3 | qi    |   99 |
    |    2 | chuan |   20 |
    |    1 | cai   |   18 |
    +------+-------+------+
    5 rows in set (0.00 sec)

    排序方式:

    ASC:升序,默认的
    DESC:降序

    注意:
    如果有多个排序条件,则当前的条件值一样时,才会判断第二条件。

    2.聚合函数

    将一列数据作为一个整体,进行纵向的计算。

       1.count:计算个数 

    1. 一般选择非空的列:主键
    2. count(*)
    mysql> select count(*) as age from abc003;
    +-----+
    | age |
    +-----+
    |   5 |
    +-----+
    1 row in set (0.00 sec)

      2.max:计算最大值
      3.min:计算最小值
      4.sum:计算和
      5.avg:计算平均值

    注意:聚合函数的计算,排除null值。
    解决方案:

    1. 选择不包含非空的列进行计算
    2. IFNULL函数

    3.分组查询

    语法:group by 分组字段
    mysql> select name,sum(age) from abc003 group by name;
    +-------+----------+
    | name  | sum(age) |
    +-------+----------+
    | cai   |       18 |
    | chuan |       20 |
    | ddd   |       66 |
    | qi    |       99 |
    | test  |       30 |
    +-------+----------+
    5 rows in set (0.00 sec)

    注意:
      1.分组之后查询的字段:分组字段、聚合函数
      2.where 和 having的区别?

    1. where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
    2. where 后不可以跟聚合函数,having可以进行聚合函数的判断。

    4.分页查询

    语法:limit开始的索引,每页查询的条数;

    公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数
    --每页显示3条记录
    
    SELECT * FROM student LIMIT 0.3; --第1页
    SELECT * FROM student LIMIT 3.3; --第2页
    SELECT * FROM student LIMIT 6.3; --第3页
    
    limit 是一个MySQL"方言"
    mysql> select * from abc003 limit 1;
    +------+------+------+
    | id   | name | age  |
    +------+------+------+
    |    1 | cai  |   18 |
    +------+------+------+
    1 row in set (0.04 sec)
    
    mysql> select * from abc003 limit 3;
    +------+-------+------+
    | id   | name  | age  |
    +------+-------+------+
    |    1 | cai   |   18 |
    |    2 | chuan |   20 |
    |    3 | qi    |   99 |
    +------+-------+------+
    3 rows in set (0.00 sec) 
    小丑竟是我自己
  • 相关阅读:
    Fibonacci Again 分类: HDU 2015-06-26 11:05 13人阅读 评论(0) 收藏
    山东理工大学第七届ACM校赛-LCM的个数 分类: 比赛 2015-06-26 10:37 18人阅读 评论(0) 收藏
    山东理工大学第七届ACM校赛-完美素数 分类: 比赛 2015-06-26 10:36 15人阅读 评论(0) 收藏
    山东理工大学第七届ACM校赛-经济节约 分类: 比赛 2015-06-26 10:34 19人阅读 评论(0) 收藏
    山东理工大学第七届ACM校赛-字符的变化 分类: 比赛 2015-06-26 10:32 46人阅读 评论(0) 收藏
    山东理工大学第七届ACM校赛-飞花的鱼塘 分类: 比赛 2015-06-26 10:30 43人阅读 评论(0) 收藏
    山东理工大学第七届ACM校赛-飞花的线代 分类: 比赛 2015-06-26 10:29 10人阅读 评论(0) 收藏
    山东理工大学第七届ACM校赛-飞花的糖果 分类: 比赛 2015-06-26 10:27 15人阅读 评论(0) 收藏
    山东理工大学第七届ACM校赛-最大收益问题 分类: 比赛 2015-06-26 10:25 51人阅读 评论(0) 收藏
    山东理工大学第七届ACM校赛-学区房问题 分类: 比赛 2015-06-26 10:23 89人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/lspbk/p/14413862.html
Copyright © 2020-2023  润新知