欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)激活碼778899分享:SqlServer基礎(chǔ)學(xué)習(xí)筆記

柚子快報(bào)激活碼778899分享:SqlServer基礎(chǔ)學(xué)習(xí)筆記

http://yzkb.51969.com/

目錄

1.SqlServer 簡(jiǎn)介1.什么是數(shù)據(jù)庫(kù)2.結(jié)構(gòu)化查詢語(yǔ)言 (SQL ) 是什么?1.簡(jiǎn)介2.數(shù)據(jù)操作語(yǔ)言(Data Manipulation Language,DML)3.數(shù)據(jù)查詢語(yǔ)言(Data Query Language,DQL)

3.數(shù)據(jù)庫(kù)的發(fā)展歷程4. 數(shù)據(jù)庫(kù)與Excel等電子表格有何區(qū)別?5.數(shù)據(jù)庫(kù)的類型6.數(shù)據(jù)庫(kù)軟件是什么?7.數(shù)據(jù)庫(kù)管理系統(tǒng) (DBMS) 是什么?8.簡(jiǎn)單認(rèn)識(shí) SQL Server9.為什么要使用SqlServer ?10.SQL Server 基本服務(wù)介紹1.SQL Server 服務(wù)器類型2.系統(tǒng)數(shù)據(jù)庫(kù)

2.數(shù)據(jù)庫(kù)操作1.數(shù)據(jù)庫(kù)文件組成1.主數(shù)據(jù)文件(.mdf)2.次要數(shù)據(jù)文件(*.ndf)3.事務(wù)日志(*.ldf)

2.文件組1.文件和文件組的關(guān)系2.使用文件組的優(yōu)勢(shì)

3.數(shù)據(jù)庫(kù)操作1.使用SSMS 方式2.T-SQL方式1.創(chuàng)建數(shù)據(jù)庫(kù)2.創(chuàng)建次文件3.簡(jiǎn)化創(chuàng)建數(shù)據(jù)庫(kù)(初學(xué)者推薦)4.刪除數(shù)據(jù)庫(kù)5.查看數(shù)據(jù)庫(kù)信息6.修改數(shù)據(jù)庫(kù)名稱7.切換數(shù)據(jù)庫(kù)

4.備份與還原1.備份2.還原

5. 附加與分離1.分離2.附加

3.數(shù)據(jù)類型與表操作1.數(shù)據(jù)類型1.Character 字符串2.Unicode 字符串3.Binary 類型4.Number 類型5.Date 類型6.其他數(shù)據(jù)類型1.C# 中的 類型 對(duì)應(yīng)的 Sql 類型2. Binary 類型可以存儲(chǔ)的類型有哪些3.常用的數(shù)據(jù)庫(kù)類型有哪些

7.sql 中的Character和Unicode 區(qū)別8.Char 與 varchar 對(duì)比

2.數(shù)據(jù)表- table1.SSMS方式2.T-SQL 方式

4.表約束1.表約束分類2.主鍵約束1.簡(jiǎn)介2.表級(jí)約束,列級(jí)約束

3.復(fù)合主鍵

5.表數(shù)據(jù)操作1.SSMS 方式2.T-SQL 方式1.添加數(shù)據(jù)2.修改數(shù)據(jù)3.刪除數(shù)據(jù)4.清空數(shù)據(jù)1.用法2.truncate 與 delete 的區(qū)別

5.聯(lián)級(jí)刪除,聯(lián)級(jí)更新

6.簡(jiǎn)單查詢7.條件查詢和分組查詢1.條件查詢1.如何使用排序(升序,降序)2.多字段如何排序3.如何使用關(guān)系表達(dá)式查詢(大于,小于,等于)4.如何使用between...and 的語(yǔ)法5.如何統(tǒng)計(jì)個(gè)數(shù),平均分,最大數(shù),最小數(shù),求和

2.聚合函數(shù)3.exists 查詢4.分組查詢5.作業(yè)

8.嵌套查詢9.連接查詢1.連接查詢的分類2.內(nèi)連接1.簡(jiǎn)介2.等值內(nèi)連接3.不等連接

3.自連接4.外連接1.左外連接2.右外連接3.全外連接

5.聯(lián)合查詢6.作業(yè)

目前工作很少接觸數(shù)據(jù)庫(kù),工作之余進(jìn)行SqlServer基礎(chǔ)學(xué)習(xí),完善此薄弱之處。

1.SqlServer 簡(jiǎn)介

1.什么是數(shù)據(jù)庫(kù)

數(shù)據(jù)庫(kù)是結(jié)構(gòu)化信息或數(shù)據(jù)(一般以電子形式存儲(chǔ)在計(jì)算機(jī)系統(tǒng)中)的有組織的集合,通常由數(shù)據(jù)庫(kù)管理系統(tǒng) (DBMS) 來(lái)控制。在現(xiàn)實(shí)中,數(shù)據(jù)、DBMS 及關(guān)聯(lián)應(yīng)用一起被稱為數(shù)據(jù)庫(kù)系統(tǒng),通常簡(jiǎn)稱為數(shù)據(jù)庫(kù)。

為了提高數(shù)據(jù)處理和查詢效率,當(dāng)今最常見的數(shù)據(jù)庫(kù)通常以行和列的形式將數(shù)據(jù)存儲(chǔ)在一系列的表中,支持用戶便捷地訪問、管理、修改、更新、控制和組織數(shù)據(jù)。另外,大多數(shù)數(shù)據(jù)庫(kù)都使用結(jié)構(gòu)化查詢語(yǔ)言 ( SQL ) 來(lái)編寫和查詢數(shù)據(jù)。

2.結(jié)構(gòu)化查詢語(yǔ)言 (SQL ) 是什么?

1.簡(jiǎn)介

SQL 是一種數(shù)據(jù)庫(kù)查詢和程序設(shè)計(jì)語(yǔ)言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)。與其他程序設(shè)計(jì)語(yǔ)言(如 C#語(yǔ)言、Java等)不同的是,SQL 由很少的關(guān)鍵字組成,每個(gè) SQL 語(yǔ)句通過(guò)一個(gè)或多個(gè)關(guān)鍵字構(gòu)成。

一體化:SQL 集數(shù)據(jù)定義、數(shù)據(jù)操作和數(shù)據(jù)控制于一體,可以完成數(shù)據(jù)庫(kù)中的全部工作。使用方式靈活:SQL 具有兩種使用方式,可以直接以命令方式交互使用;也可以嵌入使用,嵌入 C、C++、Fortran、COBOL、Java 等語(yǔ)言中使用。非過(guò)程化:只提操作要求,不必描述操作步驟,也不需要導(dǎo)航。使用時(shí)只需要告訴計(jì)算機(jī)“做什 么”,而不需要告訴它“怎么做”,存儲(chǔ)路徑的選擇和操作的執(zhí)行由數(shù)據(jù)庫(kù)管理系統(tǒng)自動(dòng)完成。語(yǔ)言簡(jiǎn)潔、語(yǔ)法簡(jiǎn)單:該語(yǔ)言的語(yǔ)句都是由描述性很強(qiáng)的英語(yǔ)單詞組成,而且這些單詞的數(shù)目不 多。

SQL 包含以下 幾 部分:用來(lái)創(chuàng)建或刪除數(shù)據(jù)庫(kù)以及表等對(duì)象,主要包含以下幾種命令:

DROP:刪除數(shù)據(jù)庫(kù)和表等對(duì)象。CREATE:創(chuàng)建數(shù)據(jù)庫(kù)和表等對(duì)象。ALTER:修改數(shù)據(jù)庫(kù)和表等對(duì)象的結(jié)構(gòu)。

2.數(shù)據(jù)操作語(yǔ)言(Data Manipulation Language,DML)

用來(lái)變更表中的記錄,主要包含以下幾種命令:

SELECT:查詢表中的數(shù)據(jù)。INSERT:向表中插入新數(shù)據(jù) 。UPDATE:更新表中的數(shù)據(jù)。DELETE:刪除表中的數(shù)據(jù)。

3.數(shù)據(jù)查詢語(yǔ)言(Data Query Language,DQL)

用來(lái)查詢表中的記錄,主要包含 SELECT 命令,來(lái)查詢表中的數(shù)據(jù)。 用來(lái)確認(rèn)或者取消對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行的變更。除此之外,還可以對(duì)數(shù)據(jù)庫(kù)中的用戶設(shè)定權(quán)限。主要包含以下幾種命令:

GRANT:賦予用戶操作權(quán)限。REVOKE:取消用戶的操作權(quán)限。COMMIT:確認(rèn)對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行的變更。ROLLBACK:取消對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行的變更。

3.數(shù)據(jù)庫(kù)的發(fā)展歷程

目前幾乎所有的關(guān)系數(shù)據(jù)庫(kù)都使用 SQL 編程語(yǔ)言來(lái)查詢、操作和定義數(shù)據(jù),進(jìn)行數(shù)據(jù)訪問控制。 SQL最初于 20 世紀(jì) 70 年代由 IBM 開發(fā),當(dāng)時(shí) Oracle 是一個(gè)主要的貢獻(xiàn)者,這推動(dòng)了 SQL ANSI 標(biāo)準(zhǔn)的實(shí)施,而 SQL 的興起也刺激了 IBM、Oracle 和 Microsoft 等公司開始全面擴(kuò)張。時(shí)至今日,雖然 SQL仍被廣泛使用,但是新的編程語(yǔ)言也已經(jīng)嶄露頭角。

自 20 世紀(jì) 60 年代初誕生至今,數(shù)據(jù)庫(kù)已經(jīng)發(fā)生了翻天覆地的變化。最初,人們使用分層數(shù)據(jù)庫(kù)(樹形模型,僅支持一對(duì)多關(guān)系)和網(wǎng)絡(luò)數(shù)據(jù)庫(kù)(更加靈活,支持多種關(guān)系)這樣的導(dǎo)航數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)和操 作數(shù)據(jù)。這些早期系統(tǒng)雖然簡(jiǎn)單,但缺乏靈活性。20世紀(jì) 80 年代,關(guān)系數(shù)據(jù)庫(kù)開始興起;20 世紀(jì) 90年代,面向?qū)ο蟮臄?shù)據(jù)庫(kù)開始成為主流。最近,隨著互聯(lián)網(wǎng)的快速發(fā)展,為了更快速地處理非結(jié)構(gòu)化數(shù) 據(jù),NoSQL數(shù)據(jù)庫(kù)應(yīng)運(yùn)而生?,F(xiàn)在,云數(shù)據(jù)庫(kù)和自治駕駛數(shù)據(jù)庫(kù)在數(shù)據(jù)收集、存儲(chǔ)、管理和利用方面 正不斷取得新的突破。

