首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

T-SQL基础(二)之关联查询

在上篇博文中介绍了T-SQL查询的基础知识,本篇主要介绍稍微复杂的查询形式。 表运算符 表运算符的作用是把为其提供的表作为输入,经过逻辑查询处理,返回一个表结果。...SQL Server支持四个表运算符:JOIN、APPLY、PIVOT、UNPIVOT,其中JOIN是标准SQL中的运算符,APPLY、PIVOT和UNPIVOT是T-SQL的扩展。...: [1240] 交叉联接 SQL中使用CROSS JOIN语句进行交叉联接查询,在逻辑处理上,交叉联接是最为简单的联接类型,它只获取表的笛卡尔乘积。...换句话说,外联接中ON子句的作用是进行表之间关联,如果外联接需要对结果集做进一步的筛选的话不能使用ON...AND...语句,而要使用WHERE条件。...通常,当SQL中出现多个表运算符时,从左到右进行逻辑处理,前一个联接的结果会作为下一个联接的左侧输入。

2.2K10

T-SQL基础(二)之关联查询

在上篇博文中介绍了T-SQL查询的基础知识,本篇主要介绍稍微复杂的查询形式。 表运算符 表运算符的作用是把为其提供的表作为输入,经过逻辑查询处理,返回一个表结果。...SQL Server支持四个表运算符:JOIN、APPLY、PIVOT、UNPIVOT,其中JOIN是标准SQL中的运算符,APPLY、PIVOT和UNPIVOT是T-SQL的扩展。...交叉联接 SQL中使用CROSS JOIN语句进行交叉联接查询,在逻辑处理上,交叉联接是最为简单的联接类型,它只获取表的笛卡尔乘积。...换句话说,外联接中ON子句的作用是进行表之间关联,如果外联接需要对结果集做进一步的筛选的话不能使用ON...AND...语句,而要使用WHERE条件。...通常,当SQL中出现多个表运算符时,从左到右进行逻辑处理,前一个联接的结果会作为下一个联接的左侧输入。

