day05【入门】MySQL学习(2)

今日继续学习MySql数据库部分,这块用的比较多的是带有各种条件的select。


目录

1、students表准备(查询)

2、字段的别名

3、表的别名

4、distinct 过滤重复记录

5、where子句

6、select 查询的基本规律

7、比较运算法

8、逻辑运算符

9、like模糊查询

10、范围查找

11、空判断

12、where语句在update、delete后

13、order by排序

单字段排序:

多字段排序:

14、where结合order by

15、聚合函数

(1)count函数

(2)max最大值

(3)min查询最小值

(4)求和sum

(5)avg求平均

16、分组 group by

17、where和order by 、order by的顺序

18、分组后筛选

19、where与having 的区别:

20、分页limit

21、分页

22、求总页数

23、数据准备(多表查询)

24、连接查询介绍

24.1 内连接

24.1.1 练习

24.1.2  隐式内连接

24.1.3 内连接指定显示部分字段

24.1.4 显示表的别名

24.1.5 带有where的内连接

​编辑

24.1.6 多表内连查询

24.2 左连接

24.3 右连接


1、students表准备(查询)

-- 准备students表
drop table if exists students;/*创建学生表students*/create table students(studentNO varchar(10) primary key,/*学号*/name varchar(10),sex varchar(1),hometown varchar(20),age tinyint,class varchar(10),card varchar(18));insert into students values
('001','王昭君','女','北京',30,'1班','110214567897654367'),('002','诸葛亮','男','上海',29,'2班','310214567897654367'),('003','张飞','男','南京',30,'3班','320214567897654367'),('004','白起','男','安徽',35,'4班','340214567897654367'),('005','大乔','女','天津',28,'3班','120214567897654367'),('006','孙尚香','女','河北',25,'1班','130214567897654367'),('007','百里玄策','男','山西',39,'2班','140214567897654367'),('008','小乔','女','河南',25,'3班',null),('009','百里守约','男','湖南',31,'1班',''),('010','妲己','女','广东',24,'2班','440214567897654367'),('011','李白','男','北京',30,'3班','110214567897654367'),('012','孙膑','男','新疆',36,'4班','650214567897654367');select * from students;

2、字段的别名

通过as 给字段添加别名(这里的as 可写可不写)

-- 通过as 给字段添加别名(这里的as 可写可不写)
select card as 身份证,name as 姓名 from students;select card 身份证, name 姓名 from students;

3、表的别名

-- 给表起别名
select * from sttudents as stu;select * from students stu;

4、distinct 过滤重复记录

distinct 是跟在select后面的,过滤的是 select 查询结果中的重复记录。

select DISTINCT sex from students;select DISTINCT sex,class from students;

5、where子句

where 后面跟条件,表示有选择的查询。

select * from students where studentNo = '001';select name 姓名, class 班级 from students where age = 30;

6、select 查询的基本规律

select * 或 select 字段名  控制了查询返回什么样的字段(列)

where条件 控制了查询返回什么样的记录(行)

7、比较运算法

-- 比较运算符
select * from students where name = '小乔';
select * from students where age <= 30;
select * from students where hometown <> '北京';
select * from students where hometown != '北京';

8、逻辑运算符

and、or、not

select * from students where age < 30 and sex = '女';select * from students where sex = '女' or class ='1班';select * from students where not hometown = '天津';

练习题:

-- 课堂练习
select * from students where hometown = '河南' or hometown = '河北';
select * from students where class ='1班' and hometown ='北京';
select * from students where age <> 30;
select * from students where not age = 30;

9、like模糊查询

%  表示任意多个任意字符
_  表示一个任意字符

select * from students where name like '孙%';
select * from students where name like '孙_';

练习题:

select * from students where name like '__';
select * from students where name like '白%' and age >30;
select * from students where studentNo like '%1';

10、范围查找

查找连续范围  between ... and 、查找非连续范围  in。

-- 查找非连续范围
select * from students where hometown in ('北京','上海','广东');-- 查找连续范围
select * from students where between 25 and 30;

练习题:

-- 练习题
select * from students where age in (20,25,30) and sex ='女';
select * from students where not age between 25 and 30;

11、空判断

-- 空判断
select * from students where card is null;
select * from students where card is not null;select * from students where card ='';

12、where语句在update、delete后

