欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL 數(shù)據(jù)庫(kù)約束、聚合查詢(xún)和聯(lián)合查詢(xún)使用案例

 更新時(shí)間:2024年08月27日 11:14:13   作者:一只淡水魚(yú)66  
這篇文章主要介紹了MySQL 數(shù)據(jù)庫(kù)約束、聚合查詢(xún)和聯(lián)合查詢(xún)使用案例,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧

數(shù)據(jù)庫(kù)約束

約束類(lèi)型

數(shù)據(jù)庫(kù)的約束類(lèi)型主要包括以下幾種:

  • 主鍵約束(Primary Key Constraint):確保表中的每一行都有唯一的標(biāo)識(shí),且不能為NULL。
  • 外鍵約束(Foreign Key Constraint):確保表中的數(shù)據(jù)與另一個(gè)表中的數(shù)據(jù)保持一致性,維護(hù)數(shù)據(jù)之間的關(guān)系。
  • 唯一約束(Unique Constraint):確保字段中的所有值都是唯一的,不允許重復(fù)。
  • 檢查約束(Check Constraint):限制某一列中的值符合特定條件,如數(shù)值范圍、字符串格式等。
  • 非空約束(NOT NULL Constraint):確保某一列不能包含NULL值,必須有實(shí)際數(shù)據(jù)。
  • 默認(rèn)約束(Default Constraint):為字段設(shè)置默認(rèn)值,在插入記錄時(shí)若未提供該字段的值,則會(huì)使用默認(rèn)值。

這些約束保證了數(shù)據(jù)庫(kù)中的數(shù)據(jù)完整性和一致性,是設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí)的重要組成部分。

使用案例

主鍵約束(Primary Key Constraint)
主鍵約束用于唯一標(biāo)識(shí)表中的每一行,并確保其值不為NULL。

CREATE TABLE Students (
    StudentID INT PRIMARY KEY,
    StudentName VARCHAR(20)
);

對(duì)于整數(shù)類(lèi)型的主鍵,常配搭自增長(zhǎng)auto_increment來(lái)使用。插入數(shù)據(jù)對(duì)應(yīng)字段不給值時(shí),使用最大值+1。

StudentID INT PRIMARY KEY auto_increment,

外鍵約束(Foreign Key Constraint)
外鍵約束用于維護(hù)不同表之間的關(guān)系,確保引用的數(shù)據(jù)存在。

CREATE TABLE Courses (
    CourseID INT PRIMARY KEY,
    CourseName VARCHAR(100)
);
CREATE TABLE Enrollments (
    EnrollmentID INT PRIMARY KEY,
    StudentID INT,
    CourseID INT,
    FOREIGN KEY (StudentID) REFERENCES Students(StudentID),
    FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)
);

 唯一約束(Unique Constraint)
唯一約束確保字段值的唯一性,不能重復(fù),但允許NULL值。

CREATE TABLE Users (
    UserID INT PRIMARY KEY,
    Email VARCHAR(100) UNIQUE
);

檢查約束(Check Constraint)
檢查約束用于確保字段值滿(mǎn)足特定條件。

CREATE TABLE Products (
    ProductID INT PRIMARY KEY,
    Price DECIMAL(10, 2) CHECK (Price >= 0)
);

非空約束(NOT NULL Constraint)
非空約束確保某一列的值不能為空。

CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    EmployeeName VARCHAR(100) NOT NULL
);

默認(rèn)約束(Default Constraint)
默認(rèn)值約束在插入新記錄時(shí)指定列的默認(rèn)值。

CREATE TABLE Orders (
    OrderID INT PRIMARY KEY,
    OrderDate DATETIME DEFAULT CURRENT_TIMESTAMP
);

這些約束在創(chuàng)建和管理數(shù)據(jù)庫(kù)表時(shí)非常重要,有助于維護(hù)數(shù)據(jù)的完整性和準(zhǔn)確性。

聚合查詢(xún)

聚合函數(shù)

常見(jiàn)的統(tǒng)計(jì)總數(shù)、計(jì)算平局值等操作,可以使用聚合函數(shù)來(lái)實(shí)現(xiàn),常見(jiàn)的聚合函數(shù)有:

  • COUNT():計(jì)算行數(shù)或非NULL值的數(shù)量。
  • SUM():計(jì)算數(shù)值型列的總和。
  • AVG():計(jì)算數(shù)值型列的平均值。
  • MAX():返回指定列中的最大值。
  • MIN():返回指定列中的最小值。
  • GROUP_CONCAT()(某些數(shù)據(jù)庫(kù)):將多行的值連接成一個(gè)字符串。
  • VARIANCE():計(jì)算數(shù)值型列的方差。
  • STDDEV():計(jì)算數(shù)值型列的標(biāo)準(zhǔn)差。

