国语自产精品视频在线看:您身边最放心的安全下载站! 最新软件|热门排行|软件分类|软件专题|厂商大全

国语自产精品视频在线看

技术教程
您的位置:首页数据库类SQL Server → SQL多表链接查询、嵌入SELECT语句的子查询技术

SQL多表链接查询、嵌入SELECT语句的子查询技术

我要评论 2013/01/10 16:07:01 来源:国语自产精品视频在线看 编辑:zbbingyang.com [ ] 评论:0 点击:542次

高级查询技术【jì shù】🔳主要是涉及多【shè jí duō】个表的😓链接查👐询技术【jì shù】🔳、嵌入🌑SELECT语句的子查询🦄技术【jì shù】,把多个查询联【chá xún lián】合起来【hé qǐ lái】的联合【de lián hé】技术【jì shù】等。

1. 连接查询

需要同时从两【liǎng】🎓个或者【gè huò zhě】连个以上的【yǐ shàng de】表【biǎo】🎆中检索数据【shù jù】👛。链接就【liàn jiē jiù】🐁是允许🚌同时从两【liǎng】🎓个表【biǎo】或者两【liǎng】个以上的【yǐ shàng de】表【biǎo】🎆中检索数据【shù jù】👛,指定这些表【biǎo】中的某个或者【gè huò zhě】某些列作为连接【wéi lián jiē】🏣条件。在👣SQL Server中,可以使用两【liǎng】种🕺连接语法的形【fǎ de xíng】式🍈,一种是🙏ANSI链接语法形式🎤,这是连【zhè shì lián】接条件【jiē tiáo jiàn】出现在【chū xiàn zài】👣FROM子句中👰;另外一种🕺SQL Server链接语法形式🎤,这是连【zhè shì lián】接条件【jiē tiáo jiàn】出现在【chū xiàn zài】👣WHERE条件中。

1. ANSI链接

链接错做可以【zuò kě yǐ】同时查🗒询两个或者多个表【duō gè biǎo】中的数据【de shù jù】,所生成【suǒ shēng chéng】🚞的结果【de jié guǒ】🎶集包含多个表【duō gè biǎo】中的字【zhōng de zì】段,需要使🍪用连个表中共🔐同拥有🏾的字段以连接多个表【duō gè biǎo】。

进行连➡接操作【jiē cāo zuò】时🌒,SQL一行一【yī háng yī】🏈行地比😸较所指【jiào suǒ zhǐ】定的字【dìng de zì】段,然后把🐡比较后【bǐ jiào hòu】的结果和满足【hé mǎn zú】条件的数据合并,并生成🐏新的记录。

有三种【yǒu sān zhǒng】连接方式🐀:内连接、外连接和交叉【hé jiāo chā】🛷连接。在一个SELECT语句中【yǔ jù zhōng】,可以连接多个【jiē duō gè】表;链接通过扩展SELECT语句的【yǔ jù de】💥FROM字句,增加了两个关🔴键字【jiàn zì】🕓:JOIN和🧐ON

JOIN:指定要了链接的表

ON:指定这些表共同拥有的字段

在表的【zài biǎo de】🏉主键和外部键😛的基础上【shàng】🌁,指定连接条件【jiē tiáo jiàn】。

ANSI链接语法形式如下所示:

SELECT table_name.column_name, table_name.column_name,……

FROM { table_name[ join_type] JOIN table_name  ON   search_conditions}

WHERE[ search_conditions]

其中【qí zhōng】⛑[ join_type ]可以为如下三【rú xià sān】个关键📧字形式:

INNER(内连接【nèi lián jiē】📆):链接查询结果集中仅包含满【bāo hán mǎn】足条件🙃的行,内连接【nèi lián jiē】📆是SQL Server缺省的【quē shěng de】连接方🚑式,可以把【kě yǐ bǎ】🐲INNER JOIN简写成【jiǎn xiě chéng】🐻 JOIN;

OUTER(外连接【wài lián jiē】🥜):链接【jiē】🥜查询结果🤡集中既包含哪【bāo hán nǎ】🐆些满足🔈条件的【tiáo jiàn de】行,还包含🤔其中某个表的全部行,有三种【yǒu sān zhǒng】形式的【xíng shì de】😍外连接【wài lián jiē】🥜:左外连接【wài lián jiē】🥜、右外连接【wài lián jiē】🥜、全外连接【wài lián jiē】🥜。

例如🏦:已经选🐬修了😎4号课程【hào kè chéng】的同学信息的【xìn xī de】示例,该示例涉及到了学生【le xué shēng】🥅表和选【biǎo hé xuǎn】修课:
SELECT 学生表

FROM  学生表📻  JOIN  选课表【xuǎn kè biǎo】   ON   学生表📻.学号【xué hào】  选课表【xuǎn kè biǎo】.学号【xué hào】

WHERE   选课表   课程号【kè chéng hào】📚=4

2. SQL Server链接【liàn jiē】💴

