• Mysql学习08----查询数据


    一. 单表查询

    1.1 查询所有字段

    (1)在select语句中使用(*)通配符查询所有字段

               select *from 表名;

    (2)在select语句中指定所有字段

              select  f_id,s_id,f_name from fruits;

    1.2 查询指定字段

    (1)查询单个字段

              select 列名 from 表名;

    (2)查询多个字段

              select 字段名1,字段名2,字段... n  from 表名;

    1.3 查询指定记录

    语法:

    select 字段名1,字段名.....n from 表名  where  查询条件

    1.4 带IN关键字的查询

    使用in操作符,将所有检索条件用括号括起来,检索条件之间用逗号分隔开,只要满足条件范围内的一个值即为匹配项。

    select name,id from user where id in(101,104) order by name;

    将会返回满足id等于101或者104的记录

    1.5 带between and的范围查询

    它用来查询某个范围内的值。

    select name, price from fruits where price between 2 and 10.20;

    将会返回2到10.20之间的所有水果

    1.6 带like的字符匹配查询

    (1) %匹配任意长度的字符,甚至包括零字符

              select id,name from fruits where name like 'b%';

    (2)下划线一次只可以匹配任意一个字符。

    1.7 查询空值

           select id,name from user where name is null;

    1.8 带AND或者OR的多条件查询

           select id,price,name from frutis where id='23' and id='101' and price>=23;

    1.9 查询结果不重复

           select distinct 字段名 from 表名;

    1.10 对查询结果进行排序

    (1)单列排序

               select name from user order by name;

    (2)多列排序

               select name,price from fruits order by name,price;

                先以name后以price排序

    (3)指定排序方向

             默认是按照字母升序排列,但是可以通过关键字DESC降序/ASC(升序)。

              select name from fruits order by price desc;

    1.11 分组查询

    [ group by 字段] [having <条件表达式>]

    (1)创建分组

        假设有这样一个user表,对他进行group操作后:

     1 mysql> select *from user;
     2 +------+------+
     3 | id   | name |
     4 +------+------+
     5 |    1 | a    |
     6 |    2 | b    |
     7 |    3 | c    |
     8 |    1 | d    |
     9 |    1 | e    |
    10 |    1 | f    |
    11 |    3 | g    |
    12 |    2 | m    |
    13 +------+------+
    14 8 rows in set (0.00 sec)
    15 
    16 mysql> select id,count(*) as total from user group by id;
    17 +------+-------+
    18 | id   | total |
    19 +------+-------+
    20 |    1 |     4 |
    21 |    2 |     2 |
    22 |    3 |     2 |
    23 +------+-------+
    24 3 rows in set (0.00 sec)
    View Code

        (2)使用having过滤分组

            满足过滤条件的分组才会被显示

    1 mysql> select id,count(*) as total from user group by id having total>2;
    2 +------+-------+
    3 | id   | total |
    4 +------+-------+
    5 |    1 |     4 |
    6 +------+-------+
    7 1 row in set (0.00 sec)
    View Code

    note: HAVING关键字和WHERE关键字都是用来过滤数据,它们之间最重要的一点区别就是HAVING在数据分组之后进行过滤来选择分组,而WHERE在分组之前用来选择记录。另外WHER排除的记录不再包括在分组中。

    note: 当group by和order by合用的时候,先group by,再order by

    举例:

    加入有上面这样数据的一张表,执行下面操作有:

    1.12 使用limit限制查询结果的数量

    limit[位置偏移量,]  行数

    位置偏移量指的是从表的第几条记录开始(索引从0开始)。行数代表返回的记录条数。

    二. 使用聚合函数查询

    select count(price) from order;

    三.连接查询

     1. 内连接查询----INNER JOIN

    假设有如下两个表a,b

     

    进行如下操作,发现结果是一样的

    连接查询不再是之前学习的只在一张表中进行操作了,它可以连接多个表进行操作。

    Note: 自连接查询作为内连接的一种特殊连接。如果在一个连接查询中,涉及的两个表都是同一个表,这种查询称为自连接查询。它是指相互连接的表在物理上为同一张表,但是在逻辑上可以是两张表。

    a1和a2采用了别名机制。防止二义性。

    2. 外连接查询

     外连接查询将查询多个表中相关联的行,内连接时,返回查询结果集合中的仅是符合查询条件和连接条件的行。但有时候需要包含没有关联的行中的数据,即返回查询结果集合中的不仅包含符合连接条件的行,而且还包括左表、右表或两个连接表中所有的数据行。外连接分为左连接和右连接。

    LEFT JOIN(左连接):返回包括左表中的所有记录和右表中连接字段相等的记录。

    RIGHT JOIN(右连接):返回包括右表中的所有记录和左表中连接字段相等的记录。

    2.1 LEFT JOIN(左连接)

    假设有两个表,customers和orders。现在想要查找客户对应的订单个数:

    说明:这样就包含了左表customers中的所有行。

    2.2 右连接-----RIGHT JOIN

    原理类似左连接,只是包含了右表的所有行。

    四. 子查询

    子查询指一个查询语句嵌套在另一个查询语句内部的查询。在select查询中先计算子查询,子查询结果作为外层另一个查询的过滤条件,查询可以基于一个表或者多个表。子查询中常用的操作符有ANY(SOME)、ALL、IN、EXISTS。并且,子查询中可以使用比较运算符。

    1. 带ANY、SOME关键字的子查询

    ANY和SOME关键字是同义词,表示满足其中任意一个条件。ANY接在一个比较操作符的后面,表示若与子查询返回的任何值比较为true,则返回true

    2. 带ALL关键字的子查询

    区别于ANY和SOME,ALL需要同时满足所有内层查询的条件。

    3. 带EXISTS关键字的子查询

    比如两个表:

    说明:因为b中没有等于27的行,因此exists的结果是false,因此外层查询不能执行;

    note: not exists和exists的用法相反。

    4. 带IN关键字的子查询

    相当于or的含义。

    note: not in和in的作用正好相反

    五. 合并查询结果

    利用union可以合并多条select语句,并将它们的结果组合成单个结果集。合并时,两个表对应的列数和数据类型必须相同。

    union:删除重复记录

    union all:不删除重复记录,并且也不对结果进行自动排序

    note:还可以使用正则表达式进行查询

    参考文献:

    《Mysql5.7从入门到精通》

  • 相关阅读:
    ADO.NET_01_概述
    我对持久层的一点看法
    浅谈极限编程(XP)和代码重构(Refectoring)
    设计模式_第一篇_开场
    .NET OracleLob 读写操作
    ASP.NET_ASP.NET Cookies
    设计模式_第二篇_策略模式
    Oracle_C# 实现 Oracle Text(全文检索)的一个简单例子
    IKVM.NET_06_用户指南_教程
    ADO.NET_02_DataTable
  • 原文地址:https://www.cnblogs.com/Hermioner/p/10332075.html
Copyright © 2020-2023  润新知