python第25天_学习python第25

今天分享一下查询

一.单表查询

1.查询所有字段

语法:select 字段名1,字段名2... from 表名

2.使用通配符*查询所有字段

语法:select * from 表名

3.查询指定字段

语法:select 字段名1,字段名2... from 表名

4.去重distinct的使用

语法:select distinct 字段名1,字段名2 ...from 表名

注意:distinct使用到多个字段上,只有多个字段的值都相同时才去重

5.查询中使用算术运算符

+ - * /(div) %(mod)

6.给字段起别名

语法:select 字段名1 [as] 别名,字段名2 .....from 表名

注意:如果别名中有空格特殊符号 需要使用单引号括起来

二.对查询结果排序

升序默认的排序方式 asc

降序 desc

1.在单个字段中排序

语法:select 查询内容 from 表名 order by 字段 asc|desc

2.在多个字段中使用排序

语法:select 查询内容 from 表名 order by 字段名1 asc|desc,字段名2 asc|desc...

注意:排序可以使用别名

三.条件查询

条件查询:是用户按照一定条件查询,查询满足条件的部分记录

语法:select 查询内容 from 表 where 条件

1.比较运算符的使用

= > < >= <= != <>

注意:MySQL默认的是不区分大小写的,如果需要区分大小写,则可以使用binary关键字

2.[not]between and的使用

可以查询某区间范围的记录

3.[not] in

表示在指定集合中

语法: select 查询内容 from 表名 where 字段名 in(值1,值2,....)

4.is null或者 is not null

判断某个字段是否为空

5.模糊查询

可以查询以XX开头 以XX结尾 包含XX 第几个是X

语法:select 查询内容 from 表名 where 字段名 like

%:指任意长度的字符(可以有也可以没有)

_:匹配一个字符

6.条件中的逻辑运算符

1.and 指并且 在查询时候只有满足所有查询条件的记录才会被查询出来

语法:select 查询内容 from 表名 where 条件1 and 条件2 and....

2.or 指或者 在查询时候只要满足任意一个条件的记录就能被查询出来

语法select 查询内容 from 表名 where 条件1 or 条件2 or....

四.分页查询

语法: select 查询内容

from 表名

where 条件

order by 字段名 asc|desc

limit a,b

注意:

1.limit 从哪条记录开始, 每页显示的条数 且 默认第一条的值0

2.如果limit与order by连用时候,先排序再分页

五.函数的使用

1.单行函数

a.字符函数

(1)concat() 拼接字符串

(2)length()计算字符串的长度

(3)lower() upper()转换大小写

(4)replace()在指定的字符串中,将某子串替换为新的字符串

replace(目标字符串,查找的子串,新字符串)

(5)substring()截取子串

substring(目标字符串,开始位置,长度)

注意:开始索引是从1开始,不是0

b.数值函数

(1)abs()

作用:取绝对值

(2)pi()

作用:获取圆周率

(3)mod()

作用:取模

(4)pow()

作用:求一个数的n次方

(5)ceil() floor()

ceil():向上取整

floor():向下取整

(6)round()

round(num):返回四舍五入的整数

round(num,n):返回四舍五入n位小数

(7)truncate()

truncate(num,n) 其中n的取值可以是0,1,2..如果n取值为0代表截取整数

(8)rand()

作用:获取浮点类型的随机数,范围0-1.0 其中包括0但不包括1

c.日期时间函数

(1)now()获取当前日期和时间 包括年月日 时分秒

(2)curdate()获取当前日期 只包括年月日

(3)curtime()获取当前时间 只包括时分秒

(4)sysdate()获取函数执行时的日期和时间

now()获取SQL执行时的日期和时间

(5)dayofyear()获取某个日期是所在年份的第几天

week()获取某个日期是所在年份的第几周

(6)datediff()计算两个日期之间的时间间隔

例如:计算2019-1-1距离现在时间间隔

select datediff('2019-1-1',now())

(7)date_add() date_sub() 实现日期的加减运算

date_add(日期,时间间隔类型关键字interval 时间间隔类型对应的表达式 时间间隔类型)