2.1K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)

    如果你使用的是2005及以下版本,你需要多个INSERT语句。最后的执行结果如下图所示: ?   (2)需求说明   假设我们要生成一个报表,包含每个员工和客户组合之间的总订货量。...(4)使用T-SQL PIVOT运算符进行透视转换   自SQL Server 2005开始引入了一个T-SQL独有的表运算符-PIVOT,它可以对某个源表或表表达式进行操作、透视数据,再返回一个结果表...在PIVOT运算符的圆括号后面,可以为结果表制定一个别名。...MERGE语句是SQL标准的一部分,而T-SQL版本的MERGE语句也增加了一些非标准的扩展。   ...代码地服务器端例程,可以有输入和输出参数,可以返回多个查询的结果集。

    9K20

    SQL Server存储过程多角度介绍建议收藏

    存储过程可包含逻辑控制语句和数据操作语句,它可以接收参数、输出参数、返回单个或多个结果集以及返回值。...但如果使用T-SQL批处理代码,每次运行T-SQL语句时,都要从客户端重复发送,并且在SQL-Server每次执行这些语句时,都要对其进行编译和优化。...3>减少网络流量 创建使用存储过程后,一个需要数百行T-SQL代码的操作,由一条执行该过程代码的单独语句就可实现,而不需要在网络中发送数百行代码 4>可作为安全机制使用 即使对于没有直接执行存储过程中语句的权限的用户...或使用T-SQL语句,使用Microsoft SQL Management Studio创建存储过程的步骤类似于视图,用于创建存储过程的T-SQL语句为CREATE PROCEDURE。...创建不带参数的存储过程: 使用T-SQL语句创建存储过程的语法如下: CREATE PROC[EDURE] 存储过程名 AS SQL语句 调用存储过程: EXEC

    1.3K10

    T-SQL基础(一)之简单查询

    SQL表达式运算 谓词 SQL中谓词是指运算结果为True,False或Unknown的逻辑表达式。T-SQL中的谓词有IN,BETWEEN,LIKE等。...如:LIKE '%x' 运算符 SQL中的运算符与高级编程语言(C#,JAVA)类似。当多个运算符出现在同一表达式中时,SQL Server会按照运算符的优先级进行计算。...NULL GROUP BY和ORDER BY子句会将多个NULL值视为相等 标准SQL的UNIQUE约束认为NULL是为彼此不同 T-SQL中的UNIQUE约束认为多个NULL是相等的 COUNT(*)...SELECT语句用于指定返回到查询结果集中的列,生成查询结果表。注意,在SELECT子句之前执行的子句无法使用SELECT子句中的列的别名,否则会返回Invalid column name错误。...如,WHERE子句中的多个表达式的计算并没有确定的顺序。 CASE...WHEN... CASE表达式是标量表达式,返回一个符合条件的值。注意,CASE是表达式,不是语句,与COUNT类似。

    4.2K20

    MSSQL之九 存储过程与函数

    为了创建批处理,你可以写出多个SQL语句,后面在结尾跟着关键字Go,Go是一个命令,它指定批处理的结束。 ​...常用的系统存储过程 Ø ​定义不带参数存储过程的语法​ ​ ​ CREATE PROCEDURE 存储过程名 AS --注释:表示后面是存储过程要执行的语句...END块,它保存一系列T-SQL语句以创建和插入行盗临时表。临时表被在结果集中返回,并且基于函数中提到的规范创建。 ​...6、CASE语句求一系列条件的值并且返回各种可能结果中的一个。 7、你可以在批处理中使用WHILE语句以允许一系列T-SQL语句重复执行,只要给定条件为真。...16、存储过程使用alter procedute语句执行修改 17、用户定函数是一个数据库对象,它包含一系列T-SQL语句。 18、用户定义函数可以返回一个单一标量值或结果集。

    10710

    那些年我们写过的T-SQL(上篇)

    此外,该字句中可以使用不在SELECT列表中的字段排序,但如果使用了DISTINCT关键字,则必须使用SELECT列表中的列,否则由于单个结果行可能代表多个原行,造成排序的不清晰。...在某个条件(比如order by日期)下,有多个符合条件的记录时,这几个结果集的顺序是不一定的(已实际访问的物理记录行的顺序为准),属于不稳定排序。...,此外还是APPLY、PIVOT、UNPIVOT等操作符,之后会介绍。...交叉联接:只包含笛卡尔乘积阶段,比如一张表A有m行,表B有n行,其结果集有m*n行记录。该类型使用场景非常少,但其中有2个场景还是需要知道的。...第二是只要涉及多个表一定要习惯与使用别名,不然很容易出现因细微字母差异而造成的SQL语句错误。

    3.2K100

    《T-SQL查询》读书笔记Part 1.逻辑查询处理知多少

    一、关于T-SQL   T-SQL是ANSI和ISO SQL标准的MS SQL扩展,其正式名称为Transact-SQL,但一般程序员都称其为T-SQL。...(1-J1)笛卡尔积:对涉及到的两个表执行笛卡尔积(交叉联接),生成虚拟表VT1-J1。 (1-J2)ON筛选器:对VT1-J1中的行根据ON子句中出现的谓词进行筛选。...(2)WHERE:根据在WHERE子句中出现的谓词对VT1中的行进行筛选。只有让谓词计算结果为TRUE的行,才会插入VT2中。   ...(3)GROUP BY:按照GROUP BY子句中指定的列名列表,将VT2中的行进行分组,生成VT3。最终,每个分组只有一个结果行。   ...这里我们要查询来自Madrid并且订单数少于3个的客户,查询代码和结果也如下图所示: ?

    1.1K40

    sql调用存储过程exec用法_sqlserver存储过程执行日志

    大家好,又见面了,我是你们的朋友全栈君。 一、【存储过程】 存储过程的T-SQL语句编译以后可多次执行,由于T-SQL语句不需要重新编译,所以执行存储过程可以 提高性能。...存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指 定存储过程的名称并给出参数来执行。...存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果 集以及返回值。...语句 [ end ] 2、使用存储过程 使用T-SQL中的EXECUTE(或EXEC)语句可以执行一个已定义的存储过程。...----------------------------------------------------------- -- 自定义存储过程 select *from student -- 1、创建不带参数的存储过程

    3.5K10

    那些年我们写过的T-SQL(中篇)

    本系列包含上中下三篇,内容比较驳杂,望大家耐心阅读: 那些年我们写过的T-SQL(上篇):上篇介绍查询的基础,包括基本查询的逻辑顺序、联接和子查询 那些年我们写过的T-SQL(中篇):中篇介绍表表达式、...在对两个(或多个)查询结果集进行集合操作时,需要注意其中的查询并不支持ORDER BY操作,如果还是需要这样的功能可以使用外部的ORDER BY或者是使用TOP等操作符将返回的游标转化为结果集。...ALL的结果是2条。...PIVOT透视 PIVOT实际是一个表运算符,包含分组、扩展、聚合三个逻辑阶段 SELECT empid, A, B, C, D FROM ( SELECT empid, custid, qty FROM...分组集 分组集就是一个属性集,分组GROUP BY字句只支持在一个查询中使用一种分组方式,如果需要多种分组的结果就需要通过UNION ALL将多个分组聚合起来,为了字段对应,需要为部分列设置NULL

    3.7K70

    《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)

    2.2 联接查询   (1)交叉联接:返回笛卡尔积,即m*n行的结果集 -- CROSS JOIN select c.custid, e.empid from sales.Customers as c...(3)外联结:笛卡尔积→对结果过滤→添加外部行   通过例子来理解外联结:根据客户的客户ID和订单的客户ID来对Customers表和Orders表进行联接,并返回客户和他们的订单信息。...该查询语句使用的联接类型是左外连接,所以查询结果也包括那些没有发出任何订单的客户; --LEFT OUTER JOIN select c.custid,c.companyname,o.orderid from...在T-SQL中。UNION集合运算可以将两个输入查询的结果组合成一个结果集。需要注意的是:如果一个行在任何一个输入集合众出现,它也会在UNION运算的结果中出现。...在T-SQL中,INTERSECT集合运算对两个输入查询的结果取其交集,只返回在两个查询结果集中都出现的行。

    2K51

    图解SQL查询处理的各个阶段

    SQL与其它编程语言不同的最明显特征就是代码的执行顺序,在大多数编程语言中,代码是按照编写顺序来执行的,但在SQL中,第一个要执行的子句是FROM子句,尽管SELECT 语句第一个出现,但是几乎总是放在最后执行...(1)FROM FROM 阶段主要标明查询语句的来源表,如果是单表就表示不存在表运算符会直接跳转到WHERE子句; 如果存在表运算符,则会根据每个表运算符执行一些列的子阶段,例如,在连接运算汇总涉及的阶段有...(1-J1)笛卡尔积 这个阶段对表运算符涉及的两个表执行笛卡尔积(cross join),会生成虚表VT1-J1。...(3)GROUP BY 在GROUP BY阶段,按照GROUP BY子句中指定的列名,将VT2中的行进行分组,生成VT3,最终每个分组只有几个结果行。...-3)中的行进行排序,生成游标VT6 至此,整个SQL查询过程执行结束,最终返回VT6的结果给SQL发起者。

    14310

    Mysql性能优化二:索引优化

    不要过多创建索引,除了增加额外的磁盘空间外,对于DML操作的速度影响很大,因为其每增删改一次就得从新建立索引。 使用组合索引,可以减少文件索引大小,在使用时速度要优于多个单列索引。...执行 T-SQL 时,MYSQL 很快将目标锁定在了 vc_Name=erquan 的 5 条记录上,取出来放到一中间结果集。...执行 T-SQL 时,MySQL 无须扫描任何记录就到找到唯一的记录!...所以我们建议在多表join的时候尽量少join几张表,因为一不小心就是一个笛卡尔乘积的恐怖扫描,另外,我们还建议尽量使用left join,以少关联多。...但是,在互联网应用中,查询的语句远远大于DML的语句,甚至可以占到80%~90%,所以也不要太在意,只是在大数据导入时,可以先删除索引,再批量插入数据,最后再添加索引。

    64130

    Mysql性能优化二:索引优化

    不要过多创建索引,除了增加额外的磁盘空间外,对于DML操作的速度影响很大,因为其每增删改一次就得从新建立索引。 使用组合索引,可以减少文件索引大小,在使用时速度要优于多个单列索引。...执行 T-SQL 时,MYSQL 很快将目标锁定在了 vc_Name=erquan 的 5 条记录上,取出来放到一中间结果集。...执行 T-SQL 时,MySQL 无须扫描任何记录就到找到唯一的记录!...所以我们建议在多表join的时候尽量少join几张表,因为一不小心就是一个笛卡尔乘积的恐怖扫描,另外,我们还建议尽量使用left join,以少关联多。...但是,在互联网应用中,查询的语句远远大于DML的语句,甚至可以占到80%~90%,所以也不要太在意,只是在大数据导入时,可以先删除索引,再批量插入数据,最后再添加索引。

    59020
    领券