sql语句的几个常用函数总结

结构化查询语言(Structured Query Language,简称SQL语句)从单个函数的使用上来看,较为简单,但是当表与表嵌套、几个函数组合使用,即可实现强大的数据查询功能,能从数据库中快速便捷地获取需要的信息。
本文总结了sql语句中常用的5个函数,主要包含join连接函数、limit函数(MySQL)、group by分组函数、取余取整函数和like模糊匹配函数。

1.join连接

表连接分为内连接(INNER JOIN)、外连接(LEFT JOIN、RIGHT JOIN),在sql中如果直接使用join连接表,默认为inner join.

连接方式解释
INNER JOIN两边表同时有对应的数据,即任何一边缺失数据就不显示。
LEFT JOIN读取左边数据表的全部数据,即便右边表无对应数据。
RIGHT JOIN读取右边数据表的全部数据,即便左边表无对应数据。

示例:有员工部门表dept_emp(emp_no,dept_no),员工信息表employees,两张表都具有to_date属性表示当前日期。另外还有一张部门信息表departments(dept_no,dept_name)
(1)查询所有员工的姓名和部门编号,暂未划分到部门的不显示部门。对employees表进行left join操作。还可再次利用left join查询到部门名称。
select e.last_name,e.first_name,d.dept_no,dp.dept_name from employees e left join dept_emp d on e.emp_no = d.emp_noleft join departments dp on dp.dept_no = d.dept_no;
(2)加入限制条件–当前日期to_date=’2018-3-25’,所有员工的姓名和部门编号。注意连接表时,**需要对连接的表dept_emp,employees表分别进行当前日期的限制**dept_emp.to_date=2018-3-25’ and employees.to_date=2018-3-25’.
select e.last_name,e.first_name,d.dept_no from employees e left join dept_emp d on e.emp_no = d.emp_no and d.to_date=2018-3-25' and e.to_date=2018-3-25'.;

2.limit函数

limit函数是MySQL数据库提供的用来限制读取记录的条数的函数,常用语句为select .. from ..where …limit n,m
limit n,m 查找的是从n+1条开始的m条数据
limit 0,1 读取第一条数据
SELECT * FROM employees ORDER BY hire_date DESC LIMIT 2,2;读取按hire_date倒序排序后的第3,4条数据
若使用Oracle数据库,想获取特定条数的数据记录需要在原有sql语句上进行改进,通过行号row_number来实现特定条数的记录的查询。
SELECT * FROM
(SELECT A.*,rownum rn
FROM (SELECT * FROM employees ORDER BY hire_date DESC) A
WHERE rownum > 2)
WHERE rn < 5

附加一点日期排序的知识,对日期型数据,倒序排序结果为2018-4-8,2018-3-8,…
max(hire_date) 可表示最晚的一天2018-4-8

3.group by 分组函数

group by 是按表对象中的某一属性或者属性构成的表达式进行分组。通常的查询语句为
select…from…where…group by A having…
具体的应用示例如下:
titles表(emp_no,title,from_date,to_date)
(1)查询表titles中数量不小于2的title、title出现个数
select title,count(title) as t from titles group by title having count(title)>=2
(2)升级版,加入限制,要求查询表titles中数量不小于2的title、title出现个数时忽略重复的emp_no.
利用distinct关键字对重复的emp_no字段进行筛选后求取按title字段分组后title对应的数目。
值得注意的是,having的操作对象是group by+属性之后的查询得到的title,count(distinct(emp_no))构成的表。
select title,count(distinct(emp_no)) as t from titles group by title having t>=2
(3)group by A,B表示相同字段A,B的分为一组
group by from_date,to_date 表示具有相同from_date,to_date取值的记录分为一组。

4.取余、取整函数

(1) %取余、mod函数取余
牛客网中sql3.7.9的取余表达为%,A%B取余,表示求A除以B后的余数。SQK SERVER数据库中采用的是%.
Oracle中有mod取余函数,mod(A,B)求取A除以B的余数
(2)取整函数
floor(x):取小于等于x的最大整数,地板取整函数
ceiling(x):取大于等于x的最小整数,天花板取整函数

5.like函数

like函数后接通配符,进行模糊匹配,常用语句为:select .. from .. where A like 通配符
值得注意的是,sql语句通常不区分大小写,但通配符中的字符区分大小写
以下通配符经常单独或组合使用:

通配符含义用法示例
%百分号表示替代一个或多个字符‘Ne%’查找属性A的取值以Ne开头的记录,’%Ne%’查找属性A的取值包含’Ne’的记录
_下划线表示仅替代一个字符‘_ne’查找A的属性值第一个字符后是ne的记录,’z_z_h’查找A属性取值第一、三、五个字符为z,z,h,第二、四个字符任意取值的记录
[charlist]字符列中的任何单一字符[charlist]常与%组合使用,’[zh]%’表示匹配属性A取值以z、h开头的记录
[!charlist]不在字符列中的任何单一字符‘[!zh]%’表示匹配属性A取值以z、h开头的记录
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值