SQL函数
一、 SQL函数
1、 字符串函数:
(1)ASCII 返回字符串表达式最左字符的ASCII代码值。 select ascii(‘A’);
(2)char 将int类型的ASCII转换成字符。
例如:char(64) –A;
select char(99) – 返回 c;
select char(9) – Tab符;
select char(10) – 换行符;
select char(13) – 回车符。
(3)charindex 返回字符串中指定表达式的起始位置。例如:select charindex(‘123’,‘ABC123DEF’,2) – 4。
(4)left 返回字符串左边开始指定个数的字符。例如:select left(‘123456’,3)。
(5)right 返回字符串右边开始指定个数的字符。例如:select right(‘123456’,3)。
(6)len 返回指定字符串的字符个数,其中不包含尾随空格。例如:select len(‘ABCDEF ‘) 结果为 6。
(7)lower 将大写字符串书转换为小写字符数据。例如: select lower(‘ABC’)–abc。
(8)upper 将小写字符串书转换为大写字符数据。
(9)ltrim 删除起始空格后返回字符表达式。例如:select ltrim(’ abc’)–abc。
(10)rtrim 截断所有尾部空格后返回一个字符串。例如:select rtrim(ltrim(’ abc ‘))。
(11)replace 用第三个表达式替换第一个字符串表达式中出现的所有第二个给定的字符串表达式。例如;select replace(‘123456789’,‘456’,‘123’)–123123789
(12)SubString():用于截取指定字符串。具有三个参数:select SUBSTRING(‘123456789’,4,3)。
(13)Coalesce():返回所有参数中的第一个非空(not null)表达式。该方法最多可以有 n 个参数,但是最少要有两个参数。例如:SELECT COALESCE(null,‘111’,‘123’,‘abc’)–111。
2、 数学函数:
(1)abs 返回给定数字表达式的绝对值。例如: select abs(’-123’)。
(2)rand 返回0-1直接随机float值。例如: select rand()*10。
(3)round 返回数字表达式并且进行四舍五入。例如:select cast(round(5.20000,0) as int)。3、日期时间函数:
(1)dateadd 在指定日期上加一段时间间隔,返回新的datetime值。它的表达式是: dataeadd(datepart,munber,date)。例如:select dateadd(d,5,getdate()) as ‘日期天数加5’ --d表示天数,M表示月 yy表示年。
(2) datepart 返回指定日期的指定日期部分的整数。表达式是: datepart(datepart ,date)。
(3)Day 返回代表指定日期的天数部分。语法: select day(getdate())。
(4)getdate 返回当前系统日期和时间。语法: select getdate()。
(5)getutcdate返回表示当前通过协调时间或格林尼治标准时间。语法:select getutcdate ()。
(6) month 返回指定日期月份整数。语法: select month(getdate())。
(7)year 返回指定日期年份整数。语法: select year(getdate())。
4、分组函数:
(1)Sum(和)-—对于NULL值默认为0。
(2)MAX(最大值)MIN(最小值)。例如:select max(salary),min(salary) from employees;
(3)AVG (平均值)—不统计空值,例如存在有四个人,但是只有三个人有成绩,平均成绩为:总和/3。
(4)COUNT(数量)。
(5)group by
(6)having
(7)查询语句的先后顺序:首先是from ;其次是where; 再次是group by; 然后是having; 其后是根据select 关键之后的要显示的字段,进行结果集显示;再后是order by对最终结果集进行排序;最后是top/dictinct。
二、SQL子查询
1、在查询语句中包含着有另外一条查询语句,被包含的查询语句称为子查询;包含着子查询的查询就称为父查询。
2、总而言之,子查询就是在查询语句里嵌套一条或者多条查询语句。
3、子查询 (内查询) 在主查询执行之前执行完,其结果传入主查询中,被主查询(外查询)使用。
4、单行子查询。例子:谁的工资比 Abel 高?
select * from 员工表名 where 工资列名>(select 工资列名 from 员工表名 where lower(last_name) = lower(‘Abel’));
5、多行子查询(in any all)。例子:返回其它部门中比job_id为‘IT_PROG’部门任一(比最高工资低)工资低的员工的员工号、姓名、job_id 以及工资。
select 员工号,姓名,job_id,工资 from 员工表名 where job_id <>‘IT_PROG’ and 工资列名 < any (select 工资列名 from 员工表名 where job_id = ‘IT_PROG’);
返回其它部门中比job_id为‘IT_PROG’部门任意(比最低工资还低)工资低的员工的员工号、姓名、job_id 以及工资。
select 员工号,姓名,job_id,工资 from 员工表名 where job_id <>‘IT_PROG’ and 工资列名 < all (select 工资列名 from 员工表名 where job_id = ‘IT_PROG’);
6、相关子查询。它是按照一行接一行的顺序执行的,即子查询取主查询表中的每一行数据值,主查询的每一行都执行一次子查询。
7、使用相关子查询,要考虑是否必须使用、是否合理,否则在不需要使用相关子查询的情况下,就能轻易得到查询结果的,使用相关子查询反而会使查询的效率下降。
8、EXISTS 操作符。它检查在子查询中是否存在满足条件的行。如果在子查询中存在满足条件的行,那么不在子查询中继续查找,条件返回 TRUE。如果在子查询中不存在满足条件的行,条件返回 FALSE,继续在子查询中查找。