4. 數(shù)據(jù)庫(kù)與Excel等電子表格有何區(qū)別?

數(shù)據(jù)庫(kù)和電子表格(例如 Microsoft Excel)都可以便捷地存儲(chǔ)信息,兩者的主要區(qū)別包括:

存儲(chǔ)和操作數(shù)據(jù)的方式。誰(shuí)可以訪問數(shù)據(jù)??梢源鎯?chǔ)多少數(shù)據(jù)。

從一開始,電子表格就是專門針對(duì)單一用戶而設(shè)計(jì)的,其特性也反映了這一點(diǎn)。電子表格非常適合不需要執(zhí)行太多高度復(fù)雜的數(shù)據(jù)操作的單一用戶或少數(shù)用戶。另一方面,數(shù)據(jù)庫(kù)的設(shè)計(jì)是為了保存大量有組織的信息,有時(shí)是海量的。數(shù)據(jù)庫(kù)允許多個(gè)用戶同時(shí)使用高度復(fù)雜的邏輯和語(yǔ)言,快速、安全地訪問和查詢數(shù)據(jù)。

5.數(shù)據(jù)庫(kù)的類型

數(shù)據(jù)庫(kù)有很多種,至于各種數(shù)據(jù)庫(kù)孰優(yōu)孰劣,主要取決于企業(yè)希望如何使用數(shù)據(jù):

關(guān)系數(shù)據(jù)庫(kù):關(guān)系數(shù)據(jù)庫(kù)在 20 世紀(jì) 80 年代成為主流。關(guān)系數(shù)據(jù)庫(kù)中的項(xiàng)被組織為一系列具有列和行的表。關(guān)系數(shù)據(jù)庫(kù)技術(shù)為訪問結(jié)構(gòu)化信息提供了最有效和靈活的方法。面向?qū)ο髷?shù)據(jù)庫(kù):面向?qū)ο髷?shù)據(jù)庫(kù)中的信息以對(duì)象的形式表示,這與面向?qū)ο蟮木幊滔囝愃?。分布式?shù)據(jù)庫(kù):分布式數(shù)據(jù)庫(kù)由位于不同站點(diǎn)的兩個(gè)或多個(gè)文件組成。數(shù)據(jù)庫(kù)可以存儲(chǔ)在多臺(tái)計(jì)算機(jī)上,位于同一個(gè)物理位置,或分散在不同的網(wǎng)絡(luò)上(TIDB)。數(shù)據(jù)倉(cāng)庫(kù):數(shù)據(jù)倉(cāng)庫(kù)是數(shù)據(jù)的中央存儲(chǔ)庫(kù),是專為快速查詢和分析而設(shè)計(jì)的數(shù)據(jù)庫(kù)。NoSQL 數(shù)據(jù)庫(kù):NoSQL 或非關(guān)系數(shù)據(jù)庫(kù),支持存儲(chǔ)和操作非結(jié)構(gòu)化及半結(jié)構(gòu)化數(shù)據(jù)(與關(guān)系數(shù)據(jù)庫(kù)相反,關(guān)系數(shù)據(jù)庫(kù)定義了應(yīng)如何組合插入數(shù)據(jù)庫(kù)的數(shù)據(jù))。隨著 Web 應(yīng)用的日益普及和復(fù)雜化, NoSQL 數(shù)據(jù)庫(kù)得到了越來(lái)越廣泛的應(yīng)用。圖形數(shù)據(jù)庫(kù):圖形數(shù)據(jù)庫(kù)根據(jù)實(shí)體和實(shí)體之間的關(guān)系來(lái)存儲(chǔ)數(shù)據(jù)。OLTP 數(shù)據(jù)庫(kù): OLTP 數(shù)據(jù)庫(kù)是一種高速分析數(shù)據(jù)庫(kù),專為多個(gè)用戶執(zhí)行大量事務(wù)而設(shè)計(jì)。

這些只是目前投入使用的幾十種數(shù)據(jù)庫(kù)中的一小部分。另外還有許多針對(duì)具體的科學(xué)、財(cái)務(wù)或其他功能而定制的不太常見的數(shù)據(jù)庫(kù)。除了不同的數(shù)據(jù)庫(kù)類型之外,技術(shù)開發(fā)方法的變化以及云和自動(dòng)化等重大進(jìn)步也在推動(dòng)數(shù)據(jù)庫(kù)朝新的方向發(fā)展。一些最新的數(shù)據(jù)庫(kù)包括:

開源數(shù)據(jù)庫(kù):開源數(shù)據(jù)庫(kù)系統(tǒng)是指源代碼為開放源碼的數(shù)據(jù)庫(kù)系統(tǒng),它可以是 SQL 或 NoSQL 數(shù)據(jù)庫(kù)。(PostgreSQL,MySql)云數(shù)據(jù)庫(kù):云數(shù)據(jù)庫(kù)指位于私有云、公有云或混合云計(jì)算平臺(tái)上的結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)集合。云數(shù)據(jù)庫(kù)模式分為兩類:傳統(tǒng)模式和數(shù)據(jù)庫(kù)即服務(wù) ( DBaaS )。在 DBaaS 中,管理任務(wù)和維護(hù)由服務(wù) 提供商執(zhí)行。 B站:任我行碼農(nóng)場(chǎng)多模型數(shù)據(jù)庫(kù):多模型數(shù)據(jù)庫(kù)將不同類型的數(shù)據(jù)庫(kù)模型結(jié)合到一個(gè)集成的后端中。這意味著它們可以支持各種不同的數(shù)據(jù)類型。文檔/ JSON 數(shù)據(jù)庫(kù):文檔數(shù)據(jù)庫(kù)專為存儲(chǔ)、檢索和管理面向文檔的信息而設(shè)計(jì),是一種以 JSON格式存儲(chǔ)數(shù)據(jù)的現(xiàn)代方法,而不是采用行和列的形式。自治駕駛數(shù)據(jù)庫(kù):基于云的自治駕駛數(shù)據(jù)庫(kù)(也稱作自治數(shù)據(jù)庫(kù))是一種全新的極具革新性的數(shù)據(jù)庫(kù),它利用機(jī)器學(xué)習(xí)技術(shù)自動(dòng)執(zhí)行數(shù)據(jù)庫(kù)調(diào)優(yōu)、保護(hù)、備份、更新,以及傳統(tǒng)上由數(shù)據(jù)庫(kù)管理員( DBA ) 執(zhí)行的其他常規(guī)管理任務(wù)。

6.數(shù)據(jù)庫(kù)軟件是什么?

數(shù)據(jù)庫(kù)軟件旨用于創(chuàng)建、編輯和維護(hù)數(shù)據(jù)庫(kù)文件及記錄,幫助用戶更輕松地執(zhí)行文件和記錄創(chuàng)建、數(shù)據(jù)錄入、數(shù)據(jù)編輯、更新和報(bào)告等操作。除此之外,數(shù)據(jù)庫(kù)軟件還能處理數(shù)據(jù)存儲(chǔ)、備份和報(bào)告以及多路訪問控制和安全性等問題。隨著當(dāng)今數(shù)據(jù)盜竊日益頻繁,數(shù)據(jù)庫(kù)安全性已變得至為重要。數(shù)據(jù)庫(kù)軟件有時(shí)也稱為“數(shù)據(jù)庫(kù)管理系統(tǒng)” (DBMS)。 數(shù)據(jù)庫(kù)軟件支持用戶以結(jié)構(gòu)化形式存儲(chǔ)數(shù)據(jù)然后訪問數(shù)據(jù),能夠極大簡(jiǎn)化數(shù)據(jù)管理。它一般會(huì)提供圖形界面來(lái)簡(jiǎn)化數(shù)據(jù)創(chuàng)建和管理,在某些情況下,用戶可以使用數(shù)據(jù)庫(kù)軟件來(lái)自行構(gòu)建數(shù)據(jù)庫(kù)。

7.數(shù)據(jù)庫(kù)管理系統(tǒng) (DBMS) 是什么?

數(shù)據(jù)庫(kù)通常離不開完備的數(shù)據(jù)庫(kù)軟件程序,也就是數(shù)據(jù)庫(kù)管理系統(tǒng) (DBMS)。DBMS充當(dāng)數(shù)據(jù)庫(kù)與其用戶或程序之間的接口,允許用戶檢索、更新和管理信息的組織和優(yōu)化方式。此外,DBMS還有助于監(jiān)督和控制數(shù)據(jù)庫(kù),提供各種管理操作,例如性能監(jiān)視、調(diào)優(yōu)、備份和恢復(fù)。

常見的數(shù)據(jù)庫(kù)軟件或 DBMS 有 MySQL 、Microsoft Access、 Microsoft SQL Server 、FileMakerPro 、Oracle Database 和 dBASE , ProgreSQL。

8.簡(jiǎn)單認(rèn)識(shí) SQL Server

SQL Server 是 Microsoft 開發(fā)的一個(gè)關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)( RDBMS ),現(xiàn)在是世界上最為常用的數(shù)據(jù)庫(kù)之一;SQL Server 是一個(gè)高度可擴(kuò)展的產(chǎn)品,可以從一個(gè)單一的筆記本電腦上運(yùn)行的任何東西或以高倍云服務(wù)器網(wǎng)絡(luò),或在兩者之間任何東西。雖然說(shuō)是“任何東西”,但是仍然要滿足相關(guān)的軟件和硬件的要求;SQL Server 1.0 在1989年發(fā)布,至今 SQL Server 已成為一個(gè)真正的企業(yè)信息化平臺(tái)。 SQLServer 2014 包括內(nèi)置的商務(wù)智能工具,以及一系列的分析和報(bào)告工具,可以創(chuàng)建數(shù)據(jù)庫(kù)、備份、復(fù)制、安全性更好以及更多。

9.為什么要使用SqlServer ?

數(shù)據(jù)持久化 :指的是 可以存儲(chǔ)在磁盤中。高效的存儲(chǔ)與查詢。數(shù)據(jù)共享。.Net 首選,因?yàn)榕c SqlServer 同屬于微軟。

10.SQL Server 基本服務(wù)介紹

1.SQL Server 服務(wù)器類型

Sql Server 提供了四種服務(wù)器類型:

數(shù)據(jù)庫(kù)引擎 。Analysis Services (分析服務(wù) ) 。Reporting Services (報(bào)告服務(wù))。Integration Services (集成服務(wù))。

