• MySQL——单表与多表查询练习


    一、练习一

    在这里插入图片描述
    这里首先将素材创建完毕,首先创建一个数据库并使用,这里我创建的数据库名为worker:
    在这里插入图片描述
    紧接着我们创建数据库表并创建表结构:
    在这里插入图片描述
    查看表结构
    在这里插入图片描述
    接着我们导入数据:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    这里我们可以看到素材已经创建完毕,这里我们进行之后的操作:

    • 1、显示所有职工的基本信息。

    实现代码:

    SELECT *
    FROM worker;
    
    • 1
    • 2

    执行结果:
    在这里插入图片描述

    • 2、查询所有职工所属部门的部门号,不显示重复的部门号。

    实现代码:

    SELECT DISTINCT 部门号
    FROM worker;
    
    • 1
    • 2

    执行结果:
    在这里插入图片描述

    • 3、求出所有职工的人数。

    实现代码:

    SELECT COUNT(*) AS 职工人数
    FROM worker;
    
    • 1
    • 2

    执行结果:
    在这里插入图片描述

    • 4、列出最高工资和最低工资。

    实现代码:

    SELECT MAX(工资) AS 最高工资,MIN(工资) AS 最低工资
    FROM worker;
    
    • 1
    • 2

    执行结果:
    在这里插入图片描述

    • 5、列出职工的平均工资和总工资。

    实现代码:

    SELECT AVG(工资) AS '平均工资', SUM(工资) AS '总工资'
    FROM worker;
    
    • 1
    • 2

    执行结果:
    在这里插入图片描述

    • 6、创建一个只有职工号、姓名和工作时间的新表,名为工作日期表。

    实现代码:

    CREATE TABLE 工作日期表 AS
    SELECT 职工号, 姓名, 工作时间
    FROM worker;
    
    • 1
    • 2
    • 3

    执行结果:
    在这里插入图片描述
    在这里插入图片描述

    • 7、显示所有职工的年龄。

    实现代码:

    SELECT 2023 -YEAR(出生日期) AS 年龄 
    FROM worker;
    
    • 1
    • 2

    执行结果:
    在这里插入图片描述

    • 8、列出所有姓刘的职工的职工号、姓名和出生日期。

    实现代码:

    SELECT 职工号, 姓名, 出生日期
    FROM worker
    WHERE 姓名 LIKE '刘%';
    
    • 1
    • 2
    • 3

    执行结果:
    在这里插入图片描述

    • 9、列出1960年以前出生的职工的姓名、参加工作日期。

    实现代码:

    SELECT 姓名,工作时间
    FROM worker
    WHERE 出生日期 < '1960-01-01';
    
    • 1
    • 2
    • 3

    执行结果:
    在这里插入图片描述

    • 10、列出工资在1000-2000之间的所有职工姓名。

    实现代码:

    SELECT 姓名
    FROM worker
    WHERE 工资 BETWEEN 1000.00 AND 2000.00;
    
    • 1
    • 2
    • 3

    执行结果:
    在这里插入图片描述

    • 11、列出所有陈姓和李姓的职工姓名。

    实现代码:

    SELECT 姓名
    FROM worker
    WHERE 姓名 LIKE '陈%' OR 姓名 LIKE '李%';
    
    • 1
    • 2
    • 3

    执行结果:
    在这里插入图片描述

    • 12、列出所有部门号为2和3的职工号、姓名、党员否。

    实现代码:

    SELECT 职工号, 姓名, CASE WHEN 政治面貌 = '党员' THEN '是' ELSE '否' END AS '党员'
    FROM worker
    WHERE 部门号 IN (102,103);
    
    • 1
    • 2
    • 3

    执行结果:
    在这里插入图片描述

    • 13、将职工表worker中的职工按出生的先后顺序排序。

    实现代码:

    SELECT *
    FROM worker
    ORDER BY 出生日期;
    
    • 1
    • 2
    • 3

    执行结果:
    在这里插入图片描述

    • 14、显示工资最高的前3名职工的职工号和姓名。

    实现代码:

    SELECT 职工号, 姓名
    FROM worker
    ORDER BY 工资 DESC
    LIMIT 3;
    
    • 1
    • 2
    • 3
    • 4

    执行结果:
    在这里插入图片描述

    • 15、求出各部门党员的人数。

    实现代码:

    SELECT 部门号, COUNT(*) AS '党员人数'
    FROM worker
    WHERE 政治面貌 = '党员'
    GROUP BY 部门号;
    
    • 1
    • 2
    • 3
    • 4

    执行结果:
    在这里插入图片描述

    • 16、统计各部门的工资和平均工资。

    实现代码:

    SELECT 部门号, SUM(工资) AS '总工资', AVG(工资) AS '平均工资'
    FROM worker
    GROUP BY 部门号;
    
    • 1
    • 2
    • 3

    执行结果:
    在这里插入图片描述

    • 17、列出总人数大于4的部门号和总人数。

    实现代码:

    SELECT 部门号, COUNT(*) AS '总人数'
    FROM worker
    GROUP BY 部门号
    HAVING COUNT(*) > 4;
    
    • 1
    • 2
    • 3
    • 4

    执行结果:
    在这里插入图片描述

    二、练习二

    在这里插入图片描述
    这里首先将素材创建完毕,首先创建一个数据库并使用,这里我创建的数据库名为worker,依旧使用上一个练习的数据库。
    紧接着我们创建数据库表并创建表结构,查看表结构:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    接着我们导入数据:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    这里我们可以看到素材已经创建完毕,这里我们进行之后的操作:

    • 1.查询student表的所有记录

    实现代码:

    SELECT * 
    FROM student;
    
    • 1
    • 2

    执行结果:
    在这里插入图片描述

    • 2.查询student表的第2条到4条记录

    实现代码:

    SELECT * 
    FROM student 
    LIMIT 1,3;
    
    • 1
    • 2
    • 3

    执行结果:
    在这里插入图片描述

    • 3.从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息

    实现代码:

    SELECT id, name, department 
    FROM student;
    
    • 1
    • 2

    执行结果:
    在这里插入图片描述

    • 4.从student表中查询计算机系和英语系的学生的信息

    实现代码:

    SELECT * 
    FROM student 
    WHERE department IN ('计算机系', '英语系');
    
    • 1
    • 2
    • 3

    执行结果:
    在这里插入图片描述

    • 5.从student表中查询年龄18~22岁的学生信息

    实现代码:

    SELECT * 
    FROM student 
    WHERE YEAR(CURRENT_DATE) - birth 
    BETWEEN 18 AND 22;
    
    • 1
    • 2
    • 3
    • 4

    执行结果:
    在这里插入图片描述

    • 6.从student表中查询每个院系有多少人

    实现代码:

    SELECT department, COUNT(*) AS '人数' 
    FROM student 
    GROUP BY department;
    
    • 1
    • 2
    • 3

    执行结果:
    在这里插入图片描述

    • 7.从score表中查询每个科目的最高分

    实现代码:

    SELECT c_name, MAX(grade) AS '最高分' 
    FROM score 
    GROUP BY c_name;
    
    • 1
    • 2
    • 3

    执行结果:
    在这里插入图片描述

    • 8.查询李四的考试科目(c_name)和考试成绩(grade)

    实现代码:

    SELECT c_name, grade 
    FROM score 
    WHERE stu_id = (
    SELECT id 
    FROM student 
    WHERE name = '李四'
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    执行结果:
    在这里插入图片描述

    • 9.用连接的方式查询所有学生的信息和考试信息

    实现代码:

    SELECT student.id, student.name, student.department, score.c_name, score.grade
    FROM student
    JOIN score ON student.id = score.stu_id;
    
    • 1
    • 2
    • 3

    执行结果:
    在这里插入图片描述

    • 10.计算每个学生的总成绩

    实现代码:

    SELECT student.id, student.name, SUM(score.grade) AS '总成绩'
    FROM student
    JOIN score ON student.id = score.stu_id
    GROUP BY student.id, student.name;
    
    • 1
    • 2
    • 3
    • 4

    执行结果:
    在这里插入图片描述

    • 11.计算每个考试科目的平均成绩

    实现代码:

    SELECT c_name, AVG(grade) AS '平均成绩' 
    FROM score 
    GROUP BY c_name;
    
    • 1
    • 2
    • 3

    执行结果:
    在这里插入图片描述

    • 12.查询计算机成绩低于95的学生信息

    实现代码:

    SELECT student.*
    FROM student
    JOIN score ON student.id = score.stu_id
    WHERE score.c_name = '计算机' AND score.grade < 95;
    
    • 1
    • 2
    • 3
    • 4

    执行结果:
    在这里插入图片描述

    • 13.查询同时参加计算机和英语考试的学生的信息

    实现代码:

    SELECT student.*
    FROM student
    WHERE id IN (
      SELECT s1.stu_id
      FROM score AS s1
      JOIN score AS s2 ON s1.stu_id = s2.stu_id
      WHERE s1.c_name = '计算机' AND s2.c_name = '英语'
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    执行结果:
    在这里插入图片描述

    • 14.将计算机考试成绩按从高到低进行排序

    实现代码:

    SELECT student.name, score.c_name, score.grade
    FROM student
    JOIN score ON student.id = score.stu_id
    WHERE score.c_name = '计算机'
    ORDER BY score.grade DESC;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    执行结果:
    在这里插入图片描述

    • 15.从student表和score表中查询出学生的学号,然后合并查询结果

    实现代码:

    SELECT id FROM student
    UNION
    SELECT stu_id FROM score;
    
    • 1
    • 2
    • 3

    执行结果:
    在这里插入图片描述

    • 16.查询姓张或者姓王的同学的姓名、院系和考试科目及成绩

    实现代码:

    SELECT student.name, student.department, score.c_name, score.grade
    FROM student
    JOIN score ON student.id = score.stu_id
    WHERE student.name LIKE '张%' OR student.name LIKE '王%';
    
    • 1
    • 2
    • 3
    • 4

    执行结果:
    在这里插入图片描述

    • 17.查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩

    实现代码:

    SELECT student.name, YEAR(CURRENT_DATE) - student.birth AS '年龄', student.department, score.c_name, score.grade
    FROM student
    JOIN score ON student.id = score.stu_id
    WHERE student.address LIKE '%湖南%';
    
    • 1
    • 2
    • 3
    • 4

    执行结果:
    在这里插入图片描述

  • 相关阅读:
    CCF-CSP真题《202309-3 梯度求解》思路+python,c++满分题解
    IDM统一身份平台策略配置说明
    【概率论期末抱佛脚】概念+公式(不含参数估计)
    Navicat快速将mysql表转为postgresql表(数据+表结构)保姆级教程
    Cypher语句查询neo4j数据库教程
    重庆自考本科难考吗?怎样降低难度?
    开源欧拉 openEuler 23.09 创新版本发布
    漏洞利用工具的编写
    详细介绍百度ERNIE 2.0:A Continual Pre-Training Framework for Language Understanding
    韩顺平0基础学java——第25天
  • 原文地址:https://blog.csdn.net/weixin_63172698/article/details/133696216