-- where 可以用在update和delete后面
update students set age = 18  where name ='孙尚香' and class='1班';
select * from students where name = '孙尚香';
delete from students where class='1班' and age > 30;

练习题:

-- 练习
select * from students;
update students set class='1班' where name like '孙%';
delete FROM students where sex='男' and (age between 20 and 30);

13、order by排序

单字段排序:

-- ASC 默认;  DESC降序
select * from students ORDER BY age DESC;  

多字段排序:

-- 先按照age排序降序,如果age相同的情况,再按照studentNo升序。
select * from students order by age DESC,studentNO;

14、where结合order by

select * from students where sex='男' order by class,studentNO DESC;

15、聚合函数

(1)count函数

count 求select 返回的记录总数。

-- 查询学生总数
select count(*) from students;select  count(DISTINCT class) from students;select  count(DISTINCT sex) from students;-- 查询女同学人数
select  count(*) from students where sex='女';

(2)max最大值

-- 查询全班最大年龄
select max(age) FROM students;-- 查询女生最大年龄
select max(age) FROM students where sex='女';

聚合函数不能用到where后面的条件里面。

(3)min查询最小值

(4)求和sum

-- 查询students中的年龄总和
select sum(age) from students;

(5)avg求平均

avg()计算,是忽略null行的。

-- 求所有学生的平均年龄
select avg(age) from students;

练习题

-- 练习题
select max(age),min(age),avg(age) from students;select count(*) from students WHERE class='1班';select count(*) from students WHERE class='3班' and age < 30;

16、分组 group by

-- 数据分组
select sex, count(*) from students GROUP BY sex;-- 查询1班,不同性别学生的数量
select sex,count(*) from students where class='1班' GROUP BY sex;-- 用数据分组方法,统计各个班级学生总数、平均年龄、最大年龄、最小年龄。
select class,count(*),avg(age),max(age),min(age) from students GROUP BY class; 

-- 统计各个班级学生总数、平均年龄、最大年龄、最小年龄。但不统计3班,统计结果按班级名称从大到小排序。
select class, count(*),avg(age),max(age),min(age) from students where class != '3班' GROUP BY class DESC;

17、where和order by 、order by的顺序

18、分组后筛选

having 后面可以使用聚合函数。

where后面不可以使用聚合函数。

-- 选筛选,再count。
select count(*) from students WHERE sex='男'; 
-- 先分组聚合,再选取符合条件的。
select count(*) from students GROUP BY sex having sex = '男';
-- 求班级人数大于3人的班级
select class,count(*) from students GROUP BY class having count(*)>3; 

19、where与having 的区别:

练习:

-- 查询班级总人数大于2人的班级名称及班级对应的总人数。
select class,count(*) from students GROUP BY class having count(*) > 2;-- 查询平均年龄大于30岁的班级名称和班级总人数。
select class,avg(age),count(*) from students GROUP BY class having avg(age)>30;

20、分页limit

-- 查询前3行记录    0表示从第1行开始,3表示显示3行。
select * from students LIMIT 0,3;  -- 0可以省略
select * from students LIMIT 3;  
-- 查询年龄最大同学的name
select * from students order by age DESC limit 1;-- 查询年龄最小的女同学信息
select * from students where sex='女' order by age limit 1;

21、分页

-- 每页显示4条记录,查询第3页的数据。
select * from students limit 8,4;

22、求总页数

-- 每页显示5条记录,一共需要多少页
select count(*) from students;

练习题:

-- 第一页
select * from students limit 5;
-- 第二页
select * from students limit 5,5;
-- 第三页
select * from students limit 10,5;

23、数据准备(多表查询)

