最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

SQL數(shù)據(jù)庫增刪改查基本操作及C#開發(fā)使用方法

2023-09-04 19:00 作者:砍砍學(xué)渣  | 我要投稿


基本了解

SQL(Structured Query Language)是用于訪問和處理關(guān)系型數(shù)據(jù)庫的標(biāo)準(zhǔn)計算機語言。它包括數(shù)據(jù)定義語言(DDL)、數(shù)據(jù)操作語言(DML)和數(shù)據(jù)庫控制功能(DCL)。SQL的主要功能包括查詢數(shù)據(jù)、在表中插入、更新和刪除行、創(chuàng)建、替換、更改和刪除對象,以及控制對數(shù)據(jù)庫及其對象的訪問。

SQL是所有關(guān)系數(shù)據(jù)庫通用的標(biāo)準(zhǔn)語言,但某些關(guān)系數(shù)據(jù)庫可能不支持SQL中的少數(shù)語句。關(guān)系數(shù)據(jù)庫會在SQL基礎(chǔ)上進(jìn)行一些擴(kuò)展,增加一些額外的功能,這些額外的功能是該種關(guān)系數(shù)據(jù)庫特有的,只能在該種數(shù)據(jù)庫中使用。

常見的關(guān)系型數(shù)據(jù)庫有Oracle和MySQL。Oracle性能極好,但比較昂貴,大公司用得多;MySQL則是開源免費,體積小,性能也不錯,中小公司用得多。

數(shù)據(jù)表是存儲數(shù)據(jù)的邏輯單元,每一行稱為一條記錄,每一列稱為一個字段。主鍵是唯一標(biāo)識此條記錄的鍵。

總之,SQL是一種用于管理關(guān)系型數(shù)據(jù)庫的標(biāo)準(zhǔn)計算機語言,具有豐富的功能和靈活性,廣泛應(yīng)用于各種關(guān)系型數(shù)據(jù)庫系統(tǒng)。

?

SQL是關(guān)系型數(shù)據(jù)庫的標(biāo)準(zhǔn)語言,用于執(zhí)行各種數(shù)據(jù)庫操作,例如增刪改查數(shù)據(jù)、定義數(shù)據(jù)庫結(jié)構(gòu)等。MySQL是一種具體的實現(xiàn),提供了關(guān)系型數(shù)據(jù)庫的管理功能,例如創(chuàng)建表、存儲數(shù)據(jù)、優(yōu)化查詢等。

在MySQL中,通過使用SQL語言,可以執(zhí)行各種數(shù)據(jù)庫操作,例如創(chuàng)建表、插入數(shù)據(jù)、查詢數(shù)據(jù)、更新數(shù)據(jù)等。因此,SQL和MySQL之間是一種語言和實現(xiàn)的關(guān)系,它們共同提供了關(guān)系型數(shù)據(jù)庫的功能。

除了SQL數(shù)據(jù)庫,還有許多其他常用的數(shù)據(jù)庫,以下列舉幾種常見的數(shù)據(jù)庫類型:

1、NoSQL數(shù)據(jù)庫:NoSQL數(shù)據(jù)庫是一種非關(guān)系型數(shù)據(jù)庫,它使用鍵值對(key-value)或者文檔(document)的形式存儲數(shù)據(jù),不需要事先定義數(shù)據(jù)模型。常見的NoSQL數(shù)據(jù)庫包括MongoDB、Cassandra、Redis等。

2、列式數(shù)據(jù)庫:列式數(shù)據(jù)庫是一種針對大規(guī)模數(shù)據(jù)處理和實時分析的數(shù)據(jù)庫,它將數(shù)據(jù)按照列進(jìn)行存儲,以便更快速地執(zhí)行查詢和計算操作。常見的列式數(shù)據(jù)庫包括Cassandra、HBase等。

3、內(nèi)存數(shù)據(jù)庫:內(nèi)存數(shù)據(jù)庫是將數(shù)據(jù)存儲在內(nèi)存中,而不是磁盤上的數(shù)據(jù)庫。由于內(nèi)存的讀寫速度比磁盤快得多,因此內(nèi)存數(shù)據(jù)庫可以提供非常高的查詢速度。常見的內(nèi)存數(shù)據(jù)庫包括Redis、Memcached等。

4、圖形數(shù)據(jù)庫:圖形數(shù)據(jù)庫用于存儲和查詢圖形結(jié)構(gòu)的數(shù)據(jù)。在圖形數(shù)據(jù)庫中,實體之間的關(guān)系被建模為節(jié)點和邊,這使得查詢和分析復(fù)雜的關(guān)系變得更加容易。常見的圖形數(shù)據(jù)庫包括Neo4j、GraphDB等。

