国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SQL Server多數據表之間的數據查詢和分組查詢

這篇具有很好參考價值的文章主要介紹了SQL Server多數據表之間的數據查詢和分組查詢。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、多數據表之間的數據查詢

在SQL中,多數據表之間的查詢主要用于以下方面:
在SQL Server中,多數據表之間的數據查詢主要用于以下幾個方面:

  1. 關聯(lián)數據提取:現(xiàn)代數據庫通常將數據分散在多個相關的表中以便于管理。例如,訂單信息可能存儲在一個表中,而客戶信息可能存儲在另一個表中。為了獲取完整的訂單詳情,你可能需要從兩個表中提取并合并信息。

  2. 數據整合:多表查詢可用于整合來自不同數據源的信息,這對于報告和分析非常重要。比如,銷售報告可能需要結合產品、銷售和客戶表中的數據。

  3. 性能優(yōu)化:合理設計的數據庫模型會將數據分散在多個表中,以減少冗余和提高性能。通過多表查詢,可以有效地檢索分散的數據而無需過多冗余。

  4. 數據完整性:數據庫設計時通常會使用外鍵來維護不同數據表之間的關系,確保數據的一致性和完整性。多表查詢可以利用這些關系來確保查詢結果的準確性。

  5. 復雜的數據操作:多表查詢允許執(zhí)行復雜的數據操作,如連接(JOIN)、子查詢(subquery)、并集(UNION)等,以執(zhí)行復雜的業(yè)務邏輯和數據分析。

  6. 條件篩選:在多表查詢中,可以通過在 WHERE 子句中設定條件來篩選跨多個表的數據,以滿足特定的查詢需求。

多表之間的數據查詢主要有下面三種方式:
1.內連接查詢
2.左外連接查詢
3.右外連接查詢

還有一些延伸的的方式,作簡單介紹

1.1內連接查詢(Inner join)

內連接用來查詢兩個或多個表中存在匹配關系的記錄。僅返回在連接的表之間具有匹配值的行。既然是匹配關系,那也就是說內連接用于查找兩個表中都有的記錄,比如第一個表中有十行,那么響應的第二個表中也應該有十行與之對應。
語法格式:

select columns
from table1 
inner join table2 
on table1.column_name = table2.column_name;

最后一句解釋:
ON table1.column_name = table2.column_name 是 SQL 查詢中的一個語句片段,通常用在 JOIN 操作中,用來指定兩個數據表之間的連接條件。這個語句的意思是,系統(tǒng)在連接 table1table2 這兩張表時,會按照兩張表中的指定列 column_name 的值是否相等來確定哪些行之間應該被連接。

我們看一個具體的例子:
我們有兩張表,表一Students:
SQL Server多數據表之間的數據查詢和分組查詢,數據庫,oracle
表二ScoreList:

SQL Server多數據表之間的數據查詢和分組查詢,數據庫,oracle

用下列程序:

select ScoreList.StudentId,StudentName,Gender ,Csharp
from ScoreList 
inner join Students on Students.StudentId=ScoreList.StudentId
where CSharp>80

得到結果:
SQL Server多數據表之間的數據查詢和分組查詢,數據庫,oracle
就是說我們可以以兩個表上相同的列為橋梁將兩個表中我們想要的數據合到一張表上,而且兩張表無先后位置。

1.2 左外連接 (LEFT JOIN):

左外連接返回左表(FROM 子句中指定的表)的所有記錄以及右表中匹配的記錄。外連接(左、右、全)用于包含沒有匹配的行的情景如果左表的行在右表中沒有匹配,則結果集中這些行的右表部分為 NULL。語法:

select columns
from table1 
left join table2 
on table1.column_name = table2.column_name;

比如:table1(左表)是:
SQL Server多數據表之間的數據查詢和分組查詢,數據庫,oracle
table2(右表)是:
SQL Server多數據表之間的數據查詢和分組查詢,數據庫,oracle
我們看到右表比左表少了一行,所以自動補上了NULL
SQL Server多數據表之間的數據查詢和分組查詢,數據庫,oracle

1.3右外連接 (RIGHT JOIN):

右外連接與左外連接對應,返回右表的所有記錄以及左表中匹配的記錄。如果右表的行在左表中沒有匹配,則結果集中這些行的左表部分為 NULL。

select columns
from table1 
right join table2 
on table1.column_name = table2.column_name;

1.4. 全外連接 (FULL OUTER JOIN):