/*  课程表 */create table courses (courseNo int unsigned primary key auto_increment,coursename varchar(10)
);insert into courses (coursename) values ('数据库'), ('html'), ('linux'), ('系统测试'), ('单元测试'), ('测试过程'), ('python');/*  成绩表 */create table scores (id int unsigned primary key auto_increment,courseNo int unsigned,studentNo varchar(10),score tinyint
);insert into scores (courseNo, studentNo, score) values
(1, '001', 90),
(1, '002', 75),
(2, '002', 98),
(3, '001', 86),
(3, '003', 80),
(4, '004', 79),
(5, '005', 96),
(6, '006', 80);/*  地域表 */create table areas (id int primary key,name varchar(20),pid int
);insert into areas values
('130000', '河北省', null),
('130100', '石家庄市', '130000'),
('130400', '邯郸市', '130000'),
('130600', '保定市', '130000'),
('130700', '张家口市', '130000'),
('130800', '承德市', '130000'),
('440000', '广东省', null),
('440300', '深圳市', '440000'),
('440100', '广州市', '440000'),
('440500', '汕头市', '440000'),
('440600', '佛山市', '440000'),
('440200', '韶光市', '440000');create table departments (deptid int(10) primary key, deptname varchar(20) not null
);insert into departments values ('1001','市场部');
insert into departments values ('1002','测试部');
insert into departments values ('1003','开发部');create table employees (empid int primary key,empname varchar(20) not null,sex varchar(4) default null,deptid int default null,jobs varchar(20) default null,politicalstatus varchar(20) default null,leader int default null);insert into employees values ('1', '王昭君', '女', '1003', '开发', '群众', '9');
insert into employees values ('2', '诸葛亮', '男', '1003', '开发', '群众', '9');
insert into employees values ('3', '张飞', '男', '1002', '测试', '团员', '4');
insert into employees values ('4', '白起', '男', '1002', '测试经理', '党员', null);
insert into employees values ('5', '大乔', '女', '1002', '测试', '党员', '4');
insert into employees values ('6', '孙尚香', '女', '1001','市场', '党员', '12');
insert into employees values ('7', '百里玄策', '男', '1001', '市场', '团员', '12');
insert into employees values ('8', '小乔', '女', '1002', '测试', '群众', '4');
insert into employees values ('9', '百里守约', '男', '1003', '开发经理', '党员', null);
insert into employees values ('10', '妲己', '女', '1003', '开发', '团员', '9');
insert into employees values ('11', '李自', '男', '1002', '测试', '团员', '4');
insert into employees values ('12', '孙膑', '男', '1001', '市场经理', '党员', null);
insert into employees values ('13', '周瑜', '男', '1001', '市场', '群众', '12');create table salary(sid int primary key,empid int not null, salary int not null
);insert into salary values ('1', '7', '2100');insert into salary values ('2', '6', '2000');insert into salary values ('3', '12', '5000');insert into salary values ('4', '9', '1999');insert into salary values ('5', '10', '1900');insert into salary values ('6', '1', '3000');insert into salary values ('7', '2', '5500');insert into salary values ('8', '5', '2000');insert into salary values ('9', '3', '1500');insert into salary values ('10', '8', '4000');insert into salary values ('11', '11', '2600');insert into salary values ('12', '4', '5300');

24、连接查询介绍

24.1 内连接

-- sql 表a和表b数据
create table a(id int,name VARCHAR(20)
)create table b(id int,score int
)insert into a VALUES(1,'张三'),
(2,'李四'),(3,'王五')insert into b VALUES(1,80),
(2,88),(3,93),(4,99)

表a和表b内连接的查询:

select * from a INNER JOIN b on a.id = b.id;

查询结果:

24.1.1 练习

students表

scores表

查询结果

-- sql查询语句
select * from students INNER JOIN scores on students.studentNo = scores.studentNo;

24.1.2  隐式内连接

select * from students ,scores where students.studentNo = scores.studentNo;

24.1.3 内连接指定显示部分字段

select name,courseNo,score from students INNER JOIN scores on 
students.studentNo = scores.studentNo;

24.1.4 显示表的别名

select name,courseNo,score from students st INNER JOIN scores sc on 
st.studentNo = sc.studentNo;

24.1.5 带有where的内连接

courses表

-- 查询王昭君 的信息,要求只显示姓名、课程号、成绩。
select name,courseNo,score from students st INNER JOIN scores sc 
on st.studentNo = sc.studentNo where st.name = '王昭君';


 

-- 查询姓名为“王昭君”,并且成绩小于90 的信息,要求只显示姓名、成绩。
select name,score from students stu INNER JOIN scores sc ON
stu.studentNo = sc.studentNo where stu.name='王昭君' and score < 90;

24.1.6 多表内连查询

-- 查询学生信息和成绩以及成绩对应的课程名称select name,coursename,score from students st INNER JOIN scores s on 
st.studentNo = s.studentNo INNER JOIN courses c on c.courseNo = s.courseNo;