5、時間序列數(shù)據(jù)庫:時間序列數(shù)據(jù)庫用于存儲和管理時間序列數(shù)據(jù),例如傳感器數(shù)據(jù)、交易記錄等。這些數(shù)據(jù)庫通常具有高性能、低延遲的特性,可以快速地存儲和查詢時間序列數(shù)據(jù)。常見的時間序列數(shù)據(jù)庫包括InfluxDB、Prometheus等。

這些數(shù)據(jù)庫類型各有特點,適用于不同的應(yīng)用場景。選擇合適的數(shù)據(jù)庫類型取決于所需的數(shù)據(jù)處理能力、查詢復(fù)雜度、數(shù)據(jù)規(guī)模等因素。


建表及添加

建表,數(shù)據(jù)源,數(shù)據(jù)庫。

安裝MySQL,在安裝過程中,需要設(shè)置MySQL的root用戶密碼。

啟動MySQL服務(wù):安裝完成后,MySQL服務(wù)默認(rèn)是未啟動的??梢栽凇胺?wù)”中手動啟動,也可以使用命令行方式啟動。具體命令為:net start mysql。

連接MySQL:可以使用MySQL自帶的命令行客戶端登錄,也可以使用圖形化客戶端如MySQL Workbench登錄。登錄時需要輸入用戶名(root)、密碼和要連接的服務(wù)器地址(localhost,如果MySQL服務(wù)在本機上)。

創(chuàng)建新的數(shù)據(jù)庫:登錄成功后,可以使用SQL語句來創(chuàng)建數(shù)據(jù)庫。語法為:sql CREATE DATABASE 數(shù)據(jù)庫名。例如,創(chuàng)建名為“my_db”的數(shù)據(jù)庫:sql CREATE DATABASE my_db。

選擇使用的數(shù)據(jù)庫:創(chuàng)建好數(shù)據(jù)庫后,需要使用“USE”語句來選擇要操作的數(shù)據(jù)庫。語法為:sql USE 數(shù)據(jù)庫名。例如,使用名為“my_db”的數(shù)據(jù)庫:sql USE my_db。

打開數(shù)據(jù)庫軟件,并登錄到數(shù)據(jù)庫服務(wù)器。你需要使用管理員帳戶登錄。

在數(shù)據(jù)庫服務(wù)器上創(chuàng)建一個新的數(shù)據(jù)庫。這可以通過命令行或者通過圖形界面完成。

?

客戶端連接數(shù)據(jù)庫需要以下參數(shù):

  1. 主機名(或IP地址):用于標(biāo)識數(shù)據(jù)庫所在的服務(wù)器。

  2. 端口號:數(shù)據(jù)庫服務(wù)器的端口號,默認(rèn)為3306。

  3. 用戶名:登錄數(shù)據(jù)庫的用戶名。

  4. 密碼:登錄數(shù)據(jù)庫的密碼。

  5. 數(shù)據(jù)庫名稱:連接的具體數(shù)據(jù)庫名稱。

以上是MySQL數(shù)據(jù)庫連接中的必要參數(shù)。除此之外,還有其他一些可選參數(shù),如超時時間、連接所使用的socket地址、SSL證書等,根據(jù)具體需求進(jìn)行配置。

?

建表

手動建表SQL建表語句用于創(chuàng)建一個新的數(shù)據(jù)庫表,并定義該表的結(jié)構(gòu)。下面是一個簡單的SQL建表語句的示例:

CREATE TABLE table_name (

column1 datatype,

column2 datatype,

column3 datatype,

...

);

在上述語句中,你需要提供以下信息:

  • table_name:要創(chuàng)建的表的名稱。

  • column1, column2, column3:表的列名。

  • datatype:每列的數(shù)據(jù)類型,例如整數(shù)(INT)、字符串(VARCHAR)、日期(DATE)等。

常見的數(shù)據(jù)類型包括以下幾種:

1、INTEGER(整數(shù)類型):用于存儲整數(shù)。

2、FLOAT(浮點數(shù)類型):用于存儲帶有小數(shù)點的數(shù)值。

3、CHAR(字符類型):用于存儲定長字符串。

4、VARCHAR(可變長字符串類型):用于存儲可變長度的字符串。

5、DATE(日期類型):用于存儲日期信息。

6、TIME(時間類型):用于存儲時間信息。

7、DATETIME(日期時間類型):用于存儲日期和時間信息。

8、BOOLEAN(布爾類型):用于存儲邏輯值(真/假)。

9、BLOB(二進(jìn)制大對象類型):用于存儲二進(jìn)制數(shù)據(jù)。

這些數(shù)據(jù)類型可以根據(jù)實際需求進(jìn)行選擇,以適應(yīng)不同類型的數(shù)據(jù)存儲。

