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开头的记录
已标记关键词 清除标记
相关推荐
列举了SQL语句中大部分常用函数 Abs(number) 取得数值的绝对值。 Asc(String) 取得字符串表达式的第一个字符ASCII 码。 Atn(number) 取得一个角度的反正切值。 CallByName (object, procname, usecalltype,[args()]) 执行一个对象的方法、设定或传回对象的属性。 CBool(expression) 转换表达式为Boolean 型态。 CByte(expression) 转换表达式为Byte 型态。 CChar(expression) 转换表达式为字符型态。 CDate(expression) 转换表达式为Date 型态。 CDbl(expression) 转换表达式为Double 型态。 CDec(expression) 转换表达式为Decimal 型态。 CInt(expression) 转换表达式为Integer 型态。 CLng(expression) 转换表达式为Long 型态。 CObj(expression) 转换表达式为Object 型态。 CShort(expression) 转换表达式为Short 型态。 CSng(expression) 转换表达式为Single 型态。 CStr(expression) 转换表达式为String 型态。 Choose (index, choice-1[, choice-2, ... [, choice-n]]) 以索引值来选择并传回所设定的参数。 Chr(charcode) 以ASCII 码来取得字符内容。 Close(filenumberlist) 结束使用Open 开启的档案。 Cos(number) 取得一个角度的余弦值。 Ctype(expression, typename) 转换表达式的型态。 DateAdd(dateinterval, number, datetime) 对日期或时间作加减。 DateDiff(dateinterval, date1, date2) 计算两个日期或时间间的差值。 DatePart (dateinterval, date) 依接收的日期或时间参数传回年、月、日或时间。 DateSerial(year, month, day) 将接收的参数合并为一个只有日期的Date 型态的数据。 DateValue(datetime) 取得符合国别设定样式的日期值,并包含时间。 Day(datetime) 依接收的日期参数传回日 ....
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页