DAY03_MySQL扩展知识&MySQL综合练习

目录

  • 1 MySQL
    • 1.1 乱码问题
    • 1.2 导入SQL文件
    • 1.3 备份数据库
      • 1.3.1 备份扩展
    • 1.4 恢复数据库
    • 1.5 数据类型
    • 1.6 其他函数
  • 2 MySQL综合练习
    • 2.1 数据库及表操作
    • 2.2 新增、修改、表记录删除
    • 2.3 查询
    • 2.4 聚合函数查询
    • 2.5 分组查询
    • 2.6 排序查询
    • 2.7 分页查询
    • 2.8 其他函数查询
    • 2.9 多表查询
    • 2.10 子查询

1 MySQL

1.1 乱码问题

SET NAMES UTF8/GBK;

1.2 导入SQL文件

  • 进入数据库,并创建库。
  • 进入库后

SOURCE 盘符://sql文件.sql

1.3 备份数据库

在cmd窗口中 不要登录进数据库

  • 备份单个数据库

mysqldump -u用户名 -p备份库名 > 存放地址后回车,输入数据库密码

  • 备份多个数据库

mysqldump -u用户名 -p - - databases 库名 库名 > 存放地址

  • 备份全部数据库

mysqldump -u用户名 -p - - all-databases > 存放地址

  • 注意:
    • 语句后不加分号
    • 不提示错误即备份成功
    • 只备份表,不备份库
  • eg:
    • mysqldump -uroot -p db10 > d:/db10.sql
    • mysqldump -uroot -p - - databases db10 db20 > d:/db10.sql
    • mysqldump -uroot -p - - all-databases > d:/db10.sql

1.3.1 备份扩展

  • 只备份库和表
    • mysqldump -uroot -p db10 -d >d:/db10.sql
  • 只备份数据
    • mysqldump -uroot -p db10 -t >d:/db10.sql

1.4 恢复数据库

恢复时要先创建库,因为备份的时候不会备份库名

  • cmd窗口中未登录

mysql -u用户名 -p 库名 < 存放地址

  • cmd窗口中已登录

先进去库中,source 存放地址

  • eg:
    • mysql -uroot -p db10 < d:/db10.sql
    • use db10; source d:/db10.sql

1.5 数据类型

  • 数值:
    • int
      • 等效于java中int,占4个字节
    • double
      • 等效于java中double,占8个字节
    • double(m,d)
      • m等于总长度,d等于小数长度
        • 23.57 m=4 d=2
    • decimal(m,d)
      • 超高精度浮点数
  • 字符串:
    • char(m)
      • 固定长度,执行效率高,最长255(不是用空格补全)
    • varchar(m)
      • 可变长度,更节省资源,最长65535(超过255推荐使用text)
    • text(m)
      • 可变长度,最长65535
  • 日期:
    • date
      • 年月日
    • time
      • 时分秒
    • datetime
      • 年月日时分秒
    • timestamp
      • 时间戳,格式与datetime一致
        • 默认当前系统时间,最大值2038-1-19
    • datetime与timestamp区别:
      • 存储内容不同
        • datetime年月日时分秒
        • timestamp时存储日期到1970-1-1之间的毫秒值
      • 范围不同
        • datetime1000-9999
        • timestamp1970-2038
      • timestamp可以设置自动更新时间为当前时间
  • 扩展:
    • tinyint
      • 等效于byte,占1字节
    • samllint
      • 等效于short,占2字节
    • bigint
      • 等效于long,占8字节
    • float
      • 等效于float,单精度浮点类型,占4字节

1.6 其他函数

  • 数值函数
函数 说明
celi(条件) 向上整取
floor(条件) 向下整取
round(条件) 向下整取
rand(条件) 随机数
select 列名,数值函数(条件) from 表名;
-- emp表中所有的员工薪资上涨15.47%并向上整取
select name,sal,celi(sql*1.1547) from emp;
  • 日期函数