這些聚合函數(shù)用于對(duì)一組數(shù)據(jù)進(jìn)行匯總和分析,是數(shù)據(jù)庫(kù)查詢(xún)的重要工具。

使用案例

COUNT()
COUNT() 函數(shù)用于計(jì)算表中的行數(shù)或特定列中非NULL值的數(shù)量。

用法:

  • 計(jì)算總行數(shù):SELECT COUNT(*) FROM 表名;
  • 計(jì)算某列非NULL值的數(shù)量:SELECT COUNT(列名) FROM 表名

示例:

SELECT COUNT(*) FROM Employees;  -- 計(jì)算員工總數(shù)
SELECT COUNT(EmployeeID) FROM Employees;  -- 計(jì)算非NULL的員工ID數(shù)量

SUM()
SUM() 函數(shù)用于計(jì)算數(shù)值型列的總和。

用法:SELECT SUM(列名) FROM 表名;

示例:

SELECT SUM(Salary) FROM Employees;  -- 計(jì)算所有員工的工資總和

AVG()
AVG() 函數(shù)用于計(jì)算數(shù)值型列的平均值。

用法:SELECT AVG(列名) FROM 表名;

示例:

SELECT AVG(Salary) FROM Employees;  -- 計(jì)算所有員工的平均工資

MAX()
MAX() 函數(shù)用于返回指定列中的最大值。

用法:SELECT MAX(列名) FROM 表名;

示例:

SELECT MAX(Salary) FROM Employees;  -- 找到最高的工資

MIN()
MIN() 函數(shù)用于返回指定列中的最小值。

用法:SELECT MIN(列名) FROM 表名;

示例:

SELECT MIN(Salary) FROM Employees;  -- 找到最低的工資

這些聚合函數(shù)可以單獨(dú)使用,也可以與 GROUP BY 子句結(jié)合使用,以對(duì)結(jié)果進(jìn)行分組和匯總分析。

GROUP BY子句

SELECT 中使用 GROUP BY 子句可以對(duì)指定列進(jìn)行分組查詢(xún)。需要滿(mǎn)足:使用 GROUP BY 進(jìn)行分組查詢(xún)時(shí),SELECT 指定的字段必須是“分組依據(jù)字段”,其他字段若想出現(xiàn)在SELECT 中則必須包含在聚合函數(shù)中。

select column1, sum(column2), .. from table group by column1,column3;

HAVING 

GROUP BY 子句進(jìn)行分組以后,需要對(duì)分組結(jié)果再進(jìn)行條件過(guò)濾時(shí),不能使用 WHERE 語(yǔ)句,而需要用HAVING。

使用案例

下面是一個(gè)結(jié)合聚合函數(shù)、GROUP BY 和 HAVING 的使用案例。

假設(shè)我們有一個(gè)名為 Sales 的表,其中包含以下字段:

  • SalesID:銷(xiāo)售記錄的唯一標(biāo)識(shí)
  • SalesAmount:銷(xiāo)售金額
  • SalesPerson:銷(xiāo)售人員的名稱(chēng)
  • SalesDate:銷(xiāo)售日期

我們想要查詢(xún)每個(gè)銷(xiāo)售人員的總銷(xiāo)售金額和平均銷(xiāo)售金額,并且只返回那些總銷(xiāo)售金額超過(guò) 10,000 的銷(xiāo)售人員。

以下是相應(yīng)的 SQL 查詢(xún)示例:

SELECT 
    SalesPerson,
    SUM(SalesAmount) AS TotalSales,
    AVG(SalesAmount) AS AverageSales
FROM 
    Sales
GROUP BY 
    SalesPerson
HAVING 
    SUM(SalesAmount) > 10000;

在這個(gè)查詢(xún)中:

  • GROUP BY SalesPerson 將結(jié)果按銷(xiāo)售人員進(jìn)行分組。
  • SUM(SalesAmount) 計(jì)算每個(gè)銷(xiāo)售人員的總銷(xiāo)售金額。
  • AVG(SalesAmount) 計(jì)算每個(gè)銷(xiāo)售人員的平均銷(xiāo)售金額。
  • HAVING SUM(SalesAmount) > 10000 篩選出總銷(xiāo)售金額超過(guò) 10,000 的銷(xiāo)售人員。

