首页 > 数据库 >MySQL练习2

MySQL练习2

时间:2025-01-11 22:32:27浏览次数:3  
标签:练习 worker st score student mysql MySQL select

1.单表查询

(1)素材

表名: worker -- 表中字段均为中文,比如“部门号,工资,职工号,参加工作”等

(2)创建 worker 表

CREATE TABLE worker (部门号  int(11)  NOT  NULL , 职工号  int(11)  NOT  NULL , 
工作时间  date  NOT  NULL , 工资  float(8,2)  NOT  NULL , 政治面貌  varchar(10)  NOT  NULL 
DEFAULT  '群众' , 姓名  varchar(20)  NOT  NULL , 出生日期  date  NOT  NULL, PRIMARY
 KEY  (职工号)) ENGINE = InnoDB  DEFAULT  CHARSET = utf8  ROW_FORMAT = DYNAMIC;

(3)为 worker 表增加记录

INSERT  INTO  worker  (部门号, 职工号, 工作时间, 工资, 政治面貌, 姓名, 出生日期)  VALUES (101, 1001, '2015-5-4', 3500.00, '群众', '张三', '1990-7-1');

INSERT  INTO  worker  (部门号, 职工号, 工作时间, 工资, 政治面貌, 姓名, 出生日期)  VALUES (101, 1002, '2017-2-6', 3200.00, '团员', '李四', '1997-2-8');

INSERT  INTO  worker  (部门号, 职工号, 工作时间, 工资, 政治面貌, 姓名, 出生日期)  VALUES (102, 1003, '2011-1-4', 8500.00, '党员', '王亮', '1983-6-8');

INSERT  INTO  worker (部门号, 职工号, 工作时间, 工资, 政治面貌, 姓名, 出生日期)  VALUES (102, 1004, '2016-10-10', 5500.00, '群众', '赵六', '1994-9-5');

INSERT  INTO  worker  (部门号, 职工号, 工作时间, 工资, 政治面貌, 姓名, 出生日期)  VALUES (102, 1005, '2014-4-1', 4800.00, '党员', '钱七', '1992-12-30');

INSERT  INTO  worker  (部门号, 职工号, 工作时间, 工资, 政治面貌, 姓名, 出生日期)  VALUES (102, 1006, '2017-5-5', 4500.00, '党员', '孙八', '1996-9-2');

(4)题目

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

命令:mysql> select  *  from  worker;

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

命令:mysql> select  distinct  部门号  from  worker;

3、求出所有职工的人数

命令:mysql> select  count(职工号)  from  worker;

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

命令:mysql> select  max(工资),min(工资)  from  worker;

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

命令:mysql> select  round(avg(工资),2),sum(工资)  from  worker;

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

命令:mysql> create  table  工作日期表  as  select  职工号, 姓名, 工作时间  as  参加 工作时间  from  worker;   

注意:第一个 as 可省略

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

命令:mysql> select   职工号,姓名,出生日期   from   worker   where   姓名='刘%';

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

命令:mysql> select  姓名,工作时间  from  worker  where  出生日期  <  '1960-01-01';

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

命令: select  姓名  from  worker  where  工资  between  1000  and  2000;

10、列出所有陈姓和李姓的职工姓名

命令:mysql> select  姓名  from  worker  where  姓名  like  '陈%'  or  姓名  like  '李%';

11、列出所有部门号为102和103的职工号、姓名、党员否

命令:mysql> select  职工号, 姓名,
                   ->            case
                   ->                   when  政治面貌  =  '党员'  then  '是'
                   ->                   else  '否'
                   ->            end  as  党员否
                   -> from  worker  where  部门号  in  (102,103);

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

命令:mysql> select  *  from  worker  order  by  出生日期;

13、显示工资最高的前3名职工的职工号和姓名

命令:mysql> select  职工号,姓名  from  worker  order  by  工资  desc  limit  3;

14、求出各部门党员的人数

命令:mysql> select  部门号,count(1)  from  worker  where  政治面貌='党员'  group  by  部门 号;

15、统计各部门的工资总和和平均工资

命令:mysql> select  部门号,sum(工资),avg(工资)  from  worker  group  by  部门号;

16、列出总人数大于3的部门号和总人数

命令:mysql> select  部门号,count(部门号)  as  '总人数'  from  worker  group  by  部门号  having  count(部门号)  >  3;