select name,score,courseName from students st INNER JOIN scores s ON
st.studentNo = s.studentNo INNER JOIN courses c on s.courseNo = c.courseNo
where courseName = 'linux';


-- 查询 成绩最高的男生信息,要求显示姓名、课程名、成绩。
select name,score,courseName from students st INNER JOIN scores s ON
st.studentNo = s.studentNo INNER JOIN courses c on s.courseNo = c.courseNo
where sex='男'
ORDER BY score DESC LIMIT 1;

24.2 左连接

-- 查询所有学生的信息以及成绩,包括没有成绩的学生。
select * from students st LEFT JOIN scores s ON
st.studentNo = s.studentNo;

24.3 右连接

-- 查询所有课程信息,包括没有成绩的。
select * from scores s right JOIN courses c ON
c.courseNo = s.courseNo;


撒花,今天学到这里吧,明天早上学完mysql剩下的,然后开始学习python部分啦~。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/33795.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

江南大学《2024年807自动控制原理真题》 (完整版)

本文内容&#xff0c;全部选自自动化考研联盟的&#xff1a;《江南大学807自控考研资料》的真题篇。后续会持续更新更多学校&#xff0c;更多年份的真题&#xff0c;记得关注哦~ 目录 2024年真题 Part1&#xff1a;2024年完整版真题 2024年真题

PDF文件页面转换成图片怎么弄-免费PDF编辑工具分享

>>更多PDF文件处理应用技巧请前往 96缔盟PDF处理器 主页 查阅&#xff01; —————————————————————————————————————— 序言 我之前的文章也有介绍过如何使用96缔盟PDF处理器对PDF文件转换成图片&#xff0c;但是当时是使用DMPDFU…

菲涅尔透镜加工:倚光科技的光学创新之路

在光学元件的广袤星空中&#xff0c;菲涅尔透镜以其独特的设计和卓越的性能闪耀着独特光芒。菲涅尔透镜通过将透镜表面由一系列同心棱纹组成&#xff0c;大幅减少了材料的使用量&#xff0c;却依然能够有效地汇聚或发散光线&#xff0c;在众多领域展现出无可比拟的优势&#xf…

电机瞬态分析基础(14):电机的电磁转矩

1. 电机的电磁转矩和转子运动方程 在电机驱动系统中&#xff0c;电动机向其驱动的负载提供驱动转矩&#xff0c;对负载运动的控制是通过对电动机电磁转矩的控制而实现的&#xff0c;如图1所示。 图1. 电动机驱动系统 由图1&#xff0c;根据动力学原理&#xff0c;可列写出机械运…

节点操作+

DOM节点查找节点增加节点删除节点 查找父节点&#xff1a; 想要关闭三个类名都为box1的其中一个&#xff0c;点哪个关哪个 查找子节点&#xff1a; 增加节点&#xff1a; 放到后面 放到前面&#xff08;两个参数&#xff09; 删除节点&#xff1a;

VUE拖拽对象到另一个区域

最近有个需求是需要在web端定制手机的界面UI&#xff08;具体实现比较复杂&#xff0c;此处不做阐述&#xff0c;此文章只说明拖拽效果实现&#xff09;&#xff0c;为了方便用户操作&#xff0c;就想实现这种效果&#xff1a;从右侧的图标列表中拖拽图标到左侧模拟的手机界面上…

优化 LabVIEW 系统内存使用

在 LabVIEW 中&#xff0c;内存使用管理是确保高效系统性能的关键因素&#xff0c;尤其是在进行复杂的数据采集、信号处理和控制任务时。LabVIEW 程序的内存消耗可能会随着项目的规模和复杂度增加&#xff0c;导致性能下降&#xff0c;甚至出现内存溢出或程序崩溃。通过合理优化…

一个实用的端到端的深度学习库存模型

G1 文章信息 文章题为“A Practical End-to-End Inventory Management Model withDeep Learning”&#xff0c;该文于2022年发表至“MANAGEMENT SCIENCE”。文章的核心是提出了端到端的框架用于多周期库存补货问题。 2 摘要 文章研究了一个数据驱动的多周期库存补货问题&am…

STL-需求分析

本小节主要是对要实现的各个功能梳理&#xff0c;理解各个设计之间的关联。&#xff08;未完结&#xff09; 1 list数据结构 可以毫不夸张的说&#xff0c;我们整个项目都是围绕list展开的。因此&#xff0c;我们首先得清楚要使用哪种list。 有请灵魂画手登场&#xff1a; …

