SQL:操作关系型数据库的编程语言,定义了一套操作关系型数据库的统一标准。
如果没有添加where条件则代表更新所有行的对应字段。
如果没有添加where条件则代表删除所有行的。
如果目的是要删除某个字段的值,无法使用delete可以使用UPDATE,将字段值更新为NULL。
将一列数据作为一个整体,进行纵向计算。
select 聚合函数(字段列表) from 表名
count(字段):统计该字段非null值的个数
count(*):求行数
max(字段):找最大值
min(字段):找最小值
avg(字段):求该字段所有值的平均值
sum(字段):求该字段所有值的和
group by :分组字段
having :条件筛选过滤
分组查询中select可以查询的字段为分组字段和聚合函数
select gender from tb_emp group by gender;
select gender,count(*) from tb_emp group by gender;
若是分组过后的过滤要将条件放在having中
select job,count(*) from tb_emp where entrydate<='2015-01-01' group by job having count(*) >=2;
执行顺序: where->聚合函数->having
where和having区别:
升序:ASC (默认) , 降序:DESC
若一级排序值相同,根据二级排序继续比较
select * from tb_emp order by entrydate, update_time desc ;
起始索引计算公式:( 页码 - 1 ) * 每页展示记录数
-- 查询用户表:条件:姓名:某张某,性别:男,入职时间:2002-01-01 2015-01-01
select *
from tb_emp
where name like '%张%'
and gender = 1
and entrydate between '2002-01-01' and '2015-01-01'
order by update_time desc
limit 0,10;
if判断式:if(条件判断式,true取值,false取值),可以用于查询结果重命名
select if(gender = 1, '男性员工', '女性员工') 性别, count(*)
from tb_emp
group by gender;
'性别’是给字段进行重命名,省略了as。
case表达式:case 表达式 when 值1 then 结果1 when 值2 then 结果2 .... else 结果n end
select (case job when 1 then '班主任' when 2 then '讲师' when 3 then '学工主管' when 4 then '教研主管' else '未分配' end) 职位,
count(*)
from tb_emp
group by job;
当一个字段中的取值被外部表作为外键关联时,这个字段的这个项无法删除
使用foreign key 定义外键关联的另外一张表称为物理外键:影响增删改的效率(要检查外键关系);仅用于单节点数据库,不适用于分布式、集群场景;容易引发数据库的死锁问题,消耗性能。
在业务层逻辑中,解决外键关联。通过逻辑外键,可以很方便解决上述问题。
eg:部门和员工
一的一方成为父表,多的一方称为子表
实现方式:在数据库中多的一方,添加字段,来关联一的一方的主键(外键)
如果一个表的一个字段是关联至另一个表的,则我们要进行外键处理,否则其实只是字段名相同而已,并无任何关系
eg:用户和身份证
多用于单表拆分,将一张表的基础字段放在一张表中,其他字段放在另一张表中,以提升效率。
实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)
eg:学生和课程
实现方法:建立第三张表作为中间表,中间表至少包含两个外键,分别关联两方主键。
查询时如果直接使用select * from 表1,表2
,得到的结果为两个表的笛卡尔积。
所以我们要进行筛选,如加上where tb_emp.dept_id = tb_dept.id;
相当于查询A,B交集部分的数据
select 表1.name,表2.name from 表1 表2 where 表1.two_id = 表2.id;
select 表1.name,表2.name from 表1 inner join 表2 on 表1.two_id = 表2.id;
Tips:还可以进行表的重命名
select a.name b.name from 表1 a 表2 b where a.two_id = b.id;
查询左表所有数据(包括两张表交集部分数据)
完全包含表1的数据
查询右表所有数据(包括两张表交集部分数据)
完全包含表2的数据