數(shù)據(jù)庫(kù)引擎 (核心服務(wù)): 是 Sql Server 的核心服務(wù) 他是存儲(chǔ)和處理表格關(guān)系格式的數(shù)據(jù)或 xml 文檔格式的數(shù)據(jù)服務(wù)。負(fù)責(zé)完成數(shù)據(jù)存儲(chǔ),處理,和安全。 Analysis Services (分析服務(wù) ) : Analysis Services 主要是通過(guò)服務(wù)器和客戶端 提供聯(lián)機(jī)分析和處理和數(shù)據(jù)挖掘功能。(有了它用戶可以創(chuàng)建,管理來(lái)自于其他數(shù)據(jù)源的數(shù)據(jù)結(jié)構(gòu))(聯(lián)機(jī)事物的處理是由數(shù)據(jù)庫(kù)引擎來(lái)完成的)。 Reporting Services (報(bào)表服務(wù)): Reporting Services 用來(lái)做基于服務(wù)器的解決方案:他可以用來(lái)生成各種報(bào)表方便工作。 Integration Services (集成服務(wù)): Integration Services 是一個(gè)數(shù)據(jù)集成的平臺(tái),負(fù)責(zé)完成有關(guān)數(shù)據(jù)的提取,轉(zhuǎn)換,加載,集成服務(wù)包括生成并調(diào)試包的圖形工具和向?qū)?;?zhí)行如數(shù)據(jù)導(dǎo)入、導(dǎo)出, FTP 操作,SQL 語(yǔ)句執(zhí)行和電子郵件消息傳遞等工作流功能的任務(wù)等。

2.系統(tǒng)數(shù)據(jù)庫(kù)

Master:主系統(tǒng)數(shù)據(jù)庫(kù),記錄了系統(tǒng)級(jí)別的信息,并且記錄了登錄賬戶,系統(tǒng)配置和已連接的服務(wù)信息。Model:模板數(shù)據(jù)庫(kù).保存了創(chuàng)建數(shù)據(jù)庫(kù)所需要的模板信息。Tempdb :臨時(shí)數(shù)據(jù)庫(kù),保存所有的臨時(shí)表信息和臨時(shí)存儲(chǔ)過(guò)程。Msdb :記錄代理程序的調(diào)度信息,警報(bào),作業(yè)等信息。

2.數(shù)據(jù)庫(kù)操作

1.數(shù)據(jù)庫(kù)文件組成

1.主數(shù)據(jù)文件(.mdf)

要數(shù)據(jù)文件的建議文件擴(kuò)展名是 .mdf 。主要數(shù)據(jù)文件包含數(shù)據(jù)庫(kù)的啟動(dòng)信息,并指向數(shù)據(jù)庫(kù)中的其他文件,存儲(chǔ)部分或全部的數(shù)據(jù)。用戶數(shù)據(jù)和對(duì)象可存儲(chǔ)在此文件中,也可以存儲(chǔ)在次要數(shù)據(jù)文件中。每個(gè)數(shù)據(jù)庫(kù)有一個(gè)主要數(shù)據(jù)文件。 mdf 文件并非普通文件,因此不借助相應(yīng)軟件是無(wú)法打開 mdf 文件的。打開 mdf 文件的常用虛擬光驅(qū)軟件,主要有:Daemon Tools 、東方光驅(qū)魔術(shù)師等。

2.次要數(shù)據(jù)文件(*.ndf)

次要數(shù)據(jù)文件的建議文件擴(kuò)展名是 . ndf 。次要數(shù)據(jù)文件是可選的,由用戶定義并存儲(chǔ)用戶數(shù)據(jù),用于存儲(chǔ)主數(shù)據(jù)文件未能存儲(chǔ)的剩余數(shù)據(jù)和一些數(shù)據(jù)庫(kù)對(duì)象。通過(guò)將每個(gè)文件放在不同的磁盤驅(qū)動(dòng)器上,次要文件可用于將數(shù)據(jù)分散到多個(gè)磁盤上。如果數(shù)據(jù)庫(kù)超過(guò)了單個(gè) Windows 文件的最大大小,可以使用次要數(shù)據(jù)文件,這樣數(shù)據(jù)庫(kù)就能繼續(xù)增長(zhǎng)。

3.事務(wù)日志(*.ldf)

事務(wù)日志的建議文件擴(kuò)展名是 . ldf 。事務(wù)日志文件保存用于恢復(fù)數(shù)據(jù)庫(kù)的事務(wù)日志信息。數(shù)據(jù)庫(kù)的插入、刪除、更新等操作都會(huì)記錄在日志文件中,而查詢不會(huì)記錄在日志文件中。整個(gè)的數(shù)據(jù)庫(kù)有且僅有一個(gè)日志文件。每個(gè)數(shù)據(jù)庫(kù)必須至少有一個(gè)日志文件。

2.文件組

不同的文件可以存分布到不同的物理硬盤上,這樣便于分散硬盤IO,提高數(shù)據(jù)的讀取速度。 數(shù)據(jù)文件的組合,稱作文件組(File Group),數(shù)據(jù)庫(kù)不能直接設(shè)置存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)文件,而是通過(guò)文件組來(lái)指定。

1.文件和文件組的關(guān)系

SQL Server 的數(shù)據(jù)存儲(chǔ)在文件中,文件是實(shí)際存儲(chǔ)數(shù)據(jù)的物理實(shí)體,文件組是邏輯對(duì)象, SQL Server 通過(guò)文件組來(lái)管理文件。

一個(gè)數(shù)據(jù)庫(kù)有一個(gè)或多個(gè)文件組,其中主文件組(Primary File Group)是系統(tǒng)自動(dòng)創(chuàng)建的,用戶可以根據(jù)需要添加文件組。每一個(gè)文件組管理一個(gè)或多個(gè)文件,其中主文件組中包含主要數(shù)據(jù)文件(*. mdf),主文件組中也可以包含次要數(shù)據(jù)文件。(主要數(shù)據(jù)文件是系統(tǒng)默認(rèn)生成的,并且在數(shù)據(jù)庫(kù)中是唯一的;次要數(shù)據(jù)文件是用戶根據(jù)需要添加的。)除了主文件組之外,其他文件組只能包含輔助文件。如下示例數(shù)據(jù)庫(kù),系統(tǒng)已自動(dòng)創(chuàng)建主文件組 PRIMARY,勾選 Default 表示將主文件組設(shè)置為默認(rèn)文件組,即如果在 create table 和 create index時(shí)沒有指定 FileGroup 選項(xiàng),那么 SQL Server 將使用默認(rèn)的 PRIMARY 文件組來(lái)存儲(chǔ)數(shù)據(jù)。

文件組是一個(gè)邏輯實(shí)體,實(shí)際上,數(shù)據(jù)存儲(chǔ)在文件中( .mdf和.ndf )中,每一個(gè)文件組中都包含文件。

2.使用文件組的優(yōu)勢(shì)

在實(shí)際開發(fā)數(shù)據(jù)庫(kù)的過(guò)程中,通常情況下,用戶需要關(guān)注文件組,而不用關(guān)心文件的物理存儲(chǔ),即使DBA改變文件的物理存儲(chǔ),用戶也不會(huì)察覺到,也不會(huì)影響數(shù)據(jù)庫(kù)去執(zhí)行查詢。除了邏輯文件和物理文件的分離之外, SQL Server使用文件組還有一個(gè)優(yōu)勢(shì),那就是分散IO負(fù)載,其實(shí)現(xiàn)的原理是:對(duì)于單分區(qū)表,數(shù)據(jù)只能存到一個(gè)文件組中。如果把文件組內(nèi)的數(shù)據(jù)文件分布在不同的物理硬盤上,那么 SQL Server能同時(shí)從不同的物理硬盤上讀寫數(shù)據(jù),把IO負(fù)載分散到不同的硬盤上。對(duì)于多分區(qū)表,每個(gè)分區(qū)使用一個(gè)文件組,把不同的數(shù)據(jù)子集存儲(chǔ)在不同的磁盤上,SQL Server 在讀寫某一個(gè)分組的數(shù)據(jù)時(shí),能夠調(diào)用不同的硬盤IO。

3.數(shù)據(jù)庫(kù)操作

1.使用SSMS 方式

SSMS : Microsoft SqlServer Management Studio , 也就是數(shù)據(jù)庫(kù)管理軟件。 就是上圖這種通過(guò)圖形化界面來(lái)創(chuàng)建數(shù)據(jù)庫(kù)的方式。

2.T-SQL方式

1.創(chuàng)建數(shù)據(jù)庫(kù)

-- 創(chuàng)建數(shù)據(jù)庫(kù)

create database 第二單元測(cè)試

-- 指定數(shù)據(jù)文件存儲(chǔ)的文件組 on:在。。。。這上,primary:主文件組

on primary

(

-- 數(shù)據(jù)庫(kù)的邏輯名稱:相當(dāng)于是某人的外號(hào)

Name = '第二單元測(cè)試', -- 邏輯名稱需要是唯一

filename = 'D:\test\第二單元測(cè)試_物理名稱.mdf', -- 物理名稱

size=5mb, -- 文件初始大小,初始化必須>=5 ,因?yàn)閯?chuàng)建數(shù)據(jù)庫(kù)的model 模板信息 必須是

5mb以上

filegrowth = 4mb, -- 每次增長(zhǎng)多少

maxsize =200mb -- 文件的最大值

);

2.創(chuàng)建次文件

alter database 第二單元測(cè)試

add file

(

-- 數(shù)據(jù)庫(kù)的邏輯名稱:相當(dāng)于是某人的外號(hào)

Name = '第二單元測(cè)試_次文件',

filename = 'E:\test\第二單元測(cè)試_次文件.ndf', -- 物理名稱

size=5mb, -- 文件初始大小,初始化必須>=5 ,因?yàn)閯?chuàng)建數(shù)據(jù)庫(kù)的model 模板信息 必須是

5mb以上

filegrowth = 4mb, -- 每次增長(zhǎng)多少

maxsize =200mb -- 文件的最大值

)

3.簡(jiǎn)化創(chuàng)建數(shù)據(jù)庫(kù)(初學(xué)者推薦)

-- create database <數(shù)據(jù)庫(kù)名稱>;

create database 任我行教學(xué)管理系統(tǒng)

4.刪除數(shù)據(jù)庫(kù)

-- 切換數(shù)據(jù)庫(kù)

use master;

-- drop database <數(shù)據(jù)庫(kù)名稱>;

drop database 任我行教學(xué)管理系統(tǒng);

5.查看數(shù)據(jù)庫(kù)信息

-- exec sp_helpdb '<數(shù)據(jù)庫(kù)名稱>'

exec sp_helpdb 'Soa模擬考試'