全外連接返回左表和右表中的所有記錄。當左表中的行在右表中沒有匹配時,或者右表中的行在左表中沒有匹配時,結果集會用 NULL 補充。

select columns
from table1 
full outer join table2 
on table1.column_name = table2.column_name;

1.5 交叉連接 (CROSS JOIN):

交叉連接返回兩個表中所有可能的行組合。如果第一個表有10行,第二個表有5行,交叉連接的結果將有50行。不常用

select columns
from table1 
cross join table2;

1.6 自連接 (SELF JOIN):

自連接是一種特殊形式的內連接或外連接,表與自身連接。不常用:

SQL Server 中的自連接(SELF JOIN)是一種特殊類型的連接,其中一個表會根據與自身的某些條件關聯(lián)來進行連接。自連接通常用于處理那些在同一表內部就需要關聯(lián)查詢的情況,比如層級數據、樹狀結構或是任何需要比較同一個表內兩個不同記錄的場景。

在自連接中,實際上是把同一個表當作是兩個獨立的表進行連接操作。雖然物理上只有一個表,但是通過給表使用不同的別名,可以在查詢中將其視為兩個不同的表。

舉個自連接的例子,假設我們有一個員工表 Employees,其中包含以下列:

  • EmployeeID (員工ID) - EmployeeName (員工姓名) - ManagerID (上級經理的員工ID)

在這種情況下,ManagerID 是這個員工的上級經理的 EmployeeID。我們想要列出所有員工及其對應的上級經理姓名。在這里,我們可以使用自連接來實現(xiàn)這個目標。

示例 SQL 查詢如下:

select
  e1.EmployeeName as EmployeeName,
  e2.EmployeeName as ManagerName
from
  Employees e1
left join Employees e2
  on e1.ManagerID = e2.EmployeeID;

在這個查詢中,Employees 表以 e1e2 兩個不同的別名存在。我們在查詢中使用 left join 自連接這個表,通過 e1.ManagerID = e2.EmployeeID 條件來找到員工的上級經理。e1 代表的是員工,而 e2 代表的是經理。left join 確保了即使某些員工沒有上級經理(ManagerIDNULL),他們的信息也會被列出。

結果將是一個兩列的列表,第一列是員工的姓名,第二列是他們經理的姓名。如果某個員工沒有經理,對應的 ManagerName 列會顯示為 NULL

1.7 子查詢:

子查詢可以在另一個查詢中使用,它可以從一個表中篩選數據,然后用來與另一個表比較或操作。

select columns
from table1
where column_name IN (SELECT column_name FROM table2 where condition);

二、分組查詢

2.1 分組查詢

在SQL Server Management Studio(SSMS)中,分組查詢主要通過group by 子句實現(xiàn)。group by子句通常與聚合函數(如COUNT()、SUM()AVG()、MAX()、MIN()等)一起使用,可以對一組行中的某些列進行分組,并對每個組進行聚合計算。

以下是一個簡單的分組查詢示例,假設有一個名為Sales的表,包含了Item、QuantitySaleDate三個字段:

Sales Table
-------------------------------------
| Item      | Quantity | SaleDate    |
-------------------------------------
| Pen       | 10       | 2023-01-01  |
| Notebook  | 20       | 2023-01-01  |
| Pen       | 5        | 2023-01-02  |
| Eraser    | 15       | 2023-01-02  |
| Notebook  | 30       | 2023-01-03  |
| Pen       | 10       | 2023-01-03  |
| Eraser    | 20       | 2023-01-03  |
-------------------------------------

我們運行以下SQL查詢:

select Item, SUM(Quantity) as TotalQuantity
from Sales
group by Item;

這個呢,將返回每個不同物品(Item)的總銷售數量(TotalQuantity)。結果如下所示:

Result
------------------------
| Item      | TotalQuantity |
------------------------
| Pen       | 25           |
| Notebook  | 50           |
| Eraser    | 35           |
------------------------

在這個結果中,PenTotalQuantity是25(10+5+10),NotebookTotalQuantity是50(20+30),而EraserTotalQuantity是35(15+20)。

如果我們還想過濾出總銷售數量大于30的物品,那就可以使用having子句,如下所示:

select Item, SUM(Quantity) as TotalQuantity
from Sales
group by Item
having SUM(Quantity) > 30;

此查詢將返回總銷售數量超過30的物品的列表。結果集將會是:

