mysql之----------------DQL select语句查询

一、DQL

 1.什么是DQL?
 DQL:Data  Query Language 数据库查询语言
  1. 条件查询
数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果给客户端;
通过查询语句查询出来的数据以表的形式展示给我们,我们称这个表为虚拟结果集,存放在内存中;
查询返回的结果集是一张虚拟表。

  • 1.1查询所有信息
# 查询一个表中所有的数据
# select * from 表名;
select * from result;

在这里插入图片描述

1.2 查询指定列的信息

select StudentNo,StudentName from student;
# 等价于 as:别名 引号可加可不加
select StudentNo as '学号' ,StudentName as '姓名' from student;

在这里插入图片描述
  1.3 查询mysql版本

select version();

在这里插入图片描述

1.4 选择学生成绩是100以下90以上的学生学号

# 选择学生成绩是100以下90以上的学生学号
select distinct StudentNo from result
where StudentResult > 90 and StudentResult < 100 and  SubjectNo = 9;
#等价于
select distinct StudentNo from result
where StudentResult between 90 and  100 and  SubjectNo = 9;

在这里插入图片描述
  1.5 嵌套筛选信息

# 选择学生姓名 他的成绩是90以上100以下
select StudentName from student
where StudentNo in (select distinct StudentNo from result
                    where StudentResult > 90 and StudentResult < 100 and  SubjectNo = 9);

在这里插入图片描述
  1.6 查询年龄为13并且姓名为郝一凡的学生

SELECT * FROM grade WHERE gradename = '郝一凡' AND gradeage = 13;

在这里插入图片描述
   1.7 查询性别为1的学生(1指的是女性 2指的是男性)

SELECT * FROM grade WHERE sex = '1';

在这里插入图片描述
    1.8 查询id为1或者姓名为张三的学生

SELECT * FROM grade WHERE gradeid = '1' OR gradename = '张三';

在这里插入图片描述
   1.9 查询学号是1,2,3的学生信息

SELECT * FROM grade WHERE gradeid IN(1,2,3);
#等价于
SELECT * FROM grade WHERE gradeid = '1' OR gradeid = '2' OR gradeid = '3';

在这里插入图片描述
  1.10 查询姓名为 null 的信息

SELECT * FROM grade WHERE gradename IS NULL;

在这里插入图片描述
  1.11 查询姓名不为 null 的学生信息

SELECT * FROM grade WHERE gradename IS NOT NULL;

在这里插入图片描述
  1.12 查询表中性别不为1的信息 1表示女性 2表示男性

SELECT * FROM grade WHERE sex != '1';

在这里插入图片描述

二、模糊查询

2.1 查询姓名是由两个汉字组成的信息

# 一个下划线代表一个字符
SELECT * FROM grade WHERE gradename LIKE '__';

在这里插入图片描述
   2.2 查询姓名是由两个汉字组成的姓名

SELECT gradename FROM grade WHERE gradename LIKE '__';

在这里插入图片描述
   2.3 查询姓名是由两个汉字组成,并且第二个字是三的信息

SELECT * FROM grade WHERE gradename LIKE '_三';

在这里插入图片描述
   2.4 查询姓名是由李开头的信息

#                               "%"匹配0-n个字符
SELECT * FROM grade WHERE gradename LIKE '李%';

在这里插入图片描述
   2.5 查询姓名第二个字为一的信息

SELECT * FROM grade WHERE gradename LIKE '_一%';

在这里插入图片描述
   2.6 查询姓名中带妮的信息

SELECT * FROM grade WHERE gradename LIKE '%妮%';

在这里插入图片描述

三、字段模糊查询

3.1 数学运算

select 1 + 2 as 结果;#数学运算

在这里插入图片描述
  3.2 去重 加 distinct 关键字

 select distinct StudentNo from result;

在这里插入图片描述
   3.3 指定数据运算
   将性别对应的数字和id相加

SELECT *,gradeid+sex FROM grade;

在这里插入图片描述
   3.4 如果指定相加的数据中存在null的话,那么就替换为0

SELECT *,IFNULL(gradeid,0) + IFNULL(sex,0) FROM grade;

在这里插入图片描述
  3.5 替换列名

# as 可加可不加
SELECT *,IFNULL(gradeid,0) + IFNULL(sex,0) AS total FROM grade;

可以看出上一张图片的最后一列 列名被替换成了total
在这里插入图片描述