6.修改數(shù)據(jù)庫(kù)名稱

-- exec sp_renamedb '<需要修改的數(shù)據(jù)庫(kù)的名稱>','<新的數(shù)據(jù)庫(kù)名稱>' ;

exec sp_renamedb

'第二單元測(cè)試', -- 需要修改的數(shù)據(jù)庫(kù)的名稱

'第二單元' -- 新的數(shù)據(jù)庫(kù)名稱

7.切換數(shù)據(jù)庫(kù)

-- use <數(shù)據(jù)庫(kù)名稱>

use 任我行教學(xué)管理系統(tǒng);

4.備份與還原

可能有一天,數(shù)據(jù)庫(kù)遭黑客攻擊,數(shù)據(jù)庫(kù)遭破壞,這個(gè)時(shí)候就需要時(shí)常的做文件的備份。也有可能公司來(lái)了一個(gè)馬大哈,把數(shù)據(jù)庫(kù)給刪除(刪庫(kù)跑路),這個(gè)時(shí)候也需要備份。

1.備份

-- backup database <數(shù)據(jù)庫(kù)名稱> to disk = '磁盤路徑';

backup database 第二單元測(cè)試 to disk ='D:\test\第二單元測(cè)試.bak';

2.還原

數(shù)據(jù)庫(kù)不存在的情況下:

-- restore database <數(shù)據(jù)庫(kù)名稱> from disk = '磁盤路徑'

restore database 第二單元測(cè)試 from disk = 'D:\test\第二單元測(cè)試.bak'

數(shù)據(jù)庫(kù)存在的情況下:

-- with replace:替換

-- restore database <數(shù)據(jù)庫(kù)名稱> from disk = '磁盤路徑' with replace;

restore database 第二單元測(cè)試 from disk = 'E:\test\第二單元測(cè)試.bak' with

replace;

5. 附加與分離

假設(shè)我有一個(gè)比較好的數(shù)據(jù)庫(kù),大家都想要,我可以發(fā)給你們,但是直接發(fā)送不了,因?yàn)闀?huì)提示“這個(gè)文件在數(shù)據(jù)庫(kù) SqlServer 中打開”,這個(gè)時(shí)候就需要使用分離,將這個(gè)數(shù)據(jù)庫(kù)文件從SqlServer 中 分離出去。

現(xiàn)在數(shù)據(jù)庫(kù)已經(jīng)分離并且數(shù)據(jù)庫(kù)也發(fā)給你們了,我自己也想要用這個(gè)數(shù)據(jù)庫(kù),這個(gè)時(shí)候就要重新的附加到 SQLSERVER 中來(lái)。

1.分離

-- execute:執(zhí)行

-- sp_detach_db:分離的存儲(chǔ)過(guò)程(理解為一個(gè)函數(shù))

-- execute sp_detach_db '<數(shù)據(jù)庫(kù)名稱>'

execute sp_detach_db 'Soa模擬考試'

2.附加

-- 附加

-- sp_attach_db:附加的存儲(chǔ)過(guò)程

-- exec sp_attach_db '<數(shù)據(jù)庫(kù)名稱>','<數(shù)據(jù)庫(kù)文件所在路徑>' ;

exec sp_attach_db 'Soa模擬考試','C:\Program Files\Microsoft SQL

Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\Soa模擬考試.mdf'

3.數(shù)據(jù)類型與表操作

1.數(shù)據(jù)類型

1.Character 字符串

2.Unicode 字符串

3.Binary 類型

4.Number 類型

5.Date 類型

6.其他數(shù)據(jù)類型

1.C# 中的 類型 對(duì)應(yīng)的 Sql 類型

2. Binary 類型可以存儲(chǔ)的類型有哪些

音頻,視頻,文件(圖片)

3.常用的數(shù)據(jù)庫(kù)類型有哪些

7.sql 中的Character和Unicode 區(qū)別

CHAR(n)類型 將 int ASCII 代碼轉(zhuǎn)換為字符的字符串函數(shù)。參數(shù)n是介于 0 和 255 之間的整數(shù)。如果整數(shù)表達(dá)式不在此范圍內(nèi),將返回 NULL 值。

nchar 和 nvarchar nchar 是固定長(zhǎng)度 Unicode 數(shù)據(jù)的數(shù)據(jù)類型, nvarchar 是可變長(zhǎng)度 Unicode 數(shù)據(jù)的數(shù)據(jù)類型,二者 均使用 UNICODE UCS-2 字符集。

nchar(n) 類型 包含 n 個(gè)字符的固定長(zhǎng)度 Unicode 字符數(shù)據(jù)。n 的值必須介于 1 與 4,000 之間。存儲(chǔ)大小為 n 字節(jié)的 兩倍。 nchar 在 SQL-92 中的同義詞為 national char 和 national character。

nvarchar(n) 類型 包含 n 個(gè)字符的可變長(zhǎng)度 Unicode 字符數(shù)據(jù)。n 的值必須介于 1 與 4,000 之間。字節(jié)的存儲(chǔ)大小是所 輸入字符個(gè)數(shù)的兩倍。所輸入的數(shù)據(jù)字符長(zhǎng)度可以為零。 nvarchar 在 SQL-92 中的同義詞為 national char varying 和 national character varying。

8.Char 與 varchar 對(duì)比

CHAR的長(zhǎng)度是不可變的,而VARCHAR的長(zhǎng)度是可變的,也就是說(shuō),定義一個(gè)CHAR[10]和 VARCHAR[10],如果存進(jìn)去的是‘ABCD’, 那么CHAR所占的長(zhǎng)度依然為10,除了字符‘ABCD’外,后面 跟六個(gè)空格,而VARCHAR的長(zhǎng)度變?yōu)?了,取數(shù)據(jù)的時(shí)候,CHAR類型的要用trim()去掉多余的空 格,而VARCHAR類型是不需要的。CHAR的存取速度要比VARCHAR快得多,因?yàn)槠溟L(zhǎng)度固定,方便程序的存儲(chǔ)與查找;但是CHAR 為此付出的是空間的代價(jià),因?yàn)槠溟L(zhǎng)度固定,所以難免會(huì)有多余的空格占位符占據(jù)空間,可以說(shuō)是以空間換取時(shí)間效率,而VARCHAR則是以空間效率為首位的。CHAR的存儲(chǔ)方式是,一個(gè)英文字符(ASCII)占用1個(gè)字節(jié),一個(gè)漢字占用兩個(gè)字節(jié);而 VARCHAR的存儲(chǔ)方式是,一個(gè)英文字符占用2個(gè)字節(jié),一個(gè)漢字也占用2個(gè)字節(jié)。兩者的存儲(chǔ)數(shù)據(jù)都是非unicode的字符數(shù)據(jù)。

2.數(shù)據(jù)表- table

數(shù)據(jù)表:相當(dāng)于是C#中的類,是用于存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)庫(kù)對(duì)象。

1.SSMS方式

在數(shù)據(jù)庫(kù)管理軟件中以圖形化的方式來(lái)創(chuàng)建表。

2.T-SQL 方式

通過(guò)代碼來(lái)創(chuàng)建表。

use step2_unit2;

--創(chuàng)建表格

create table Student

(

Id int,

StudentNo char(11),

Phone char(11),

Sex nchar(4)

);

--修改表格,添加姓名字段,varcahr(20)

alter table Student

add NickName varchar(20);

--修改字段類型,將NickName更改為nvarchar(30)

alter table Student

alter column NickName nvarchar(30);

--刪除字段

alter table Student

drop column NickName;

4.表約束

為了維護(hù)數(shù)據(jù)表的數(shù)據(jù)完整性而設(shè)定的一系列規(guī)則,防止用戶在數(shù)據(jù)表中插入一些錯(cuò)誤的數(shù)據(jù)。

1.表約束分類

主鍵約束:保證數(shù)據(jù)的完整性,唯一性,原子性(Id:編號(hào))。外鍵約束 例如:

唯一約束。檢查約束。默認(rèn)值約束。非空約束。

2.主鍵約束

1.簡(jiǎn)介

主鍵只能有一個(gè),但是可以由1-n個(gè)字段組成,多個(gè)字段組成的主鍵叫復(fù)合主鍵。

-- 在表中添加主鍵約束

create database 第四單元; -- 簡(jiǎn)寫的創(chuàng)建數(shù)據(jù)庫(kù)的語(yǔ)法,數(shù)據(jù)庫(kù)的相關(guān)參數(shù)都是默認(rèn)值

-- 切換數(shù)據(jù)庫(kù)

use 第四單元;

-- 第一種寫法

create table Category

(

-- 列級(jí)約束

Id int primary key identity, -- 商品分類編號(hào), primary key 是主鍵約束

CategoryName varchar(20)

)

-- 第二種寫法

create table Category2

(

Id int identity,

CategoryName varchar(20),

--primary key(Id)

-- 表級(jí)約束

constraint pk_category2_id primary key(id)

)

-- 第三種寫法,假設(shè)表已經(jīng)創(chuàng)建完畢,突然發(fā)現(xiàn),主鍵忘記創(chuàng)建了

create table Category3

(

Id int identity, -- 商品分類編號(hào), primary key 是主鍵約束

CategoryName varchar(20)

)

-- 表級(jí)約束

alter table Category3

add constraint pk_category3_id primary key(Id)

2.表級(jí)約束,列級(jí)約束

列約束是對(duì)某一個(gè)特定列的約束,包含在列定義中,直接跟在該列的其他定義之后,用空格分隔,不必指定列名。 表約束與列定義相互獨(dú)立,不包括在列定義中,通常用于對(duì)多個(gè)列一起進(jìn)行約束,與列定義用’,’分隔,定義表約束時(shí)必須指出要約束的那些列的名稱。

區(qū)別: 如果完整性約束涉及到該表的多個(gè)屬性列,必須定義在表級(jí)上,否則既可以定義在列級(jí)也可以定義在表級(jí)。

簡(jiǎn)而言之:

列級(jí)約束:列級(jí)約束是行定義的一部分,只能應(yīng)用于一列上。表級(jí)約束:表級(jí)約束是獨(dú)立于列的定義,可以應(yīng)用在一個(gè)表中的多列上。

3.復(fù)合主鍵

create table score

(

studentId int,

courseId int,

score int,

addTime datetime,

primary key(studentId,courseId) -- 復(fù)合主鍵

)

例如:

5.表數(shù)據(jù)操作

1.SSMS 方式

在數(shù)據(jù)庫(kù)管理軟件中以圖形化的方式來(lái)添加編輯數(shù)據(jù)。

2.T-SQL 方式

1.添加數(shù)據(jù)