函数 说明
curdate() 获取当前日期,年月日
curtime() 获取当前时间,时分秒
sysdate() 获取当前日期+时间,年月日时分秒
now() 获取当前日期+时间,年月日时分秒
year(date) 返回date中的年
month(date) 返回date中的月
day(date) 返回date中的日
hour(date) 返回date中的时
minute(date) 返回date中的分
second(date) 返回date中的秒
date_add() 增加日期
date_sub() 减少日期
-- 查询emp表中在1993-1995年期间出生的员工,显示名字和出生日期
select name,birthday from emp where birthday between '1993-1-1' and '1995-12-31';
select name,birthday from emp where year(birthday) between 1993 and 1995;
  • 字符串拼接
函数 说明
concat(s1,s2…) 将s1s2多个字符串合并成一个字符串
concat_ws(x,s1,s2…) 同concat函数,此函数每个字符串之间要加上x,x时分隔符
-- 查询emp表中员工的姓名和薪资,格式xxx(元)
select name,concat(sal,'(元)'from emp;

2 MySQL综合练习

2.1 数据库及表操作

  1. 查看mysql服务器中所有的数据库
show databases;
  1. 进入某一个库
use test;
  1. 查看当前库中所有表
show tables;
  1. 删除mydb1库
frop database if existsmydb1;
  1. 创建mydb1库,指定编码utf8
create database if not exists mydb1 charaset utf-8;
  1. 查询建库时语句
show create database mydb1;
  1. 删除stu学生表
drop table if exists stu;
  1. 创建stu学生表,编号,姓名,性别,出生年月,成绩
create table stu (id int ,name varchar(50),gender varchar(10),birthday date,score double) charset utf8;
  1. 查询建表时语句
show create table stu;
  1. 查看stu表结构
desc stu;
  1. 查看进入的时哪一个库
select database();

2.2 新增、修改、表记录删除

  1. 往stu表中插入数据(列名与数据顺序要一致)
insert into stu (id,name,gender,birthday,score) values(1,'tom','男','1999-01-01',85);
insert into stu values(2,'jack','女','2000-01-01',85);
insert into stu values(3,'zhangsan','女','2001-01-01',85),(4,'lisi','女','2000-01-01',85),(5,'wangwu','女','2000-01-01',85)...;
  1. 修改stu成绩,每人加10分
update stu set score = score+10;
  1. 删除stu表中数据
delete from stu;

2.3 查询

  1. 查询em表中所有员工,显示姓名、薪资、奖金,查询emp表中所有记录
select name,sal,bonus from emp;
  1. 查询emp表中所有的部门和职务(去重)
select distinct dept ,job from emp;
  1. 查询emp表中薪资大于3000的员工姓名、薪资
select name , sal from emp where sal >3000;
  1. 查询emp表中总薪资大于3500的员工姓名和总薪资
select name 姓名, sal+if null(bonus,0) 总薪资 from emp where (sal+ if null(bonus,0))>3500;
  1. 查询emp表中薪资在3000到4500之间的姓名和薪资
select name , sal from emp where sal between 3000 and 4500; 
  1. 查询emp表中薪资在1400,1600,1800员工的姓名和薪资
select name , sal from emp where sal in (1400,1600,1800);
  1. 查询emp表中薪资不在1400,1600,1800员工的姓名和薪资
select name , sal from emp where sal not in (1400,1600,1800);
  1. 查询emp表中薪资大于4000和小于2000的员工姓名和薪资
select name ,sal from emp where sal > 4000 or sal<2000;
  1. 查询emp表中薪资大于3000并且奖金小于600的员工姓名和薪资与奖金
select name ,sal ,bonus from emp where sal > 3000 and if null(bonus,0)<600;
  1. 查询没有部门的员工(即部门为null值)
select name from emp where dept is null;
  1. 查询emp表中以刘字开头的员工
select name from emp where name like '刘%';
  1. 查询emp表中包含涛字的员工
select name from emp where name like '%涛%';
  1. 查询emp表中以刘字开头的两位字的员工
select name from emp where name like '刘_';

2.4 聚合函数查询

  1. 统计emp表中薪资大于3000的员工个数
select count(*) from emp where sal >3000;
  1. 求emp表中最高薪资和最低薪资
select max(sal),min(sal) from emp;
  1. emp表中所有薪资的总和和平均薪资
select sum(sal),avg(sal) from emp;

2.5 分组查询

  1. emp部门人数统计
select dept, count(*) from emp group by dept;
  1. emp表工作职位人数统计
select job , count(*) from emp group by job;
  1. emp表中部门分组求最高薪资
select dept,max(sql) from emp group by dept;

2.6 排序查询

  1. emp表中薪资升序排列
-- 升序排列时 asc可省略
select name ,sal from emp order by sal asc;
  1. emp表中奖金倒序排列
select name ,bonus from emp order by bonus desc;

2.7 分页查询

  1. emp表中所有数据,每页三条数据,显示第二页
select * from emp limit 3,3;
  1. emp表中薪资前三的信息
select * from emp limit 0,3;

2.8 其他函数查询

  1. 查询emp表中1993-1995年的员工姓名和出生年月
select name,birthday from emp where birthday between '1993-1-1' and '1995-12-31';
select name,birthday from emp where year(birthdat) between 1993 and 1995;
  1. 查询emp表中当月过生日的人
select * from emp where month(now()) = month(birthday);
  1. 查询emp表中下个月过生日的人
select * from emp where (month(now())+1%12=month(birthday)%12;
  1. 查询emp表中员工姓名薪资(薪资格式为xxx(元))
select name ,concat(sal,'()) from emp;

2.9 多表查询

  1. 查询部门和部门对应的员工信息
select * from emp , dept where emp.dept_id = dept.id;
select * from dept inner join emp on emp.dept_id = dept.id;
  1. 查询所有部门及部门对应的员工,如果部门没有员工,员工显示null
select * from dept left join emp on emp.dept_id = dept.id;
  1. 查询所有员工及员工所属部门,如果员工没有部门,部门显示null
select * from dept right join emp on emp.dept_id = dept.id;
  1. 列出在培优部任职的员工,假定不知道培优部的部门编号,显示部门名称和员工信息
select d.name,e.name from dept d,emp e where d.id = e.dept_id and d.name='培优部';
  1. 列出所有员工及其直接上属,显示员工姓名和上级编号和姓名
select e1.name,e2.id,e2.name from emp e1,emp e2 where e1.topid = e2.id;
  1. 列出薪资大于1500的各种职位,显示职位和该职位的最低薪资
select job,min(sal) from emp group by job having min(sal)>1500;
  1. 列出在每个部门就职的员工数量,平均工资,显示部门编号员工数量和平均薪资
select dept_id,count(*),avg(sal) from emp group by dept_id;
  1. 列出受雇日期早于上级的所有员工,显示员工编号员工姓名和部门名称
select e1.id,e1.name,d.name from emp e1,emp e2,dept d where e1.topid = e2.id and e1.dept_id = d.id and e1.hdate<e2.hdate;
  1. 查出至少有一个员工的部门,显示部门信息
select d.id,d.name,d.loc,count(*) from emp e,dept d where e.dept_id = d.id group by e.dept_id;
  1. 列出每个部门薪资最高的员工信息
select dept_id,name,sal from emp;
select dept_id,max(sal) from emp gropy by dept_id;
select t1.dept_id,t1.maxsal,emp.name from emp ,(select dept_id,max(sal) maxsal from emp group by dept_id) t1 where emp.dept_id = t1.dept_id and emp.sal = t1.maxsal;

2.10 子查询

  1. 列出薪资比王海涛薪资高的所有员工,显示姓名和薪资
select name,sal from emp where sal >(select sal from emp where name = '王海涛');
  1. 列出与刘佩霞从事相同职位的所有员工,显示姓名和职位
select name, job from emp where job = (select job from emp where name ='刘佩霞');

你可能感兴趣的:(JavaWeb,mysql)