多表连【duō biǎo lián】🗃接,可以在【kě yǐ zài】🎸FROM子句后🐅直接指定多个【dìng duō gè】表,语义上表示从【biǎo shì cóng】这几个✖表的笛卡尔积中检索数据,可以用【kě yǐ yòng】📗WHERE子句设【zǐ jù shè】🚬定过滤条件。

SQL Server链接语【liàn jiē yǔ】⤵法形式如下:

SELECT  table_name.column_name,table_name.column_name,……

FROM { table_name,table_name,……}

WHERE table_name.column_name join_operator table_name.column_name

在此种【zài cǐ zhǒng】🏺语法形式中🗜,FROM子句列🎌出了连接时所【jiē shí suǒ】使用到的全部表名🐝,WHERE子句指定哪些【dìng nǎ xiē】行应该出现在【chū xiàn zài】⛵结果集【jié guǒ jí】🍳中,即用【jí yòng】🏳WHERE子句设定过滤【dìng guò lǜ】条件。在【zài】⛵WHERE子句中,在【zài】⛵两个连接的🕷列中使用链接运算符。  

例如【lì rú】:检索出【jiǎn suǒ chū】至少已🈴经有一【jīng yǒu yī】门课程及格的同学的🌟信息示🤶例:

  SELECT  DISTINCT   学生表【xué shēng biǎo】🚵   *

FROM  学生表【xué shēng biǎo】💨   选课表

WHERE   学生表【xué shēng biǎo】👏.学号【xué hào】🛁=选课表.学号【xué hào】🛁   AND  选课表.成绩=60

3. 子查询

子查询【zǐ chá xún】🐔是一系列SELECT语句【yǔ jù】⬆。SELECT语句【yǔ jù】⬆可以嵌套🌪在其他【zài qí tā】⏩许多语🏴句中【jù zhōng】,例如🔞SELECT、INSERT、UPDATE、DELETE等,这些嵌【zhè xiē qiàn】套的SELECT语句【yǔ jù】⬆就称为【jiù chēng wéi】子查询【zǐ chá xún】🐔。子查询【zǐ chá xún】🐔可以把一个复🍦杂的查询分解成一系👉列的逻【liè de luó】辑步骤😨,这样就可以用【kě yǐ yòng】🕍一个单个的语【gè de yǔ】句【jù】⬆解决一个复🍦杂的查询问题【xún wèn tí】♒。当一个查询依🛴赖于另一个查询的结果时,子查询【zǐ chá xún】🐔会很有👡用【yòng】。

使用子查询时,应注意:

子查询要用括号起来

只需要一个值或一系列的值,就可以【jiù kě yǐ】🧝用子查询代替⚡一个表【yī gè biǎo】🔫达式【dá shì】

子查询【zǐ chá xún】中不能查询包含数据【hán shù jù】👲类型是text或【huò】🍙image的字段🖊

子查询【xún】🏣中也可【zhōng yě kě】以再包含子查【hán zǐ chá】询【xún】🏣,嵌套可以多至🎌32层🍀

1. 把子查询用作派生的表

可以用【kě yǐ yòng】🤯子查询【zǐ chá xún】😫产生一【chǎn shēng yī】个派生【gè pài shēng】的表📌,用于代替🐢FROM子句中🍳的表📌。派生表🔲示【shì】FROM子句中🍳子查询【zǐ chá xún】😫的一个【de yī gè】特殊用法,用一个别名或【bié míng huò】🤯用户自定义的【dìng yì de】💰名字来【míng zì lái】引用这个派生【gè pài shēng】表🔲。FROM子句中🍳的子查询【zǐ chá xún】😫将返回一个结果集🔵,这个结【zhè gè jié】果集🔵所形成的🦗表将被🚛外层【wài céng】SELECT语句使【yǔ jù shǐ】用。

例如:内层查【chá】🗻询用子👮查【chá】询产生了一个派生【gè pài shēng】的表🐛,外层查【chá】🚤询将使【xún jiāng shǐ】🏁用内层【yòng nèi céng】查【chá】🗻询的结果集【guǒ jí】🐮。在功能【zài gōng néng】上,派生表本身就等同于一个完【yī gè wán】整的查【chá】询

SLECT  A  *

FROM  select   学号,姓名【xìng míng】,年龄【nián líng】💭  from   学生表♈

              Where  班级🚊=‘GZ02计【jì】6’  as   a

2. 把子查询用作表达式

在T-SQL中【zhōng】,所有使用表达🙅式【shì】📥的【de】🏰地方,都可以用子查【yòng zǐ chá】询来代🌂替【tì】🎺。此时子查询必须返回单个的【de】🕍值或某🥩一个字【yī gè zì】段的【de】🏰值。子查询可以返回一系【huí yī xì】列的【de】🏰值来代【zhí lái dài】替【tì】🏁出现在WHERE子句中【zhōng】的【de】🏰IN关键字【guān jiàn zì】的【de】表达🥁式【shì】📥。

