模糊查询
通配符
_:任意一个字符
%:
任意0~n个字符
姓张的 ‘张%’
姓张的 2个字
‘张_’
注意
模糊查询是
匹配的第一个字不要出现通配符,不然会全表扫描
企业中搜索商品
用的是建立索引的方式
实现思路
商品上架
–》建立索引:将商品信息在存储一份(只包含列表需要的数据)
搜索:查找索引
字段控制查询
去重复记录
Distinct
语法
select
distinct sal
from
emp
查看雇佣的月薪与佣金之和
因为sal 和comm两列的数据类型都是数值类型,所有可以直接做
加运行,但是如果2个字段中有一个不是数值类型,就会出错。
如comm有null ,null+ 任何=null 需要将null值转换为 0;
select
sal
+ifnull(comm,0)
from
emp
给列添加别名
方法
As 别名
select
ename,
sal+ifnull(comm,0) as total
from
emp
排序
Order by
Asc 升 默认 / desc 降
按照薪资升降序
默认
select
*
from
emp
order by
sal
asc
select
*
from
emp
order by
sal
asc;
降序 相同按照 编号升序
select
*
from
emp
order by
sal
desc, empno ;
聚合函数 sum, avg, max,min, count
Count():计算指定列不为null的记录行数。
Max():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算。
Min():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算。
Sum():计算指定列的和,如果指定列是不是数值类型,那么计算结果为0
Avg():计算指定列的平均值,如果指定列是不是数值类型,那么计算结果为0
Count
查询emp表中记录数
select
count(*)
as cnt
from
emp;
查询emp表中,月薪大于2500的人数。
select
count(*)
as cnt
from
emp
where
sal>2500;
查询有佣金的人数,以及有领导的人数
select
count(comm)
as comm_cnt ,count(mgr) as mgr_cnt
from
emp;
Sum和avg
查询所有雇员月薪和
select
sum(sal)
as sal_sum
from
emp;
查询所有雇员月薪和,以及所有雇员佣金和
select
sum(sal)
as sal_sum,
sum(comm)
as comm_sum
from
emp;
查询所有雇员+佣金和
select
sum(sal
+ifnull(comm,0)) as total
from
emp;
统计所有员工的平均工资
select
avg(sal)
as sal_avg
from
emp;
Max min
查询最高工资与最低工资
select
max(sal)
as sal_max,
min(sal)
as sal_min
from
emp;
分组查询
当需要分组查询的时候,需要使用group by语句,
例如:查询每个部门的工资和,说明需要使用部门来分组
关键字:每,各个
Group by
查询每个部门 的部门编号和每个部门的工资和
select
deptno,
sum(sal)
as sal_sum
from
emp
group by
deptno
查询每个部门的部门编号以及每个部分的人数
select
deptno,
count(*)
as count
from
emp
group by
deptno
查询每个部门的部门编号以及每个部门工资大于1500的人数。
select
deptno,
count(sal)
as count
from
emp
where
sal>1500
group by
deptno
Having
查询工资总和大于9000的部门编号和工资和
select
deptno,
sum(sal)
as sal_sum
from
emp
group by
deptno
having
sum(sal)
1500
注意:having与where的区别
(1)having是在分组后对数据进行过滤
where是在分组前对数据进行过滤
(2)having可以使用分组函数(聚合函数)的别名
Where 后面不能使用分组函数。
Limit
Limit用来限制查询结果的起始行,以及总行数
查询5个雇员信息,起始从0开始
select
*
from
emp
limit
0,5;
注意:起始行从0开始,也就是第一行开始
select
*
from
emp
limit
5;
查询10行,起始行从3开始
select
*
from
emp
limit
3,10;
分页查询
介绍
企业中:为什么有分页查询这个功能(需求)。
用户的手机一屏只能放10条记录,加载10条就过来。
性能优化:
减少数据的加载,减少网络资源,
速度快,用户体验好。
实现
如果一页显示的条目数是10,
第一页:数据起始行 0,一共10条
第二页:数据起始行10,一共10条
第三页:数据起始行20,一共10条
需要返回页数 (n-1)*10,
总结
编写顺序
Select…from
…where …group by… having …order by… limit
执行顺序:
Form…
where… group by …having …select …order by…limit
数据完整性
介绍
作用:保证用户输入的数据保存到数据库中是正确的。
确保数据的完整性
:在创建表的时候给表添加约束
完整性的分类:
实体完整性
域完整性
引用完整性
实体完整性
实体:entity,就也是表中一行(一条记录)代表一个实体
实体完整性的作用:标识每一行数据不重复
约束的类型:
主键约束 (primary key)
唯一约束性
(unique)
自增长约束性(auto_increment)
主键约束 (primary key)
特点:数据是唯一,且不能为空
方式一:
create table stu(
sid
int primary key,
name
varchar(50),
classid
int
);
Desc stu;
方式二:
此种方式优势在于,可以创建联合主键
create table stu(
sid
int ,
name
varchar(50),
classid
int,
primary
key (sid,classid)
)
方式三:
create table stu(
sid
int ,
name
varchar(50),
classid
int
);
alter table stu add primary key
(sid,classid);
唯一约束(unique)
数据不能重复
create table stu(
sid
int ,
name
varchar(50),
classid
int unique
);
或者
alter table stu add unique (sid);
自动增长列(auto_increment)
给主键添加自动增长的数值,该列的值自动增长(i++),列的数据类型只能是整数类型。
自动增长的列,插入数据的时候,可以不给值。
create table stu(
sid
int primary key auto_increment,
name
varchar(50),
classid
int unique
);