STM32进阶 定时器3 通用定时器 案例1:LED呼吸灯——PWM脉冲

功能 它有基本定时器所有功能&#xff0c;还增加以下功能 TIM2、TIM3、TIM4、TIM5 多种时钟源&#xff1a; 外部时钟源模式1&#xff1a; 每个定时器有四个输入通道 只有通道1和通道2的信号可以作为时钟信号源 通道1 和通道2 的信号经过输入滤液和边缘检测器 外部时钟源…

Chrome控制台 网站性能优化指标一览

打开chrome-》f12/右键查看元素-》NetWrok/网络 ctrlF5 刷新网页&#xff0c;可以看到从输入url到页面资源请求并加载网页&#xff0c;用于查看资源加载&#xff0c;接口请求&#xff0c;评估网页、网站性能等&#xff0c;如下图&#xff1a; request、stransferred、resour…

buu ciscn_2019_ne_5

下载附件然后checksec一下如图 32位的程序&#xff0c;nx保护开的&#xff0c;存在栈溢出&#xff0c;拖进ida32中看看 梳理思路&#xff1a; 简单分析并写个注释&#xff0c;这边梳理一下大致流程&#xff0c;先是输入一字符串&#xff0c;然后比对&#xff0c;然后再选择相…

如何降低DApp开发中的Gas费消耗?

Gas费是链上运行DApp时的一项关键成本&#xff0c;直接影响用户体验和应用的吸引力。过高的Gas费可能导致用户流失&#xff0c;尤其在交易密集型应用中。因此&#xff0c;优化Gas费已成为DApp开发者的重要任务。那么&#xff0c;怎样才能有效降低Gas费消耗呢&#xff1f; 1. 优…

CC工具箱使用指南:【湖北省村规结构调整表(D)】

一、简介 群友定制工具。 工具根据输入的现状用地和规划用地图层&#xff0c;生成村域和村庄建设边界内的结构调整表。 二、工具参数介绍 点击【定制2】组里的【湖北省村规结构调整表(D)】工具&#xff1a; 即可打开下面的工具框界面&#xff1a; 1、现状用地图层 2、现状…

逗号分隔、多级位置及局部更新的Sql实现

一、逗号分隔的字符串多值查询 1&#xff0c;背景 假设有一个表location_type_relation&#xff0c;其中有1个字段location_ids&#xff0c;用逗号分隔了多个标签&#xff0c;还有1个字段type_ids&#xff0c;也是用逗号分隔了多个标签 2&#xff0c;需求 现在要判断locat…

flink-connector-mysql-cdc:01 mysql-cdc础配置代码演示

flink-connector-mysql-cdc&#xff1a; 01 mysql-cdc基础配置代码演示02 mysql-cdc高级扩展03 mysql-cdc常见问题汇总04 mysql-cdc-kafka生产级代码分享05 flink-kafka-doris生产级代码分享06 flink-kafka-hudi生产级代码分享 flink-cdc版本&#xff1a;3.2.0 flink版本&…

工业-实时数据采集

1.编写新的 Flume 配置文件&#xff0c;将数据备份到 HDFS 目录 /user/test/flumebackup 下&#xff0c;要求所有主题 的数据使用同一个 Flume配置文件完成。 1. 配置概览 Flume 的主要任务是从多个来源&#xff08;如日志文件&#xff09;读取数据&#xff0c;经过处理后通过…

mmdet 加载预训练模型多卡训练过程中,存在显卡占用显存不均匀

1. 问题描述 基于mmdet https://github.com/open-mmlab/mmdetection代码仓库&#xff0c;修改了自己的检测代码&#xff0c;加载了预训练模型&#xff0c;进行分布式训练。 在训练过程中&#xff0c;出现了显卡的占用显存不均匀的问题。 如图所示&#xff0c;可以看到显卡2 占…

使用ALB将HTTP访问重定向至HTTPS

HTTPS是加密数据传输协议&#xff0c;安全性高。当企业进行HTTPS安全改造后&#xff0c;为了方便用户访问&#xff0c;可以使用ALB在用户无感知的情况下将HTTP访问重定向至HTTPS。 前提条件 您已创建ALB实例&#xff0c;并为该实例添加了HTTP监听和监听端口为443的HTTPS监听。…