T-SQL高级查询

一:在查询中使用函数

函数分类:系统函数、字符串函数、日期函数、聚合函数与分组查询、数学函数、函数综合应用

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) 聚合函数:

  1. 常用的聚合函数有SUM( )AVG( )MAX( )MIN( )COUNT( )
    1. SUM( ):返回表达式中所有数值的总和
    2. AVG( ):返回表达式中所有数值的平均值
    3. MAX( ):返回表达式中的最大值,可用于数字型、字符型、日期/时间类型
    4. MIX( ):返回表达式中的最小值,可用于数字型、字符型、日期/时间类型
    5. COUNT( ):返回表达式中非空值的计数,用于数字和字符类型的列

d) 分组查询:

  1. 将表中的数据通过GROUP BY 子句分类组合,再根据需要得到统计信息。
  2. 如果需要对分组结果进行筛选,只显示满足限定条件的组,需要使用HAVING子句
  3. GROUP BY子句中使用HAVING子句时,查询结果只返回满足HAVING条件的组
  4. HAVING子句和WHERE子句的区别
    1. Where子句的作用是在对查询结果进行分组前,条件中不能包含聚合函数
    2. Having子句的作用是在分组之后筛选满足条件的组,
    3. where和having同在一个select语句中时,执行顺序为:where——group by——having

5、 数学函数

a) 数学函数用于对数值进行代数运算

数学函数

Abs( )

取绝对值

Ceiling( )

取大于或等于指定数值、表达式的最小整数

Floor( )

取小于或等于指定表达式的最大值

Fower( )

取数值表达式的幂值

Round( )

将数值表达式四舍五入为指定精度

Sign( )

对于正数返回+1,负数返回-1,0返回0

Sqrt( )

取浮点表达式的平方根。

二:使用T-SQL实现多表查询

如果一个查询需要对多个表进行操作,就称为联接查询

联接查询的结果集或结果称为表之间的联接

1、 表联接类型

分为内联接、外联接、交叉联接

a) 内联接

  1. 只返回两个数据集合之间匹配关系的行,将位于两个互相交叉的数据集合中重叠部分以内的数据行联接起来
  2. 使用比较运算符进行表间某列数据的比较操作,并列出这些表中与联接相匹配的数据行

b) 外联接

  1. 对内联接的扩充,除了将两个数据集合中重复部分以内的数据行联接起来之外,还可以根据要求返回左侧或右侧表中非匹配的数据或全部数据
  2. 外联接分为:左外联接、右外联接、全联接/完整外联接
    1. 左外联接

a) 左外连接的结果集包括左表的所有行。

b) 如果左表的某一行在右表中没有匹配行,则右表返回空值,否则返回相应值。

  1. 右外联接

a) 右外联接是左外联接的反向联接,将返回右表的所有行

b) 如果右表的某一行在左表中没有匹配行,则左表返回空值,否则返回相应值

  1. 全联接/完整外联接

a) 将返回左表和右表的所有行。

b) 当有一行在另一个表中没有匹配行时,另一个表返回空值,否则返回相应值

c) 交叉联接

  1. 交叉联接就是表之间没有任何关联条件,查询将返回左表和右表挨个联接的所有行
  2. 就是左表中的每行与右表中的所有行再一一组合,相当于两个表“相乘”
原文地址:https://www.cnblogs.com/ccshi/p/13140399.html