mysql数据库(二):查询(SELECT)
1|0一. 数据库查询—查询(SELECT)
单表查询
多表联合查询
2|0二. 查询—单表查询
2|1查询特定字段:
select <字段1,字段2,...> from <表名>;
示例:查询学生表里所有学生的id和名字
select id, name from student;
2|2查询所有字段:
select * from <表名>;
示例:查询学生表的所有学生信息
select * from student;
2|3按条件进行查询:
select ... from <表名> where 表达式A and 表达式B and ...;
示例:查询id为1401001的学生信息
select * from student where id=1401001;
示例:查询学生表里class_id为1401而且sex为女的学生
select * from student where class_id=1401 and sex='女';
2|4对结果集进行排序:
select ... from <表名> where ... order by 字段A asc(desc);
select ... from <表名> where ... order by 字段A asc(desc), 字段B asc(desc);
asc:升序
desc:降序
示例:查询学生表里class_id为1401而sex为女的学生并按学生编号升序(降序)排列
select * from student where class_id=1401 and sex='女' order by id asc;
select * from student where class_id=1401 and sex='女' order by id desc;
2|5课堂练习
1. 查询学生表(student)学生编号id为1403001的学生信息
2. 查询分数表(score)的学生编号为(student_id)为1403001的分数成绩
3|0三. 查询—多表联合查询
3|1问题一:
对于不同类型的信息该怎么存储呢?是放一个表呢,还是不同类型数据放不同表
放在一个表的缺点:思考(仓库里的货物是杂乱的堆在一起好呢,还是分类存储好一些?哪个更利于我们去找一件货物?)
1. 字段过多不好维护
2. 表数据庞大
3. 数据不好维护
4. 数据冗余,重复数据多
3|2解决方案:
不同类型数据放不同表,学生信息放在student表,成绩放在score表
3|3问题二:
既然不同的数据放在了不同的表,比如:学生的信息以及学生的成绩分别放在了student表和score表,那如果要查询某个学生的信息以及他的成绩,那sql要怎么写?
3|4解决方案:
设计表的时候两个表之间维持一个关联即可
3|5举例说明:
去超市买东西时将东西存在储物柜,离开时,取东西的时候就是拿个票据去找柜子,然后再拿到柜子里的东西,也就是说找柜子拿里面的东西是需要根据一个票据信息的。那既然这样,咱们成绩表如果保存了这样一个票据信息,比如说,保存了学生的id,那这样就建立了一个关联关系。到时候我们要查询一个学生的姓名,性别,以及他的成绩,那我们就可以先根据student表里找到他的姓名和性别,然后再根据这个id去score表找到他的成绩
3|6关联查询的语法:
select t1.字段A, t1.字段B, t2.字段C, t2.字段D, t2.字段E...from <表1名字> t1, <表2名字> t2,...,<表n的名字> tn where 关联条件
示例:查询id为1403001的同学的名字和性别以及她的各科成绩
3|7分析:
1. 涉及表:学生表(student)、成绩表(score)
2. 查询的字段:学生表(name, sex),成绩表(score)
3. 关联关系:student.id = score.student_id
4. 过滤条件:student.id=1403001
select t1.name, t1.sex, t2.score from student t1, score t2 where t1.id=t2.student_id and t1.id=1403001;
3|8拓展:
select t1.name, t1.sex, t3.name, t2.score from student t1, score t2, course t3 where t1.id=t2.student_id and t2.course_id=t3.id and t1.id=1403001;
3|9我们要进行查询的表之间的关系
1. 学生表(student)跟班级表(class)关联,关联字段(student.class_id=class.id)
2. 班级表(class)跟年级表(grade)关联,关联字段(class.grade_id=grade.id)
3. 学生表(student)跟成绩表(score)关联,关联字段(score.student_id=student.id)
4. 成绩表跟课程表关联,关联字段(score.course_id=course.id)
4|0四. 课堂练习
1. 查询出"高一年级"下面的所有班级的信息;
2. 查询出"高一年级"下面的所有班级里面的学生信息(学生的姓名,学号,性别,住址);
__EOF__

本文链接:https://www.cnblogs.com/my_captain/p/9445559.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?