2.多表查询

(1)创建 student 和 score 表

①创建 student 表

CREATE  TABLE  student  ( id  INT(10)  NOT  NULL  UNIQUE  PRIMARY  KEY , name VARCHAR(20)  NOT  NULL , sex  VARCHAR(4) , birth  YEAR, department  VARCHAR(20) , address  VARCHAR(50));

②创建 score 表

CREATE  TABLE  score ( id  INT(10)  NOT  NULL  UNIQUE  PRIMARY  KEY AUTO_INCREMENT , stu_id  INT(10)  NOT  NULL , c_name  VARCHAR(20) , grade  INT(10));

(2)为 student 表和 score 表增加记录

①向 student 表插入记录的 INSERT 语句如下:

INSERT  INTO  student  VALUES( 901,'张老大', '男',1985,'计算机系', '北京市海淀区');

INSERT  INTO  student  VALUES( 902,'张老二', '男',1986,'中文系', '北京市昌平区');

INSERT  INTO  student  VALUES( 903,'张三', '女',1990,'中文系', '湖南省永州市');

INSERT  INTO  student  VALUES( 904,'李四', '男',1990,'英语系', '辽宁省阜新市');

INSERT  INTO  student  VALUES( 905,'王五', '女',1991,'英语系', '福建省厦门市');

INSERT  INTO  student  VALUES( 906,'王六', '男',1988,'计算机系', '湖南省衡阳市');

②向 score 表插入记录的 INSERT 语句如下:

INSERT  INTO  score  VALUES(NULL,901, '计算机',98);

INSERT  INTO  score  VALUES(NULL,901, '英语', 80);

INSERT  INTO  score  VALUES(NULL,902, '计算机',65);

INSERT  INTO  score  VALUES(NULL,902, '中文',88);

INSERT  INTO  score  VALUES(NULL,903, '中文',95);

INSERT  INTO  score  VALUES(NULL,904, '计算机',70);

INSERT  INTO  score  VALUES(NULL,904, '英语',92);

INSERT  INTO  score  VALUES(NULL,905, '英语',94);

INSERT  INTO  score  VALUES(NULL,906, '计算机',90);

INSERT  INTO  score  VALUES(NULL,906, '英语',85);

(3)题目

1、查询 student 表的所有记录

命令:mysql> select  *  from  student;

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

命令:mysql> select  *  from  student  limit  1,3;

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

命令:mysql> select  id  as  '学号',name  as  '姓名',department  as  '院系'  from  student;

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

命令:mysql> select  *  from  student  where  department  =  '计算机系'  or  department  =  '语系';

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

命令:mysql> select  *  from  student  where (year(now())  -  birth)  between  18  and  22;

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

命令:mysql> select  department,count(1)  from  student  group  by  department;

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

命令:mysql> select  c_name,max(grade)  from  score  group  by  c_name;

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

命令:mysql> select  s.c_name,s.grade  from  score  s  join  student  st  on  s.stu_id  =  st.id
                   -> where  st.name  =  '李四';

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

命令:mysql> select  st.*,s.*  from  student  st  join  score  s  on  st.id  =  s.stu_id;

10、计算每个学生的总成绩

命令:mysql> select  st.name,sum(s.grade)  as  '总成绩'  from  student  st  join  score  s  on  st.id  =  s.stu_id
                  -> group  by  st.name;

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

命令:mysql> select  c_name,round(avg(grade),2)  from  score  group  by  c_name;

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

命令:mysql> select  st.*  from  student  st  join  score  s  on  st.id  =  s.stu_id
                   -> where  s.c_name  =  '计算机'  and  s.grade  <  95;

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

命令:mysql> select  st.*  from  student  st
                   -> join  score  s1  on  st.id  =  s1.stu_id
                   -> join  score  s2  on  st.id  =  s2.stu_id
                   -> where  s1.c_name  =  '计算机'  and  s2.c_name  =  '英语';

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

命令:mysql> select  s.grade, st.*
                   -> from  score  s
                   -> join  student  st  on  s.stu_id  =  st.id
                   -> where  s.c_name  =  '计算机'
                   -> order  by  s.grade  desc;

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

命令:mysql> select  id  as  '学号'  from  student
                   -> union
                   -> select  stu_id  as  '学号'  from  score;

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

