sql server 中的查询方式有 联合查询、子查询、嵌套子查询、xml 查询、for XML查询、exists关键字查询、交查询INSERSECT 、差查询EXCEPT
联合查询
注意: *注意两个结果必须在其目标列表中有相同数目的表达式,且数据内容尽量保持一致
这个相同数目是什么意思呢?往下看,你就会知道了!
如果我没有添加union,它就会出现两个表。
可是我添加了union,他又会报错,报的错就是 我的查询没有相同数目的表达式,为什么呢?因为上面的查询语句包括4列,而下面的只有1列,所以会出错。
又报错了!为什么???明明我已经用空值来代替,与上面查询了相同数目的列。
细看发现,上下查询的表不一样,上面的a表查询的都是text 类型,而下面的是int 类型。
换成一样的表之后,就可以了!
子查询
子查询也很好理解,就是在一个查询语句中又嵌套了一个查询。它有两种情况:
1.使用<> 来连接
2.使用 in 来连接
可是当我改成了in,他什么都没有查出来。这是怎么回事?
因为使用in关键字,返回的是一个数值列表,那么就不应该在查询分数这一列。
所以,当我换成了查询学号列后,就可以啦!
嵌套子查询
上面我们已经了解过了子查询,那么嵌套子查询是什么我们也就知道了,就是在子查询中再查询。
一开始的时候,我的嵌套只能查出序列,却怎么也不出结果,后来才知道是因为数据类型不对应,辅导员列我对应的是text 类型,而我查询的辅导员编号是integer类型,这样无法赋值,所以查不出结果。
XML查询
XML (extensible markup language)可扩展标记语言,标准通用标记语言的子集,简称XML。是一种用于标记电子文件使其具有结构性的标记语言。
可扩展标记语言与Access,Oracle和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:数据索引、排序、查找、相关一致性等,可扩展标记语言仅仅是存储数据。事实上它与其他数据表现形式最大的不同是:可扩展标记语言极其简单,这是一个看上去有点琐细的优点,但正是这点使它与众不同。
https://baike.baidu.com/item/可扩展标记语言/2885849?fromtitle=xml&fromid=86251&fr=aladdin
创建 插入 查询
for xml
RAW 模式
AUTO模式
这两种模式有什么区别呢?大家看出来了吗?
对!如果是raw模式的话,数据是以一整行的形式列出来,而auto模式,也就是默认模式的话,是有层次结构的。
path模式
path模式的话,不仅以层次结构展开,而且会显示row标记
explicit 模式
在 EXPLICIT 模式中,SELECT 语句中的前两列必须分别命名为 Tag 和 Parent。Tag 和 Parent 是元数据列,它们的值用来确定查询返回的 XML 文档中元素的父子关系,也就是嵌套。
exists 关键字
exists 关键字用来判断该查询是否有这样的结果
交查询
我们要使用交查询,就肯定要查询两次,这是第一次查询。
交查询后,就只剩下了一个结果。
差查询
上面交查询是将两次查询相同的结果留下来,而差查询是将两次查询后不同的结果留下来。
好了,查询终于写完了!可以开始下一章了!