數(shù)字不需要加單引號(hào)(加了也不會(huì)報(bào)錯(cuò),但不建議這么干),字符類型要加單引號(hào)(C#是雙引號(hào)表示字符串)。

create table Student

(

Id int primary key identity, -- 每添加一條數(shù)據(jù),Id從1開始,每次自增1

NickName nvarchar(15), -- unicode

StudentNo char(11) , -- 學(xué)號(hào)

Sex nchar(2),

Account varchar(20), -- 賬號(hào)

[Password] varchar(50) -- 密碼

);

create table Student

(

Id int primary key identity(2,2), -- 每添加一條數(shù)據(jù),Id從2開始,每次自增2

NickName nvarchar(15), -- unicode

StudentNo char(11) , -- 學(xué)號(hào)

Sex nchar(2),

Account varchar(20), -- 賬號(hào)

[Password] varchar(50) -- 密碼

);

insert into Student values

('娜娜','2002','女','user3','123456'),

('娜娜','2002','女','user3','123456'),

('娜娜','2002','女','user3','123456');

2.修改數(shù)據(jù)

-- 1.將密碼修改為 666666

-- 修改的語(yǔ)法結(jié)構(gòu):update 表 set 要修改的字段1= 字段1值,字段2 = 字段2值

update UserInfo set Pwd='666666' -- 這樣修改會(huì)把所有的數(shù)據(jù)都修改了

-- 現(xiàn)在將 編號(hào)為3,2 的用戶姓名 分別修改為 張三,李四

-- 語(yǔ)法結(jié)構(gòu): update 表 set 要修改的字段1= 字段1值,字段2 = 字段2值 where 條件字段

=條件值

update UserInfo set UserName='張三' where Id=3

update UserInfo set UserName='李四' where Id=2

-- 將密碼為 666666 并且姓張的同學(xué)的 年齡 修改為 25

-- %:0-n 個(gè)任意字符

update UserInfo set Age=25 where Pwd='666666' and UserName like '張%'

-- 將性別為男并且姓黃的同學(xué)的角色 修改為 超級(jí)管理員

-- 0:男 1:女 2:未知 3:保密

update UserInfo set RoleId='853d469f-7906-4eb6-9034-e4e1314db331' where

Sex=0 and UserName like '黃%'

-- 將 賬號(hào)包含了 admin 并且 年齡大于30歲的同學(xué)的 密碼修改為 1qaz2wsx 年齡 修改為 25

update UserInfo set Pwd='1qaz2wsx',Age=25 where Account like '%admin%' and

Age>30

3.刪除數(shù)據(jù)

-- 刪除用戶表中的數(shù)據(jù)

delete from Userinfo

select * from UserInfo -- 查詢用戶表

-- 刪除張三,李四兩位用戶

Delete from UserInfo where UserName='張三' or UserName= '李四'

-- in:在...里面

delete from UserInfo where UserName in('張三','李四')

-- 刪除用戶編號(hào)為:4,5,6 并且 性別 =3 的用戶信息

delete from UserInfo where Id in('4','5','6') and Sex='3'

或者

delete from UserInfo where Id in(4,5,6) and Sex=3

什么情況下,一定需要加引號(hào)? 字符串,一定需要加引號(hào),還有日期,時(shí)間,中文。 數(shù)字:可加可不加, 建議不要加。

4.清空數(shù)據(jù)

1.用法

-- 如何清空數(shù)據(jù)

delete from RoleInfo

-- 刪除用戶表中的數(shù)據(jù)

delete from Userinfo

select * from UserInfo -- 查詢用戶表

-- 清空數(shù)據(jù)

truncate table UserInfo ;

2.truncate 與 delete 的區(qū)別

truncate 是真正意義上的清空, 不能加任何查詢條件,自增id 會(huì)重置 delete 只是刪除數(shù)據(jù),如果Id是自增,則自增種子不會(huì)從頭開始。

5.聯(lián)級(jí)刪除,聯(lián)級(jí)更新

-- 角色表

create table RoleInfo

(

Id uniqueidentifier primary key,

RoleName varchar(50) not null ,

CreateTime datetime not null default getdate()

);

go

-- 用戶表

create table UserInfo

(

Id int primary key identity,

UserName varchar(50) not null,

-- 聯(lián)級(jí)刪除:on delete cascade,聯(lián)級(jí)更新

RoleId uniqueidentifier not null

foreign key references RoleInfo(Id) on delete cascade on update

cascade,

Account varchar(50) not null,

Pwd varchar(50) not null ,

Sex tinyint not null ,

Age tinyint not null

);

go

6.簡(jiǎn)單查詢

create database step2;

go

use step2;

go

-- 學(xué)生表

create table StudentInfo

(

stuId char(10) primary key, -- 主鍵

stuName varchar(20), -- 姓名

ClassId int, -- 班級(jí)編號(hào),邏輯外鍵,并不是真正的外鍵約束

stuPhone char(11), -- 電話號(hào)碼

stuSex char(4), -- 性別

stuBirthday datetime -- 生日

);

go

-- 班級(jí)表

create table ClassInfo

(

Id int primary key identity, -- 班級(jí)的主鍵

Name varchar(30), -- 班級(jí)名稱

College varchar(20) -- 學(xué)院

);

go

-- 成績(jī)表

create table StudentScore

(

Id int primary key identity, -- 成績(jī)的主鍵

stuId char(10), -- 學(xué)生外鍵

CourseName varchar(20), -- 課程

theoryScore int, -- 理論成績(jī)

skillScore int -- 技能成績(jī)

);

INSERT INTO

dbo.StudentInfo(stuId,stuName,ClassId,stuPhone,stuSex,stuBirthday)VALUES

('180325011','任我行',5,'13823204456','男', '1999-09-09'),

('180325012','張三',4,'13823204452','女', '1998-08-08'),

('180325013','李四',2,'18899251152','男', '1997-07-07'),

('180325014','王五',1,'13597445645','女', '1998-08-08'),

('180325015','帥天行',5,'13814204456','男', '1998-06-06'),

('180325016','葉星辰',5,'17623204936','男', '1998-05-05'),

('180325017','趙日天',0,'13922044932','男', '1997-07-15');

go

INSERT INTO dbo.ClassInfo(Name,College)VALUES

('軟件技術(shù)1班', '計(jì)算機(jī)系' ),

('會(huì)計(jì)1班', '經(jīng)濟(jì)管理系' ),

('會(huì)計(jì)2班', '經(jīng)濟(jì)管理系' ),

('歐美軟件外包班', '計(jì)算機(jī)系' ),

('會(huì)計(jì)3班', '經(jīng)濟(jì)管理系' );

go

INSERT INTO dbo.StudentScore(stuId,CourseName,theoryScore,skillScore)VALUES

( '180325011', '會(huì)計(jì)從業(yè)', 80, 90 ),

( '180325011', 'C# 入門編程', 99, 100 ),

( '180325012', 'SQLServer編程', 70, 75 ),

( '180325013', '會(huì)計(jì)從業(yè)', 93, 80 ),

( '180325014', 'C# 高級(jí)編程', 99, 99 ),

( '180325015', '會(huì)計(jì)從業(yè)', 74, 40 ),

( '180325015', 'C# 入門編程', 80, 90 );

--1.如何查看表中所有數(shù)據(jù)?

-- 查看學(xué)生表

-- select: 查詢

-- *:代表表中所有的列

select * from StudentInfo

-- * 號(hào),在數(shù)據(jù)庫(kù)優(yōu)化的章節(jié)中,不建議使用*號(hào),因?yàn)橄到y(tǒng)要解析這個(gè)*號(hào),需要一點(diǎn)點(diǎn)時(shí)間

-- 實(shí)際開發(fā)中,如果字段過(guò)多,我們查詢時(shí),只查出業(yè)務(wù)中所需要的字段

select stuName,stuId from StudentInfo

-- 查詢班級(jí)表,執(zhí)行

select id,Name,College from ClassInfo

--2.如何查詢指定幾個(gè)字段的值?

-- 查詢學(xué)生的姓名,性別,生日,班級(jí)

select stuName,stuSex,stuBirthday,ClassId from StudentInfo

--3.如何給字段取別名?(可以省略as)

-- 把學(xué)生表中所有的字段都取別名

select stuId as 學(xué)生主鍵,stuName as 姓名,ClassId 班級(jí)編號(hào),stuPhone 電話號(hào)碼,stuSex 性別,stuBirthday 生日 from StudentInfo

--4.distinct的用法?多個(gè)字段的用法?

-- distinct:去除重復(fù)項(xiàng)

select distinct ClassId from StudentInfo

select distinct stuSex from StudentInfo

-- 指的是兩個(gè)字段組合在一起,不會(huì)重復(fù)

select distinct stuSex,ClassId from StudentInfo

-- 這兩個(gè)結(jié)果集為什么會(huì)一樣?

select stuId,CourseName from StudentScore

-- disctinct 后面跟著幾個(gè)字段,表示 去除這幾個(gè)字段(組合在一起)重復(fù)的意思

select distinct stuId,CourseName from StudentScore

-- 這樣寫會(huì)去除重復(fù)嗎?

select distinct * from StudentInfo -- 這樣寫沒有意義,反而增加系統(tǒng)的開銷

--5.top 的用法?

-- 取前3條數(shù)據(jù)

-- top :前。。。條

select top 3 * from StudentInfo

--6.top ... percent(百分比)?

-- 查詢前30%的學(xué)生數(shù)據(jù)

-- 從這個(gè)故事告訴我們,數(shù)據(jù)沒有半條,向上取整

select top 30 percent * from StudentInfo

--7.查詢年齡大于20歲的?

-- year():獲取年份

-- 年齡 = 當(dāng)前年份 - 生日所在年份

select * from StudentInfo where (year(getdate())-year(stuBirthday))>20

-- 查詢學(xué)生的,姓名,性別,年齡 所有字段取別名

-- 年齡 = 當(dāng)前年份 - 生日所在年份

select stuName as 姓名,stuSex as 性別,(year(getdate())-year(stuBirthday)) as 年齡 from StudentInfo

-- 查詢80 后的女生

-- 80后:1980-1989

select * from StudentInfo where year(stuBirthday)>=1980 and year(stuBirthday)<=1989 and stuSex='女'

--9.查詢姓李的學(xué)生信息

-- like:模糊查詢,中文意思是:像。。。

select * from StudentInfo where stuName like '李%'

--10.列出技能成績(jī)大于90分的成績(jī)單

select * from StudentScore where skillScore>=90

--11.查詢課程包含”SqlServer”的成績(jī)信息

select * from StudentScore where CourseName like '%SqlServer%'