命令:mysql> select  st.name,st.department,s.c_name,s.grade  from  student  st
                   -> join  score  s  on  st.id  =  s.stu_id
                   -> where  st.name  like  '张%'  or  st.name  like  '王%';

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

命令:mysql> select  st.name,year(now())  -  st.birth  as  '年龄',st.department,s.c_name,s.grade  from  student  st
                   -> join  score  s  on  st.id  =  s.stu_id
                   -> where  st.address  like  '湖南%';

标签:练习,worker,st,score,student,mysql,MySQL,select
From: https://blog.csdn.net/weixin_63722412/article/details/145079024

相关文章

  • Mysql--重点篇--索引(索引分类,Hash和B-tree索引,聚簇和非聚簇索引,回表查询,覆盖索引,索引
    索引是数据库中用于加速查询操作的重要机制。通过索引,MySQL可以快速定位到满足查询条件的数据行,而不需要扫描整个表。合理的索引设计可以显著提高查询性能,但不合理的索引可能会导致性能下降和磁盘空间浪费。因此,理解索引的工作原理、类型以及如何优化索引非常重要。一、索......
  • 【MySQL】常用的内置函数
    文章目录1.日期函数2.字符串函数3.数学函数4.其它函数在MySQL内部,有很多的函数供我们使用1.日期函数获取时间与日期current_date()current_time()current_timestamp()now()date()获取当前的日期时间仅获取当前的日期/时间获取一个时间加/减一个......
  • MySQL如何对用户资源进行限制
    MySQL提供了对每个用户的资源限制管理MAX_QUERIES_PER_HOUR: 一个用户在一个小时内可以执行查询的次数(基本包含所有语句)MAX_UPDATES_PER_HOUR:一个用户在一个小时内可以执行修改的次数(仅包含修改数据库或表的语句)MAX_CONNECTIONS_PER_HOUR:允许用户每小时连接的次数MAX_U......
  • MySQL主要的SQL_Mode值详解
    ANSI更改语法和行为,使其更符合标准SQL。STRICT_TRANS_TABLESTRADITIONAL使MySQL的行为象“传统”SQL数据库系统。该模式的简单描述是当在列中插入不正确的值时“给出错误而不是警告”等同STRICT_TRANS_TABLES、STRICT_ALL_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE......
  • MySQL账号被锁定
    #创建一个用户mysql>createuserkeme@'localhost'identifiedby'123456';#给一个只读权限mysql>grantselecton*.*tokeme@'localhost';#可以从本地登录[root@mysql-150~]#mysql-ukeme-p123456#把keme@'localhost'给lock......
  • 升级MySQL
    本章介绍升级MySQL安装的步骤。升级是一个常见的过程,当您在同一MySQL版本系列中获取bug修复或主要MySQL版本之间的重要功能时。您首先在一些测试系统上执行此过程以确保一切顺利进行,然后在生产系统上执行此过程。在下面的讨论中,必须使用具有管理权限的MySQL帐户运行的MySQL命......
  • Text1-综合练习4
    Text-综合练习4猜数字游戏用随机数生成一个1-100之间的数字如果猜的打了就打印大了,如果猜的小了就打印小了如果猜中了就打印猜中了!Randomnum=newRandom();intnumber=num.nextInt(100)+1;//生成1-100之间的随机数Scannernum1=newScanner(System.in);......
  • Text1-综合练习3
    Text-综合练习3判断一个数是否为质数质数为只能被1和本身整除的数Scannertext=newScanner(System.in);System.out.println("请输入要进行质数判断的数:");intz=text.nextInt();booleanflag=true;//开始认为这个数是质数for(inti=2;i......
  • Text1-综合练习5
    Text-综合练习5产生十个1-100之间的随机数存入数组求和求平均数找出有几个数字比平均值小Randomnumber1=newRandom();Scannernumber2=newScanner(System.in);System.out.println("请输入要产生随机数的个数:");intn=number2.nextInt();......
  • Text1-综合练习6
    Text-综合练习6键盘录入n个数字,倒放他们的顺序例如:输入12345,输出54321ScannerEX=newScanner(System.in);Stringarr[]=newString[100];Stringtemp;intcount=0;System.out.println("请输入要交换的数字:,以空格结束");......