這個(gè)案例展示了如何結(jié)合聚合函數(shù)和 GROUP BY 與 HAVING 條件來(lái)分析數(shù)據(jù)。

聯(lián)合查詢(xún)

實(shí)際開(kāi)發(fā)中往往數(shù)據(jù)來(lái)自不同的表,所以需要多表聯(lián)合查詢(xún)。多表查詢(xún)是對(duì)多張表的數(shù)據(jù)取笛卡爾積:

注意:關(guān)聯(lián)查詢(xún)可以對(duì)關(guān)聯(lián)表使用別名。

內(nèi)連接

select 字段 from 表1 別名1 [inner] join 表2 別名2 on 連接條件 and 其他條件;
select 字段 from 表1 別名1,表2 別名2 where 連接條件 and 其他條件;

外連接 

外連接分為左外連接和右外連接。如果聯(lián)合查詢(xún),左側(cè)的表完全顯示我們就說(shuō)是左外連接;右側(cè)的表完全顯示我們就說(shuō)是右外連接。

-- 左外連接,表1完全顯示
select 字段名  from 表名1 left join 表名2 on 連接條件;
-- 右外連接,表2完全顯示
select 字段 from 表名1 right join 表名2 on 連接條件;

自連接 

自連接是指在同一張表連接自身進(jìn)行查詢(xún)。

select 字段名 from 表1 as 別名 ,表1 as 別名 where 連接條件 and 其他條件;

聯(lián)合查詢(xún)使用案例

下面是一個(gè)關(guān)于數(shù)據(jù)庫(kù)中聯(lián)合查詢(xún)(也稱(chēng)為聯(lián)接查詢(xún))的案例,結(jié)合多個(gè)表進(jìn)行數(shù)據(jù)檢索。

假設(shè)我們有兩個(gè)表:

Customers 表

  • CustomerID:客戶(hù)唯一標(biāo)識(shí)
  • CustomerName:客戶(hù)姓名
  • ContactNumber:聯(lián)系方式

Orders 表

  • OrderID:訂單唯一標(biāo)識(shí)
  • OrderDate:訂單日期
  • CustomerID:關(guān)聯(lián)的客戶(hù)ID(外鍵)
  • TotalAmount:訂單總金額

我們希望查詢(xún)每個(gè)客戶(hù)的訂單信息,包括客戶(hù)姓名和訂單總金額。

以下是結(jié)合 INNER JOIN 的 SQL 查詢(xún)示例:

SELECT 
    Customers.CustomerName,
    Orders.TotalAmount
FROM 
    Customers
INNER JOIN 
    Orders ON Customers.CustomerID = Orders.CustomerID;

在這個(gè)查詢(xún)中:

  • INNER JOIN 用于將 Customers 表和 Orders 表連接起來(lái)。
  • 連接條件是 ON Customers.CustomerID = Orders.CustomerID,即通過(guò)客戶(hù)ID來(lái)匹配訂單和客戶(hù)信息。
  • 選擇了 Customers.CustomerName 和 Orders.TotalAmount 來(lái)顯示客戶(hù)姓名和相應(yīng)的訂單總金額。

這個(gè)案例展示了如何在數(shù)據(jù)庫(kù)中使用聯(lián)合查詢(xún)來(lái)獲取來(lái)自多個(gè)表的相關(guān)數(shù)據(jù)。

子查詢(xún)

子查詢(xún)是指嵌入在其他sql語(yǔ)句中的select語(yǔ)句,也叫嵌套查詢(xún)

1、單行子查詢(xún):返回一行記錄的子查詢(xún)

2、多行子查詢(xún):返回多行記錄的子查詢(xún)

  • [NOT] IN關(guān)鍵字
  • [NOT] EXISTS關(guān)鍵字

子查詢(xún)案例

下面是一個(gè)關(guān)于數(shù)據(jù)庫(kù)中子查詢(xún)的案例,展示如何使用子查詢(xún)來(lái)獲取相關(guān)數(shù)據(jù)。

假設(shè)我們有兩個(gè)表:

Employees 表

  • EmployeeID:?jiǎn)T工唯一標(biāo)識(shí)
  • EmployeeName:?jiǎn)T工姓名
  • DepartmentID:?jiǎn)T工所在部門(mén)的ID
  • Salary:?jiǎn)T工工資

Departments 表

  • DepartmentID:部門(mén)唯一標(biāo)識(shí)
  • DepartmentName:部門(mén)名稱(chēng)

