数据库设计
-- 查询所有数据库
show databases;
-- 创建一个数据库
create database db01;
-- 表结构操作
-- 创建
create table tb_user(
id int comment 'id 唯一标识',
username varchar(20) comment '用户名',
age int comment '年龄',
gender char comment '性别'
)comment '用户表';
create table tb_user2(
id int primary key comment 'id 唯一标识',
username varchar(20) not null unique comment '用户名',
age int not null comment '年龄',
gender char default '男' comment '性别'
)comment '用户表';
-- 查询
-- 展示所在数据库的所有表
show tables ;
-- 查询表结构
desc tb_user2;
-- 查询建表的结构
show create table tb_user;
-- 修改
-- 添加字段
alter table tb_user add qq varchar(20) comment 'QQ';
-- 删除字段
alter table tb_user drop username;
-- 修改字段的类型 ----将qq的大小从20变13
alter table tb_user modify qq varchar(13) comment 'QQ';
-- 修改字段名和字段类型
alter table tb_user change qq QQ varchar(10) comment 'QQ';
-- 删除
-- 删除表
drop table tb_user;
数据库操作
数据库查询 ---DQL
1.基本查询
-- 基本查询
-- 查询指定字段 name entrydate 并返回
select name,entrydate from tb_emp;
-- 查询并返回所有字段 --通配符*也可以,但建议第一种
select id, username, password, name, gender, image, job, entrydate, create_time, update_time from tb_emp;
select * from tb_emp;
-- 设置别名 --返回时替代name,entrydate显示
select name as 姓名,entrydate as 入职日期 from tb_emp;
-- 去除重复记录
select distinct job from tb_emp;
2.条件查询
-- 条件查询 --基础查询之上 加个where
-- select 字段列表 from 表名 where 条件列表
-- 1.查询姓名为杨逍的员工
select * from tb_emp where name = '杨逍';
-- 2.查询 id小于等于5的员工信息
select * from tb_emp where id <= 5;
-- 3.查询 没有分配职务 的员工
-- 注意:查询是不是null得时候,不能用= ,得用is
select * from tb_emp where job is null;
-- 4.查询 有分配职务 的员工
select * from tb_emp where job is not null;
-- 5.查询密码不等于 ‘123456’ 的员工信息
select * from tb_emp where password != '123456';
-- 查询 入职日期在 ‘2000-01-01’ 到 '2010-01-01'之间的员工信息
select * from tb_emp where entrydate >= '2000-01-01' && entrydate <= '2010-01-01';
-- 也可以使用between and
select * from tb_emp where entrydate between '2000-01-01' and '2010-01-01';
-- 查询姓名为2个字的员工信息-- 用到模糊查询的_,表示单个字符
select * from tb_emp where name like '__';
-- 查询姓张的员工信息-- 用到模糊查询的%,表示任意字符
select * from tb_emp where name like '张%';
3.分组查询
3.1 聚合函数
注意 : 聚合函数会忽略空值,对NULL值不作为统计。
-- 前提:聚合函数
-- 1:统计该企业员工数量--count
-- A.count(字段)
select count(id) from tb_emp;
select count(job) from tb_emp; -- 聚合函数会忽略空值,对NULL值不作为统计。
-- B.count(常量)
select count('A') from tb_emp;
-- C.count(*) --推荐
select count(*) from tb_emp;
-- 2:统计该企业最早入职的员工 --min
select min(entrydate) from tb_emp;
-- 3:统计该企业最迟入职的员工
select max(entrydate) from tb_emp;
-- 4:统计该企业员工 ID 的平均值
select avg(id) from tb_emp;
-- 5:统计该企业员工的 ID 之和
select sum(id) from tb_emp;
3.2分组查询
-- 分组查询
-- 1:根据性别分组 , 统计男性和女性员工的数量
select gender, count(*) from tb_emp group by gender; -- 按照gender字段进行分组(gender字段下相同的数据归为一组)
-- 2:查询入职时间在 '2015-01-01' (包含) 以前的员工 , 并对结果根据职位分组 , 获取员工数量大于等于2的职位
select job,count(*) from tb_emp where entrydate <= '2015-01-01' group by job having count(*)>=2;
4.排序查询
-- 排序查询
-- 1:根据入职时间, 对员工进行升序排序
select * from tb_emp order by entrydate asc ;
-- 2:根据入职时间,对员工进行降序排序
select * from tb_emp order by entrydate desc ;
-- 3:根据入职时间对公司的员工进行升序排序,入职时间相同,再按照更新时间进行降序排序
select * from tb_emp order by entrydate , update_time desc;
5.分页查询
-- 分页查询
-- 1:从起始索引0开始查询员工数据, 每页展示5条记录
select * from tb_emp limit 0,5;
-- 2:查询 第1页 员工数据, 每页展示5条记录
select * from tb_emp limit 0,5;
-- 3:查询 第2页 员工数据, 每页展示5条记录
select * from tb_emp limit 5,5;