学习网站:https://www.w3school.com.cn/sql/index.asp
推荐工具书:SQL必知必会
基本认识
- 关系数据库:多张变+各表之间的联系 关键词:主键、字段
- SQL是一门语言,mySQL/Oracle/sql Sever是关系数据管理系统,navicat等是客户端,Notepad++中文版等SQL的文本编辑器
- SQL分类:DDL(数据定义语言)、DML(数据操纵语言)、DCL(数据控制语言)
- 变量类型
字符串类型:char:定长字符串 | varchar:可变字符串
日期:date
日期时间:datetime(包括日期和时分秒)
数值型:bigint 整数型 |double 浮点型 - SQL语言注意点
输入只能是英文;
以(;)号结尾
关键字不区分大小写
AS 命名字段别名
字符串均是使用单引号
Null(什么都没有)和空字符(有一个空字符)是有区别的
基本操作
-
插入
打开查询编辑器
insert into 表名不加引号 (字段名不加引号1,字段名不加引号2,……字段名不加引号n)
values ('对应的数值1', '对应的数值2', ……'对应的数值n')
;
- 单表查询
select 字段名1 as A, 字段名2
from 表名
where 筛选字段 in ('筛选字段内容1','筛选字段内容2')
order by 排序字段 desc
;
as将字段名1重新命名为A,order表示排序,后面加desc表示倒序排序
-
SQL聚合查询
常见聚合函数:
count(字段):计数
coung(distinct 字段):不重复计数
sum(字段):求和
avg(字段):平均
max(字段):最大
min(字段):最小
# 不分组
select
count(字段) as 字段计数
,count(distinct 字段) as 计数去重
from 表名
;
# 分组
select 分组字段
,count(distinct 字段)
,sum(字段)
from 表名
where 表筛选条件
and 表筛选条件
group by 分组字段
分组实际上就是分类统计,比如说不分组统计的是所有部门的所有员工人数, 按部门分组之后就是统计各个部门的员工人数。
其他地方又说:WHERE 关键字无法与聚合函数一起使用??
- 多表关联查询
select 表别名.字段
from 表 a
join 表b
on 两表的关联条件(如a.字段=b.字段)
and 表b的筛选条件
where 表a的筛选条件
例:
select a.工号,a.姓名,a.部门,b.综合考核分
from
(
select 工号,姓名
from 表A名
where 部门 in ('市场部','客服部')
) a
inner join
(
select 工号,综合考核分
from 表B名
where 综合考核分>=80
) b
on a.工号=b.工号
;
这样,就能查询到'市场部'和'客服部'综合考核分>=80的员工了~
上述可以改写成
select a.工号,a.姓名,a.部门,b.综合考核分
from 表A名 a
join 表B名 b
on a.工号=b.工号
and b.综合考核分>=80
where a.部门 in ('市场部','客服部')
;
建议新手用第一种写法,第二种的写法更简单
注意:join 默认的就是内联结inner join ,只有都满足条件的记录才会保留下来。此外还有
left out join:主表(表a)记录全部保留,从表(表b)若无记录则相应字段为null
right out join:从表全部保留
full join:两个表全部保留
要注意表可能有重复的记录,避免出错
-
常用函数介绍
字符串拼接函数:concat(内容1,内容2,内容3,……)
字符串截取函数:substr(开始位数,截取长度)
字符串替换函数:replace(内容,原替换内容,替换目标内容)
日期加减函数:dateadd
如将2019-15-05 12:01:01以后的记录的时间都加上12个月:
select date_add(数据创建时间,interval 12 month)
,姓名
,工号
from 表名
where 数据创建时间>'2019-15-05 12:01:01'
条件函数
case when <判断表达式> then <表达式> else<表达式> end
如:
select a.工号, a.姓名,b.工号,b.综合考核分
,case when 综合考核分>=90 then '优秀'
when 综合考核分<90 then '良好'
end as level
from 表A名 a
left outer join 表B名 b
on a.工号=b.工号
查询排名前三:
select * from personinfo order by credit DESC limit 0,3
limit 0,3:从0开始,提取三条
网友评论