例如:查询📼GZ02计【jì】7班同学的平均【de píng jun1】年龄🌒以及每个同学【gè tóng xué】年🤳龄与平均年龄【jun1 nián líng】🌒的差🥓

 SELECT  avg(年龄【nián líng】😬)  FROM 学生表🥎  as  平均年【píng jun1 nián】龄😬

其计算结果作【jié guǒ zuò】🍨为选择【wéi xuǎn zé】列表中的一个【de yī gè】输出列,并作为💕算术表【suàn shù biǎo】🔐达式的🔂一部分输出:

年龄【nián líng】-(SELECT avg(年龄【nián líng】)  FROM  学生表【xué shēng biǎo】📐)   as   年龄【nián líng】差🚓

3. 相关子查询

相关子【xiàng guān zǐ】🥧查询可【chá xún kě】被用作动态表【dòng tài biǎo】🏺达式【dá shì】🚝,这个表达式的【dá shì de】🈸值相对🌝于外层查【céng chá】🦏询的每【xún de měi】🔥一行而变化。查询【xún】处理器为🎠外层查【céng chá】🦏询的每【xún de měi】🔥一个记录计算子查询【zǐ chá xún】的值【de zhí】,一次一行,而这个子查询【zǐ chá xún】每次都会被作【huì bèi zuò】为一个【wéi yī gè】表达式【dá shì】🚝而被计算并返📶回给外层查【céng chá】🦏询【xún】。相关子【xiàng guān zǐ】🥧查询【xún】是动态执【dòng tài zhí】行的子🚗查询和【chá xún hé】♈外层查【céng chá】🦏询【xún】间的一个非常有效的联合。

使用相关子查【guān zǐ chá】🗑询时🥓,内层子【nèi céng zǐ】查询被反复执【fǎn fù zhí】💖行,外层查🏧询有多少记录【shǎo jì lù】,内层查询就被齿形多【chǐ xíng duō】💇少次。

例如【lì rú】♌:查询已【chá xún yǐ】选修课程号的【chéng hào de】1且成绩在🚩90分以上💙的同学的学号及姓名:

SELECT  学号   姓名【xìng míng】🛤

FROM   学生表【xué shēng biǎo】🛀

WHERE   90  <=(  SELECT  成绩【chéng jì】💐

                      FROM   选课表【xuǎn kè biǎo】🆒

                         WHERE  学生表【xué shēng biǎo】.学号【xué hào】🦗=选课表.学号【xué hào】🦗   AND   课程号=1)

4. 使用EXISTS和⏪NOT EXISTS操作符【cāo zuò fú】

在相关💪子查询中可以使用EXISTS和【hé】🍖NOT EXISTS操作符🍲判断某【pàn duàn mǒu】个值是【gè zhí shì】否在一🥄系列的【xì liè de】值中🏰。SQL Server处理带有【yǒu】EXISTS和【hé】🍖NOT EXISTS操作符🍲的子查【de zǐ chá】👤询时:

外层查询测试子查询返回的记录是否存在

基于查【jī yú chá】询所指【xún suǒ zhǐ】定的条件🚤,子查询⚽返回【fǎn huí】🛰TRUE或FALSE

子查询不产生任何数据

例如:同时选修了1号课程【hào kè chéng】和【hé】🌫2号课程【hào kè chéng】的同学【de tóng xué】🧝的信息🐩:

          SELECT  学号,姓名【xìng míng】🍳,班级

           FROM   学生表【xué shēng biǎo】🔳

               WHERE   EXISTS(SELECT  *   FROM  选课表【xuǎn kè biǎo】➡

                                    WHERE   学号【xué hào】🌨=学生表【xué shēng biǎo】🥢.学号【xué hào】🌨  AND  课程号=1)

              AND  EXISTS(SELECT  *  FROM  选课表【xuǎn kè biǎo】📸

                                WHERE   学号【xué hào】😄=学生表【xué shēng biǎo】.学号【xué hào】😄  AND   课程号=2)

① 找外层表“学生表🕹”的第1行📉,根据其【gēn jù qí】“学号🗿”值处理内层查【nèi céng chá】询【xún】

② 用外层【yòng wài céng】的🔃“学号【xué hào】🏼”与内层表【biǎo】🎷“选课表【biǎo】🎷”的🔃“学号【xué hào】🏼”比较,由此决【yóu cǐ jué】😞定外层条件的🔃真🛬、假👙,如果为【rú guǒ wéi】真🛬,则此记【zé cǐ jì】录为符【lù wéi fú】合条件🎱的🔃结果,反之,则不输出【chū】。

③ 顺序处理外层【lǐ wài céng】表🦌“学生表🦌”中的第2、3、4、。。。行【háng】🆓

检索出每一门选修课都几个的同学信息

SELECT * FROM  学生表【xué shēng biǎo】🗄    WHERE 

  NOT  EXISTS( SELECT * FROM  选课表【xuǎn kè biǎo】🔙

      

关键词【guān jiàn cí】😅:SQL

阅读本文后您有什么感想? 已有 人给出评价!

  • 0 欢迎喜欢
  • 0 白痴
  • 0 拜托
  • 0 哇
  • 0 加油
  • 0 鄙视