Result
------------------------
| Item      | TotalQuantity |
------------------------
| Notebook  | 50           |
| Eraser    | 35           |
------------------------

在這個結果中,只有NotebookEraser顯示在列表中,因為它們的TotalQuantity值分別是50和35,都大于30。

2.2 查詢重復數據

在SQL Server中,要篩選出重復的數據,可以使用group byhaving子句結合聚合函數。例如,我么想要找出Sales表中Item字段重復的記錄,可以使用以下查詢:

select Item, COUNT(*)
FROM Sales
GROUP BY Item
HAVING COUNT(*) > 1;

這個查詢是按Item分組的,然后數每個分組的行數。having count(*) > 1這個條件將篩選出那些行數大于1的分組,也就是那些有重復Item值的記錄。
在SQL中,COUNT(*)是一個聚合函數,用來計算某個結果集中的行數。它會包含所有的行,包括NULL值在內。這里使用COUNT(*) 來找出Sales表中Item字段重復的記錄。這里COUNT(*) 計算的是每個Item分組內的記錄數,然后使用having COUNT(*) > 1 來過濾,只顯示那些出現(xiàn)了不止一次的Item,這樣就能找出重復的記錄。

現(xiàn)在假設Sales表的內容如下所示:

Sales Table
-------------------------------------
| ID   | Item      | Quantity | SaleDate    |
-------------------------------------
| 1    | Pen       | 10       | 2023-01-01  |
| 2    | Notebook  | 20       | 2023-01-01  |
| 3    | Pen       | 5        | 2023-01-02  |
| 4    | Eraser    | 15       | 2023-01-02  |
| 5    | Notebook  | 30       | 2023-01-03  |
| 6    | Pen       | 10       | 2023-01-03  |
-------------------------------------

運行上述查詢后,會得到如下結果:

Result
------------------------
| Item      | (No column name)  |
------------------------
| Pen       | 3                 |
| Notebook  | 2                 |
------------------------

這個結果中顯示了PenNotebook是重復的,因為它們各自出現(xiàn)了3次和2次。

(不常用)如果我們還想要獲取到具體的重復記錄,可以使用子查詢或者with關鍵字(CTE,也就是公用表達式)來獲取這些數據。以下是使用子查詢的例子:

select *
from Sales
where Item in (
    select Item
    from Sales
    group by Item
    having COUNT(*) > 1
);

這個查詢返回了Item字段重復的所有記錄。

而下面是使用CTE的例子:

with DuplicateItems as (
    select Item, COUNT(*) AS Count
    from Sales
    group by  Item
    having COUNT(*) > 1
)
select s.*
from Sales s
Inner join DuplicateItems d on s.Item = d.Item;

這個查詢使用CTE先找出重復的Item,然后通過內連接返回Sales表中相關的所有記錄。

運行上述任一查詢后,你將會得到包含重復Item所有數據的結果集,它們都包含ItemPenNotebook的記錄。文章來源地址http://www.zghlxwxcb.cn/news/detail-820914.html