現(xiàn)在,我們想要查詢(xún)那些工資高于該部門(mén)平均工資的員工姓名和工資。我們可以通過(guò)子查詢(xún)來(lái)實(shí)現(xiàn)這個(gè)目標(biāo)。

以下是相應(yīng)的 SQL 查詢(xún)示例:

SELECT 
    EmployeeName, 
    Salary 
FROM 
    Employees
WHERE 
    Salary > (
        SELECT 
            AVG(Salary) 
        FROM 
            Employees 
        WHERE 
            DepartmentID = Employees.DepartmentID
    );

在這個(gè)查詢(xún)中:

  • 外層查詢(xún)從 Employees 表中選擇 EmployeeName 和 Salary。
  • 子查詢(xún) (SELECT AVG(Salary) FROM Employees WHERE DepartmentID = Employees.DepartmentID) 計(jì)算每個(gè)部門(mén)的平均工資。
  • 外層查詢(xún)的 WHERE 子句中,條件 Salary > (子查詢(xún)) 用于過(guò)濾出工資高于該部門(mén)平均工資的員工。

這個(gè)案例展示了如何在數(shù)據(jù)庫(kù)中使用子查詢(xún)來(lái)進(jìn)一步篩選和獲取數(shù)據(jù)。

合并查詢(xún)

在實(shí)際應(yīng)用中,為了合并多個(gè)select的執(zhí)行結(jié)果,可以使用集合操作符 union,union all。使用UNION和UNION ALL時(shí),前后查詢(xún)的結(jié)果集中,字段需要一致。

union

該操作符用于取得兩個(gè)結(jié)果集的并集。當(dāng)使用該操作符時(shí),會(huì)自動(dòng)去掉結(jié)果集中的重復(fù)行。

union all

該操作符用于取得兩個(gè)結(jié)果集的并集。當(dāng)使用該操作符時(shí),不會(huì)去掉結(jié)果集中的重復(fù)行。

合并查詢(xún)案例

合并查詢(xún)通常是指使用 UNION 運(yùn)算符將多個(gè) SELECT 查詢(xún)的結(jié)果合并在一起。下面是一個(gè)關(guān)于數(shù)據(jù)庫(kù)中合并查詢(xún)的案例。

假設(shè)我們有兩個(gè)表:

Customers 表

  • CustomerID:客戶(hù)唯一標(biāo)識(shí)
  • CustomerName:客戶(hù)姓名
  • ContactNumber:聯(lián)系方式

Suppliers 表

  • SupplierID:供應(yīng)商唯一標(biāo)識(shí)
  • SupplierName:供應(yīng)商姓名
  • ContactNumber:聯(lián)系方式

我們希望從這兩個(gè)表中獲取所有聯(lián)系人姓名,無(wú)論是客戶(hù)還是供應(yīng)商??梢允褂?nbsp;UNION 查詢(xún)來(lái)合并兩個(gè)表中的聯(lián)系人的姓名。

以下是相應(yīng)的 SQL 查詢(xún)示例:

SELECT 
    CustomerName AS ContactName 
FROM 
    Customers
UNION
SELECT 
    SupplierName AS ContactName 
FROM 
    Suppliers;

在這個(gè)查詢(xún)中:

  • 第一個(gè) SELECT 查詢(xún)從 Customers 表中選取 CustomerName,并將其重命名為 ContactName。
  • 第二個(gè) SELECT 查詢(xún)從 Suppliers 表中選取 SupplierName,同樣將其重命名為 ContactName。
  • UNION 將兩個(gè)查詢(xún)的結(jié)果合并在一起,自動(dòng)去除重復(fù)的值。

請(qǐng)注意,使用 UNION 時(shí),兩個(gè)查詢(xún)的列數(shù)和數(shù)據(jù)類(lèi)型必須相匹配。

這個(gè)案例展示了如何在數(shù)據(jù)庫(kù)中使用合并查詢(xún)來(lái)獲取來(lái)自多個(gè)表的相關(guān)數(shù)據(jù)。