數(shù)據(jù)表列類型描述PRIMARY KEY唯一標(biāo)識,INTeger PRIMARY KEY AUTOINCREMENT唯一標(biāo)識且自動編號自動遞增,該列數(shù)據(jù)無需操作自動完成編號。salary DECIMAL(10, 2) salary列被定義為帶有兩位小數(shù)的十進(jìn)制數(shù)等操作。

?

下面是一個更具體的示例,創(chuàng)建一個名為"Employees"的表,包含員工的ID、姓名、職位和入職日期等列:

CREATE TABLE Employees (

EmployeeID INT, --int整數(shù)類型

FirstName VARCHAR(50), --字符串長度50

LastName VARCHAR(50),

Position VARCHAR(50),

HireDate DATE --日期

);

在這個示例中,EmployeeID、FirstName、LastName、Position和HireDate是表的列名,分別使用了整數(shù)(INT)、字符串(VARCHAR)和日期(DATE)等數(shù)據(jù)類型。你可以根據(jù)實際需求調(diào)整列名和數(shù)據(jù)類型。

?

CREATE TABLE if not exists Employees是一種更靈活的語法,它只有在表不存在時才會創(chuàng)建表。如果表已經(jīng)存在,則不會執(zhí)行任何操作。這種語法允許您避免因表已經(jīng)存在而產(chǎn)生的錯誤。

另一方面,CREATE TABLE Employees將始終創(chuàng)建一個名為"Employees"的新表,而不管該表是否已經(jīng)存在。如果表已經(jīng)存在,這可能會導(dǎo)致數(shù)據(jù)冗余或錯誤。

?

提到的手動創(chuàng)建表和使用圖形界面工具創(chuàng)建表外,還有其他建表方法。以下是一些其他建表方法:

1、使用存儲過程創(chuàng)建表:您可以編寫存儲過程來創(chuàng)建表。存儲過程是預(yù)編譯的SQL語句,可以在數(shù)據(jù)庫中創(chuàng)建表、視圖、函數(shù)等。

2、使用觸發(fā)器創(chuàng)建表:觸發(fā)器是一種在數(shù)據(jù)庫中執(zhí)行特定操作時自動觸發(fā)的一段代碼。您可以使用觸發(fā)器在數(shù)據(jù)庫中創(chuàng)建表。

3、使用編程語言創(chuàng)建表:您可以使用各種編程語言(如Python、Java等)通過與數(shù)據(jù)庫交互來創(chuàng)建表。

增加

要向已存在的表中添加數(shù)據(jù),您可以使用SQL的INSERT INTO語句。以下是一個示例:

INSERT INTO table_name ? (column1, column2, column3, ...)

VALUES (value1, value2, ? value3, ...);

在上述語句中,您需要提供以下信息:

  • table_name:要添加數(shù)據(jù)的表的名稱。

  • (column1, column2, column3, ? ? ?...):要插入數(shù)據(jù)的列的名稱。

  • (value1, value2, value3, ? ? ?...):要插入到對應(yīng)列中的實際值。

以下是一個具體的示例,假設(shè)有一個名為"Students"的表,包含"StudentID"、"FirstName"、"LastName"、"Age"和"EnrollmentYear"等列。現(xiàn)在要向該表中插入一條新的學(xué)生記錄:

INSERT INTO Students ? (StudentID, FirstName, LastName, Age, EnrollmentYear)

VALUES (1, 'John', 'Doe', 20, 2022);

在這個示例中,我們向"Students"表中的指定列插入了新的值。請注意,插入的值必須與列的數(shù)據(jù)類型匹配。

?

SQL可以為原數(shù)據(jù)表添加新列。您可以使用ALTER TABLE語句來修改表結(jié)構(gòu),并添加新列。以下是添加新列的示例語法:

ALTER TABLE table_name

ADD column_name ? data_type;

在上面的語法中,您需要將"table_name"替換為要添加列的表名,"column_name"替換為要添加的列名,"data_type"替換為該列的數(shù)據(jù)類型。

例如,如果您有一個名為"employees"的表,并且想要在該表中添加一個名為"salary"的新列,數(shù)據(jù)類型為DECIMAL,您可以執(zhí)行以下語句:

ALTER TABLE employees

ADD salary DECIMAL;

執(zhí)行該語句后,"employees"表中將會添加一個新的"salary"列。請注意,如果新列的數(shù)據(jù)類型不是空的,您可能需要在添加列之后為該列提供適當(dāng)?shù)某跏贾怠?/p>

?

查詢

注釋符:單行注釋--,多行注釋使用/*開始,使用*/結(jié)束。

SQL語句命令執(zhí)行采用;號結(jié)束語句,可以寫多條語句實現(xiàn)。