到了這里,關于SQL Server多數據表之間的數據查詢和分組查詢的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • HBase數據表查詢操作和獲取多版本數據

    HBase數據模型是一個多維稀疏映射。 HBase中的表包含列族,其列限定符包含值和時間戳。在大多數 HappyBase API 中,列族和限定符名稱被指定為單個字符串,例如cf1:col1,而不是作為兩個單獨的參數。雖然列族和限定符在 HBase 數據模型中是不同的概念,但它們在與數據交互時幾

    2024年02月15日
    瀏覽(23)
  • Mysql 查詢數據庫或數據表中的數據量以及數據大小

    ?許多數據庫的元數據都是存儲在mysql中的,例如hive、startrockes,因此可以通過mysql中的“information_schema.TABLES”表來查詢對應數據庫或對應數據表的具體信息。 1、查詢各個數據庫中的數據條數和數據大小 2、查詢各個數據表中的數據條數和數據大小 3、查看指定數據庫容量大小

    2024年04月27日
    瀏覽(96)
  • MySQL數據庫——MySQL SELECT:數據表查詢語句

    在?MySQL 中,可以使用 SELECT 語句來查詢數據。查詢數據是指從數據庫中根據需求,使用不同的查詢方式來獲取不同的數據,是使用頻率最高、最重要的操作。 SELECT 的語法格式如下: 其中,各條子句的含義如下: {*|字段列名} 包含星號通配符的字段列表,表示所要查詢字段的

    2024年02月05日
    瀏覽(232)
  • 8-MySQL查詢高級用法,數據表的關聯(lián)關系

    8-MySQL查詢高級用法,數據表的關聯(lián)關系

    1.分組 group by 詳情見,發(fā)布的第七篇博客文章,7- MySQL函數 2.排序 order by 說明: 在MySQL中,ORDER BY是一種用于對查詢結果進行排序的。它可以根據一列或多列的值,以升序或降序的方式對查詢結果進行排序,使得查詢者可以更加方便 地查看、分析和處理數據。 使用OR

    2024年02月08日
    瀏覽(30)
  • 查詢Oracle當前用戶下,所有數據表的總條數

    查詢Oracle當前用戶下,所有數據表的總條數

    查詢Oracle當前用戶下,所有數據表的總條數 方法1:存儲過程 (文末有方法2,一個SQL也可輕松搞定!) 右鍵點擊 Procedures ,點擊 New 點擊 OK 把存儲過程寫進去,然后點擊編譯運行: 3.2.1 方法一 方法2 點擊File -- New -- Test Window 寫入剛剛新增的存儲過程 方法2:SQL select sum(t.NUM_RO

    2024年02月12日
    瀏覽(29)
  • MySQL大數據表處理的三種方案,查詢效率嘎嘎高

    MySQL大數據表處理的三種方案,查詢效率嘎嘎高

    場景 當我們業(yè)務數據庫表中的數據越來越多,如果你也和我遇到了以下類似場景,那讓我們一起來解決這個問題 數據的插入,查詢時長較長 后續(xù)業(yè)務需求的擴展 在表中新增字段 影響較大 表中的數據并不是所有的都為有效數據 需求只查詢時間區(qū)間內的 評估表數據體量 我們可

    2024年02月13日
    瀏覽(20)
  • 【postgresql 基礎入門】數據表的查詢基本知識,條件過濾、單列多列排序、按頁瀏覽數據、數據去重,得到你想要的數據

    ? 專欄內容 : postgresql內核源碼分析 手寫數據庫toadb 并發(fā)編程 ? 開源貢獻 : toadb開源庫 個人主頁 :我的主頁 管理社區(qū) :開源數據庫 座右銘:天行健,君子以自強不息;地勢坤,君子以厚德載物. 入門準備 postgrersql基礎架構 快速使用 初始化集群 數據庫服務管理 psql客戶

    2024年02月07日
    瀏覽(118)
  • 【JaveWeb教程】(18) MySQL數據庫開發(fā)之 MySQL數據庫設計-DDL 如何查詢、創(chuàng)建、使用、刪除數據庫數據表 詳細代碼示例講解

    【JaveWeb教程】(18) MySQL數據庫開發(fā)之 MySQL數據庫設計-DDL 如何查詢、創(chuàng)建、使用、刪除數據庫數據表 詳細代碼示例講解

    下面我們就正式的進入到SQL語句的學習,在學習之前先給大家介紹一下我們要開發(fā)一個項目,整個開發(fā)流程是什么樣的,以及在流程當中哪些環(huán)節(jié)會涉及到數據庫。 2.1 項目開發(fā)流程 需求文檔: 在我們開發(fā)一個項目或者項目當中的某個模塊之前,會先會拿到產品經理給我們提

    2024年01月25日
    瀏覽(104)
  • 【QT性能優(yōu)化】QT性能優(yōu)化之QT6框架高性能模型視圖代理框架千萬級數據表分頁查詢優(yōu)化

    【QT性能優(yōu)化】QT性能優(yōu)化之QT6框架高性能模型視圖代理框架千萬級數據表分頁查詢優(yōu)化

    QT性能優(yōu)化之QT6框架高性能模型視圖代理框架千萬級數據表分頁查詢優(yōu)化 簡介 本文介紹了QT模型視圖代理框架中的QT表格控件和QT數據庫模塊中的QT數據庫查詢模型結合使用的一個應用實踐案例:QT高性能表格控件分頁展示千萬行數據。本文介紹了這個應用實踐案例的運行效果

    2024年02月14日
    瀏覽(32)
  • sql server創(chuàng)建數據表的完整語法

    復制 復制 復制 復制 復制 復制 復制 復制 復制 復制 復制 復制 復制 復制 復制 復制 復制 復制 復制 復制

    2024年02月15日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包