一:在查询中使用函数
函数分类:系统函数、字符串函数、日期函数、聚合函数与分组查询、数学函数、函数综合应用
1、 系统函数:
a) 系统函数用来获取有关SQL server中对象和设置的系统信息
系统函数 |
|
Convert( ) |
数据类型转换 |
Cast( ) |
数据类型转换,比convert语法简单,功能少 |
Current_user( ) |
返回当前登录的数据库用户名 |
Datalength( ) |
返回用于指定表达式的字节数 |
Host_name( ) |
返回当前用户所登录的计算机的名称 |
System_user( ) |
返回当前登录的系统用户名 |
User_name( ) |
从给定的用户ID中返回数据库用户名 |
2、 字符串函数
a) 字符串函数用户控制返回给用户的字符串,仅用于字符型数据
b) 几乎所有信息都需要转换为字符串才能正确显示
c) 字符串拼接:两个字符串之间使用“+”即可
字符串函数 |
|
Charindex( ) |
用来寻找一个指定的字符串在另一个字符串中的起始位置 |
Len( ) |
返回传递给他的字符串的长度 |
Upper( ) |
把传递给它的字符串转换为大写 |
Ltrim( ) |
清除字符左边的空格 |
Rtrim( ) |
清除字符右边的空格 |
Right( ) |
从字符串右边返回指定数目的字符 |
Replace( ) |
替换一个字符串中的字符 |
Stuff( ) |
在一个字符串中,删除指定位置指定长度的字符串,并在该位置插入一个新的字符串 |
3、 日期函数
a) 不能直接对日期运用数学函数,需要使用日期函数操作日期值
b) 日期函数帮助提取日期之中的日、月、年,以便分别操作它们
c) 手动输入日期时,必须要使用英文单引号,且必须书写成标准日期格式
d) 标准日期格式:”YYYY-MM-DD HH:MM:SS” 或 ”YYYY-MM-DD”
e) SQL server 系统默认会将字符串转换成日期类型
|
|
Getdate( ) |
取得当前的系统日期 |
Dateadd( ) |
添加指定的年(YY)、月(MM)、日(DD) |
Datediff( ) |
比较两个日期之间的指定日期部分的差 |
Datename( ) |
显示指定日期中特定部分的字符串 |
Datepart( ) |
显示日期中指定日期部分的整数形式 |
4、 聚合函数与分组查询
a) 聚合函数能够基于列进行计算,并返回单个值
b) 分组查询:将查询结果按条件分组,然后使用聚合函数返回每个组的汇总信息
c) 聚合函数:
- 常用的聚合函数有SUM( )、AVG( )、MAX( )、MIN( )、COUNT( )
- SUM( ):返回表达式中所有数值的总和
- AVG( ):返回表达式中所有数值的平均值
- MAX( ):返回表达式中的最大值,可用于数字型、字符型、日期/时间类型
- MIX( ):返回表达式中的最小值,可用于数字型、字符型、日期/时间类型
- COUNT( ):返回表达式中非空值的计数,用于数字和字符类型的列
d) 分组查询:
- 将表中的数据通过GROUP BY 子句分类组合,再根据需要得到统计信息。
- 如果需要对分组结果进行筛选,只显示满足限定条件的组,需要使用HAVING子句
- 当GROUP BY子句中使用HAVING子句时,查询结果只返回满足HAVING条件的组
- HAVING子句和WHERE子句的区别
- Where子句的作用是在对查询结果进行分组前,条件中不能包含聚合函数
- Having子句的作用是在分组之后筛选满足条件的组,
- 当where和having同在一个select语句中时,执行顺序为:where——group by——having
5、 数学函数
a) 数学函数用于对数值进行代数运算
数学函数 |
|
Abs( ) |
取绝对值 |
Ceiling( ) |
取大于或等于指定数值、表达式的最小整数 |
Floor( ) |
取小于或等于指定表达式的最大值 |
Fower( ) |
取数值表达式的幂值 |
Round( ) |
将数值表达式四舍五入为指定精度 |
Sign( ) |
对于正数返回+1,负数返回-1,0返回0 |
Sqrt( ) |
取浮点表达式的平方根。 |
二:使用T-SQL实现多表查询
如果一个查询需要对多个表进行操作,就称为联接查询
联接查询的结果集或结果称为表之间的联接
1、 表联接类型
分为内联接、外联接、交叉联接
a) 内联接
- 只返回两个数据集合之间匹配关系的行,将位于两个互相交叉的数据集合中重叠部分以内的数据行联接起来
- 使用比较运算符进行表间某列数据的比较操作,并列出这些表中与联接相匹配的数据行
b) 外联接
- 对内联接的扩充,除了将两个数据集合中重复部分以内的数据行联接起来之外,还可以根据要求返回左侧或右侧表中非匹配的数据或全部数据
- 外联接分为:左外联接、右外联接、全联接/完整外联接
- 左外联接
a) 左外连接的结果集包括左表的所有行。
b) 如果左表的某一行在右表中没有匹配行,则右表返回空值,否则返回相应值。
- 右外联接
a) 右外联接是左外联接的反向联接,将返回右表的所有行
b) 如果右表的某一行在左表中没有匹配行,则左表返回空值,否则返回相应值
- 全联接/完整外联接
a) 将返回左表和右表的所有行。
b) 当有一行在另一个表中没有匹配行时,另一个表返回空值,否则返回相应值
c) 交叉联接
- 交叉联接就是表之间没有任何关联条件,查询将返回左表和右表挨个联接的所有行
- 就是左表中的每行与右表中的所有行再一一组合,相当于两个表“相乘”