條件查詢:

where 子句的語法如下:

SELECT 1, 2, ...FROM 表名WHERE 條件;

?

查詢進(jìn)階

關(guān)聯(lián)查詢:

在之前的教程中,我們所有的查詢操作都是在單個數(shù)據(jù)表中進(jìn)行的。但有時,我們可能希望在單張表的基礎(chǔ)上,獲取更多額外數(shù)據(jù),比如獲取學(xué)生表中學(xué)生所屬的班級信息等。這時,就需要使用關(guān)聯(lián)查詢。

在 SQL 中,關(guān)聯(lián)查詢是一種用于聯(lián)合多個數(shù)據(jù)表中的數(shù)據(jù)的查詢方式。

其中,CROSS JOIN 是一種簡單的關(guān)聯(lián)查詢,不需要任何條件來匹配行,它直接將左表的 每一行 與右表的 每一行 進(jìn)行組合,返回的結(jié)果是兩個表的笛卡爾積。

SELECT e.name AS student_name, e.age AS student_age,

e.class_id, d.name AS class_name

FROM student e

CROSS JOIN class d;

?

在 SQL 中,INNER JOIN 是一種常見的關(guān)聯(lián)查詢方式,它根據(jù)兩個表之間的關(guān)聯(lián)條件,將滿足條件的行組合在一起。

注意,INNER JOIN 只返回兩個表中滿足關(guān)聯(lián)條件的交集部分,即在兩個表中都存在的匹配行。

SELECT e.name AS student_name, e.age AS student_age,

e.class_id, ?d.name AS class_name ,d.level AS class_level

FROM student e

JOIN class d ON e.class_id = d.id;

?

在 SQL 中,OUTER JOIN 是一種關(guān)聯(lián)查詢方式,它根據(jù)指定的關(guān)聯(lián)條件,將兩個表中滿足條件的行組合在一起,并 包含沒有匹配的行 。

在 OUTER JOIN 中,包括 LEFT OUTER JOIN 和 RIGHT OUTER JOIN 兩種類型,它們分別表示查詢左表和右表的所有行(即使沒有被匹配),再加上滿足條件的交集部分。

有些數(shù)據(jù)庫并不支持 RIGHT JOIN 語法,那么如何實現(xiàn) RIGHT JOIN 呢?

其實只需要把主表(from 后面的表)和關(guān)聯(lián)表(LEFT JOIN 后面的表)順序進(jìn)行調(diào)換即可!

SELECT e.name AS student_name, e.age AS student_age,

e.class_id, d.name AS class_name,d.level AS class_level

FROM student e

LEFT ?JOIN class d ON e.class_id = d.id;

?

子查詢

子查詢是指在一個查詢語句內(nèi)部 嵌套 另一個完整的查詢語句,內(nèi)層查詢被稱為子查詢。子查詢可以用于獲取更復(fù)雜的查詢結(jié)果或者用于過濾數(shù)據(jù)。

當(dāng)執(zhí)行包含子查詢的查詢語句時,數(shù)據(jù)庫引擎會首先執(zhí)行子查詢,然后將其結(jié)果作為條件或數(shù)據(jù)源來執(zhí)行外層查詢。

打個比方,子查詢就像是在一個盒子中的盒子,外層查詢是大盒子,內(nèi)層查詢是小盒子。執(zhí)行查詢時,我們首先打開小盒子獲取結(jié)果,然后將小盒子的結(jié)果放到大盒子中繼續(xù)處理。

子查詢是一種強大的查詢工具,它可以嵌套在主查詢中,幫助我們進(jìn)行更復(fù)雜的條件過濾和數(shù)據(jù)檢索。

其中,子查詢中的一種特殊類型是 "exists" 子查詢,用于檢查主查詢的結(jié)果集是否存在滿足條件的記錄,它返回布爾值(True 或 False),而不返回實際的數(shù)據(jù)。

-- 主查詢

SELECT name, total_amount

FROM customers

WHERE customer_id IN (????

-- 子查詢????

SELECT DISTINCT customer_id????

FROM orders????

WHERE total_amount > 200);


和 exists 相對的是 not exists,用于查找不滿足存在條件的記錄。

SELECT name, age,class_id

FROM student

WHERE not EXISTS (

? ? -- 子查詢

? ? SELECT 1

? ? FROM class

? ? WHERE class.id = student.class_id

);

?

組合查詢

在 SQL 中,組合查詢是一種將多個 SELECT 查詢結(jié)果合并在一起的查詢操作。

包括兩種常見的組合查詢操作:UNION 和 UNION ALL。

