zoukankan      html  css  js  c++  java
  • 史上最简单MySQL教程详解(基础篇)之SQL语句(二)

    查询语句——SELECT

    查询语句将是我们在使用数据库的时候使用得最多,最灵活,也是最能体现能力的语句。接下来,我们将介绍几种比较常用的【SELECT】语句的查询方式。其的基础语法为:

    SELECT 列名1,列名2,列名3,...From 表名 WHERE 条件表达式

    例如:我们想查出【user】表中名字为【张三】的人

    mysql> SELECT * FROM user WHERE name =”张三” ;
    +——–+——+——+
    | userId | name | sex |
    +——–+——+——+
    | 1 | 张三 | 0 |
    +——–+——+——+
    1 row in set (0.00 sec)

    注意事项:

    • 推荐使用指定列名的查询方式:
      因为我们测试表中只有三个字段,对于数据库的查询影响不是很大。但是在实际的生产开发环境中,使用【*】来获取所有列的数据的话,那些不需要使用的列将会造成很大的内存浪费,从而进一步的影响SQL语句的执行速度。除了想确认表中所有数据的场合,是不建议使用 【*】的。
    • 对于【WHERE】后面的【=】的理解我在之前的文章中也已经进行了解释,这里再重申一遍,我们应将那个符号理解为【比较运算符】,而不是所谓的【赋值】符号,常用的【比较运算符】有很多,我们将在史上最简单MySQL教程详解(基础篇)之运算符和常用数据库函数(一)中列举出常用的运算符。

    模糊查询(LIKE)

    模糊查询就是以列中数据是否含有指定的字符串为条件的检索。
    例如:我们查询表中【name】包含【张】字为例子

    mysql> SELECT * FROM user WHERE name LIKE “%张%”;
    +——–+——–+——+
    | userId | name | sex |
    +——–+——–+——+
    | 1 | 张三 | 0 |
    | 5 | 小张 | 1 |
    | 6 | 张三丰 | 0 |
    +——–+——–+——+
    3 rows in set (0.00 sec)

    注意事项:

    • 其中【%】叫做通配符。如果是【张%】表示以【张】开头的所有数据,【%张】表示的是以张结尾的所有数据。【%张%】则表示数据中所有含有张字的数据。

    常用的通配符:

    通配符 说明 条件表达式举例
    % 表示零个,一个或多个字符 name LIKE “%a%”
    _ 表示单个字符 name LIKE “李_” (【李某】是符合条件的,但【李某某】就不符合了)
    [] 定义要匹配的字符集和范围 name LIKE ‘[bsp]%’
    [^]或[!] 定义不匹配字符的集合和范围 name LIKE ‘[!bsp]%’ (不以“b”,“s”或“p”开头的所有数据)

    NULL条件

    当我们想要检索某个为空的字段的时候,是不能使用【=】比较运算符的,而是使用【IS】
    例如:我们想要查出【user】表中【name】为【NULL】的字段

    mysql> SELECT * FROM user WHERE name Is null;
    +——–+——+——+
    | userId | name | sex |
    +——–+——+——+
    | 7 | NULL | 0 |
    +——–+——+——+
    1 row in set (0.00 sec)
    mysql> SELECT * FROM user WHERE name = null;
    Empty set (0.00 sec)

    我们可以看出,当我们使用【IS】的时候成功查出数据,但是当我们使用【=】的时候并没与查出数据;

    多个条件表达式的组合(NOT,AND,OR)

    当我们想要符合多个条件的数据时,就需要使用【AND】,【OR】,【NOT】三个运算符号。当然,它们三者之间自然也存在优先级的关系。优先级为:NOT->AND->OR.
    例如:
    我们将查询【user】表中【name】为【李四】,【sex】为【1】的数据。

    mysql> SELECT * FROM user WHERE name =”李四” and sex =1;
    +——–+——+——+
    | userId | name | sex |
    +——–+——+——+
    | 2 | 李四 | 1 |
    +——–+——+——+
    1 row in set (0.00 sec)

    我们就查到了我们预想的数据。

    查询结果排序(ORDER BY)

    我们使用【ORDER BY】语句进行数据的排序。排序总共有【DESC】(降序)和【ASC】(升序)两种。语法如下:

    ORDER BY 字段1,字段2...DESC/ASC

    例如,我们将查询到的数据进行降序:

    mysql> SELECT * FROM user ORDER BY userId DESC;
    +——–+——–+——+
    | userId | name | sex |
    +——–+——–+——+
    | 7 | NULL | 0 |
    | 6 | 张三丰 | 1 |
    | 5 | 小张 | 1 |
    | 4 | 王五 | 0 |
    | 3 | 李四 | 0 |
    | 2 | 李四 | 1 |
    | 1 | 张三 | 0 |
    +——–+——–+——+
    7 rows in set (0.00 sec)

    可以看出,我们这次查出的数据就根据【userId】的大小进行了降序排列;

    注意事项:

    • 当我们需要以多个字段进行排序时,将按照上面的排序表达式的优先顺序进行排序;
    • 如果省略了排序方式。那么默认为【ASC】;

    获取指定数量的数据(LIMIT )

    我们使用【limit】语句来实现获取指定数量的数据。语法如下:

    LIMIT N,M;

    例如,我们对数据排序以后,取出前三条数据:

    mysql> SELECT * FROM user ORDER BY userId DESC LIMIT 2,3;
    +——–+——+——+
    | userId | name | sex |
    +——–+——+——+
    | 5 | 小张 | 1 |
    | 4 | 王五 | 0 |
    | 3 | 李四 | 0 |
    +——–+——+——+
    3 rows in set (0.00 sec)

    【LIMIT N,M】的含义是:从第N条数据开始,取M条数据;那么我们上面运行的含义是:将表中的数据降序排列以后,获取从第二条数据以后的三条数据;

    注意事项:

    • 原则上,【LIMIT】语句是要和【ORDER BY】语句一起使用的,如果没有明确的排序方式,数据会按照随机的顺序取出,可能会得到不同的结果;

    数据分组(GROUP BY)

    当我们想要对查询出来的数据按照某个字段进行分组时,我们就需要使用到【GROUP BY】语句。语法如下:

    GROUP BY 字段名

    例如,我们将查询出来的结果按照【sex】进行分组:

    mysql> SELECT count(userId),sex FROM user GROUP BY sex;
    +—————+——+
    | count(userId) | sex |
    +—————+——+
    | 4 | 0 |
    | 3 | 1 |
    +—————+——+
    2 rows in set (0.00 sec)

    这样我们就将每个性别的人数统计了出来(这里使用了MySQL的【COUNT】函数,后面我们会进行介绍);

    注意事项:

    • 在具有多个分组字段时,和【ORDER BY】语句一样,将根据你编写的SQL语句中的先后顺序进行优先级分组;

    列的别名(AS)

    有时候,我们需要对查询出来的列重新进行命名,这个时候就用到了【AS】命令。
    例如,我们将上面查询到的【sex】数量重新命名为【NUM】:

    mysql> SELECT count(userId) AS NUM ,sex FROM user GROUP BY sex;
    +—–+——+
    | NUM | sex |
    +—–+——+
    | 4 | 0 |
    | 3 | 1 |
    +—–+——+
    2 rows in set (0.00 sec)

    这里,我们就讲完了【SELECT】语句的一些基本查询情况,如果想要学习关于数据的插入/更新/删除的小伙伴可以查看另一篇博文史上最简单MySQL教程详解(基础篇)之SQL语句(一);接下来,我们讲解MySQL的运算符和常用数据库函数(一),为我们的多表查询打下基础。

  • 相关阅读:
    Spring Boot 使用 Dom4j XStream 操作 Xml
    Spring Boot 使用 JAX-WS 调用 WebService 服务
    Spring Boot 使用 CXF 调用 WebService 服务
    Spring Boot 开发 WebService 服务
    Spring Boot 中使用 HttpClient 进行 POST GET PUT DELETE
    Spring Boot Ftp Client 客户端示例支持断点续传
    Spring Boot 发送邮件
    Spring Boot 定时任务 Quartz 使用教程
    Spring Boot 缓存应用 Memcached 入门教程
    ThreadLocal,Java中特殊的线程绑定机制
  • 原文地址:https://www.cnblogs.com/newtol/p/10159108.html
Copyright © 2011-2022 走看看