到此這篇關(guān)于MySQL 數(shù)據(jù)庫(kù)約束、聚合查詢(xún)和聯(lián)合查詢(xún)的文章就介紹到這了,更多相關(guān)mysql聚合查詢(xún)和聯(lián)合查詢(xún)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL基礎(chǔ)入門(mén)教程之事務(wù)

    MySQL基礎(chǔ)入門(mén)教程之事務(wù)

    事務(wù)主要用于處理操作量大,復(fù)雜度高的數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于MySQL基礎(chǔ)入門(mén)教程之事務(wù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • mysql優(yōu)化之like和=性能詳析

    mysql優(yōu)化之like和=性能詳析

    這篇文章主要給大家介紹了關(guān)于mysql優(yōu)化之like和=性能的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Ubuntu?18.04.4安裝mysql的過(guò)程詳解?親測(cè)可用

    Ubuntu?18.04.4安裝mysql的過(guò)程詳解?親測(cè)可用

    這篇文章主要介紹了Ubuntu?18.04.4安裝mysql-親測(cè)可用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • MySQL update set 和 and的區(qū)別

    MySQL update set 和 and的區(qū)別

    這篇文章主要介紹了MySQL update set 和 and的區(qū)別,幫助大家更好的理解和學(xué)習(xí)使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2021-05-05
  • pymysql.err.DataError:(1264, ")異常的有效解決方法(最新推薦)

    pymysql.err.DataError:(1264, ")異常的有效解決方法(最新推薦)

    遇到pymysql.err.DataError錯(cuò)誤時(shí),錯(cuò)誤代碼1264通常指的是MySQL數(shù)據(jù)庫(kù)中的Out of range value for column錯(cuò)誤,這意味著你嘗試插入或更新的數(shù)據(jù)超過(guò)了對(duì)應(yīng)數(shù)據(jù)庫(kù)列所允許的范圍,這篇文章主要介紹了pymysql.err.DataError:(1264, ")異常的有效問(wèn)題,需要的朋友可以參考下
    2024-05-05
  • 數(shù)據(jù)庫(kù)SQL調(diào)優(yōu)的幾種方式匯總

    數(shù)據(jù)庫(kù)SQL調(diào)優(yōu)的幾種方式匯總

    在項(xiàng)目中,SQL的調(diào)優(yōu)對(duì)項(xiàng)目的性能來(lái)講至關(guān)重要,所有掌握常見(jiàn)的SQL調(diào)優(yōu)方式是必不可少的,下面這篇文章主要給大家介紹了關(guān)于數(shù)據(jù)庫(kù)SQL調(diào)優(yōu)的幾種方式,需要的朋友可以參考下
    2022-10-10
  • 基于SQL中的數(shù)據(jù)查詢(xún)語(yǔ)句匯總

    基于SQL中的數(shù)據(jù)查詢(xún)語(yǔ)句匯總

    以下是對(duì)SQL中的數(shù)據(jù)查詢(xún)語(yǔ)句進(jìn)行了匯總介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-07-07
  • mac系統(tǒng)下mysql 8.0.11 安裝指南

    mac系統(tǒng)下mysql 8.0.11 安裝指南

    這篇文章主要為大家詳細(xì)介紹了mac系統(tǒng)下mysql 8.0.11 安裝指南,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • mysql把一個(gè)表某個(gè)字段的內(nèi)容復(fù)制到另一張表的某個(gè)字段的SQL語(yǔ)句寫(xiě)法

    mysql把一個(gè)表某個(gè)字段的內(nèi)容復(fù)制到另一張表的某個(gè)字段的SQL語(yǔ)句寫(xiě)法

    有時(shí)候,我們需要復(fù)制某個(gè)字段一整列的數(shù)據(jù)到另外一個(gè)新的字段中,或是需要把某個(gè)表的某個(gè)字段的值跨表復(fù)制到另一個(gè)表中的某個(gè)字段,本文就羅列了一些SQL語(yǔ)句寫(xiě)法,需要的朋友可以參考下
    2014-04-04
  • MySQL數(shù)據(jù)庫(kù)MyISAM存儲(chǔ)引擎轉(zhuǎn)為Innodb的方法

    MySQL數(shù)據(jù)庫(kù)MyISAM存儲(chǔ)引擎轉(zhuǎn)為Innodb的方法

    mysql數(shù)據(jù)庫(kù)存儲(chǔ)引擎為MyISAM的時(shí)候,在大訪問(wèn)量的情況下數(shù)據(jù)表有可能會(huì)出現(xiàn)被鎖的情況,這就會(huì)導(dǎo)致用戶(hù)連接網(wǎng)站時(shí)超時(shí)而返回502,此時(shí)就需要MySQL數(shù)據(jù)庫(kù)MyISAM存儲(chǔ)引擎轉(zhuǎn)為Innodb,這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)MyISAM存儲(chǔ)引擎轉(zhuǎn)為Innodb的方法,需要的朋友可以參考下
    2014-06-06

最新評(píng)論