1、UNION 操作:它用于將兩個或多個查詢的結(jié)果集合并, 并去除重復(fù)的行 。即如果兩個查詢的結(jié)果有相同的行,則只保留一行。

2、UNION ALL 操作:它也用于將兩個或多個查詢的結(jié)果集合并, 但不去除重復(fù)的行 。即如果兩個查詢的結(jié)果有相同的行,則全部保留。

-- UNION ALL操作

SELECT name, age, score,class_id

FROM student

UNION ALL

SELECT name, age, score,class_id

FROM student_new;

?

開窗函數(shù)

在 SQL 中,開窗函數(shù)是一種強大的查詢工具,它允許我們在查詢中進(jìn)行對分組數(shù)據(jù)進(jìn)行計算、 同時保留原始行的詳細(xì)信息 。

開窗函數(shù)可以與聚合函數(shù)(如 SUM、AVG、COUNT 等)結(jié)合使用,但與普通聚合函數(shù)不同,開窗函數(shù)不會導(dǎo)致結(jié)果集的行數(shù)減少。

打個比方,可以將開窗函數(shù)想象成一種 "透視鏡",它能夠?qū)⑽覀兙劢乖谀硞€特定的分組,同時還能看到整體的全景。

開窗函數(shù)sum over

該函數(shù)用法為:

SUM(計算字段名) OVER (PARTITION BY 分組字段名)

SELECT

? ? id,

? ? name,

? ? age,

? ? score,

? ? class_id,

? ? avg(score) OVER

? ? (PARTITION BY class_id) AS class_avg_score

FROM

? ? student;

?

sum over 函數(shù)的另一種用法:sum over order by,可以實現(xiàn)同組內(nèi)數(shù)據(jù)的 累加求和 。

示例用法如下:

SUM(計算字段名) OVER (PARTITION BY 分組字段名 ORDER BY 排序字段 排序規(guī)則)

? ? SELECT

? ? id,

? ? name,

? ? age,

? ? score,

? ? class_id,

? ? SUM(score) OVER

? ? (PARTITION BY class_id ORDER BY score ASC)

? ? AS class_sum_score

FROM

? ? student;

我們使用開窗函數(shù) SUM 來計算每個客戶的歷史訂單累計金額(cumulative_total_amount),并使用 PARTITION BY 子句按照 customer_id 進(jìn)行分組,并使用 ORDER BY 子句按照 order_date 進(jìn)行排序。從結(jié)果的前兩行可以看到,開窗函數(shù)保留了原始訂單的詳細(xì)信息,同時計算了每個客戶的歷史訂單累計金額;相比于只用 sum over,同組內(nèi)的累加列名稱

開窗函數(shù)Rank

Rank 開窗函數(shù)是 SQL 中一種用于對查詢結(jié)果集中的行進(jìn)行 排名 的開窗函數(shù)。它可以根據(jù)指定的列或表達(dá)式對結(jié)果集中的行進(jìn)行排序,并為每一行分配一個排名。在排名過程中,相同的值將被賦予相同的排名,而不同的值將被賦予不同的排名。

當(dāng)存在并列(相同排序值)時,Rank 會跳過后續(xù)排名,并保留相同的排名。

Rank 開窗函數(shù)的常見用法是在查詢結(jié)果中查找前幾名(Top N)或排名最高的行。

Rank 開窗函數(shù)的語法如下:

RANK() OVER (??

PARTITION BY 列名1, 列名2, ... -- 可選,用于指定分組列??

ORDER BY 列名3 [ASC|DESC], 列名4 [ASC|DESC], ... -- 用于指定排序列及排序方式

) AS rank_column

其中,PARTITION BY 子句可選,用于指定分組列,將結(jié)果集按照指定列進(jìn)行分組;ORDER BY 子句用于指定排序列及排序方式,決定了計算 Rank 時的排序規(guī)則。AS rank_column 用于指定生成的 Rank 排名列的別名。

SELECT

? ? id,

? ? name,

? ? age,

? ? score,

? ? class_id,

? ? RANK() OVER

? ? (PARTITION BY class_id ORDER BY score DESC)

? ? AS ranking

FROM

? ? student;

開窗函數(shù)Row_Number

Row_Number 開窗函數(shù)是 SQL 中的一種用于為查詢結(jié)果集中的每一行 分配唯一連續(xù)排名 的開窗函數(shù)。

它與之前講到的 Rank 函數(shù),Row_Number 函數(shù)為每一行都分配一個唯一的整數(shù)值,不管是否存在并列(相同排序值)的情況。每一行都有一個唯一的行號,從 1 開始連續(xù)遞增。

Row_Number 開窗函數(shù)的語法如下(幾乎和 Rank 函數(shù)一模一樣):

