聚合函数中的小应用以及DQL语句中的应用
– DQL语句里面查询某个字段为null的语法
– select 字段列表 from 表名 where 字段名称 is null ;
– 需求1:查询英语成绩为null的学生信息;
/*
select
*
from
student
where english == null ;
*/
SELECT
*
FROM
student
WHERE english IS NULL ;
– 查询某个字段值不等于null的语法
– select 字段列表 from 表名 where 某个字段 is not null ;
/*
SELECT
*
FROM
student
WHERE english != NULL ;
*/
– 需求2:查询英语成绩不为null的学生信息;
SELECT
*
FROM
student
WHERE english IS NOT NULL ;
– 模糊查询:like关键字
/*
%:代表任意字符 (使用居多)
_:一个下划线代表一个字符
select 字段列表 from 表名 where 某个字段名称 like ‘%马%’
select 字段列表 from 表名 where 某个字段名称 like ‘马%’
*/
– 查询mysql中全局变量包含 character
SHOW VARIABLES LIKE ‘%character%’ ;
– 需求3:要查询姓马的学生信息
SELECT
*
FROM
student
WHERE NAME LIKE ‘%马%’ ; – 字符串拼接
– 需求4:查询姓名为三个字符的学生信息;
SELECT
*
FROM
student
WHERE NAME LIKE ‘___’ ; – 一个_代表一个字符
– 应用场景:给一个表单—搜索框----输入信息---->看到搜索结果(百度搜索引擎)
– 搜索框—搜索按钮---->数据库完成模糊查询
– 聚合函数查询
– 语法:select 聚合函数 from 表名;
– count(列名或者字段名称):查询总记录数 (统计) (使用最多的)
– 统计有多少条记录,就是count函数,而且里面的字段名称一般用非业务字段(id)
– 需求5:统计这个student表有多少条记录
– select count(english) ‘总记录数’ from student ; 有问题:业务字段如果某个值null,不会统计这条记录
– select count(ifnull(english,0)) ‘总记录数’ from student ; – 不建议使用业务字段去统计
– 使用非业务字段 id来统计
SELECT COUNT(id) ‘total’ FROM student ;
– avg(字段名称/某个列的名称) :查询平均分 —都是int类型
– 需求6:查询数学的平均分
SELECT AVG(math) ‘数学平均分’ FROM student ;
– 需求7:查询英语成绩的平均分
SELECT AVG(IFNULL(english,0)) ‘英语平均分’ FROM student ;
– sum(字段列表) :求和函数
– 需求8:要查询数学成绩的总分
– 数学和英语的总分成绩
SELECT SUM(math+IFNULL(english,0)) FROM student ;
– max(列名/字段名称) /min(列名/字段名称):最大值和最小值
– 需求9:要查询数学的最高成绩
SELECT MAX(math) FROM student ;
SELECT MIN(math) FROM student ;
– 聚合函数的复杂使用:单表 select嵌套select
– 需求10:查询数学成绩出大于数学平均分的学生信息;
– 分步:1)查询出数学平均分是多少
– select avg(math) from student ; – 79.5000
– 2)查询出大于79.5000的学生信息
– select * from student where math > 79.5000 ;
– 一步走
SELECT
*
FROM
student
WHERE math >
(SELECT
AVG(math)
FROM
student) ;
– 需求11:查询出数学最高分的学生信息
– 分步:1)查询出最高分的数学成绩
– select max(math) from student ; – 99
– 2)查询出math是99分的学生信息
– select * from student where math = 99 ;
– 一步走
SELECT * FROM student WHERE math =
(SELECT MAX(math) FROM student) ;
– 排序查询:order by
– 语法:select 字段列表 from 表名 order by 字段名称 排序规则(asc:升序(默认)/desc:降序)
– 需求12:数学成绩升序排序 (应用场景:针对某个字段排序)
SELECT * FROM student ORDER BY math ASC ;-- 字段后面没有带排序规则:asc
– 查询:多个字段同时排序
– 语法:select 字段列表 from 表名 order by 字段名称1 排序规则,字段名称2 排序规则;
– 前面第一个字段:按照主要条件排
UPDATE student SET english = 95 WHERE id = 6 ;
UPDATE student SET english = 100 WHERE id = 5 ;
– 需求12:查询学生的所有信息,数学成绩升序,英语成绩降序同时排序
SELECT
*
FROM
student
ORDER BY math ASC, – 主要条件排序
english DESC ; – 次要条件排序
– 分组查询:group by
– 注意事项:分组查询的时候,使用select可以查询出分组的字段
– 语法 :select 字段列表(包括分组字段) from 表名 group by 分组字段名称;
– 需求:按照性别分组,计算出他们组的数学的平均分
SELECT
sex ‘性别’,
AVG(math) ‘数学平均分’
FROM
student
GROUP BY sex ;
– 注意实现 group by如果 和where 一块使用?
– where条件必须置于group by 之前,先满足条件,才能分组;
– group by 的后面不能使用聚合函数!
– 需求:按照性别分组,查询他们的数据平均分,条件:数学成绩不大于70分的人不参与分组
/*select
sex ‘性别’,
avg(math) ‘数学平均分’
from
student
group by sex
where math > 70 ;
错误语法
*/
SELECT
sex ‘性别’,
AVG(math) ‘数学平均分’
FROM
student
WHERE math > 70
GROUP BY sex ;
– 筛选having
– 一条语句既有分组,又有筛选,还有where,先后顺序?
– having和group by:having后面可以使用聚合函数,而且group by 不能使用聚合函数
– where 在前面,下来group by,再是having 筛选
– 需求:按照性别分组,查询他们的数据平均分,
– 条件:数学成绩不大于70分的人不参与分组,筛选出总人数大于2的一组
SELECT
sex ‘性别’,
AVG(math) ‘数学平均分’,
COUNT(id) ‘总人数’
FROM
student
WHERE math > 70 – 数学成绩大于70分的同学参与分组
GROUP BY sex
HAVING COUNT(id) > 2 ;
SELECT
sex ‘性别’,
AVG(math) ‘数学平均分’,
COUNT(id) total
FROM
student
WHERE math > 70 – 数学成绩大于70分的同学参与分组
GROUP BY sex
HAVING total > 2 ;
– 分页查询:limit (重点)
– 语法:select 字段列表 from 表名 limit 起始行数,每页显示的条数;
– 起始行数= (当前页码-1)*每页显示的条数
– 已知参数:每页显示条数3条, 查询第一页的数据;
SELECT * FROM student LIMIT 0,3 ;
– 第二页数据 (每页显示3条)
SELECT * FROM student LIMIT 3,3;
– 第三页数据 (每页显示3条)
SELECT * FROM student LIMIT 6,3 ;
– 第四页数据(每页显示3条)
SELECT * FROM student LIMIT 9,3 ;
– 插入一些数据
INSERT INTO student VALUES(9,‘盲僧’,25,‘男’,‘西安’,78,76),
(10,‘ez’,20,‘男’,‘北京’,80,78),
(11,‘螳螂’,22,‘男’,‘咸阳’,87,98) ,
(12,‘木木’,28,‘男’,‘渭南’,76,66) ;
– 查询所有学生信息
SELECT * FROM student ;
– 数据库约束
– 约束:是约束用户操作数据的一种非法行为
– 举例:插入全表数据,直接插入null,null就是没有值,没有意义
– 分类
– 默认约束default
– 非空约束not null
– 唯一约束unique
– 主键约束 primary key
– 自增长约束 auto_increment—和主键约束一块用
– 外键约束 foreign key
– 级联操作CACADE:级联修改和级联删除,是在外键约束基础上使用的
– 创建一张表 worker表
CREATE TABLE worker(
id INT ,
NAME VARCHAR(10),
gender VARCHAR(3) DEFAULT ‘男’ – 默认约束
) ;
– 插入两条正常的数据
INSERT INTO worker VALUES(1,‘高圆圆’,‘女’),(2,‘张佳宁’,‘女’) ;
– 如果插入数据,插入部分字段,性别字段没有插入数据,默认值null(没有意义)
INSERT INTO worker(id,NAME) VALUES(3,‘文章’) ;
DELETE FROM worker WHERE id = 3 ;
– 默认约束default :当某个表插入部分字段,没有给指定字段插入数据,默认约束就可以给默认值
DROP TABLE worker ;
– 非空约束 not null,当用户在插入数据的时候,直接插入null,非空约束起作用
CREATE TABLE worker(
id INT NOT NULL, – 非空约束 (插入数据,必须存在)
NAME VARCHAR(10)
) ;
– 插入正常数据
INSERT INTO worker VALUES(1,‘张三丰’),(2,‘张无忌’) ;
INSERT INTO worker VALUES(NULL,‘张三’) ; – 非法行为:插入null值,不应该出现
– Column ‘id’ cannot be null :列id字段不能为null
INSERT INTO worker(NAME) VALUES(‘高圆圆’) ; – 这种sql不行
DELETE FROM worker WHERE NAME = ‘高圆圆’ ;
– 通过sql语句修改字段类型:将not null去掉了
ALTER TABLE worker MODIFY id INT ;
– 修改字段类型
ALTER TABLE worker MODIFY id INT NOT NULL ;
– 唯一约束 unique,限定某个字段值不能重复
– 实际业务中:权限校验(邮箱/手机号:身份信息):手机号登录 —这个身份:超级管理员
– 实际业务中:手机短信验证/邮箱邮箱激活…
CREATE TABLE worker(
id INT NOT NULL,
NAME VARCHAR(20) NOT NULL ,
phone_number VARCHAR(11) UNIQUE
) ;
– 插入正常数据
INSERT INTO worker VALUES(1,‘高圆圆’,‘13366668888’),(2,‘张佳宁’,‘18866662222’);
– 插入数据
INSERT INTO worker VALUES(3,‘李四’,‘13366668888’) ;-- Duplicate entry ‘13366668888’ for key ‘phone_number’ :重复数据出现
– 想通过sql语句将唯一约束删除
– 唯一约束—建立一种索引,索引名称index_name默认就是当前字段名称
– 删除唯一约束就是将唯一索引类型的索引名称删除
– alter table 表名 drop index 索引名称
ALTER TABLE worker DROP INDEX phone_number;
DELETE FROM worker WHERE id = 3 ;
– 通过sql语句:添加唯一约束,就是和修改表字段类型语法一致
ALTER TABLE worker MODIFY phone_number VARCHAR(11) UNIQUE ;
DROP TABLE worker ;
SELECT * FROM worker;
聚合函数中的小应用以及DQL语句中的应用相关推荐
- c语言printf输出语句_C语言中另一个printf()语句中的printf()语句
c语言printf输出语句 A printf() function is a standard library function, that is used to print the text and ...
- mysql中两个表连接_SQL语句中两个表的连接
展开全部 一.外连接 1.左连接 left join 或 left outer join SQL语句:select * from student left join score on student ...
- mysql中的like什么意思_mysql语句中like用法是什么
mysql语句中like用法:1.搭配[%]使用,[%]代表一个或多个字符的通配符:2.搭配[_]使用,[_]代表仅仅一个字符的通配符. mysql语句中like用法: 1.常见用法: (1)搭配%使 ...
- 下列语句中在python中是非法的_下列语句中,()在Python中是非法的
下列语句中,()在Python中是非法的 答:x=(y=z+1) 线上书店和实体书店的经营方式基本上是一样的,都是图书种类越齐全越好 答:× 由此可知,从安全的角度考虑,汽车的色彩最好选择( )或红色 ...
- 下列java语句中 不正确_下列JAVA语句中,不正确的一项是()
[单选题]下列代表"横向跳格"格式转义字符的是( ) . (3.0分) [单选题]运算符+* % =中,优先级最低的是( ). (3.0分) [填空题]要使用标准的I/O库函数,必 ...
- python中else的用法_Python循环语句中else的用法总结
如何正确的理解python for循环中的else用法 程序中的else语句是便于处理某种行为,在循环的正常终止时执行:即以return或者break方式退出循环将会忽略else语句:存在contin ...
- mysql中in和between_MySQL的WHERE语句中BETWEEN与IN的用法和他们的区别
MySQL BETWEEN 用法 not可以对between-and取反. 1.数值型 BETWEEN 运算符用于 WHERE 表达式中,选取介于两个值之间的数据范围.BETWEEN 同 AND 一起 ...
- python中if in的用法_if语句中“ in”的使用和含义?
慕的地6264312 由于您声称习惯于JavaScript:Python in运算子类似于JavaScript in运算子.这是一些JavaScript:var d = {1: 2, 3: 4};if ...
- java string 空间_Java中,String str = “Runoob”;这个语句中str和“Runoob”都占空间吗?分别占多大?...
题目描述 1,"Runoob"这个字面值是在方法区的常量池中,它占多大空间? 2,str是存在栈区吗?它又占多大空间呢?是占一个 char型大小的空间吗? 3,str是存放的&qu ...
最新文章
- Llinux课程计划安排
- 使用Java反射更改私有静态最终字段
- 数据库自动收缩带来的严重问题
- Python教程:快速掌握列表的常用方法
- MyEclipse设置文件编码
- Discuz!$_G变量的使用方法
- python编程环境安装包_Python环境安装与配置
- 企业打开Redis的正确方式,来自阿里云云数据库团队的解读
- LOADRUNNER连接ORACLE数据库的方法
- struts2令牌(token)内部原理
- Jupyter Lab——无法显示matplotlib绘制的图像
- Duplicate spring bean id
- [Publish AAR To Maven] 使用 Gradle 发布 AAR 到 Maven 仓库
- 学画画怎么画三点透视图
- 计算机flash听课记录范文,听课记录范文.doc
- DOS命令,卸载程序
- 简述linux操作系统的功能是什么,什么是Linux操作系统及其功能
- 三维形体的数据结构(1)半边数据结构
- WCH系列芯片CoreMark跑分
- react 使用 Youtube 播放器
热门文章
- otsu java,opencv阈值处理--threshold函数、自适应阈值处理、Otsu处理(大津法)
- Atmel Studio 开发 atmega -- Pro Micro
- win10使用WinAppDriver实现UI自动化
- 行业分析-全球与中国造纸助留剂市场现状及未来发展趋势
- NPN和PNP三极管做开关电路使用方式速记
- size mismatch for yolo_head2.1.bias: copying a param with shape torch.Size(【75】) from checkpoint...
- Linux系统shell脚本实战之解决生产ddos攻击
- bugku之md5 collision(NUPT_CTF)
- 又一大波僵尸向社交网络来了
- linux结构体转qbytearray,QByteArray储存二进制数据(包括结构体,自定义QT对象)