MySQL之DQL使用实例

1.建表

实验表:worker职工表

字段说明:

  • department_id:部门号
  • worker_id:职工号
  • worker_date:入职日期
  • wages:工资
  • politics:政治面貌
  • name:姓名
  • borth_date:出生日期

备注:本实验中出生日期字段命名为borth_date(属于拼写笔误,正确英文应为birth_date),下文所有 SQL 统一使用 borth_date,和数据库表保持一致。

sql 复制代码
mysql> create table worker(
    department_id int(11) not null comment '部门号',
    worker_id int(11) primary key not null comment '职工号',
    worker_date date not null comment '工作时间',
    wages float(8,2) not null comment '工资',
    politics varchar(10) not null default '群众' comment '政治面貌',
    name varchar(20) not null comment '姓名',
    borth_date date not null comment '出生日期' );

2.插入数据

sql 复制代码
mysql> insert into worker values (101,1001,'2015-5-4',3500.00,'群众','张三','1990-7-1');

mysql> insert into worker  values (101,1002,'2017-2-6',3200.00,'团员','李四','1997-2--8');

mysql> insert into worker values (102,1003,'2011-1-4',8500.00,'党员','王亮','1983-6-8');

mysql> insert into worker values (102,1004,'2016-10-10',5500.00,'群众','赵六','1994-9-5');

mysql> insert into worker values (102,1005,'2014-4-1',4800.00,'党员','钱七','1992-12-30');

mysql> insert into worker values (102,1006,'2017-5-5',4500.00,'党员','孙八','1996-12-2');

3.完成查询

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

sql 复制代码
select * from worker;

查询结果如图:

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

sql 复制代码
select distinct department_id from worker;

查询结果如图:

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

sql 复制代码
select count(1) '总人数' from worker;

查询结果如图:

(4)、列出最高工和最低工资。

sql 复制代码
select max(wages) '最高工资' ,min(wages) '最低工资' from worker;

查询结果如图:

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

sql 复制代码
select round(avg(wages),2) as '平均工资' ,sum(wages) as '总工资' from worker;

查询结果如图:

(6)、创建一个只有职工号、姓名和参加工作时间的新表,名为工作日期表workdate(数据来源于worker表)

提示:用复制表的语法

sql 复制代码
create table workdate select department_id,name,worker_date from worker;

创建成功后查询新表:

(7)、显示所有党员的年龄。

sql 复制代码
-- 注:字段名是 borth_date,为本次实验的拼写,不是标准birth_date
select name '姓名' , timestampdiff(year,borth_date,curdate()) '年龄' from worker where politics = '党员';

查询结果如图:

这里使用'curdate()'获取服务器当前日期,配合timestampdiff计算周岁;注意:字段为borth_date,是建表时的拼写,并非标准写法,复制代码时请和自己表的字段保持一致。

(8)、列出工资在2000-5000之间的所有职工姓名。

sql 复制代码
select name '姓名' from worker where wages between 2000 and 5000;

查询结果如图:

(9)、列出所有孙姓和李姓的职工姓名。

sql 复制代码
select name '姓名' from worker where name like '孙%' or name like '李%';

查询结果如图:

(10)、列出所有部门号为2和3且不是党员的职工号、姓名。

sql 复制代码
select worker_id '职工号',name '姓名' from worker where department_id in (2,3) and politics != '党员' ;

查询结果如图:

因为表中无部门号为2或3,所有查询结果没有输出。

(11)、将职工表worker中的职工按出生的先后顺序排序。

sql 复制代码
select name '姓名',borth_date '出生日期' from worker order by borth_date;

查询结果如图:

(12)、显示工资最高的前3名职工的职工号和姓名。

sql 复制代码
select worker_id '职工号', name '姓名' from worker order by wages desc limit 3;

查询结果如图:

(13)、求出各部门党员的人数。

sql 复制代码
select department_id '部门号', count(1) '人数' from worker where politics = '党员' group by department_id;

查询结果如图:

(14)、统计各部门的工资和平均工资

sql 复制代码
select department_id '部门号' , sum(wages) '总工资' , round(avg(wages),2) '平均工资' from worker group by department_id;

查询结果如图:

(15)、列出总人数大于等于4的部门号和总人数。

sql 复制代码
select department_id '部门号' , count(1) '总人数' from worker group by department_id having count(1)>=4;

查询结果如图:

相关推荐
牧竹子4 小时前
当前支持向量的主流数据库情况对比
数据库
贾公子4 小时前
检测结果怎么落库——表结构、状态机与三类对账
后端·mysql
z06.4 小时前
Linux系统中MySQL的安装
linux·mysql
Small-Young5 小时前
数据库乐观锁深度解析:MySQL、PostgreSQL 实战 + Spring Boot 集成指南
数据库·spring boot·mysql·postgresql·乐观锁·并发控制
浮生若城5 小时前
MySQL 数据库基础
数据库·mysql
香蕉大香蕉(06敬畏市场)5 小时前
MySQL 单点详解(09)
java·数据库·mysql·面试·八股·大厂实习
瀚高PG实验室5 小时前
瀚高数据库运行日志(错误日志)查看与分析方法
数据库·postgresql·瀚高数据库
snow@li5 小时前
PostgreSQL:PostgreSQL(PG)全景深度梳理
数据库·postgresql
java_nnnn6 小时前
Spring IoC & DI 从入门到理解:控制反转、依赖注入与 Bean 管理详解
数据库·sql·spring