ROW_NUMBER() OVER (??

PARTITION BY column1, column2, ... -- 可選,用于指定分組列??

ORDER BY column3 [ASC|DESC], column4 [ASC|DESC], ... -- 用于指定排序列及排序方式

) AS row_number_column

其中,PARTITION BY子句可選,用于指定分組列,將結(jié)果集按照指定列進(jìn)行分組。ORDER BY 子句用于指定排序列及排序方式,決定了計算 Row_Number 時的排序規(guī)則。AS row_number_column 用于指定生成的行號列的別名。

SELECT

? ? id,

? ? name,

? ? age,

? ? score,

? ? class_id,

? ? ROW_NUMBER() OVER

? ? (PARTITION BY class_id ORDER BY score DESC)

? ? AS row_number

FROM

? ? student;

?

開窗函數(shù)-lag / lead

開窗函數(shù) Lag 和 Lead 的作用是獲取在當(dāng)前行之前或之后的行的值,這兩個函數(shù)通常在需要比較相鄰行數(shù)據(jù)或進(jìn)行時間序列分析時非常有用。

1)Lag 函數(shù)

Lag 函數(shù)用于獲取 當(dāng)前行之前 的某一列的值。它可以幫助我們查看上一行的數(shù)據(jù)。

Lag 函數(shù)的語法如下:

LAG(column_name, offset, default_value) OVER (PARTITION BY partition_column ORDER BY sort_column)

參數(shù)解釋:

  • column_name:要獲取值的列名。

  • offset:表示要向上偏移的行數(shù)。例如,offset1表示獲取上一行的值,offset2表示獲取上兩行的值,以此類推。

  • default_value:可選參數(shù),用于指定當(dāng)沒有前一行時的默認(rèn)值。

  • PARTITION BYORDER BY子句可選,用于分組和排序數(shù)據(jù)。

2)Lead 函數(shù)

Lead 函數(shù)用于獲取 當(dāng)前行之后 的某一列的值。它可以幫助我們查看下一行的數(shù)據(jù)。

Lead 函數(shù)的語法如下:

LEAD(column_name, offset, default_value) OVER (PARTITION BY partition_column ORDER BY sort_column)

參數(shù)解釋:

  • column_name:要獲取值的列名。

  • offset:表示要向下偏移的行數(shù)。例如,offset1表示獲取下一行的值,offset2表示獲取下兩行的值,以此類推。

  • default_value:可選參數(shù),用于指定當(dāng)沒有后一行時的默認(rèn)值。

  • PARTITION BYORDER BY子句可選,用于分組和排序數(shù)據(jù)。

·??????? SELECT

·??????? ? ? id,

·??????? ? ? name,

·??????? ? ? age,

·??????? ? ? score,

·??????? ? ? class_id,

·??????? ? ? LAG(name, 1, NULL) OVER

·??????? ? ? (PARTITION BY class_id ORDER BY score DESC)

·??????? ? ? AS prev_name,

·??????? ? ? LEAD(name, 1, NULL) OVER

·??????? ? ? (PARTITION BY class_id ORDER BY score DESC)

·??????? ? ? AS next_name

·??????? FROM

·??????? ? ? student;


基本操作

去重、排序、截斷偏移操作

條件分支

case when?支持同時指定多個分支,示例語法如下:

CASE WHEN (條件1) THEN 結(jié)果1

??????? ?? WHEN (條件2) THEN 結(jié)果2

??????? ?? ...

??????? ?? ELSE 其他結(jié)果 END


時間函數(shù)

常用的時間函數(shù)有:

  • DATE:獲取當(dāng)前日期

  • DATETIME:獲取當(dāng)前日期時間

  • TIME:獲取當(dāng)前時間

還有很多時間函數(shù),比如計算兩個日期的相差天數(shù)、獲取當(dāng)前日期對應(yīng)的毫秒數(shù)等,

SELECT name , DATE() AS '當(dāng)前日期' from student;

?

字符串處理

在 SQL 中,字符串處理是一類用于處理文本數(shù)據(jù)的函數(shù)。它們允許我們對字符串進(jìn)行各種操作,如轉(zhuǎn)換大小寫、計算字符串長度以及搜索和替換子字符串等。字符串處理函數(shù)可以幫助我們在數(shù)據(jù)庫中對字符串進(jìn)行加工和轉(zhuǎn)換,從而滿足不同的需求。

LOWER、UPPER字符串大小寫切換,LENGTH字符串長度等。

SELECT id , name, ?upper(name) AS upper_name

FROM student where name=='dog';


聚合函數(shù)