--12.查詢每個(gè)學(xué)生不同的成績(jī)列表

select distinct stuId,skillScore from StudentScore

--15.查詢年齡大于20歲前3條學(xué)生的姓名,年齡,所有字段取別名

select top 3 stuName as 姓名,stuSex as 性別 from StudentInfo where (year(getdate())-year(stuBirthday))>20

7.條件查詢和分組查詢

1.條件查詢

條件查詢是通過(guò)where子句進(jìn)行檢索的查詢方式。

select 字段名1, 字段名2, …, 字段名n from 數(shù)據(jù)表名 where 查詢條件

1.如何使用排序(升序,降序)

asc :表示升序(默認(rèn)排序方式) desc :降序 排序語(yǔ)法:select … from 表名 [條件] order by 要排序的字段 asc/desc

-- 將成績(jī)從高到低進(jìn)行排序

select * from StudentScore order by (theoryScore+skillScore)

-- 查詢學(xué)生表,按姓名升序顯示

select * from StudentInfo order by stuName asc -- asc 可以省略

2.多字段如何排序

語(yǔ)法: select … from 表名 [條件] order by 第一要排序的字段 asc/desc , 第二要排序的字段 asc/desc

-- 查詢成績(jī)表,先按學(xué)生編號(hào)從低到高排序,再按成績(jī)從高到低顯示

select * from StudentScore order by stuId asc,(theoryScore+skillScore) desc

-- 查詢學(xué)生信息,先按班級(jí)進(jìn)行升序,再按生日進(jìn)行降序

select * from StudentInfo order by ClassId asc ,stuBirthday desc

3.如何使用關(guān)系表達(dá)式查詢(大于,小于,等于)

-- 查詢 班級(jí)編號(hào) 在 1,3,5,7 里的學(xué)生信息

select * from StudentInfo where ClassId in(1,3,5,7)

-- 查詢班級(jí)編號(hào) 不是偶數(shù)的學(xué)生信息

select * from StudentInfo where ClassId%2!=0

-- 查詢技能成績(jī)大于90分的成績(jī)信息

select * from StudentScore where skillScore>90

4.如何使用between…and 的語(yǔ)法

between … and :在…之間,應(yīng)用范圍:數(shù)字類型

-- 查詢技能成績(jī)?cè)?0-80之間的成績(jī)信息

-- 寫法1

select * from StudentScore where skillScore between 60 and 80

-- 寫法2

select * from StudentScore where skillScore>=60 and skillScore<=80

5.如何統(tǒng)計(jì)個(gè)數(shù),平均分,最大數(shù),最小數(shù),求和

-- 統(tǒng)計(jì)學(xué)生的個(gè)數(shù)

select count(stuId) from StudentInfo

-- 統(tǒng)計(jì)女生的個(gè)數(shù)

select count(stuId) as 女生個(gè)數(shù) from StudentInfo where stuSex='女'

-- 查詢學(xué)生平均分

select avg(skillScore+theoryScore) from StudentScore

-- 查詢課程名稱為'C# 入門編程'的平均分

select avg(skillScore+theoryScore) from StudentScore where CourseName='C#

入門編程'

-- 查詢班級(jí)編號(hào)最大的班級(jí)

-- 寫法1

select max(classId) from StudentInfo

-- 寫法2

select top 1 (skillScore+theoryScore) from StudentScore order by

(skillScore+theoryScore) desc

-- 計(jì)算最低分

-- 寫法1

select min(skillScore+theoryScore) from StudentScore

-- 寫法2

select top 1 (skillScore+theoryScore) from StudentScore order by

(skillScore+theoryScore) asc

-- 計(jì)算技能總分

select sum(skillScore) from StudentScore

-- 計(jì)算學(xué)生編號(hào)為180325011 的技能總分

select sum(skillScore) from StudentScore where stuId='180325011'

-- 查詢有多少個(gè)人參加了考試

select count(distinct stuId) from StudentScore

2.聚合函數(shù)

將所有聚合函數(shù)寫在一起。

select count(distinct stuId) 學(xué)生數(shù)量,Min(skillScore) 最小值,Max(skillScore) 最大值,Sum(skillScore) 總和 from StudentScore

3.exists 查詢

功能:用于嵌套查詢。

exists后的查詢語(yǔ)句有結(jié)果則為真,無(wú)結(jié)果則為假,如果為真,則執(zhí)行外層查詢,否則外層查詢不執(zhí)行。

語(yǔ)法格式:

select 字段名1, 字段名2, …, 字段名n from 數(shù)據(jù)表名 where exists(select 字段名 from 數(shù)據(jù)表名 where …)

-- 如果存在大于20歲,則查詢結(jié)果,

select * from StudentInfo where exists (select * from StudentInfo where year(getdate())-year(stuBirthday)>20)

--如果班級(jí)里面有兩個(gè)以上的老王,則把老王的信息查詢出來(lái)

select * from StudentInfo where exists (select * from(select count(stuId) as 數(shù)量 from StudentInfo where stuName like '王%') a where a.數(shù)量>=1)

4.分組查詢

如何使用分組查詢?他們的關(guān)鍵字分別是什么?

語(yǔ)法:select 要分組的字段,聚合函數(shù) from 表名 group by 要分組的字段

--9.計(jì)算每門課程的平均分

select CourseName, avg(skillScore) as 平均分 from StudentScore group by CourseName

--10.統(tǒng)計(jì)每個(gè)學(xué)生的平均分

select stuId,avg(skillScore+theoryScore) from StudentScore group by stuId

-- 統(tǒng)計(jì)每個(gè)班級(jí)有多少個(gè)學(xué)生

select ClassId,Count(stuId) as 個(gè)數(shù) from StudentInfo group by ClassId

-- 統(tǒng)計(jì)每門課程有多少位同學(xué)在學(xué)習(xí)

select CourseName,count(stuId) from StudentScore group by CourseName

-- 統(tǒng)計(jì)每個(gè)學(xué)生學(xué)習(xí)了多少門課程

select stuId,count(CourseName) from StudentScore group by stuId

--11.查看每一門課程的平均分,總分,最高分,最低分

select CourseName,avg(skillScore),sum(skillScore),max(skillScore),min(skillScore) from StudentScore group by CourseName

-- 11.1 查詢每門課程,每個(gè)學(xué)生的最低分

select CourseName,stuId,min(skillScore) from StudentScore group by CourseName,stuId

--12.統(tǒng)計(jì)每門課程的最低分,并且查詢出70分以上的

-- having:在分組的基礎(chǔ)之上進(jìn)行數(shù)據(jù)過(guò)濾

select CourseName,min(skillScore) from StudentScore group by CourseName having min(skillScore)>70

--13.統(tǒng)計(jì)每門課程,但不包含課程C# 入門編程的最低分,并且查詢出70分以上的

-- 13.1統(tǒng)計(jì)每門課程最低分

select CourseName,min(skillScore) from StudentScore group by CourseName

-- 13.2 在統(tǒng)計(jì)之前加上where 課程!=C# 入門編程

select CourseName,min(skillScore) from StudentScore where CourseName!='C# 入門編程' group by CourseName

-- 13.3 在統(tǒng)計(jì)之后加上having 最低分>=70

select CourseName,min(skillScore) from StudentScore where CourseName!='C# 入門編程' group by CourseName having min(skillScore)>70

--14.查詢每門課程學(xué)習(xí)的人數(shù)大于等于2人的課程名稱與學(xué)習(xí)人數(shù)。

select CourseName,count(stuId) from StudentScore group by CourseName having count(stuId)>=2

-- 15.查詢不只學(xué)了一門課程的學(xué)生編號(hào)與學(xué)習(xí)的課程數(shù)

-- 翻譯成人話:每個(gè)學(xué)生學(xué)習(xí)的課程數(shù),并且學(xué)習(xí)的數(shù)量大于1

select stuId,count(CourseName) from StudentScore group by stuId having count(CourseName)>1

5.作業(yè)

創(chuàng)建數(shù)據(jù)庫(kù)Education_DB,創(chuàng)建表(根據(jù)說(shuō)明創(chuàng)建符合規(guī)范的表),如圖所示:

課程表:

用戶選課表:

需求描述:

創(chuàng)建兩張表并添加約束。每張表添加5條數(shù)據(jù)。查詢用戶選課信息表的前3條數(shù)據(jù)。查詢用戶選課信息表中年齡大于20的用戶信息。查詢用戶選課信息表中性別為女的信息 。查詢用戶選課信息表中用戶名稱、用戶性別和用戶年齡并為查詢的字段起中文別名。查詢用戶選課信息表的信息并按照年齡升序排列。查詢用戶選課信息表中所有用戶的年齡總和。查詢用戶選課信息表中所有用戶的最小年齡。查詢用戶選課信息表中所有用戶的最大年齡 。查詢用戶選課信息表中所有用戶的平均年齡。查詢用戶選課信息表中一共有多少條數(shù)據(jù) 。查詢姓李的用戶信息。查詢姓張的兩個(gè)字的用戶信息。查詢每個(gè)課程有多少人選擇 。查詢大于平均年齡的用戶信息 。查詢大于平均年齡的前2條信息。查詢學(xué)習(xí)C#課程的人數(shù)。

答案示例(不唯一):

--2.每張表添加5條數(shù)據(jù)

insert into Course(CourseName) values ('語(yǔ)文');

insert into Course(CourseName) values ('數(shù)學(xué)');

insert into Course(CourseName) values ('英語(yǔ)');

insert into Course(CourseName) values ('物理');

insert into Course(CourseName) values ('化學(xué)');

insert into Course(CourseName) values ('操作系統(tǒng)');

insert into Course(CourseName) values ('數(shù)據(jù)結(jié)構(gòu)');

insert into Course(CourseName) values ('語(yǔ)文');

insert into Customer(Customer_Name,Customer_Sex,Customer_Age,Customer_Phone,Customer_Address,CourseId) values('鋼鐵俠','男','21','111111','NewYork','1');

insert into Customer(Customer_Name,Customer_Sex,Customer_Age,Customer_Phone,Customer_Address,CourseId) values('蜘蛛俠','男','18','222222','London','2');

insert into Customer(Customer_Name,Customer_Sex,Customer_Age,Customer_Phone,Customer_Address,CourseId) values('綠巨人','男','30','333333','NewYork','3');

insert into Customer(Customer_Name,Customer_Sex,Customer_Age,Customer_Phone,Customer_Address,CourseId) values('緋紅女巫','女','24','444444','California','4');

insert into Customer(Customer_Name,Customer_Sex,Customer_Age,Customer_Phone,Customer_Address,CourseId) values('黑寡婦','女','23','555555','Los Angeles','5');

