首頁 資料庫 mysql教程 SQL多表链接查询、嵌入SELECT语句的子查询技术

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

Jun 07, 2016 pm 04:18 PM
select 嵌入 科技 查詢 語句 連結

高级查询技术主要是涉及多个表的链接查询技术、嵌入SELECT语句的子查询技术,把多个查询联合起来的联合技术等。 1. 连接查询 需要同时从两个或者连个以上的表中检索数据。链接就是允许同时从两个表或者两个以上的表中检索数据,指定这些表中的某个或者某些列

  高级查询技术主要是涉及多个表的链接查询技术、嵌入SELECT语句的子查询技术,把多个查询联合起来的联合技术等。

  1. 连接查询

  需要同时从两个或者连个以上的表中检索数据。链接就是允许同时从两个表或者两个以上的表中检索数据,指定这些表中的某个或者某些列作为连接条件。在SQL Server中,可以使用两种连接语法的形式,一种是ANSI链接语法形式,这是连接条件出现在FROM子句中;另外一种SQL Server链接语法形式,这是连接条件出现在WHERE条件中。

  1. ANSI链接

  链接错做可以同时查询两个或者多个表中的数据,所生成的结果集包含多个表中的字段,需要使用连个表中共同拥有的字段以连接多个表。

  进行连接操作时,SQL一行一行地比较所指定的字段,然后把比较后的结果和满足条件的数据合并,并生成新的记录。

  有三种连接方式:内连接、外连接和交叉连接。在一个SELECT语句中,可以连接多个表;链接通过扩展SELECT语句的FROM字句,增加了两个关键字:JOIN和ON

  JOIN:指定要了链接的表

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

  在表的主键和外部键的基础上,指定连接条件。

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

  SELECT table_name.column_name, table_name.column_name,……

  FROM { table_name[ join_type] JOIN table_name ON search_conditions}

  WHERE[ search_conditions]

  其中[ join_type ]可以为如下三个关键字形式:

  INNER(内连接):链接查询结果集中仅包含满足条件的行,内连接是SQL Server缺省的连接方式,可以把INNER JOIN简写成 JOIN;

  OUTER(外连接):链接查询结果集中既包含哪些满足条件的行,,还包含其中某个表的全部行,有三种形式的外连接:左外连接、右外连接、全外连接。

  例如:已经选修了4号课程的同学信息的示例,该示例涉及到了学生表和选修课:

  SELECT 学生表

  FROM 学生表 JOIN 选课表 ON 学生表.学号 选课表.学号

  WHERE 选课表 课程号=4

  2. SQL Server链接

  多表连接,可以在FROM子句后直接指定多个表,语义上表示从这几个表的笛卡尔积中检索数据,可以用WHERE子句设定过滤条件。

  SQL Server链接语法形式如下:

  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

  在此种语法形式中,FROM子句列出了连接时所使用到的全部表名,WHERE子句指定哪些行应该出现在结果集中,即用WHERE子句设定过滤条件。在WHERE子句中,在两个连接的列中使用链接运算符。

  例如:检索出至少已经有一门课程及格的同学的信息示例:

  SELECT DISTINCT 学生表 *

  FROM 学生表 选课表

  WHERE 学生表.学号=选课表.学号 AND 选课表.成绩=60

  3. 子查询

  子查询是一系列SELECT语句。SELECT语句可以嵌套在其他许多语句中,例如SELECT、INSERT、UPDATE、DELETE等,这些嵌套的SELECT语句就称为子查询。子查询可以把一个复杂的查询分解成一系列的逻辑步骤,这样就可以用一个单个的语句解决一个复杂的查询问题。当一个查询依赖于另一个查询的结果时,子查询会很有用。

  使用子查询时,应注意:

  子查询要用括号起来

  只需要一个值或一系列的值,就可以用子查询代替一个表达式

  子查询中不能查询包含数据类型是text或image的字段

  子查询中也可以再包含子查询,嵌套可以多至32层

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

  可以用子查询产生一个派生的表,用于代替FROM子句中的表。派生表示FROM子句中子查询的一个特殊用法,用一个别名或用户自定义的名字来引用这个派生表。FROM子句中的子查询将返回一个结果集,这个结果集所形成的表将被外层SELECT语句使用。

  例如:内层查询用子查询产生了一个派生的表,外层查询将使用内层查询的结果集。在功能上,派生表本身就等同于一个完整的查询

  SLECT A *

  FROM select 学号,姓名,年龄 from 学生表

  Where 班级=‘GZ02计6’ as a

  2. 把子查询用作表达式

  在T-SQL中,所有使用表达式的地方,都可以用子查询来代替。此时子查询必须返回单个的值或某一个字段的值。子查询可以返回一系列的值来代替出现在WHERE子句中的IN关键字的表达式。

  例如:查询GZ02计7班同学的平均年龄以及每个同学年龄与平均年龄的差

  SELECT avg(年龄) FROM 学生表 as 平均年龄

  其计算结果作为选择列表中的一个输出列,并作为算术表达式的一部分输出:

  年龄-(SELECT avg(年龄) FROM 学生表) as 年龄差

  3. 相关子查询

  相关子查询可被用作动态表达式,这个表达式的值相对于外层查询的每一行而变化。查询处理器为外层查询的每一个记录计算子查询的值,一次一行,而这个子查询每次都会被作为一个表达式而被计算并返回给外层查询。相关子查询是动态执行的子查询和外层查询间的一个非常有效的联合。

  使用相关子查询时,内层子查询被反复执行,外层查询有多少记录,内层查询就被齿形多少次。

  例如:查询已选修课程号的1且成绩在90分以上的同学的学号及姓名:

  SELECT 学号 姓名

  FROM 学生表

  WHERE 90

  FROM 选课表

  WHERE 学生表.学号=选课表.学号 AND 课程号=1)

  4. 使用EXISTS和NOT EXISTS操作符

  在相关子查询中可以使用EXISTS和NOT EXISTS操作符判断某个值是否在一系列的值中。SQL Server处理带有EXISTS和NOT EXISTS操作符的子查询时:

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

  基于查询所指定的条件,子查询返回TRUE或FALSE

  子查询不产生任何数据

  例如:同时选修了1号课程和2号课程的同学的信息:

  SELECT 学号,姓名,班级

  FROM 学生表

  WHERE EXISTS(SELECT * FROM 选课表

  WHERE 学号=学生表.学号 AND 课程号=1)

  AND EXISTS(SELECT * FROM 选课表

  WHERE 学号=学生表.学号 AND 课程号=2)

  ① 找外层表“学生表”的第1行,根据其“学号”值处理内层查询

  ② 用外层的“学号”与内层表“选课表”的“学号”比较,由此决定外层条件的真、假,如果为真,则此记录为符合条件的结果,反之,则不输出。

  ③ 顺序处理外层表“学生表”中的第2、3、4、。。。行

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

  SELECT * FROM 学生表 WHERE

  NOT EXISTS( SELECT * FROM 选课表

  WHERE 学生表.学号=选课表.学号 AND 成绩

  AND EXISTS( SELECT * FROM 选课表

  WHERE 学生表.学号=选课表.学号)

  使用TOP限制结果集

  在使用SELECT语句进行查询时,有时我们希望列出前几个结果,而不是全部结果。例如,竞赛时,可能只取成绩最高的前三名,这时就需要使用TOP关键字来选取输出的结果

  使用TOP的格式为:

  SELECT TOP n[ percent] [with ties] 查询列表

  其中:

  n:为非负整数

  TOP n:表示取查询结果的前n行

  TOP n percent:表示取查询结果的前n%行

  With ties:表示包括并列的结果

  例如:检索出总分在前5位的同学的学号及其总分:

  SELECT TOP 5 WITH TIES 学号, SUM(成绩) AS 总分

  FROM 选课表

  GROUP BY 学号

  ORDER BY 总分 DESC

  使用TOP时,注意最好与ORDER BY子句一起使用,因为这样的前几名才有意义。但当使用WITH TIES时,要求必须使用ORDER BY子句

  合并多个结果集

  可以将两个或多个查询的结果组合为一个结果集,这就是合并多个届国际的含义。使用UNION可以实现合并多个查询结果集的目的。作用UNION的格式为:

  SELECT 语句1

  UNION

  SELECT 语句2

  UNION [ALL]

  ……

  SELECT 语句n

  使用UNION,应注意几点:

  在默认情况下,UNION运算符删除全部空余。如果使用ALL选项,那么空余行不删除:

  所有查询语句中的列数和列的顺序必须相同

  所有查询语句中的对应列的数据类型必须兼容

  如果在UNION语句中,包含一个ORDER BY子句,那么整个结果集都要排序

  在结果集中,列名来自第1个SELECT子句

  例如:对GZ02计6班和GZ02计7班学生的查询结果合并为一个结果集:

  SELECT * FROM 学生表 WHERE 班级=‘GZ02计6’

  UNION

  SELECT * FROM 学生表 WHERE 班级=‘GZ02计7’

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1422
52
Laravel 教程
1316
25
PHP教程
1267
29
C# 教程
1239
24
115://開頭的連結怎麼下載?下載方法介紹 115://開頭的連結怎麼下載?下載方法介紹 Mar 14, 2024 am 11:58 AM

  最近有很多用戶都在問小編,115://開頭的連結怎麼下載?想要下載115://開頭的連結需要藉助115瀏覽器,大家下載好115瀏覽器後,再來看看下面小編整理好的下載教學。  115://開頭的鏈接下載方法介紹  1、登入115.com,下載115瀏覽器並安裝。  2、在1​​15瀏覽器網址列輸入:chrome://extensions/,進入擴充中心,搜尋Tampermonkey,安裝對應插件。  3、在115瀏覽器網址列輸入:  油猴腳本:https://greasyfork.org/en/

如何取得微信影片號連結?微信影片號碼怎麼加入商品連結? 如何取得微信影片號連結?微信影片號碼怎麼加入商品連結? Mar 22, 2024 pm 09:36 PM

微信視訊號作為微信生態系統的一部分,已逐漸成為內容創作者和商家的重要推廣工具。在這個平台上獲取視頻號連結對於分享和傳播內容至關重要。下文將詳細介紹如何獲取微信視頻號鏈接,以及如何在視頻號中添加商品鏈接,提升內容的傳播效果。一、如何取得微信影片號連結?在微信視頻號中發布影片後,系統會自動建立一個影片連結。作者可以在發布後複製該鏈接,方便進行分享和傳播。登入微信影片號碼後,您可以瀏覽自己的影片號碼首頁。在主頁上,每個視頻都附有相應的鏈接,方便您直接複製或分享。 3.搜尋影片號碼:在微信搜尋框中輸入影片號名

DualBEV:大幅超越BEVFormer、BEVDet4D,開卷! DualBEV:大幅超越BEVFormer、BEVDet4D,開卷! Mar 21, 2024 pm 05:21 PM

這篇論文探討了在自動駕駛中,從不同視角(如透視圖和鳥瞰圖)準確檢測物體的問題,特別是如何有效地從透視圖(PV)到鳥瞰圖(BEV)空間轉換特徵,這一轉換是透過視覺轉換(VT)模組實施的。現有的方法大致分為兩種策略:2D到3D和3D到2D轉換。 2D到3D的方法透過預測深度機率來提升密集的2D特徵,但深度預測的固有不確定性,尤其是在遠處區域,可能會引入不準確性。而3D到2D的方法通常使用3D查詢來採樣2D特徵,並透過Transformer學習3D和2D特徵之間對應關係的注意力權重,這增加了計算和部署的

12306怎麼查詢歷史購票紀錄 查看歷史購票紀錄的方法 12306怎麼查詢歷史購票紀錄 查看歷史購票紀錄的方法 Mar 28, 2024 pm 03:11 PM

12306訂票app下載最新版是一款大家非常滿意的出行購票軟體,想去哪裡就去那裡非常方便,軟體內提供的票源非常多,只需要通過實名認證就能在線購票,所有用戶的出行車票機票都可以輕鬆買到,享受不同的優惠折扣。還能提前開啟預約搶票,預約飯店、專車接送都是可以的,有了它想去哪裡就去那裡一鍵購票,出行更加簡單方便,讓大家的出行體驗更舒服,現在小編在線詳細為12306用戶帶來查看歷史購票記錄的方法。  1.打開鐵路12306,點擊右下角我的,點擊我的訂單  2.在訂單頁面點擊已支付。  3.在已支付頁

學信網如何查詢自己的學歷 學信網如何查詢自己的學歷 Mar 28, 2024 pm 04:31 PM

學信網如何查詢自己的學歷?在學信網中是可以查詢到自己的學歷,很多用戶都不知道如何在學信網中查詢到自己的學歷,接下來就是小編為用戶帶來的學信網查詢自己學歷方法圖文教程,感興趣的用戶快來一起看看吧!學信網使用教程學信網如何查詢自己的學歷一、學信網入口:https://www.chsi.com.cn/二、網站查詢:第一步:點選上方學信網位址,進入首頁點選【學歷查詢】;第二步:在最新的網頁中點選如下圖箭頭所示的【查詢】;第三步:之後在新頁面點選【的登陸學信檔案】;第四步:在登陸頁面輸入資料點選【登陸】;

影片號掛連結需要什麼條件?影片號碼帶貨怎麼掛連結? 影片號掛連結需要什麼條件?影片號碼帶貨怎麼掛連結? Mar 07, 2024 pm 01:13 PM

隨著短影片平台的盛行,越來越多的創作者開始利用影片號碼來創作和推廣內容。視訊號碼不僅可以展示個人才能,還可以透過帶貨連結來實現商業變現。但是,要在視頻號中添加鏈接,必須符合一定的條件。一、影片號掛連結需要什麼條件?視訊號認證是在視訊號碼中加入連結的前提條件。目前,主要的短視訊平台如抖音、快手等都提供認證服務,主要包括個人認證和機構認證兩種類型。個人認證需要提交真實身份信息,而機構認證則需要提供相關企業或組織的認證材料。完成認證後,用戶可以在視頻號中添加鏈接,提升帳號的可信度和權威性。影片號碼掛連結的一個

綜述!深度模型融合(LLM/基礎模型/聯邦學習/微調等) 綜述!深度模型融合(LLM/基礎模型/聯邦學習/微調等) Apr 18, 2024 pm 09:43 PM

23年9月國防科大、京東和北理工的論文「DeepModelFusion:ASurvey」。深度模型整合/合併是一種新興技術,它將多個深度學習模型的參數或預測合併為一個模型。它結合了不同模型的能力來彌補單一模型的偏差和錯誤,以獲得更好的性能。而大規模深度學習模型(例如LLM和基礎模型)上的深度模型整合面臨一些挑戰,包括高運算成本、高維度參數空間、不同異質模型之間的干擾等。本文將現有的深度模型融合方法分為四類:(1)“模式連接”,透過一條損失減少的路徑將權重空間中的解連接起來,以獲得更好的模型融合初

MySQL與PL/SQL的異同比較 MySQL與PL/SQL的異同比較 Mar 16, 2024 am 11:15 AM

MySQL與PL/SQL是兩種不同的資料庫管理系統,分別代表了關係型資料庫和過程化語言的特性。本文將比較MySQL和PL/SQL的異同點,並附帶具體的程式碼範例進行說明。 MySQL是一種流行的關聯式資料庫管理系統,採用結構化查詢語言(SQL)來管理和操作資料庫。而PL/SQL是Oracle資料庫特有的過程化語言,用於編寫預存程序、觸發器和函數等資料庫物件。相同

See all articles