# 本来是gradename 改成了name
SELECT gradename AS NAME FROM grade;

在这里插入图片描述

四、排序

#ASC升序 DESC降序 升序的话 ASC可以省略 默认升序
SELECT * FROM grade ORDER BY gradeage DESC;

在这里插入图片描述
   4.1 如果有相同的排序 比如年龄都是21 难么就排序他们的名字

SELECT * FROM grade ORDER BY gradeage ASC,gradename DESC;

在这里插入图片描述

五、聚合函数

5.1 查看总共有多少行信息

SELECT COUNT(*)AS 总数 FROM grade;

在这里插入图片描述
   5.2 统计name不为null的个数
   可以看出 总共有12条记录 其中有一条记录姓名为null
在这里插入图片描述

SELECT COUNT(gradename) FROM grade;

在这里插入图片描述
   5.3 查询年龄大于20岁的人数

SELECT COUNT(*)FROM grade WHERE gradeage > 20;

在这里插入图片描述
   5.4 查询年龄+id大于30的人数

SELECT * FROM grade WHERE IFNULL(gradeid,0) + IFNULL(gradeage,0) > 30;
SELECT count(*) FROM grade WHERE IFNULL(gradeid,0) + IFNULL(gradeage,0) > 30;

在这里插入图片描述
在这里插入图片描述
   5.5 查询有姓名的和年龄的人数

 SELECT COUNT(gradename),COUNT(gradeage) FROM grade;

在这里插入图片描述

七、聚合函数 SUM 和 AVG

7.1 对年龄求和

 SELECT SUM(gradeage) FROM grade;

在这里插入图片描述
   7.2 查询所有id和,以及所有年龄和

  SELECT SUM(gradeage),SUM(gradeid) FROM grade;

在这里插入图片描述
   7.3 查询id和+年龄和

  SELECT SUM(gradeid + IFNULL(gradeage,0)) FROM grade;

在这里插入图片描述
   7.4 查询平均年龄

SELECT AVG(gradeage) FROM grade;

在这里插入图片描述
   7.5 查询最大年龄和最小年龄

SELECT MIN(gradeage) FROM grade;
SELECT MAX(gradeage) FROM grade;

在这里插入图片描述
在这里插入图片描述

八、分组查询

8.1 group by
当group by 单独使用时,只能显示每组的第一条数据,意义不大

SELECT * FROM grade GROUP BY sex;

在这里插入图片描述
   8.2 对年龄分组

SELECT gradeage FROM grade GROUP BY gradeage;

在这里插入图片描述
   8.3 查询对应分组里面的人
   可以简单看成是一个数组

SELECT gradeage,GROUP_CONCAT(`gradename`) FROM grade GROUP BY gradeage;

在这里插入图片描述
   8.4 查询每个组的年龄之和

SELECT gradeage,GROUP_CONCAT(`gradename`),SUM(gradeage) FROM grade GROUP BY gradeage;

在这里插入图片描述
   8.5 求每个组的平均年龄

SELECT gradeage,GROUP_CONCAT(`gradename`),AVG(gradeage) FROM grade GROUP BY gradeage;

9.
在这里插入图片描述
   8.6 having
   having只能用于group by 作用和where一样
   按照年龄分组 并且找出哪个组的年龄之和大于30

SELECT gradeage,GROUP_CONCAT(gradename),SUM(gradeage) FROM grade 
GROUP BY gradeage HAVING SUM(gradeage) > 30;

在这里插入图片描述
   8.7 查询年龄大于20,并且组的年龄之和大于30,打印出来年龄之和还有姓名

SELECT gradeage,SUM(gradeage),GROUP_CONCAT(`gradename`)FROM grade WHERE gradeage > 20 GROUP BY gradeage HAVING SUM(gradeage) > 30;

在这里插入图片描述

  1. having与where区别
    having是在分组后对数据进行过滤;
    where是分组前对数据进行过滤;
    having后面可以跟分组函数;
    where后面不可以跟分组函数;
  2. select语句的书写顺序
    select ->from ->where->group by->having->order by->limit
  3. select语句的执行顺序
    from->where->group by->having->select->order by->limit
  4. limit的使用
    从索引0开始,取3条数据
SELECT * FROM grade LIMIT 0,3;

在这里插入图片描述
13. 分页算法

int position;//当前页数
int count;//一页显示几条数据
select * from grade limit ((position-1) * count)+1,count;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值