insert into Customer(Customer_Name,Customer_Sex,Customer_Age,Customer_Phone,Customer_Address,CourseId) values('張大中','女','24','444444','California','6');

insert into Customer(Customer_Name,Customer_Sex,Customer_Age,Customer_Phone,Customer_Address,CourseId) values('張三','女','23','555555','Los Angeles','7');

insert into Customer(Customer_Name,Customer_Sex,Customer_Age,Customer_Phone,Customer_Address,CourseId) values('王五','男','29','666666','Los Angeles','1');

--3.查詢用戶選課信息表的前3條數(shù)據(jù)

select top 3 * from Customer;

--4.查詢用戶選課信息表中年齡大于20的用戶信息

select * from Customer where Customer_Age>20;

--5.查詢用戶選課信息表中性別為女的信息

select *from Customer where Customer_Sex='女';

--6.查詢用戶選課信息表中用戶名稱、用戶性別和用戶年齡并為查詢的字段起中文別名

select Customer_Name as 名字,Customer_Sex as 性別,Customer_Age as 年齡 from Customer;

--7.查詢用戶選課信息表的信息并按照年齡升序排列

select *from Customer order by Customer_Age;

--8.查詢用戶選課信息表中所有用戶的最小年齡

select min(Customer_Age) from Customer;

--9.查詢用戶選課信息表中所有用戶的最大年齡

select max(Customer_Age) from Customer;

--10.查詢用戶選課信息表中所有用戶的平均年齡

select avg(Customer_Age) from Customer;

--11.查詢用戶選課信息表中一共有多少條數(shù)據(jù)

select count(Customer_Age) from Customer;

--12.查詢姓李的用戶信息

select *from Customer where Customer_Sex like '李';

--13.查詢姓張的兩個(gè)字的用戶信息

select *from Customer where Customer_Name like '張_';

--14.查詢每個(gè)課程有多少人選擇

select count(Customer_Name) from Customer group by CourseId;

--15.查詢大于平均年齡的前2條信息

select top 2 * from Customer where Customer_Age >(select avg(Customer_Age) from Customer);

--16.查詢學(xué)習(xí)語(yǔ)文課程的人數(shù)

select *from Customer where CourseId in

(

select CourseId from Course where CourseName='語(yǔ)文'

)

8.嵌套查詢

ClassInfo: StudentInfo: StudentScore:

--1.查詢軟件技術(shù)1班的所有學(xué)生信息

--思路:--分析可得:這需要綜合查詢2張表格,那么就要通過(guò)外鍵來(lái)連接2張表格進(jìn)行綜合查詢

--1.找表:學(xué)生表,班級(jí)表,外鍵:ClassId

--2.根據(jù)已經(jīng)條件查詢外鍵的值

--3.根據(jù)外鍵的值查詢出題目的所有要求

select *from StudentInfo where ClassId=

(

select Id from ClassInfo where Name='軟件技術(shù)1班'

);

--2.查詢?nèi)挝倚型瑢W(xué)的所有成績(jī)

--思路:

--1.找外鍵 stuId

--2.根據(jù)已經(jīng)條件查詢外鍵的值

--3.根據(jù)外鍵的值查詢出題目要求的成績(jī)信息

select * from StudentScore where stuId=

(

select stuId from StudentInfo where stuName='任我行'

);

--3.查詢'張三'同學(xué)所在班級(jí)信息

select *from ClassInfo where Id=

(

select ClassId from StudentInfo where stuName='張三'

)

--4.查詢學(xué)號(hào)為'180325011'的同學(xué)所在班級(jí)所有男生的信息

select *from StudentInfo where ClassId=

(

select ClassId from StudentInfo where stuId='180325011'

) and stuSex='男';

--5.查詢班級(jí)名為“軟件技術(shù)1班”一共有多少個(gè)女生信息

select * from StudentInfo where ClassId=

(

select ClassId from ClassInfo where Name='軟件技術(shù)1班'

) and stuSex='女';

--6.查詢電話號(hào)為“18899251152”同學(xué)所在的班級(jí)信息

select * from ClassInfo where Id=

(

select ClassId from StudentInfo where stuPhone='18899251152'

);

--7.查詢所有成績(jī)高于平均分的學(xué)生信息

select * from StudentInfo where stuId in

(

-- 查詢出高于平均分的Stuid

select stuId from StudentScore where skillScore>=

(

select AVG(skillScore) from StudentScore

)

);

--8.查詢所有年齡小于平均年齡的學(xué)生信息

select * from StudentInfo where (year(getdate())-year(stuBirthday))<

(

-- 計(jì)算平均年齡

select avg(year(getdate())-year(stuBirthday)) from StudentInfo

);

--9.查詢不是軟件技術(shù)1班級(jí)的學(xué)生信息

--寫法1:

select * from StudentInfo where ClassId not in

(

select Id from ClassInfo where Name='軟件技術(shù)1班'

);

--寫法2:

select * from StudentInfo where ClassId !=

(

select Id from ClassInfo where Name='軟件技術(shù)1班'

);

--10.查詢所有班級(jí)人數(shù)高于平均人數(shù)的班級(jí)信息

-- 每個(gè)班有多少人

select * from ClassInfo where Id in

(

select ClassId from StudentInfo group by ClassId having count(stuId)>

(

-- 求平均人數(shù)

select avg(人數(shù))from

(

select count(stuId) as 人數(shù) from StudentInfo group by ClassId

) aa

)

);

--11.查詢成績(jī)最高的學(xué)生信息

select * from StudentInfo where stuId in

(

select stuId from StudentScore where skillScore =

(

select MAX(skillScore) from StudentScore

)

);

--12.查詢班級(jí)名是“會(huì)計(jì)1班”所有學(xué)生(使用in 關(guān)鍵字查詢)

select * from StudentInfo where ClassId in

(

select Id from ClassInfo where Name='會(huì)計(jì)1班'

);

--13.查詢年齡是16、18、21歲的學(xué)生信息

select * from StudentInfo where (year(getdate())-year(stuBirthday)) in (16,18,21);

--14.查詢所有17-20歲且成績(jī)高于平均分的女生信息

select * from StudentInfo where (year(getdate())-year(stuBirthday)) between 17 and 20 and stuSex='女' and stuId in

(

select stuId from StudentScore where skillScore>

(

select avg(skillScore) from StudentScore

)

);

--15.查詢不包括'張三'、'王明'、'肖義'的所有學(xué)生信息(not in 關(guān)鍵字查詢)

select * from StudentInfo where stuName not in('張三','王明','肖義')

--16.查詢不是“計(jì)算機(jī)系”學(xué)院的所有學(xué)生(not in 關(guān)鍵字查詢)

select * from StudentInfo where ClassId not in

(

select Id from ClassInfo where College='計(jì)算機(jī)系'

);

--17.-查詢成績(jī)比學(xué)生編號(hào)為'180325011','180325012'其中一位高的同學(xué)

-- any,some:某一個(gè),其中一個(gè)

select * from StudentInfo where stuId in

(

select stuId from StudentScore where skillScore> some

(

select skillScore from StudentScore where stuId in('180325011','180325012')

)

);

--18.查詢成績(jī)比學(xué)生編號(hào)為'180325011','180325012'都高的同學(xué)(all)

-- all:所有

select * from StudentInfo where stuId in

(

select stuId from StudentScore where skillScore> all

(

select skillScore from StudentScore where stuId in('180325011','180325012')

)

);

--19.-Row_Number() Over(Order by 字段):按某個(gè)字段進(jìn)行編號(hào)排名

-- 以stuId進(jìn)行升序排名

select Row_Number() Over(Order by stuId) ,* from StudentInfo

--20.按總成績(jī)降序排序并給每一位同學(xué)進(jìn)行編號(hào)

select Row_Number() Over(Order by skillScore desc) as 排名, * from StudentScore

--21.按總成績(jī)降序排序后查詢4-8名的學(xué)生信息

select * from

(

select Row_Number() Over(Order by (skillScore+theoryScore) desc) as 排名, * from StudentScore

)

aa where aa.排名 between 4 and 8;

--22.sqlserver 2012以后,offset rows fetch next rows only用于從有序的結(jié)果集中,跳過(guò)一定數(shù)量的數(shù)據(jù)行,獲取指定數(shù)量的數(shù)據(jù)行,從而達(dá)到數(shù)據(jù)行分頁(yè)的目的

-- offset:在。。。位置

select * from StudentScore order by (skillScore+theoryScore) desc offset 3 rows fetch next 5 rows only;

--23.獲取按Id排序后的第3-5位同學(xué)信息

select * from

(

select Row_Number() Over(Order by StuId) as 排名, * from StudentScore

)

aa where aa.排名 between 3 and 5;

--24.

select * from StudentScore order by Id offset 2 rows fetch next 3 rows only;

9.連接查詢

連接查詢就是把多張表連接成一張表。

其實(shí)連接查詢和上面學(xué)習(xí)過(guò)的嵌套查詢,都屬于共同查詢多個(gè)表。但是,嵌套查詢用的并不是很多,而且也不簡(jiǎn)單(但是嵌套查詢也要會(huì)。)。連接查詢也是很重要的一個(gè)知識(shí)點(diǎn)。

內(nèi)連接會(huì)把兩表中匹配上的數(shù)據(jù)進(jìn)行連接顯示,注意是匹配上的數(shù)據(jù),如果匹配不上就不會(huì)顯示。

1.連接查詢的分類

內(nèi)連接。外連接(左外連接,右外連接,全連接)。自連接。交差連接(用處不大,暫時(shí)不學(xué))。

2.內(nèi)連接

1.簡(jiǎn)介

以下為2張表的結(jié)構(gòu):

語(yǔ)法格式:select 字段列表 from 表1 inner join 表2 on 表1.外鍵=表2.外鍵。

注意:

Join 與 inner join等效(默認(rèn)為內(nèi)連接)。inner join:內(nèi)連接。on:當(dāng)…時(shí)。在使用連接時(shí),盡量避免使用 * 獲取字段。

代碼示例:

--2.查詢部門編號(hào)、部門名

select Id,DName from Dept;

--3.查詢員工姓名,薪資

select * from Emp;

--4.查詢員工姓名,薪資,所在部門

select *from Emp inner join Dept on Emp.Did=Dept.Id;

--5.查詢分配了部門的員工信息和相應(yīng)的部門信息(內(nèi)連接)

select a.*,b.DName from Emp a join Dept b on a.Did=b.Id; --這里分別對(duì)2張表格取了別名

2.等值內(nèi)連接

條件是等量關(guān)系。

