MySQL作业:
一、建库、建表,插入记录、修改记录、删除记录
01、删除mydb2库(如果存在)
drop database if exists mydb2;
02、再次创建mydb2库,指定编码为utf8,并选择mydb2库
create database mydb2 charset utf8;
use mydb2;
# desc 不能用于数据库操作 只能用于表格操作
03、在mydb2库中,创建员工(emp)表,并添加如下列:
编号(整型、主键、自增)
姓名、性别(字符串类型)
出生年月(日期类型)
职位(字符串类型)
薪资、奖金(小数类型)
create table emp(
id int PRIMARY KEY AUTO_INCREMENT,
name varchar(50) ,
gender varchar(50),
brithday date,
job varchar(20),
sal double,
bonus double
);
04、往员工(emp)表中插入3条记录
先运行这个指令: SET SESSION sql_mode=NO_ZERO_IN_DATE; -- 规定 date 输入 格式
insert into emp values( 1,'张三','男',2021-04-08,'讲师',3000,10000);
insert into emp value(2,‘陈子枢’,‘男’,2021-04-08,‘讲师’,2000,1000);
05、将员工的薪资在原有基础上增加1500(mysql不支持+=)
update emp set sal = sal +1500;
06、删除emp表中所有员工的记录
delect * from emp;
二、单表查询
!!下列练习使用db10库中数据,选择db10库,如果没有先创建(参考sql脚本)
07、列出emp表中的所有员工,显示所有列
select * from emp;
08、列出emp表中的所有的男员工,显示姓名、性别
select name , gender from emp where gender = ‘男’;
09、列出emp表中的’培优部’的所有员工,显示部门名称, 员工姓名
select id,name ,dept from emp where dept = “培优部”
10、列出emp表中员工的奖金(bonus),仅显示奖金,并剔除重复的值
-- dustunct 去重函数 ifnull(判断是否为空 为空则将0赋值给bonus)
select distinct ifnull(bonus,0) from emp;
11、列出emp表中所有奖金高于500的员工,显示姓名、奖金、职位
select name ,bonus,job from emp where bonus > 500;
12、列出emp表中薪资在1000~2000之间的所有员工,显示姓名,薪资
select name ,(sal+ifnull(bonus,0)) as “薪资” from emp where (sal+ifnull(bonus,0)) between 1000 and 2000;
13、列出emp表中奖金为300、500、700的所有员工,显示姓名、奖金
select name ,bonus from emp where bonus =300|| bonus= 500 || bonus = 700;
14、问答题:什么是 数据库服务器、数据库、表、表记录?
1.什么是数据库 :
按照数据结构来组织管理的工具
表记录:数据库中的数据是安装类型存放的,一类数据往往存储在一张表中
15、问答题:char和varchar的区别?
varchar 变长 char 定长
char 表示定长,长度固定
varchar表示变长,即长度可变。当所插入的字符串超出它们的长度时,
视情况来处理,如果是严格模式,则会拒绝插入并提示错误信息,如果是 宽松模式,则会截取然后插入。
区别之二,存储的容量不同
char长度固定,不足使用空格填充,最多容纳2000个字符,char(11)存储abc,占11位。查询速度极快但浪费空间
? varchar变长字符串,最多容纳4000个字符,varchar(11)存储abc,只占3位。查询稍慢,但节省空间。Oracle为varchar2
16、问答题:什么是主键约束(特点)、什么是唯一约束、什么是非空约束?
17、列出emp表中姓名以’王’开头的员工,显示员工姓名
18、列出emp表中姓名以’涛’结尾的员工,显示员工姓名
19、统计emp表中的所有的男员工的人数。
20、统计每个职位的人数, 显示职位和对应人数
21、统计emp表中所有员工的总薪资(包含奖金)
22、统计emp表中所有员工奖金的平均值
23、按照员工年龄从小到大排序,显示姓名、出生年月、总薪资(薪资+奖金)
24、查询下个月过生日的所有员工,显示员工姓名和出生日期
25、求1995年入职的员工信息。
26、求emp表中薪资最高的前3名员工的信息,显示姓名和薪资
三、子查询、多表查询
!!下列练习使用db40库中数据,选择db40库,如果没有先创建(参考sql脚本)
27、(子查询)列出emp表中高于平均工资的所有员工,显示姓名、薪资
28、(子查询)查询emp表中比’齐雷’薪资高的所有员工,显示姓名、薪资
29、(子查询)查询emp表中和’齐雷’从事相同职位的所有员工,显示姓名、职位
30、(子查询)查询emp表中’陈子枢’所有下属员工,假设不知道陈子枢的编号(1011)
– 查询陈子枢的编号
– 查询上级编号为 1011 的员工
31、(左外连接)列出所有员工和员工对应的部门,如果员工没有对应的部门, 显示为null
32、(关联查询)列出在’就业部’任职的员工,假定不知道’就业部’的部门编号,显示部门名称和员工姓名
33、(自连接查询)列出上级及上级对应的下属员工,显示上级编号(id),上级姓名、员工姓名、上级编号(topid)
34、(分组、聚合函数)列出最低薪资大于1500的各种职位及从事此职位的员工人数。
– 先查询出各种职位的最低薪资
– 提示:对分组后的记录筛选过滤请使用having替换where,并且having书写在最后
– 再查询出最低薪资>1500的职位
– 最后查询出每个职位对应的员工人数