mySQL单表查询

目录

mySQL单表查询

1查询所有字段

2查询指定字段

2.1查询单个字段

2.2 查询多个字段

3查询指定记录

4带 IN关键字的查询

5带 BETWEEN AND的范围查询

6带 LIKE的字符匹配查询

6.1百分号通配符'%',匹配任意长度的字符,甚至包括零字符

6.2下划线通配符'_',一次只能匹配任意一个字符

7查询空值

8带 AND的多条件查询

9带OR的多条件查询

10查询结果不重复

11对查询结果排序

11.1 升序排序(ASC),默认的排序方式,加与不加都可以。

11.2 降序排序(DESC),如果选择降序排序,必须末尾加关键字DESC。

12分组查询

12.1创建分组

12.2使用HAVING过滤分组

12.3在GROUP BY字句中使用WITH ROLLUP

12.4多字段分组

13使用 LIMIT限制查询结果的数量


mySQL单表查询

1查询所有字段

SELECT查询记录最简单的形式是从一个表中检索所有记录,实现的方法是使用星号(*)通配符指定查找所有列的名称。语法格式如下:

SELECT * FROM 表名;

2查询指定字段

2.1查询单个字段

查询表中的某一个字段,语法格式为:

SELECT 列名 FROM 表名;

2.2 查询多个字段

使用 SELECT声明,可以获取多个字段下的数据,只需要在关键字 SELECT后面指定要查找的字段的名称,不同字段名称之间用逗号(,)分隔开,最后一个字段后面不需要加逗号,语法格式如下:

SELECT 字段名1,字段名2,字段名n FROM 表名;

3查询指定记录

数据库中包含大量的数据,根据特殊要求,可能只需要查询表中的指定数据,即对数据进行过滤。在 SELECT语句中,通过 WHERE子句可以对数据进行过滤,语法格式为:

SELECT 字段名1,字段名2,字段名n
FROM 表名
WHERE 查询条件

在WHERE字句中,MySQL提供了一系列的条件判断符,查询结果如表所示

操作符说明
=相等
<>,!=不等于
<小于
<=小于或者等于
>大于
>=大于或者等于
BETWEEN位于两值之间

4带 IN关键字的查询

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

SELECT 字段名1,字段名2,..字段名n FROM 表名 WHERE 字段名m IN(条件1,条件2);

5带 BETWEEN AND的范围查询

BETWEEN AND用来查询某个范围内的值,该操作符需要两个参数,即范围的开始值和结束值,如果字段值满足指定的范围査询条件,则这些记录被返回。

SELECT 字段名1,字段名2,..字段名n FROM 表名 WHERE 字段名m BETWEEN 条件1 AND 条件2;

6带 LIKE的字符匹配查询

6.1百分号通配符'%',匹配任意长度的字符,甚至包括零字符

s%查找以‘s’开头的字符串
%s查找以‘s’结尾的字符串
%s%查找含有's'的字符串
s1%s2查找以‘s1’开头且以's2'结尾的字符串
SELECT 字段名1,字段名2,..字段名n FROM 表名 WHERE 字段名m LIKE 's%';
​
SELECT 字段名1,字段名2,..字段名n FROM 表名 WHERE 字段名m LIKE '%s';
​
SELECT 字段名1,字段名2,..字段名n FROM 表名 WHERE 字段名m LIKE '%s%';
​
SELECT 字段名1,字段名2,..字段名n FROM 表名 WHERE 字段名m LIKE 's1%s2';

6.2下划线通配符'_',一次只能匹配任意一个字符

另一个非常有用的通配符是下划线通配符'',该通配符的用法和‘‘%’相同,区别是''%’可以匹配多个字符,而‘''只能匹配任意单个字符,如果要匹配多个字符,则需要使用相同个数的'_'.

SELECT 字段名1,字段名2,..字段名n FROM 表名 WHERE 字段名m LIKE '_s';

7查询空值

数据表创建的时候,设计者可以指定某列中是否可以包含空值(NULL)。空值不同于0,也不同于空字符串。空值一般表示数据未知、不适用或将在以后添加数据。在 SELECT语句中使用IS NULL子句,可以查询某字段内容为空记录。

SELECT 字段名1,字段名2,..字段名n FROM 表名 WHERE 字段名m IS NULL;
​
SELECT 字段名1,字段名2,..字段名n FROM 表名 WHERE 字段名m IS NOT NULL;

8带 AND的多条件查询

使用 SELECT查询时,可以增加查询的限制条件,这样可以使查询的结果更加精确。 MySQL在 WHERE子句中使用AND操作符限定只有满足所有查询条件的记录才会被返回。可以使用AND连接两个甚至多个查询条件,多个条件表达式之间用AND分开。

SELECT 字段名1,字段名2,..字段名n FROM 表名 WHERE 字段名a=条件1 AND 字段名b=条件2;

9带OR的多条件查询

与AND相反,在 WHERE声明中使用OR操作符,表示只需要满足其中一个条件的记录即可返回。OR也可以连接两个甚至多个查询条件,多个条件表达式之间用OR分开。

SELECT 字段名1,字段名2,..字段名n FROM 表名 WHERE 字段名a=条件1 OR 字段名b=条件2;

10查询结果不重复

·在SELECT语句中,可以使用DISTINCT关键字指示MySQL消除重复的记录指

SELECT DISTINCT 字段名 FROM 表名;

11对查询结果排序

11.1 升序排序(ASC),默认的排序方式,加与不加都可以。

SELECT  字段名1 FROM 表名 ORDER BY 字段名2 ASC;