例如 day_hour 1_12 代表 1天12小时

year_month 2_1 代表 2年1个月

e.流程控制函数

(1)if(条件,t,f) 如果条件成立返回t,否则返回f

(2)ifnull(值1,值2) 如果值1不为空则返回值1,否则返回值2

(3)nullif(值1,值2) 如果值1等于值2返回null,否则返回值1

(4) case 值

when 值1 then 结果1

when 值2 then 结果2

...

else 其他结果

end

例如: select case 1

when 1 then '结果是1'

when 2 then '结果是2'

else '其他结果'

end

(5) case

when 条件 then 结果1

when 条件 then 结果2

.....

else 其他结果

end

例如:查询雇员薪资 如果薪资>=3000返回 '高薪' 否则'低薪'

select sal,case

when sal>=3000 then '高薪'

else '低薪'

end '薪资水平'

from emp;

二.多行函数

1.多行函数:操作一组数据(多行记录) 返回一个结果 也叫分组函数

2.多行函数大多使用于统计

3.多行函数主要有:

(1)count()统计表中记录的数目

count()的使用

a.统计表中记录的总数目count(*)

例如查询雇员表中有多少条记录

select count(*) from emp;

b.count(exp)统计exp值非空的记录数目

例如:查询雇员表中有多少位雇员有津贴

select count(comm) from emp;

c.count(distinct(exp)) 返回表达式exp的值不重复且非空的总记录数目

例如:统计雇员表中有多少位雇员是领导

select count(distinct(mgr)) from emp;--统计的是除董事长外的领导人数

统计雇员表中所有领导

ifnull(值1,值2) 如果值1不为null返回值1 ,否则返回值2

select count(distinct(ifnull(mgr,1))) from emp;

(2)sum()

a.sum(exp):返回表达式值得总和

例如 select sum(sal) from emp;

b.sum(distinct(exp))返回不重复的表达式exp的总和

例如select sum(sal),sum(distinct(sal)) from emp;

(3)avg()

a.avg(exp):返回表达式值得平均值

例如: select avg(sal) from emp;

b.avg(distinct(exp)):返回不重复的表达式exp的平均值

例如 select avg(distinct(sal)) from emp;

(4)max() min()

max(exp):返回表达式值得最大值

min(exp):返回表达式值得最小值

例如select min(sal),max(sal) from emp;

三.分组统计

1.语法:

select 查询内容

from 表名

[where 条件]

[group by 分组字段名1,分组字段名2...]

[order by 字段名 asc|desc]

[limit]

2.使用举例

a.求每个部门的人数

select deptno,count(*) from emp group by deptno;

b.求每个部门的平均工资

select deptno,avg(sal) from emp group by deptno;

c.求每个部门中最高工资和人数

select deptno,max(sal),count(*) from emp group by deptno;

d.求每个岗位的人数

select job,count(*) from emp group by job

e.显示每个部门不同岗位的人数

select deptno,job,count(*) from emp group by deptno,job

3.注意

a.查询字段,如果没有在多行函数中包含,则必须是分组字段

select ename,job,sum(sal) from emp group by job;

b.如果没有group by ,查询字段不能与多行函数一起查询

select sal,empno from emp; 合法

select sum(sal),empno from emp; 不合法

c.不允许在where条件中使用多行函数

四.having子句

1.语法:

select 查询内容

from 表名

[where 条件]

[group by 分组字段]

[having 条件]

[order by]

select from --where过滤---group by--having过滤

2.使用举例

a.每个部门不同岗位的人数,且人数大于2

select count(*) from emp where count(*)>2 group by deptno,job

select count(*) from emp group by deptno,job having count(*)>2

b.在emp表中列出工资最小值小于2000的职位

--查询每个职位的最低薪资

select job,min(sal) from emp group by job;

select job,min(sal) from emp group by job having min(sal)<2000;

c.列出平均工资大于1200的部门和职位搭配组合

--求每个部门不同职位的平均工资

select avg(sal) from emp group by deptno,job

select avg(sal) from emp group by deptno,job having avg(sal)>1200

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值