select * from 表1 (inner) join 表2 on 表1的主鍵列 = 表2的外鍵列

注:表1是主鍵表,表2是外鍵表

仍然以上文中嵌套查詢中的3張表為例:

use step2;

-- 1.查詢出分配了班級(jí)的學(xué)生和班級(jí)信息

select a.*,b.Name,b.College from StudentInfo a inner join ClassInfo b on a.ClassId=b.Id;

-- 2.查詢出軟件技術(shù)1班的學(xué)生和班級(jí)信息

select a.*,b.Name,b.College from StudentInfo a inner join ClassInfo b on a.ClassId=b.Id where b.Name='軟件技術(shù)1班'

-- 3.查詢分配了班級(jí),年齡又在20歲以上的學(xué)生和班級(jí)信息

select a.*,b.Name,b.College from StudentInfo a inner join ClassInfo b on a.ClassId=b.Id where (year(getdate())-year(stuBirthday))>20;

-- 4.查詢分配了班級(jí),年齡又在20-24之間的學(xué)生和班級(jí)信息

select a.*,b.Name,b.College from StudentInfo a inner join ClassInfo b on a.ClassId=b.Id where (year(getdate())-year(stuBirthday)) between 20 and 24;

-- 5.查詢沒有學(xué)生的班級(jí)名稱

-- 如果這個(gè)班有學(xué)生,是不是一定會(huì)在學(xué)生中有classId

-- 如果說(shuō)在學(xué)生表中沒有出現(xiàn)的classId,是不是就表示 那個(gè)班沒有學(xué)生呢?

select Name from ClassInfo where id not in

(

select classId from StudentInfo

);

-- 6.查詢分配了班級(jí),性別又為女的學(xué)生和班級(jí)信息

select stuName,stuBirthday,Name,College from StudentInfo a inner join ClassInfo b on a.ClassId=b.Id where stuSex='女';

3.不等連接

連接條件中的關(guān)系是非等量關(guān)系,就是使用除(=)以外的比較運(yùn)算符查詢的內(nèi)連接, 如:>,>=,<=,<,!>,!<,<> ,!=。

-- 1.每位同學(xué)除了自己所屬的班級(jí)外查詢出其余可選擇的班級(jí)

select * from StudentInfo a join ClassInfo b on a.ClassId!=b.Id;

-- 2.查詢其他同學(xué)的成績(jī)

select * from StudentInfo a join StudentScore b on a.stuId!=b.stuId;

3.自連接

一張表看做兩張表,自己連自己。

create table menu

(

Id int primary key identity,

Name varchar(30), -- 菜單名稱

ParentId int -- 上級(jí)菜單

) ;

insert into menu values('商品管理',0),('系統(tǒng)管理',0),('訂單管理',0) ;

insert into menu values('商品列表',1),('商品分類',1),('發(fā)布商品',1) ;

insert into menu values('權(quán)限管理',2),('用戶管理',2),('角色管理',2) ;

insert into menu values('訂單列表',3),('運(yùn)費(fèi)模板',3),('物流跟蹤',3) ;

-- 查詢所有菜單信息以及它的上級(jí)菜單名稱

-- 自連接一定要取別名

select a.*,b.Name from menu a inner join menu b on a.ParentId=b.Id;

4.外連接

外連接是以一張表為基表,返回基表中所有記錄及連接表中 符合條件的記錄的連接查詢。外連接分為以下3種:

左外連接 。右外連接 。全外連接。

1.左外連接

是以左表為基表,返回左表中所有記錄及連接表中符合條件的記錄的外連接:

以左表為基表 。返回左表中所有數(shù)據(jù)。連接表不符合條件以NULL填充。

數(shù)據(jù)庫(kù)表仍以上文中嵌套查詢表為例:

use step2;

-- 1.查詢所有學(xué)生信息以及對(duì)應(yīng)的班級(jí)信息(要求顯示學(xué)生編號(hào),學(xué)生姓名,班級(jí)編號(hào),班級(jí)名稱)

-- 左外連接:left outer join

select * from StudentInfo a left outer join ClassInfo b on a.ClassId =b.Id;

-- 左連接:以左表主表,不管是否匹配上,都會(huì)把左表中的數(shù)據(jù)都顯示出來(lái),未匹配的數(shù)據(jù)會(huì)以NULL進(jìn)行填充

2.右外連接

是以右表為基表,返回右表中所有記錄及連接表中符合條件的記錄的外連接:

以右表為基表 。返回右表中所有數(shù)據(jù) 。連接表不符合條件以NULL填充。

-- 1.查詢所有班級(jí)信息以及對(duì)應(yīng)的學(xué)生信息(要求顯示學(xué)生編號(hào),學(xué)生姓名,班級(jí)編號(hào),班級(jí)名稱)

select * from StudentInfo a right outer join ClassInfo b on a.ClassId=b.Id;

-- 右連接:以右表為主表,不管是否匹配上,都會(huì)把右表中的數(shù)據(jù)都顯示出來(lái),未匹配上的數(shù)據(jù)會(huì)以NULL進(jìn)行填充

3.全外連接

是分別以左右表為基表的外連接:

將左表和右表所有的記錄都顯示。連接表不符合條件以NULL填。

-- 1.查詢所有學(xué)生信息以及所有班級(jí)信息(要求顯示學(xué)生編號(hào),學(xué)生姓名,班級(jí)編號(hào),班級(jí)名稱)

-- 全連接:full join,不管是否有沒有匹配上,都會(huì)顯示

select * from StudentInfo a full outer join ClassInfo b on a.ClassId=b.Id

5.聯(lián)合查詢

連接查詢可以理解為把多張表的數(shù)據(jù)綜合橫著顯示。 而聯(lián)合查詢可以理解為把多張表的數(shù)據(jù)豎著綜合顯示。

create table course1

(

Id int primary key,

Name varchar(30)

);

create table course2

(

Id int primary key,

Name varchar(30)

);

insert into course1 values(1,'c#'),(2,'sql'),(3,'.net core'),(4,'mysql');

insert into course2 values(1,'c#'),(2,'sql'),(3,'asp.net core'),

(4,'docker');

select *from course1;

select *from course2;

如圖,2張表數(shù)據(jù)分別為: 現(xiàn)在通過(guò)聯(lián)合查詢將2個(gè)表的數(shù)據(jù)合并在一起(相當(dāng)于豎著堆疊在一起): 以下為操作語(yǔ)句:

select *from course1

union all

select *from course2

執(zhí)行結(jié)果:

6.作業(yè)

Students(學(xué)生表):

Teachers(老師表):

Courses(課程表):

Scores(成績(jī)表):

開發(fā)要求:

使用SSMS或SQL語(yǔ)句創(chuàng)建數(shù)據(jù)庫(kù)。按數(shù)據(jù)字典要求創(chuàng)建表結(jié)構(gòu)。分別給各表按照下列語(yǔ)句添加數(shù)據(jù):

--1.向表Students中添加數(shù)據(jù)

insert into Students values('馮程',20,0)

insert into Students values('許文強(qiáng)',18,1)

insert into Students values('凌凌七',19,0)

insert into Students values('莫向南',22,1)

insert into Students values('路寶妮',25,0)

insert into Students values('鳳凰',16,1)

--2.向表Teachers中添加數(shù)據(jù)

insert into Teachers values('梁冰','112')

insert into Teachers values('李劍','113')

insert into Teachers values('耿彬彬','001')

insert into Teachers values('劉龍飛','002')

insert into Teachers values('吳慧敏','116')

insert into Teachers values('張靜敏','068')

insert into Teachers values('劉澤飛','167')

insert into Teachers values('項(xiàng)天佑','153')

--3.向表Courses中添加數(shù)據(jù)

insert into Courses values('C#入站編程',3)

insert into Courses values('SQL Server',3)

insert into Courses values('ASP.NET Core',5)

insert into Courses values('前端入門',6)

insert into Courses values('ASP.NET WebApi',8)

insert into Courses values('Linux虛擬化技術(shù)',1)

insert into Courses values('MySQL',1)

--4.向表Scores中添加數(shù)據(jù)

insert into Scores values(100,6,1)

insert into Scores values(90,3,1)

insert into Scores values(100,3,2)

insert into Scores values(99,3,3)

insert into Scores values(95,3,4)

insert into Scores values(90,3,5)

insert into Scores values(91,3,6)

insert into Scores values(89,3,7)

insert into Scores values(100,1,3)

insert into Scores values(70,1,4)

insert into Scores values(100,2,3)

insert into Scores values(80,2,1)

insert into Scores values(90,2,2)

4. 使用SQL語(yǔ)句查詢?nèi)缦拢?/p>

查詢學(xué)生表中的前5條記錄并按照年齡進(jìn)行降序排序,顯示字段為中文:學(xué)號(hào),姓名,年齡,性別。查詢姓“李”的老師的個(gè)數(shù)。查詢學(xué)生表中年齡大于16歲的男生信息。統(tǒng)計(jì)每個(gè)教師所教的課程數(shù)量,顯示字段包括老師編號(hào),課程數(shù)量。查詢“梁冰”老師所教課程的信息。查詢成績(jī)最高的學(xué)生編號(hào)及學(xué)生姓名。按成績(jī)進(jìn)行降序排序,查詢第6名到第10名的成績(jī)信息。按學(xué)生編號(hào)分組,查詢平均成績(jī)大于90分的同學(xué)的學(xué)生編號(hào)和平均成績(jī)。查詢所有的課程信息及對(duì)應(yīng)的老師信息,顯示字段包含課程編號(hào)、課程名稱、老師編號(hào)、老師姓 名。查詢學(xué)過(guò)“耿彬彬”老師所教課程的同學(xué)的學(xué)號(hào)、姓名。每行SQL語(yǔ)句添加注釋。

代碼:

--1.查詢學(xué)生表中的前5條記錄并按照年齡進(jìn)行降序排序,顯示字段為中文:學(xué)號(hào),姓名,年齡

select Id 學(xué)號(hào),Name 姓名,Age 年齡,Sex 性別 from Students order by Age desc;

--2.查詢姓“李”的老師的個(gè)數(shù)

select * from Teachers where Name like '李%';

--3.查詢學(xué)生表中年齡大于16歲的男生信息

select *from Students where Age>=16 and Sex=1;

--4.統(tǒng)計(jì)每個(gè)教師所教的課程數(shù)量,顯示字段包括老師編號(hào),課程數(shù)量

柚子快報(bào)激活碼778899分享:SqlServer基礎(chǔ)學(xué)習(xí)筆記

http://yzkb.51969.com/

精彩文章

評(píng)論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19067588.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