SQL 中,聚合函數(shù)是一類用于對數(shù)據(jù)集進(jìn)行?匯總計算?的特殊函數(shù)。它們可以對一組數(shù)據(jù)執(zhí)行諸如計數(shù)、求和、平均值、最大值和最小值等操作。聚合函數(shù)通常在 SELECT 語句中配合 GROUP BY 子句使用,用于對分組后的數(shù)據(jù)進(jìn)行匯總分析。(數(shù)學(xué)函數(shù)運算)

常見的聚合函數(shù)包括:

  • COUNT:計算指定列的行數(shù)或非空值的數(shù)量。

  • SUM:計算指定列的數(shù)值之和。

  • AVG:計算指定列的數(shù)值平均值。

  • MAX:找出指定列的最大值。

  • MIN:找出指定列的最小值。

·??????? SELECT SUM(score) AS total_score,

·??????? avg(score)AS avg_score,

·??????? MAX(score)AS max_score,

·??????? MIN(score)AS min_score

·??????? FROM student;

?

分組聚合

在 SQL 中,分組聚合是一種對數(shù)據(jù)進(jìn)行分類并對每個分類進(jìn)行聚合計算的操作。它允許我們按照指定的列或字段對數(shù)據(jù)進(jìn)行分組(單字段、多字段或having 子句分組),然后對每個分組應(yīng)用聚合函數(shù),如 COUNT、SUM、AVG 等,以獲得分組后的匯總結(jié)果。

舉個例子:某個學(xué)??梢园凑瞻嗉墝W(xué)生分組,并對每個班級進(jìn)行統(tǒng)計。查看每個班級有多少學(xué)生、每個班級的平均成績。這樣我們就能夠?qū)W(xué)校各班的學(xué)生情況有一個整體的了解,而不是單純看個別學(xué)生的信息。

在 SQL 中,通常使用 GROUP BY 關(guān)鍵字對數(shù)據(jù)進(jìn)行分組。

單字段分組:

SELECT class_id, avg(score) AS avg_score

FROM student

GROUP BY class_id;

多字段分組:

--統(tǒng)計學(xué)生表中每個班級每次考試的總學(xué)生人數(shù)

SELECT class_id,exam_num, COUNT(class_id) AS total_num

FROM student

GROUP BY class_id,exam_num;

?

在 SQL 中,HAVING 子句用于在分組聚合后對分組進(jìn)行過濾。它允許我們對分組后的結(jié)果進(jìn)行條件篩選,只保留滿足特定條件的分組。

HAVING 子句與條件查詢 WHERE 子句的區(qū)別在于,WHERE 子句用于在 分組之前 進(jìn)行過濾,而 HAVING 子句用于在 分組之后 進(jìn)行過濾。

--請你編寫一個 SQL 查詢,統(tǒng)計學(xué)生表中班級的總成績超過 150 分的班級編號(class_id)和總成績(total_score)。

SELECT class_id, SUM(score) AS total_score

FROM student

GROUP BY class_id

HAVING SUM(score) > 150;

?

刪除

在SQL中,刪除操作用于從數(shù)據(jù)庫表中刪除記錄。以下是SQL刪除操作的語法:

DELETE FROM table_name?

WHERE condition;

其中:

DELETE FROM指定要刪除記錄的表名。

WHERE關(guān)鍵字用于指定刪除記錄的條件。如果省略WHERE子句,則將刪除表中的所有記錄。

condition是一個可選的條件,用于指定要刪除的記錄。只有滿足條件的記錄才會被刪除。

以下是一些示例:

1、刪除表中滿足條件的記錄:

DELETE FROM table_name WHERE condition;

例如,要從名為employees的表中刪除所有薪資小于5000的記錄,可以使用以下語句:DELETE FROM employees WHERE salary < 5000;

2、刪除表中的所有記錄:

DELETE FROM table_name;

例如,要刪除名為customers的表中的所有記錄,可以使用以下語句:

DELETE FROM customers;

請注意,執(zhí)行刪除操作時要非常小心,因為一旦刪除數(shù)據(jù),將無法恢復(fù)。建議在執(zhí)行刪除操作之前備份重要數(shù)據(jù)。


更改

要修改SQL數(shù)據(jù)表中的數(shù)據(jù),您可以使用UPDATE語句。以下是一個基本的UPDATE語句的示例:

UPDATE table_name

SET column1 = ? new_value1, column2 = new_value2, ...

WHERE condition;

在上述語句中,您需要提供以下信息:

  • table_name:要修改數(shù)據(jù)的表的名稱。

  • SET:指定要更新的列和對應(yīng)的新值。

  • WHERE:可選項,用于指定更新的條件。只有滿足條件的記錄才會被更新。

以下是一個具體的示例,假設(shè)有一個名為"Students"的表,其中包含"StudentID"、"FirstName"、"LastName"和"Age"等列。現(xiàn)在要將ID為1的學(xué)生的名字改為"Jane",年齡改為21:

