MySQL语句的学习【查与删】

SQL语句的查与删

🖋️ 作者:@Weiney

🔍 本文将介绍 SQL 中常见的查找(SELECT)和删除(DELETE)语句,帮助你熟练掌握数据查询与操作的基本技能。无论是查询特定条件下的数据,还是删除不需要的数据,本文将为你提供详细的指导和实用的示例。

摘要

💡 SQL 是处理和管理关系型数据库的关键工具。通过学习 SELECT 和 DELETE 语句,你可以灵活地查询需要的数据,并有效地管理数据库中的信息。

📌 在接下来的内容中,我们将深入探讨如何使用这些 SQL 语句,以及它们的用法和注意事项。让我们一起启程,探索 SQL 的奥秘吧!
💡 点击我学习另一篇文章《MySQL语句的学习【增与改】》

一、查询语句

1. 简单查询

select [字段] from [表名];
  • 查询学生表中的所有列

    select * from student;
    
  • 查询学生表中的某些列,如学号,姓名,性别

    select sno, sname, sgender from student;
    
  • 可以为查询出的列名、表名起别名,便于简化查询语句

    select sno as '学号', sname as '姓名', sgender as '性别' from student;
    select sno, sname, sgender from student as 'stu';
    

2. 条件查询

select [字段] from [表名] where [条件];
  • 查询姓名为“张三”的学生的所有信息(单条件)

    select * from student where sname = '张三';
    
  • 查询性别为男出生日期大于等于2001年1月1日的学生(多条件)

    select * from student where sgender = '1' and sbirthday >= '2001-01-01';
    

3. 模糊查询

select [字段] from [表名] where [字段] like [规则];
规则: % 代表任意 多个 任意字符, 可以为0, _ 代表 一个 任意字符.
  • 查询姓张的学生所有信息

    select * from student where sname like '张%';
    
  • 查询姓张的三个字的学生所有信息

    select * from student where sname like '张__';
    

4. 范围查询

select [字段] from [表名] where [字段] between [数据1] and [数据2];
  • 查询出生年份在2001-01-01到2003-12-31的学生所有信息(连续范围查询)

    select * from student where sbirthday between '2001-01-01' and '2003-12-31';
    
  • 查询入学年份为2022和2024的学生所有信息(非连续范围查询)

    select * from student where enrollment in (2022, 2024);
    

5. 非空查询

select [字段] from [表名] where [字段] is not NULL;
  • 查询信息更新时间不为空的学生所有信息

    select * from student where updatetime is not NULL;
    

6. 排序查询

select [字段] from [表名] order by [字段1] asc/desc, [字段2] asc/desc;
  • 按出生年月从大到小(降序)查询学生所有信息

    select * from student order by sbirthday desc;
    
  • 按入学年份从小到大(升序)排序、入学年份相同时,按出生年月从大到小(降序)查询学生所有信息

    select * from student order by enrollment asc, sbirthday desc;
    

7. 分组和聚合

(1)聚合
select count(*) from [表名];
  • 查询入学年份为2023年学生个数

    select count(*) from student where enrollment = '2023';
    
  • 查询最大(max)最小(min)的入学年份

    select max(enrollment) from student;
    select min(enrollment) from student;
    
(2)分组
select [字段1], [字段2], [聚合函数] from [表名] group by [字段1],[字段2], [...];
  • 查询学生中各性别的人数

    select sgender, count(*) from student group by sgender;
    
  • 查询每个年级中男生的总人数

    select enrollment, sgender, count(*) 
    from student 
    group by enrollment, sgender 
    having sgender = '1';
    -- 对分组条件过滤,用having
    

8. 连接查询

(1)内连接
  • 以一个学生表(students)和选课表(courses)为例

  • 假设学生表 students 包含以下字段

    • student_id(学生ID)
    • student_name(学生姓名)
    • 其他学生相关的字段
  • 选课表 courses 包含以下字段:

    • course_id(课程ID)
    • course_name(课程名称)
    • student_id(选课学生的学生ID,用来与学生表关联)
    • 其他课程相关的字段
  • 现在,我们希望获取每个学生及其所选课程的信息:

    SELECT stu.student_id, stu.student_name, courses.course_id, courses.course_name
    FROM students as stu
    INNER JOIN courses ON stu.student_id = courses.student_id;
    
  1. SELECT stu.student_id, stu.student_name, stu.course_id, stu.course_name: 这部分指定了我们希望从查询中获取的字段。我们选择了学生表中的学生ID和姓名,以及选课表中的课程ID和课程名称。
  2. FROM students as stu: 指定了查询的主表是 students 学生表并起别名stu。
  3. INNER JOIN courses ON stu.student_id = courses.student_id: 这是内连接的语法。它告诉数据库系统要将 students 表和 courses 表通过他们的 student_id 字段进行连接。这意味着只有在两个表中都存在匹配的 student_id 时,才会将它们的记录组合成一个结果行。
  • 结果:如果学生表中有学生ID为1和2的记录,而选课表中只有学生ID为1的学生选择了课程,那么只有学生ID为1的学生会出现在结果集中,同时显示他所选的课程信息。

  • 内连接的特点

    • 它只返回那些在连接条件中同时存在于两个表中的记录。换句话说,只有那些在学生表中有对应记录,并且在选课表中也有对应记录的学生才会出现在结果中。
  • 现在我们来查询学号为"232100801"的学生所有课程的成绩(展示学号、姓名、课程号、成绩)

    select stu.s_id, stu.s_name, ry_score.c_id, ry_score.score
    from ry_student as stu
    inner join ry_score on stu.s_id = ry_score.s_id where stu.s_id = '232100801';
    
(2)左连接
  • 依旧以一个学生表(students)和选课表(courses)为例

  • 现在,我们希望获取所有学生及他们选课的信息,即使有些学生没有选择任何课程:

    SELECT students.student_id, students.student_name, courses.course_id, courses.course_name
    FROM students
    LEFT JOIN courses ON students.student_id = courses.student_id;
    
  • 结果:如果学生表中有学生ID为1和2的记录,而选课表中只有学生ID为1的学生选择了课程,那么左连接查询将返回包含学生ID为1和2的学生信息,对于学生ID为1的学生,会显示他所选的课程信息;而对于学生ID为2的学生,由于没有选课信息,课程相关的字段会显示为 NULL。

  • 左连接的特点

    • 左连接会保留左表(即第一个表,在这里是学生表 students)中的所有记录,无论右表中是否有匹配的记录。
    • 如果左表中的记录在右表中找不到匹配的记录,则右表的相关字段会显示为 NULL。
    • 左连接常用于需要保留左表所有数据,并且希望根据右表的匹配情况补充信息的情况下。
  • 查询所有学生的成绩表,即使该学生没有成绩

    SELECT ry_student.s_id, ry_student.s_name, ry_score.c_id, ry_score.score
    FROM ry_student
    LEFT JOIN ry_score ON ry_student.s_id = ry_score.s_id;
    
(3)右连接
  • 右连接与左连接相反,即保留右表所有记录,即使左表找不到匹配的记录。

二、删除语句

1. 删除表中所有数据

DELETE FROM [表名];

2. 删除表中满足条件的行

delete from [表名] where [条件]
  • 删除学号为202100801的学生

    delete from student where sid = '202100801';
    

3. 删除表结构及数据

DROP TABLE [表名];
  • 10
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悦享未来

你的鼓励必将成为我前进的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值