目录
条件查询
#语法
select 字段列表 from 表名 WHERE 条件列表;
条件
比较运算符 | 说明 |
> | 大于 |
>= | 大于或等于 |
< | 小于 |
<= | 小于或等于 |
= | 等于 |
!= | 不等于 |
BETWEEW ... AND... | 在某个范围之内(含最大和最小) |
IN(...) | 在in之后的列表中的值,多选一 |
LIKE 占位符 | 模糊查询(_匹配单个字符,%匹配任意个字符) |
IS NULL | 是null |
逻辑运算符 | 说明 |
AND或&& | 并且 |
OR或|| | 或者 |
NOT或! | 非 |
示例
#查询id为3的数据
select * from student where id =3;
练习
创建数据库,名称为EmployeeDB:
- 在EmployeeDB数据库中,创建员工表,名称为t_Employee,表结构如下
列名 | 数据类型 | 说明 | 备注 |
EmpID | int | 主键,自增 | 员工ID |
EmpName | varchar(20) | 员工姓名 | |
EmpIdCode | varchar(20) | 省份证号码 | |
EmpAge | Int | 员工年龄 | |
EmpSex | varchar(2) | 员工性别 | |
EmpPosition | varchar(20) | 员工岗位 | |
EmpJoinTime | datetime | 员工入职时间 | |
EmpSalary | double | 员工薪资 | |
EmpAddress | Varchar(200) | 员工家庭住址 |
增、改:将如下数据插入到表中:
员工名 | 省份证号码 | 员工年龄 | 员工性别 | 员工岗位 | 员工入职时间 | 员工薪资 | 家庭住址 |
EmpName | EmpIdCode | EmpAge | EmpSex | EmpPosition | EmpJoinTime | EmpSalary | EmpAddress |
阿娇 | 430000199208082222 | 25 | 女 | java工程师 | 2009-10-20 | 6000 | 长沙市星光大道 |
程冠希 | 432222198908082232 | 28 | 男 | 系统架构师 | 2008-1-20 | 10000 | 上海市 |
小沈阳 | 432222198807063333 | 29 | 男 | C#高级工程师 | 2008-2-28 | 15000 | 长沙市长沙县 |
张学友 | 432222197506061135 | 42 | 男 | 工会主席 | 2007-4-5 | 8000 | 长沙市五一大道 |
阿sa | 430000199308082242 | 24 | 女 | 财务 | 2007-4-5 | 5000 | 长沙市雷锋大道 |
张小龙 | 434450199308085555 | 24 | 男 | C#高级工程师 | 2009-4-5 | 12000 | 武汉市武功路 |
曹格 | 432222198907173338 | 28 | 男 | 数据库专家(SQL) | 2009-2-28 | 17000 | 杭州市马云路 |
- 将所有的员工年龄加上1岁
- 将阿娇的薪资改为5000
- 将职位为系统架构师的年龄加1岁
- 将张学友的的入职时间改为2010-01-01
- 将员工名为“张小龙”和“曹格”的员工薪资减1000元
- 将年龄在24岁和30岁之间的员工的工资加500
- 将员工岗位为“高级工程师”的薪资减100元
查询:
a.查询全部员工信息
b.查询全部员工的姓名,年龄
c.查询所有女士的信息
d.查询所有年龄在25-30岁(包括25,30岁)的员工信息
删除:
- 删除年龄大于35岁的员工
- 删除工资在6000到10000的员工信息
代码实现
#创建EmployeeDB表
create table EmployeeDB(
EmpID int auto_increment primary key comment "员工ID",
EmpName varchar(20) comment "员工姓名",
EmpIdCode varchar(20) comment "身份证号码",
EmpAge Int comment "员工年龄",
EmpSex varchar(2) comment "员工性别",
EmpPosition varchar(20) comment "员工岗位",
EmpJoinTime datetime comment "员工入职时间",
EmpSalary double comment "员工薪资",
EmpAddress Varchar(200) comment "员工家庭住址"
);
#添加数据
insert into EmployeeDB values (1,"阿娇",430000199208082222 ,25,"女","java工程师","2009-10-20",6000,"长沙市星光大道"),
(2,"程冠希",432222198908082232,28,"男","系统架构师","2008-1-20",10000,"上海市"),
(3,"小沈阳",432222198807063333,29,"男","C#高级工程师","2008-2-28",15000,"长沙市长沙县"),
(4,"张学友",432222197506061135,42,"男","工会主席","2007-4-5",8000,"长沙市五一大道"),
(5,"阿sa",430000199308082242,24,"女","财务","2007-4-5",5000,"长沙市雷锋大道"),
(6,"张小龙",434450199308085555,24,"男","C#高级工程师", "2009-4-5",12000,"武汉市武功路"),
(7,"曹格",432222198907173338,28,"男","数据库专家(SQL)","2009-2-28",17000,"杭州市马云路");
#修改
update EmployeeDB set EmpAge = EmpAge + 1;
update EmployeeDB set EmpSalary = 5000 where EmpName = "阿娇";
update EmployeeDB set EmpAge = EmpAge +1 where EmpPosition = "系统架构师";
update EmployeeDB set EmpJoinTime = "2010-01-01" where EmpName = "张学友";
update EmployeeDB set EmpSalary = EmpSalary - 1000 where EmpName = "张小龙" and EmpName = "曹格";
update EmployeeDB set EmpSalary = EmpSalary + 500 where EmpAge between 24 and 30;
update EmployeeDB set EmpSalary = EmpSalary + 100 where EmpPosition = "高级工程师";
#查询
select * from EmployeeDB;
select EmpName, EmpAge from EmployeeDB;
select * from EmployeeDB where EmpSex = "女";
select * from EmployeeDB where EmpAge between 25 and 30;
delete from EmployeeDB where EmpAge > 35;
delete from EmployeeDB where EmpSalary between 6000 and 10000;
常见的聚合函数
函数 | 说明 |
count | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
//语法
select 聚合函数(字段列表) from 表名;
练习
根据前面的表
- 查询所有员工中薪资高于平均薪资的员工信息
- 查询所有员工中薪资介于平均薪资和最高薪资之间的学生信息
代码实现
select * from EmployeeDB where EmpSalary >(select avg(EmpSalary) from EmployeeDB);
select * from EmployeeDB where EmpSalary between (select avg(EmpSalary) from EmployeeDB) and (select max(EmpSalary) from EmployeeDB);
分组查询
#where是分组之前进行的过滤,不满足where条件的,不参加分组
#having是分组之后对结果进行过滤
select 字段名列表 from 表名 where 查询条件 group by 分组的字段名 HVAING 分组后的过滤条件;
练习
- 根据性别分组,统计男性员工和女性员工的数量
代码实现
select EmpSex, count(*) from EmployeeDB group by EmpSex;
排序查询
select 字段列表 from 表名 order by 排序的列名 ASC或DESC;
ASC:升序
DESC:降序
练习
根据员工入职时间,进行升序排序
代码实现
select * from EmployeeDB order by EmpJoinTime asc ;
分页查询
#起始索引从零开始,起始索引=(查询页码 - 1) * 每页显示记录条
select 字段列表 from 表名 limit 起始索引, 查询记录条;
练习
查询第一页的员工信息,每一页展示四条记录
代码实现
select * from EmployeeDB limit 0,4;