UPDATE Students

SET FirstName = 'Jane', Age = 21

WHERE StudentID = 1;

上述語句將更新滿足條件的記錄,即StudentID為1的學(xué)生的FirstName和Age列將被更新為新的值。請注意,根據(jù)實際情況,您可能需要根據(jù)需要調(diào)整列名、新值和條件。


其他操作

除了增刪改查還有以下常用的操作:

1、創(chuàng)建表(CREATE TABLE):用于在數(shù)據(jù)庫中創(chuàng)建新的表。您可以使用CREATE TABLE命令定義表的列、數(shù)據(jù)類型和其他屬性。

2、刪除表(DROP TABLE):用于從數(shù)據(jù)庫中刪除表。您可以使用DROP TABLE命令刪除指定的表。

3、創(chuàng)建索引(CREATE INDEX):用于在表的列上創(chuàng)建索引。索引可以提高數(shù)據(jù)查詢的性能。

4、刪除索引(DROP INDEX):用于從表中刪除索引。

5、創(chuàng)建視圖(CREATE VIEW):用于創(chuàng)建數(shù)據(jù)庫中的視圖。視圖是一個虛擬表,它基于存儲的查詢結(jié)果進(jìn)行定義,可以用于簡化復(fù)雜的查詢操作。

6、刪除視圖(DROP VIEW):用于從數(shù)據(jù)庫中刪除視圖。

這些操作是SQL中常見的操作,可以幫助您管理數(shù)據(jù)庫和操作數(shù)據(jù)。

?

上位機開發(fā)連接SQL,及SQL命令處理,在C#開發(fā)中連接SQL數(shù)據(jù)庫并進(jìn)行命令處理,通常涉及以下步驟:

1、安裝并引入必要的命名空間

在項目中引入System.Data.SqlClient命名空間,這是.NET用于與SQL Server交互的主要命名空間。

using System.Data.SqlClient;

2、建立數(shù)據(jù)庫連接

使用SqlConnection類來建立與數(shù)據(jù)庫的連接。在連接字符串中,需要提供數(shù)據(jù)庫的地址、用戶名、密碼以及數(shù)據(jù)庫名稱。

string connectionString ? = "Server=服務(wù)器地址;Database=數(shù)據(jù)庫名稱;User Id=用戶名;Password=密碼;";

SqlConnection connection = new SqlConnection(connectionString);

3、打開數(shù)據(jù)庫連接

使用Open()方法打開數(shù)據(jù)庫連接。

connection.Open();

4、執(zhí)行SQL命令

使用SqlCommand類來執(zhí)行SQL命令。你可以使用ExecuteNonQuery()方法執(zhí)行不返回結(jié)果集的命令,如INSERT、UPDATE、DELETE等,或者使用ExecuteReader()方法執(zhí)行返回結(jié)果集的命令,如SELECT。

string sql = "SELECT * ? FROM 表名";

SqlCommand command = new ? SqlCommand(sql, connection);

SqlDataReader reader = ? command.ExecuteReader();

5、處理結(jié)果

根據(jù)執(zhí)行的是ExecuteNonQuery還是ExecuteReader,處理結(jié)果的方式不同。對于前者,通常關(guān)注返回受影響行數(shù);對于后者,可以使用Read()方法逐行讀取結(jié)果集。

int rowsAffected = ? command.ExecuteNonQuery();

Console.WriteLine($"Rows ? affected: {rowsAffected}");

while (reader.Read())

{

Console.WriteLine($"{reader["列名1"]}, {reader["列名2"]}, ...");

}

6、關(guān)閉連接

在完成數(shù)據(jù)庫操作后,記得關(guān)閉數(shù)據(jù)庫連接。

connection.Close();

以上是基本的流程。在實際開發(fā)中,你可能還需要處理異常、使用參數(shù)化查詢等,以提高程序的健壯性和安全性。

END


SQL數(shù)據(jù)庫增刪改查基本操作及C#開發(fā)使用方法的評論 (共 條)

分享到微博請遵守國家法律
都江堰市| 莱芜市| 闵行区| 隆子县| 乌兰察布市| 天台县| 布拖县| 桐柏县| 潞城市| 措美县| 北辰区| 镇安县| 皋兰县| 无锡市| 秭归县| 平度市| 曲沃县| 芦溪县| 六安市| 鱼台县| 东辽县| 嘉义县| 南投县| 北碚区| 沿河| 普洱| 巴林右旗| 滨海县| 安义县| 凤山县| 铜川市| 鹤岗市| 二连浩特市| 锡林浩特市| 读书| 阿拉善左旗| 简阳市| 武清区| 淮南市| 咸阳市| 玉树县|