总结:
演示如下:
一、
1、数据库操作
2、表操作
在heima数据库建一张表进行验证:
3、创建表时字段的数据类型与案例
数值类型:
字符串类型:
日期类型:如:('2008-8-8')
案例演示:
4、修改表操作
4.1、表中添加新的字段:
4.2、修改字段名和字段类型:
4.3、修改表名:
4.4、删除表:
二、表框架创建完成之后我们需要给指定字段添加数据
总结:
2.1、添加数据:
# 给指定字段添加数据
insert into employee(id, workno, workname, gender, age, idcard, time, username) values
(1,'1','itcast','男',60,"123456789",'2008-8-8','Kitty');
# 给指定字段添加数据
insert into employee(id,workno,workname,gender) values (2,'2','itcast','女');
# 查看表中的数据
select * from employee;
# 给全部字段添加数据
insert into employee values (3,'3','itcast','女',60,'12345678','2008-8-9','钟无艳');
# 批量插入添加数据
insert into employee values (4,'4','itcast','女',60,'1234567890','2008-8-8','百里玄策'),
(5,'5','itcast','男',60,'123456','2008-8-9','狄仁杰'),
(6,'6','itcast','男',60,'12345678','2008-8-8','赵云'),
(7,'7','itcast','男',60,'1234567','2008-8-9','李白'),
(8,'7','itcast','女',60,'123456799999','2008-8-9','小乔'),
(9,'9','itcast','女',60,'1234567890','2008-8-9','后裔');
2.2、修改表中数据:
# 修改表中的数据
# 修改id为1的数据, 将workname修改为itheima
update employee set workname ='itheima' where id =1;
# 修改id为2的数据, 将workname修改为dljd, gender修改为 公
update employee set workname ='dljd',gender ='公' where id =2;
# 将所有的员工time修改为 2008-1-1 (不带 where 条件)
update employee set time ='2008-1-1';
2.3、删除表中数据:
# 删除表中的数据
# 删除 gender 为女的员工
delete from employee where gender ='女';
# 删除所有员工(不带 where 条件)
delete from employee;
2.4 重点: 查询表中数据
表中数据:
create table emp(
id int comment '编号',
workno varchar(10) comment '工号',
name varchar(10) comment '姓名',
gender char comment '性别',
age tinyint unsigned comment '年龄',
idcard char(18) comment '身份证号',
workaddress varchar(50) comment '工作地址',
entrydate date comment '入职时间'
) comment '员工表';
desc emp;
insert into emp(id, workno, name, gender, age, idcard, workaddress, entrydate) values
(1,'1','柳岩','女',20,'123456789012345678','北京','2000-01-01'),
(2,'2','张无忌','男',18,'123456789012345670','北京','2005-09-01'),
(3,'3','韦一笑','女',38,'123456789123456780','上海','2005-08-01'),
(4,'4','赵敏','女',18,'1234562345678','北京','2009-12-01'),
(5,'5','小昭','女',16,'12389012345678','上海','2007-07-01'),
(6,'6','杨逍','女',28,'123789012345678','北京','2006-01-01'),
(7,'7','范瑶','女',40,'123678912345678','湖南','2005-01-01'),
(8,'8','灭绝','女',38,'123456789015678','武汉','2006-01-01'),
(9,'9','张三丰','女',45,'123456789D','北京','2003-01-01'),
(10,'10','常遇春','女',53,null,'上海','2009-01-01');
基本查询:
代码演示如下:
# 基本查询
-- 1 查询指定字段 name workno age 返回
select name,workno,age from emp;
-- 2 查询所有字段返回
select id, workno, name, gender, age, idcard, workaddress, entrydate from emp;
# 等同于下面 * 实际开发中不建议使用 * (影响效率)
select * from emp;
-- 3 查询所有员工的工作地址,起别名
select workaddress from emp;
# 起别名 (as 可以省略)
select workaddress as '工作地址' from emp;
-- 4 查询所有员工的上班地址(不要地址重复的)
select distinct workaddress as '工作地址' from emp;
输出结果:
1
2
3
4
条件查询:
注意:字段列表也就是字段id name..... * 代表所有字段
代码演示如下:
# 条件查询
-- 1 查询年龄 等于 38 的员工
select * from emp where age =38;
-- 2 查询年龄小于 20 的员工信息
select * from emp where age <20;
-- 3 查询年龄小于等于 20 的员工信息
select * from emp where age<=20;
-- 4 查询没有身份证号的员工信息
select * from emp where idcard is null;
-- 5 查询有身份证号的员工信息
select * from emp where idcard is not null;
-- 6 查询年龄不等于 38 的员工信息
select * from emp where age !=38;
select * from emp where age <>38;
-- 7 查询年龄在16岁(包含)到20岁(包含)之间的员工信息
select * from emp where age >=16 and age <=20;
select * from emp where age >=16 && age <=20;
select * from emp where age between 16 and 20;
-- 8 查询性别为 女 且年龄小于 25岁的员工信息
select * from emp where gender ='女' and age < 25;
-- 9 查询年龄等于18 或 20 的员工信息
select * from emp where age =18 or age =20;
select * from emp where age in (18,20);
-- 10 查询姓名为两个字的员工信息
# 模糊查询 一个_相当于一个字符
select * from emp where name LIKE '__';
-- 11 查询身份证号最后一位是D的员工信息
# 模糊查询 %相当于能匹配任意多个字符
select * from emp where idcard LIKE '%D';
输出结果:
10
11
聚合函数(最大值 最小值 总数量 平均值 求和):
代码演示如下:
# 聚合函数
-- 1 统计该企业员工数量(通过统计id即可统计员工数量)
select count(id) from emp;
-- 2 统计该企业员工的平均年龄
select avg(age) from emp;
-- 3 统计该企业员工的最大年龄
select max(age) from emp;
-- 4 统计该企业员工的最小年龄
select min(age) from emp;
-- 5 统计北京地区员工的年龄之和
select * from emp where workaddress ='北京';
select sum(age) from emp where workaddress ='北京';
输出结果:
5
分组查询【重】:
代码演示如下:
# 分组查询
-- 1 根据性别分组,统计男性员工 和 女性员工 数量
select count(*) from emp group by gender;
select gender,count(*) from emp group by gender;
-- 2 根据性别分组, 统计男性员工 和 女性员工 的平均年龄
select gender,avg(age) from emp group by gender;
-- 3 查询年龄小于40的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址
select workaddress,count(*) from emp where age <40 group by workaddress;
select workaddress,count(*) from emp where age <40 group by workaddress having count(*) >=3;
输出结果:
1
2
3
排序查询:
代码演示如下:
# 排序查询
-- 1 根据年龄对公司的员工进行升序/降序排序
select * from emp order by age asc ;
select * from emp order by age desc ;
-- 2 根据入职时间,对员工进行降序排序
select * from emp order by entrydate asc ;
select * from emp order by entrydate desc ;
-- 3 根据年龄对公司的员工进行升序排序, 年龄相同, 再按照入职时间进行降序排序
select * from emp order by age asc ,entrydate desc; # 多字段排序 当第一个字段age相同的时候,才会对第二个字段entrydate进行排序
输出结果:
3
分页查询:
代码演示如下:
# 分页查询
-- 1 查询第一页员工数据,每页展示8条数据 (查询的页码也可以说成查询的当前页)
select * from emp limit 0,8; # 起始索引(页数)从0开始 起始索引 =(查询的页码-1)*每页展示数据数
-- 2 查询第二页员工数据,每页展示8条数据 起始索引 =(2-1)*8
select * from emp limit 8,8;
输出结果:
1 [八个数据为1页]
2
案例演示:
代码演示如下:
-- 1 查询年龄为16,28 的员工信息
select * from emp where age in (16,28);
-- 2 查询性别为 女 , 并且年龄在 20-40岁(含)以内的姓名为三个字的员工
select * from emp where gender ='女' and age between 20 and 40 and name LIKE '___';
-- 3 统计员工表中,年龄小于60岁的,男性员工和女性员工的人数
select gender,count(*) from emp where age <60 group by gender;
-- 4 查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序
select name,age from emp where age <=35 order by age asc ,entrydate desc ;
-- 5 查询性别为女,且年龄在20-40岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序
select * from emp where gender ='女' and age between 20 and 40 order by age asc ,entrydate asc limit 0,5;
# 这里注意: 前5个员工信息 可以利用分页查询, 一页查出5个数据, 还要注意 limit顺序是在最后的
输出结果:
5
三、DQL的执行顺序
可以利用别名来判断:
-- 查询年龄大于20的员工姓名,年龄,并根据年龄进行升序排序
select e.name ,e.age from emp e where e.age >20 order by age asc ;
# 解释: 先给emp表起一个别名 e 然后where后面和select 可以通过别名方式调用 验证了先执行from
select e.name name1 ,e.age age1 from name1.emp e where age1 >20 order by age asc ;
# 报错: 先给select起一个别名 让from 和where 调用 结果报错, (因为select在from和where执行之后)
select name name1,age age1 from emp where age >20 order by age1 asc ;
# 验证了select执行在order by之前