当我们想要在数据库里查询我们想要的数据的时候,我们应该确定查那张表,我想查的数据需要满足什么条件,是否所有的列我都需要,当你确定了这些信息的时候,再加上数据库的查询语法,我们就可以从一张表中获取到我们想要的数据,基本的DQL查询语法如下: 这里我们先简单的解释一下上面的语法: 假设我们有一张关于手机商品的表,表的内容如下(数据仅为学习使用,并不代表真实数据): 假如我们想查询这张表的所有数据,也就是最简单的SQL查询,示例代码如下: 我们这张表中有四个字段,但是我就像看下产品名称和价格,不想看到其他的字段信息,此时我们查询时可以指定的具体的列,示例代码如下: 我们可以在查询的过程中,可能需要多次使用表名或列名,我们每次都写表的全名显得比较麻烦,这个时候我们可以为其写一个别名,之后就可以在语句中使用别名,这里我们由于简单查询的语句比较简单,体现不出来,就先了解一下语法,感受一下,示例代码如下: 加别名只需要在表名或列名后面加上AS关键字后面接上别名即可,AS也可以省略不写,直接写别名。 比如我们想看一下,这些手机分别都是那几家公司的,如果我们直接查询,由于有的厂商它有多个产品,那么它就会有重复的数据,能看,但是不友好,此时我们可以查询关键字对其进行去重,直接查询出结果,示例代码如下: 去重也可以对多个字段去重,但是要值得注意的是,如果是多个字段,那么要每个字段的值一样,才会去重,如果有一个字段值是不一致的,它是不会去重的。 比如当有新的手机发布的时候,一般旧的产品都会降价,假设打九折,那我们想看看打九折后的价格多少,如何查询呢,示例代码如下: 我们上面的查询都是查询的所有数据,但是如果我们想要查询价格大于2000的手机有哪些的时候,这个时候就需要添加上条件了,在SQL语法中支持丰富的查询条件,具体如下: 下面我们看一些示例,还是上面的mobile表 示例1:比较运算符等于条件查询 比如我们不想查看表中的所有信息,我只想查询出小米6的信息,查询语句如下: 我们使用条件查询的时候,需要在表名后跟上where关键字,然后再接查询条件,我们上面查询了等于的条件。 示例2:比较运算符不等于条件查询 下面我们试一下不等于的条件,不等于有两种写法(!=和<>),效果都一样,比如我们查询一下厂商不是苹果公司的信息,查询语句如下: 示例3:比较运算符小于条件查询 假如小明的资金有限,只有3000块钱,此时他想看一下,有哪些手机的价格是在3000块以下的,此时我们就可以使用小于比较运算符查询,示例如下: 示例4:比较运算符 BETWEEN...AND... 条件查询 小明看了一下3000块以下的手机,很犹豫,恰好爷爷来看小明,又给了他2000块的零花钱,所以小明就想看看3000-5000块之前的手机信息有哪些,此时就可以通过BETWEEN...AND...条件来进行查询,示例如下: 值得注意的是,between 3000 and 5000,它是包括3000和5000,这两个边界值的。 示例4:逻辑运算符 AND的使用 我们上面说查询手机价格在3000和5000之间的手机信息,我们把信息拆分一下就是,手机的价格≥3000 并且 手机的价格≤5000,这个时候,除了可以使用between ... and ...,还可以使用逻辑运算符,示例代码如下: 示例5:比较运算符 IN 的使用 小明特别喜欢华为和小米手机,所以他只想在国产手机中选择,他想看看小米和华为手机的信息,此时我们就可以使用IN运算符,示例代码如下: 示例6:比较运算符 LIKE 的使用 小明发现自己的名字有个小字,对名字有一种特殊的情节,所以他就像看看哪些手机名字里有小字,这个时候我们可以使用LIKE条件查询,我们也叫模糊查询,示例代码如下: 小明想看看目前所有的手机,但是要求价格从大到小排序,此时就需要使用到排序的语法,语法如下: 这里的ASC表示升序,可以不写,排序 默认的就是升序,DESC表示降序。 示例1:按照价格列升序排序 示例2:根据多个字段排序 我们上面排序的时候,只按照了价格排序,我们可以指定多个列排序,比如我们希望先按照手机价格的升序来排序,但是如果手机的价格一样的话,我们就按照手机的序号的降序来排序,下面我们看一下示例代码: 在MySQL中,提供了一些计算的函数,比如求和、求平均数、求最大值等,而这些函数呢,又被称为聚合函数,常用的聚合函数如下: 示例1:查询某张表的总行数 这里我们要值得注意的是,如果你统计的列中有NULL值,那么统计的不是所有记录的总行数,因为count是不统计NULL值的。 示例2:求手机表中所有手机价格总和 小明现在发家致富了,有钱了,不做选择了,所有的手机都要,让老板给算个价格,示例代码如下: 示例3:求所有手机中价格最贵和最便宜的手机价格是多少 示例4:求所有手机的平均价 所谓的分组呢就是类似于我们生活中的分组,比如把男生分成一组,女生分成另一组,又或者把个子高的分成一组,个子矮的分成另一组等等。分组的语法如下: 在分组中的条件用的关键字是HAVING而不是WHERE,在having的后面,可以使用分组函数,而where后面是不能使用分组函数的的。还是以上面的手机表为例,下面我们看几个示例。 示例1:查询手机表中,各厂商的手机数量 我们这里要值得注意的是,select 后面的字段必须是group by 后面的字段或聚合函数,否则就会报错。 示例2:对分组后的数据加上分组条件 我们上面查出了各个品牌的手机数量,但是我们如果我们想看数量超过1个的品牌,示例代码如下: 从这里我们可以看出having主要是用在对分组后的数据进行过滤。 当表中的数据非常多的时候,我们一般不会一次性将所有的数据都展现出来,我们会使用关键字LIMIT M,N进行分页显示,比如我们想显示手机信息表中的第2条到第5条的数据,我们先看一个示例感受一下。 LIMIT 后有两个参数,1和4,1表示从第二条记录开始显示,4表示,从第二条记录开始往后显示4条数据。 该语句的作用为把查询出来的结果,插入到另一张已经存在的表中,值得注意的是插入的数据要与新表的表结构一致才能正常插入,比如我们以及有张手机信息表了,此时我们还有一样苹果手机信息表,我们想把手机信息表中的数据复制到苹果信息表中,就可以使用该语句,示例代码如下: 本期的内容就到这里了,如有不足之处还请大家多多指正,欢迎大家留言、关注、转发、收藏,谢谢。1.1 前言
SELECT [DISTINCT]
*|列名1,列名2,...
FROM 表
[WHERE 条件];
1.2 简单查询
+------+------------+---------+----------+
| m_id | m_name | m_price | p_belong |
+------+------------+---------+----------+
| 1 | iphone6s | 1700 | 苹果 |
| 2 | 小米Plus | 1700 | 小米 |
| 3 | 小米6 | 2700 | 小米 |
| 4 | iphone12 | 5700 | 苹果 |
| 5 | 锤子T7 | 3700 | 锤子 |
| 6 | 华为P50 | 6700 | 华为 |
| 7 | 小米10 | 3700 | 小米 |
| 8 | vivo | 2700 | vivo |
+------+------------+---------+----------+
1.2.1 查询所有的产品数据
mysql> select * from mobile;
+------+------------+---------+----------+
| m_id | m_name | m_price | p_belong |
+------+------------+---------+----------+
| 1 | iphone6s | 1700 | 苹果 |
| 2 | 小米Plus | 1700 | 小米 |
| 3 | 小米6 | 2700 | 小米 |
| 4 | iphone12 | 5700 | 苹果 |
| 5 | 锤子T7 | 3700 | 锤子 |
| 6 | 华为P50 | 6700 | 华为 |
| 7 | 小米10 | 3700 | 小米 |
| 8 | vivo | 2700 | vivo |
+------+------------+---------+----------+
8 rows in set (0.00 sec)
1.2.2 查询商品的指定字段数据
mysql> select m_name,m_price from mobile;
+------------+---------+
| m_name | m_price |
+------------+---------+
| iphone6s | 1700 |
| 小米Plus | 1700 |
| 小米6 | 2700 |
| iphone12 | 5700 |
| 锤子T7 | 3700 |
| 华为P50 | 6700 |
| 小米10 | 3700 |
| vivo | 2700 |
+------------+---------+
8 rows in set (0.00 sec)
mysql>
1.2.3 表别名和列别名
mysql> select m_name as n,m_price as p from mobile as m;
+------------+------+
| n | p |
+------------+------+
| iphone6s | 1700 |
| 小米Plus | 1700 |
| 小米6 | 2700 |
| iphone12 | 5700 |
| 锤子T7 | 3700 |
| 华为P50 | 6700 |
| 小米10 | 3700 |
| vivo | 2700 |
+------------+------+
8 rows in set (0.00 sec)
1.2.4 去重查询
mysql> select distinct p_belong from mobile;
+----------+
| p_belong |
+----------+
| 苹果 |
| 小米 |
| 锤子 |
| 华为 |
| vivo |
+----------+
5 rows in set (0.00 sec)
1.2.5 在查询中进行运算
mysql> select m_name 手机名称,m_price*0.9 九折后价格 from mobile as m;
+--------------+-----------------+
| 手机名称 | 九折后价格 |
+--------------+-----------------+
| iphone6s | 1530 |
| 小米Plus | 1530 |
| 小米6 | 2430 |
| iphone12 | 5130 |
| 锤子T7 | 3330 |
| 华为P50 | 6030 |
| 小米10 | 3330 |
| vivo | 2430 |
+--------------+-----------------+
8 rows in set (0.00 sec)
mysql>
1.3 条件查询
mysql> select * from mobile where m_name ='小米6';
+------+---------+---------+----------+
| m_id | m_name | m_price | p_belong |
+------+---------+---------+----------+
| 3 | 小米6 | 2700 | 小米 |
+------+---------+---------+----------+
1 row in set (0.00 sec)
mysql> select * from mobile where p_belong !='苹果';
+------+------------+---------+----------+
| m_id | m_name | m_price | p_belong |
+------+------------+---------+----------+
| 2 | 小米Plus | 1700 | 小米 |
| 3 | 小米6 | 2700 | 小米 |
| 5 | 锤子T7 | 3700 | 锤子 |
| 6 | 华为P50 | 6700 | 华为 |
| 7 | 小米10 | 3700 | 小米 |
| 8 | vivo | 2700 | vivo |
+------+------------+---------+----------+
6 rows in set (0.00 sec)
mysql> select * from mobile where p_belong <>'苹果';
+------+------------+---------+----------+
| m_id | m_name | m_price | p_belong |
+------+------------+---------+----------+
| 2 | 小米Plus | 1700 | 小米 |
| 3 | 小米6 | 2700 | 小米 |
| 5 | 锤子T7 | 3700 | 锤子 |
| 6 | 华为P50 | 6700 | 华为 |
| 7 | 小米10 | 3700 | 小米 |
| 8 | vivo | 2700 | vivo |
+------+------------+---------+----------+
6 rows in set (0.00 sec)
mysql> select * from mobile where m_price <3000;
+------+------------+---------+----------+
| m_id | m_name | m_price | p_belong |
+------+------------+---------+----------+
| 1 | iphone6s | 1700 | 苹果 |
| 2 | 小米Plus | 1700 | 小米 |
| 3 | 小米6 | 2700 | 小米 |
| 8 | vivo | 2700 | vivo |
+------+------------+---------+----------+
4 rows in set (0.00 sec)
mysql> select * from mobile where m_price between 3000 and 5000;
+------+----------+---------+----------+
| m_id | m_name | m_price | p_belong |
+------+----------+---------+----------+
| 5 | 锤子T7 | 3700 | 锤子 |
| 7 | 小米10 | 3700 | 小米 |
+------+----------+---------+----------+
2 rows in set (0.00 sec)
mysql> select * from mobile where m_price >= 3000 and m_price <= 5000;
+------+----------+---------+----------+
| m_id | m_name | m_price | p_belong |
+------+----------+---------+----------+
| 5 | 锤子T7 | 3700 | 锤子 |
| 7 | 小米10 | 3700 | 小米 |
+------+----------+---------+----------+
2 rows in set (0.00 sec)
mysql> select * from mobile where p_belong in('小米','华为');
+------+------------+---------+----------+
| m_id | m_name | m_price | p_belong |
+------+------------+---------+----------+
| 2 | 小米Plus | 1700 | 小米 |
| 3 | 小米6 | 2700 | 小米 |
| 6 | 华为P50 | 6700 | 华为 |
| 7 | 小米10 | 3700 | 小米 |
+------+------------+---------+----------+
4 rows in set (0.00 sec)
mysql> select * from mobile where m_name like '%小%';
+------+------------+---------+----------+
| m_id | m_name | m_price | p_belong |
+------+------------+---------+----------+
| 2 | 小米Plus | 1700 | 小米 |
| 3 | 小米6 | 2700 | 小米 |
| 7 | 小米10 | 3700 | 小米 |
+------+------------+---------+----------+
3 rows in set (0.00 sec)
1.4 排序查询
SELECT *
FROM 表名
WHERE 条件
ORDER BY 排序字段 [ASC]|DESC;
mysql> select * from mobile order by m_price asc;
+------+------------+---------+----------+
| m_id | m_name | m_price | p_belong |
+------+------------+---------+----------+
| 9 | iPhone20 | NULL | 苹果 |
| 1 | iphone6s | 1700 | 苹果 |
| 2 | 小米Plus | 1700 | 小米 |
| 3 | 小米6 | 2700 | 小米 |
| 8 | vivo | 2700 | vivo |
| 5 | 锤子T7 | 3700 | 锤子 |
| 7 | 小米10 | 3700 | 小米 |
| 4 | iphone12 | 5700 | 苹果 |
| 6 | 华为P50 | 6700 | 华为 |
+------+------------+---------+----------+
9 rows in set (0.02 sec)
mysql>
mysql> select * from mobile order by m_price asc,m_id desc;
+------+------------+---------+----------+
| m_id | m_name | m_price | p_belong |
+------+------------+---------+----------+
| 9 | iPhone20 | NULL | 苹果 |
| 2 | 小米Plus | 1700 | 小米 |
| 1 | iphone6s | 1700 | 苹果 |
| 8 | vivo | 2700 | vivo |
| 3 | 小米6 | 2700 | 小米 |
| 7 | 小米10 | 3700 | 小米 |
| 5 | 锤子T7 | 3700 | 锤子 |
| 4 | iphone12 | 5700 | 苹果 |
| 6 | 华为P50 | 6700 | 华为 |
+------+------------+---------+----------+
9 rows in set (0.00 sec)
1.5 聚合查询
mysql> select count(*) from mobile;
+----------+
| count(*) |
+----------+
| 9 |
+----------+
1 row in set (0.01 sec)
mysql>
mysql> select sum(m_price) from mobile where m_price !='NULL';
+--------------+
| sum(m_price) |
+--------------+
| 28600 |
+--------------+
1 row in set, 1 warning (0.00 sec)
mysql> select max(m_price),min(m_price) from mobile;
+--------------+--------------+
| max(m_price) | min(m_price) |
+--------------+--------------+
| 6700 | 1700 |
+--------------+--------------+
1 row in set (0.00 sec)
mysql>
mysql> select avg(m_price) from mobile;
+--------------+
| avg(m_price) |
+--------------+
| 3575 |
+--------------+
1 row in set (0.00 sec)
mysql>
1.6 分组查询
SELECT 分组字段|聚合函数 FROM 表名
GROUP BY 分组的字段
HAVING 分组的条件;
mysql> select p_belong,count(*) from mobile group by p_belong;
+----------+----------+
| p_belong | count(*) |
+----------+----------+
| 苹果 | 3 |
| 小米 | 3 |
| 锤子 | 1 |
| 华为 | 1 |
| vivo | 1 |
+----------+----------+
5 rows in set (0.01 sec)
mysql> select p_belong,count(*) as amount from mobile group by p_belong having amount >1;
+----------+--------+
| p_belong | amount |
+----------+--------+
| 苹果 | 3 |
| 小米 | 3 |
+----------+--------+
2 rows in set (0.00 sec)
1.7 分页查询
mysql> select * from mobile limit 1,4;
+------+------------+---------+----------+
| m_id | m_name | m_price | p_belong |
+------+------------+---------+----------+
| 2 | 小米Plus | 1700 | 小米 |
| 3 | 小米6 | 2700 | 小米 |
| 4 | iphone12 | 5700 | 苹果 |
| 5 | 锤子T7 | 3700 | 锤子 |
+------+------------+---------+----------+
4 rows in set (0.00 sec)
1.8 INSERT INTO SELECT 语句
mysql> select 8 from apple;
Empty set (0.00 sec)
mysql> insert into apple select * from mobile where p_belong ='苹果';
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from apple;
+------+----------+---------+----------+
| m_id | m_name | m_price | p_belong |
+------+----------+---------+----------+
| 1 | iphone6s | 1700 | 苹果 |
| 4 | iphone12 | 5700 | 苹果 |
| 9 | iPhone20 | NULL | 苹果 |
+------+----------+---------+----------+
3 rows in set (0.00 sec)
1.9 结尾