11.2 降序排序(DESC),如果选择降序排序,必须末尾加关键字DESC。

SELECT  字段名1 FROM 表名 ORDER BY 字段名2 DESC;

12分组查询

分组查询是对数据按照某个或多个字段进行分组, MySQL中使用 GROUP BY关键字对数据进行分组,基本语法形式为:

字段值为进行分组时所依据的列名称;“ HAVING<条件表达式>”指定满足表达式限定条件 的结果将被显示。

GROUP BY 字段名 HAVING <条件表达式>

字段值为进行分组时所依据的列名称;“ HAVING<条件表达式>”指定满足表达式限定条件的结果将被显示。

12.1创建分组

GROUP BY关键字通常和集合函数一起使用,例如:MAX()、MIN()、 COUNT()、SUM()、AVG()。例如,要返回每个水果供应商提供的水果种类,这时就要在分组过程中用到 COUNT()函数,把数据分为多个逻辑组,并对每个组进行集合计算.

mysql> SELECT s_id,COUNT(*) AS Total FROM fruits GROUP BY s_id;
+------+-------+
| s_id | Total |
+------+-------+
|  101 |     3 |
|  102 |     2 |
|  103 |     2 |
|  104 |     1 |
|  105 |     5 |
|  106 |     1 |
|  107 |     2 |
+------+-------+
7 rows in set (0.03 sec)
​
mysql> SELECT s_id,GROUP_CONCAT(f_name) AS Names FROM fruits GROUP BY s_id;
+------+--------------------------------+
| s_id | Names                          |
+------+--------------------------------+
|  101 | apple,blackberry,apricot       |
|  102 | grape,banana                   |
|  103 | apricot,cocount                |
|  104 | lemon                          |
|  105 | melon,xbaby,xxtt,orange,xbabay |
|  106 | mango                          |
|  107 | xxxx,xbababa                   |
+------+--------------------------------+
7 rows in set (0.00 sec)

12.2使用HAVING过滤分组

GROUP BY可以和 HAVING一起限定显示记录所需满足的条件,只有满足条件的分组才会被显示。

mysql> SELECT s_id,GROUP_CONCAT(f_name) AS Names FROM fruits GROUP BY
    -> s_id HAVING COUNT(f_name)>1;
+------+--------------------------------+
| s_id | Names                          |
+------+--------------------------------+
|  101 | apple,blackberry,apricot       |
|  102 | grape,banana                   |
|  103 | apricot,cocount                |
|  105 | melon,xbaby,xxtt,orange,xbabay |
|  107 | xxxx,xbababa                   |
+------+--------------------------------+
5 rows in set (0.02 sec)

12.3在GROUP BY字句中使用WITH ROLLUP

使用 WITH ROLLUP关键字之后,在所有查询出的分组记录之后增加一条记录,该记录计算查询出的所有记录的总和,即统计记录数量。

mysql> SELECT s_id,COUNT(*) AS Total FROM fruits
    -> GROUP BY s_id WITH ROLLUP;
+------+-------+
| s_id | Total |
+------+-------+
|  101 |     3 |
|  102 |     2 |
|  103 |     2 |
|  104 |     1 |
|  105 |     5 |
|  106 |     1 |
|  107 |     2 |
| NULL |    16 |
+------+-------+
8 rows in set (0.00 sec)

12.4多字段分组

使用 GROUP BY可以对多个字段进行分组, GROUP BY关键字后面跟需要分组的字段,MySQL根据多字段的值来进行层次分组,分组层次从左到右,即先按第1个字段分组,然后在第1个字段值相同的记录中,再根据第2个字段的值进行分组依次类推。

mysql> SELECT * FROM fruits GROUP BY s_id,f_name;
+------+------+------------+---------+
| f_id | s_id | f_name     | f_price |
+------+------+------------+---------+
| a1   |  101 | apple      |       5 |
| c0   |  101 | apricot    |       2 |
| b1   |  101 | blackberry |      10 |
| t1   |  102 | banana     |      10 |
| t2   |  102 | grape      |       5 |
| a2   |  103 | apricot    |       2 |
| o2   |  103 | cocount    |       9 |
+------+------+------------+---------+
16 rows in set (0.08 sec)

13使用 LIMIT限制查询结果的数量

SELECT返回所有匹配的行,有可能是表中所有的行,如仅仅需要返回第一行或者前几行,使用 LIMIT关键字,基本语法格式如下:

LMIT 位置偏移量,行数

第一个“位置偏移量”参数指示 MySQL从哪一行开始显示,是一个可选参数,如果不指定“位置偏移量”,将会从表中的第一条记录开始(第一条记录的位置偏移量是O,第二条记录的位置偏移量是1..依次类推);第二个参数“行数”指示返回的记录条数。

mysql> SELECT * FROM fruits ORDER BY f_price DESC LIMIT 4;
+------+------+------------+---------+
| f_id | s_id | f_name     | f_price |
+------+------+------------+---------+
| m1   |  106 | mango      |      16 |
| m3   |  105 | xxtt       |      12 |
| bs1  |  105 | orange     |      11 |
| b1   |  101 | blackberry |      10 |
+------+------+------------+---------+
4 rows in set (0.00 sec)
mysql> SELECT * FROM fruits LIMIT 4,3;
+------+------+--------+---------+
| f_id | s_id | f_name | f_price |
+------+------+--------+---------+
| b5   |  107 | xxxx   |       4 |
| bs1  |  105 | orange |      11 |
| bs2  |  105 | melon  |       8 |
+------+------+--------+---------+
3 rows in set (0.00 sec)

 

  • 6
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值