MySQL单表查询

本文介绍了MySQL中的基础查询操作,包括多字段查询、去除重复结果、字段计算、别名设置,以及条件查询如WHERE子句、BETWEEN、IN、NULL和模糊查询。此外,还讲解了排序查询、聚合函数的应用,如COUNT、MAX、MIN、SUM和AVG,以及分组查询和分页查询的语法和示例。这些内容是数据库管理和数据分析的基础知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         

目录

准备工作

一、基础查询

1、多个字段的查询

2、去除重复的结果集

3、计算字段1与字段2的和

4、避免有 NULL 参与的运算,计算结果为  NULL

5、起别名

二、条件查询 

 1、where  子句后面条件

2、根据两个及以上的条件查询

 3、条件是两个数值之间

 4、多个条件,满足其一就可

5、字段中有数据为NULL

6、模糊查询

三、排序查询

四、聚合函数

例1:查询 student 表中一共有多少个人

例2:查询 student 表中一共有多少个人

例3:求数学成绩的最大值

例4:求数学成绩的最小值

例5:求数学成绩的和

例6:求数学成绩的平均值

五、分组查询

1、语法

例1、按照性别分组,分别查询男女同学的平均分

例2、按照性别分组,分别查询男女同学的平均分、人数

例3、按照性别分组,分别查询男女同学的平均分、人数(分数低于70分的人不参与)

例4、按照性别分组,分别查询男女同学的平均分、人数(分数低于70分的人不参与,分组之后只保留大于两个人的组)

六、分页查询

1、语法:

例1、每页显示3条数据

公式:


        查询语法:    SELECT    字段列表   FROM    表名列表    WHERE    条件列表  GROUP  BY   分组字段  HAVING  分组之后的条件  ORDER  BY   排序   LIMIT   分页限定

        比如 在stu表中查找所有数据:  SELECT    *    FROM     stu;

        

说明:MySQL的语句不区分大小写;本文为了区别语句和我们的变量名,本文SQL语句全部大写。

准备工作

建议:使用SQLyog,复制下面的代码做好查询之前的准备。

我们先创建一个表,插入数据:

CREATE TABLE student (

id INT,-- 编号

NAME VARCHAR(20),-- 姓名

age INT,-- 年

sex VARCHAR(5),-- 性别

address VARCHAR(100),-- 地址

math INT,-- 数学

english INT -- 英语

);

INSERT INTO student(id,NAME,age,sex,address,math,english) VALUES 
(1,'马云',55,'男','杭州',66,78),
(2,'马化腾',45,'女','深圳',98,87),
(3,'马景涛',55,'男','香港',56,77),
(4,'柳岩',20,'女','湖南',76,65),
(5,'柳青',20,'男','湖南',86,NULL),
(6,'刘德华',57,'男','香港',99,99),
(7,'马德',22,'女','香港',99,99),
(8,'德玛西亚',18,'男','南京',56,65);

说明:上面的语句如果报错,请同学们手敲一遍,很有可能是空格的原因导致报错。下面的代码,为了排版 敲了很多空格,不能复制过去直接执行。

一、基础查询

1、多个字段的查询

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

比如:查询姓名和年龄

SELECT    NAME ,age   FROM    student;

2、去除重复的结果集

SELECT    DISTINCT    字段    FROM    表名;

比如:查询  address 都有哪些地方,不想看重复的地域名

SELECT    DISTINCT   address    FROM    student;

比如:查询姓名和年龄,并且对结果集去重

SELECT  DISTINCT   NAME,age    FROM    student;

3、计算字段1与字段2的和

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

比如:查询英语成绩 与 数学成绩之和

SELECT   math, english,math+english   FROM  student;

4、避免有 NULL 参与的运算,计算结果为  NULL

SELECT  字段1,字段2,字段1+IFNULL(字段2,0)   FROM   表名;

比如:查询英语成绩 与 数学成绩之和,避免和为NULL

SELECT   math, english,IFNULL(math,0)+IFNULL(english,0)  FROM  student;

5、起别名

  比如:查询查询英语成绩 与 数学成绩之和,第三列显示名字太长、不好看

SELECT   math, english,math+IFNULL(english,0)   AS  总分   FROM  student;

SELECT   math, english,math+IFNULL(english,0)     总分   FROM  student;

SELECT   math  数学, english  英语,math+IFNULL(english,0)    总分   FROM  student; 

二、条件查询 

 1、where  子句后面条件

SELECT    *   FROM    表名    WHERE   条件;

比如:查询年龄大于、大于等于20岁有哪些人

SELECT   *   FROM    student    WHERE   age>20;

 SELECT   *   FROM    student    WHERE   age>=20;

比如:查询年龄等于、不等于20岁有哪些人

 SELECT   *   FROM    student    WHERE   age=20;

 SELECT   *   FROM    student    WHERE   age!=20;

 SELECT   *   FROM    student    WHERE   age<>20;

2、根据两个及以上的条件查询

比如:查询年龄大于等于20、小于等于30岁有哪些人

SELECT   *   FROM    student    WHERE   age>=20  &&  age<=30 ;

 SELECT   *   FROM    student    WHERE   age>=20  AND age<=30 ;

 3、条件是两个数值之间

例1:查询年龄大于等于20、小于等于30岁有哪些人

SELECT   *   FROM    student    WHERE   age   BETWEEN   20  AND  30 ; 

 4、多个条件,满足其一就可

例1:查找22岁、18岁、20岁的人员信息

SELECT *  FROM    student    WHERE  age=22  or  age= 18   or age=20;

SELECT * FROM   student  WHERE  age  IN  (18,20,22);

5、字段中有数据为NULL

例1:查询英语缺考的同学

SELECT  *  FROM  student   WHERE  english  IS NULL;

例2:查询英语参加考试的同学

SELECT  *  FROM  student   WHERE  english  IS NOT  NULL;

6、模糊查询

占位符:_  表示单个任意字符    %  表示多个任意字符 

例1:查找表中姓马的人

SELECT  *  FROM  student   WHERE  NAME   LIKE  '马%';

 例2:查找表中名字中第二个字是华的人

SELECT  *  FROM  student   WHERE  NAME   LIKE  '_华%';

 例3:查找表中姓名是三个字的人

SELECT  *  FROM  student   WHERE  NAME   LIKE  '____';

 例4:查找表中名字里面有‘‘马”字的人

SELECT  *  FROM  student   WHERE  NAME   LIKE  '%华%';

三、排序查询

语法:SELECT  *  FROM 表名 ORDER BY  字段1  排序方式1,字段2  排序方式2;

排序方式:ASC 是升序方式 , DESC是降序方式,不写代表默认ASC。

例1:按照数学成绩对表中数据进行排序

SELECT  *  FROM  student  ORDER  BY  math--升序;

SELECT  *  FROM  student  ORDER  BY  math  ASC;

SELECT  *  FROM  student  ORDER  BY  math  DESC--降序;

例2:按照数学成绩排名,如果数学成绩一样,则按照英语成绩排名

SELECT  *  FROM  student  ORDER  BY  math  ASC,english  ASC;

SELECT  *  FROM  student  ORDER  BY  math  ASC,english  DESC;

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

四、聚合函数

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

1、COUNT:计算个数

2、MAX:计算最大值

3、MIN:计算最小值

4、SUM:求和

5、AVG:计算平均值

例1:查询 student 表中一共有多少个人

SELECT  COUNT(NAME)  FROM  student;

注意:聚合函数的计算会排除NULL值

解决方案:
1、选择不包含NULL的列进行计算:主键的列

2、IFNULL函数

例2:根据english查询 student 表中一共有多少个人,但是english里有NULL

SELECT  COUNT(IFNULL(english,0))  FROM  student;

SELECT  COUNT(IFNULL(english,0))  FROM  student;

例3:求数学成绩的最大值

SELECT  MAX(math)  FROM  student;

例4:求数学成绩的最小值

SELECT  MIN(math)  FROM  student;

例5:求数学成绩的和

SELECT  SUM(math)  FROM  student;

例6:求数学成绩的平均值

SELECT  AVG(math)  FROM  student;

五、分组查询

1、语法

SELECT   字段1,聚合函数1,聚合函数2   FROM   表名  GROUP  BY  字段1;

注意:分组查询的字段,只能是分组字段;查询条件只能是聚合函数

例1、按照性别分组,分别查询男女同学的平均分

SELECT  sex,AVG(math)  FROM  student    GROUP  BY  sex;

例2、按照性别分组,分别查询男女同学的平均分、人数

SELECT  sex,AVG(math),COUNT(id)   FROM  student    GROUP  BY  sex;

例3、按照性别分组,分别查询男女同学的平均分、人数(分数低于70分的人不参与)

SELECT  sex,AVG(math),COUNT(id)   FROM  student  WHERE  math>70  GROUP  BY  sex;

例4、按照性别分组,分别查询男女同学的平均分、人数(分数低于70分的人不参与,分组之后只保留大于两个人的组)

SELECT  sex,AVG(math),COUNT(id)   FROM  student  WHERE  math>70  GROUP  BY  sex  HAVING  COUNT(id)  >2;

WHERE 与 HAVING的区别:

  • WHERE在分组之前进行限定
  • HAVING在分组之后根据条件筛选
  • WHERE后不可以跟聚合函数
  • HAVING可以进行聚合函数的判断

六、分页查询

1、语法:

......    LIMIT    开始的索引,每页查询的条数

例1、每页显示3条数据

SELECT  *  FROM  student    LIMIT   0,3;  -- 第一页

SELECT  *  FROM  student    LIMIT   3,3;  -- 第二页

公式:

开始的索引  =  (当前的页码 - 1)*  每页显示多少条数据

注意:LIMIT是一个方言,其他数据库的分页查询用的语句不是LIMIT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值