《C#語言和資料庫技術基礎》第一章1..NET Framework 框架2.sharp 尖銳3.application 應用程式4.developer 開發者5.network 網路6.build 建造,建築7.console 控制台8.debug 調試9.namespace 命名空間10.proj ...
《C#語言和資料庫技術基礎》
第一章
1..NET Framework 框架
2.sharp 尖銳
3.application 應用程式
4.developer 開發者
5.network 網路
6.build 建造,建築
7.console 控制台
8.debug 調試
9.namespace 命名空間
10.project 項目
11.solution 解決方案
12.watch 手錶
第二章
1.break 中斷
2.continue 繼續
3.switch 開關
4.array 數組
5.each 每個
6.while 一會兒,時間
第三章
1.private 私人
2.public 公開
3.get 得到
4.set 設置
5.value 價值
6.this 這,這個
7.property 屬性
8.ref 參考
第四章
1.format 格式
2.equals 等於
3.convert 轉換
4.index 索引
5.join 加入
6.split 分裂
7.substring 子鏈
8.trim 修剪
第六章
1.database 資料庫
2.edition 版本
3.studio 工作室
4.analysis 分析
5.table 表
6.relationship 關係
7.management 管理
8.administrator 管理員
9.record 記錄
10.row 行
11.entity 實體
12.transaction 事物
13.DBMS 資料庫管理系統
14.DBS 資料庫系統
15.DBA 資料庫管理員
第七章
1.constraint 約束
2.primary 初級
3.binary 二進位
4.foreign 國外的有
5.check 檢查
6.course 課程
7.score 評分
第八章
1.structured 結構
2.query 查詢
3.language 語言
4.transact 辦理
5.insert 插入
6.update 更新
7.delete 刪除
8.truncate 截斷
9.employee 員工人數
10.default 預設
11.manipulation 操縱
12.definition 定義
第九章
1.recordset 記錄設置
2.order 訂購
3.null 空
4.trim 修剪
5.replace 替換
6.floor 樓層
7.ceiling 天花板
8.round 回合
9.convert 轉換
10.length 長度
第十章
1.between 在…之間
2.business 業務範圍
3.count 計數
4.landlord 房東
5.exchange 交流
6.salary 工資
7.education 教育
第十一章
1.group 組
2.join 加入
3.left 左
4.right 右
5.outer 外
6.client 客戶端
第十三章
1.online 線上
2.nickname 昵稱
3.province 省
4.relation 關係
5.base 基地
6.master 主人,雇主
第十四章
1.active 活動
2.object 對象
3.connection 連接
3.command 命令
4.execute 執行
5.query 查詢
6.scalar 標量
第十五章
1.operation 操作
2.read 閱讀
3.append 附加
4.manager 經理
5.grade 等級
第十七章
1.primary 初級
2.reference 參考
3.check 檢查
4.handle 句柄,把柄
5.online 線上
6.level 級別
第一章
第一個C#程式
本章技能目標
1.掌握簡單C#程式的開發步驟
2.掌握C#中的變數類型及命名規則
3.使用Console類實現控制台輸入輸出信息
4.掌握C#中定義類、對象和方法的語法
★1..NET與C#
1..NET概述與C#應用
2.ID環境
★2.第一個C#程式
▲1.新建程式
1.啟動Visual Studio 2012
2.新建項目
3.生成可執行文件
4.開始運行
新建項目
1.在Visual Studio 菜單欄中選擇“文件”→“項目”選項,打開“新建項目”
2.在左側的項目類型中選擇“Visual C#”,在右側的模板列表中選擇
“控制台應用程式”。
3.在“名稱”中輸入“HelloWorld”。
4.為項目選擇一個保存的位置,例如D:\。
5.在Main()方法中添加如下代碼。
Console.WriteLine(“Hello World”);
Console.ReadLine();
經驗
1.運行的快捷鍵:F5:啟動。
2.運行的快捷鍵:Ctrl+F5:開始執行不調試。
★3.認識控制台應用程式文件夾的結構
看不到解決方案資源管理器怎麼辦?
1.在Visual Studio的菜單中選擇 “視圖”→ “解決方案資源管理器”選項,
就可以顯示了,快捷鍵為Ctrl+Alt+L。
2.在Visual Studio的菜單中選擇 “工具” → “選項”選項,打開 “選項”
對話框,在左邊選擇“項目和解決方案”,在右邊選中“總是顯示解決方案”
覆選框即可。1.在Visual Studio的菜單中選擇 “視圖”→ “解決方案資源
管理器”選項,就可以顯示了,快捷鍵為Ctrl+Alt+L。
3.在Visual Studio的菜單中選擇 “工具” → “選項”選項,打開 “選項”
對話框,在左邊選擇“項目和解決方案”,在右邊選中“總是顯示解決方案”
覆選框即可。
★4.認識C#程式
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace HelloWorld
{
class Program
{
static void Main(string[ ] args)
{
Console.WriteLine("Hello World");
Console.ReadLine();
}
}
}
1.namespace
namespace(命名空間)是C#中組織代碼的方式,它的作用類似於Java中的package
(包)。
2.using
在Java中,如果導入其他包,應該使用import。而在C#中,使用using來引用其
他命名空間。
3.class
與Java一樣
4.Main()方法
與Java一樣,但C#中的Main()方法首字母必須大定民,Main()方法的返回值可以
是void或者int類型。
C# 的 Main( ) 方法
Main 首字母大寫
返回值可以為 void 或者 int
命令行參數是可選的
四種 Main() 方法:
static void Main ( string[ ] args ) { }
static int Main ( string[ ] args ) { }
static void Main ( ) { }
static int Main ( ) { }
對比:
組織代碼方式:C#使用命名空間(namespace),Java使用包(package)
引入命名空間或包的關鍵字:C#使用using,Java使用import
程式入口:C#的Main()有四種形式,Java的main()有一種形式。
★5.C#中的變數和常量
1.C#中數據類型
常用數據類型
Java C#
整型 int int
浮點型 float float
字元串 String string
布爾型 boolean bool
2.C#中的變數
語法:
數據類型 變數名稱;
C#的變數命名規則:
C#的變數命名規則與Java也基本相同,只是“$”符號在C#中是不能使用的,因此變
量的命名規則可以簡單總結為以下三條。
1.組成:52個英文字母(A~Z,a~z),10個數字(0~9),下劃線(_),除此之
外不能含有其他的字元。
2.開頭:只能以字母或下劃線開頭。
3.不能使用的:不能是C#中的關鍵字。
C#的變數的命名規範:
1.變數的名稱要有意義
2.避免使用單個字元作為變數名
3.當使用多個單片語成變數名時,應該使用駱駝(Camel)命名法。
★6.為什麼使用常量
下麵代碼的輸出結果是什麼?
static void Main(string[] args)
{
int dayMax = 7;
int today = 1;
Console .WriteLine("一周有幾天:" );
Console .WriteLine(dayMax );
Console .WriteLine("今天是周:" );
dayMax = dayMax +1;
Console .WriteLine(dayMax );
}
語法正確可邏輯錯誤如何避免?
使用常量可以很容易的避免這種錯誤
★7.什麼是常量
const 數據類型 常量名稱 = 值;
常量命名規則:
1.有意義
2.均大寫
3.長度不宜長
什麼時候使用常量?
1.多處用到(用於在程式中被經常引用的值)
2.其值不易理解(例如一個程式中多次用到的值0或1)
3.其值不變(用於在程式中一旦設定就不允許被修改的值)
★8.Console類
向控制台輸出:
Console.WriteLine()方法——輸出後換行
Console.Write()方法——輸出後不換行
從控制台讀入:
Console.ReadLine();
返回值為string類型
向控制台輸出的幾種方式
Console.WriteLine();// 相當於換行
Console.WriteLine(要輸出的值);// 輸出一個值
Console.WriteLine("格式字元串", 變數列表);
string course = "C#"; //課程名稱
……
Console.WriteLine( "我的課程名稱是:" + course);
Console.WriteLine( "我的課程名稱是:{0}" , course );
Console.ReadLine();
{0}:占位符
依次使用{0}、{1}、{2}…與變數列表中的變數對應
可以在字元串中使用 \n 、 \t 來控制換行或製表
讀取一行並返回字元串( string) 類型
Console.ReadLine( );
讀取整數
int.Parse (Console.ReadLine());//表示將字元串轉換為整數
★9.類和對象
什麼是方法?使用方法有什麼好處?
類的行為,便於修改、增加可讀性、可重用、封裝…
訪問修飾符 返回類型 方法名 ( 參數列表 )
{
// 方法的主體…
}
註釋類型
Java C#
行註釋 // … // …
塊註釋 /*… /*…
*/ */
文檔註釋 /**… /// …
*/ /// …
經驗
將每個方法都摺疊成一句並提供說明,做法是:把方法的代碼寫在
#region和#endregion之間。在#region後面就可以添加說明。
規範
1.關鍵性的語句要使用註釋,如變數聲明、條件判斷、迴圈等。
2.類名前應使用文檔註釋,說明類的簡單功能和使用方法。
3.方法前應使用註釋,說明方法的功能、參數的含義、返回值等。
★10.Visual Studio調試技巧
▲1.設置斷點(斷點:breakpoint)
小技巧
程式調試時常用快捷鍵如下
1.F5--開始調試
2.Shift+F5--停止調試
3.F9--設置或刪除斷點
4.Ctrl+F9--取消斷點
5.F10--單步執行
6.F2--轉到所調用過程或變數的定義。
7.Ctrl+F2--將焦點轉移到類的下拉框。
▲2.監視變數值
將變數添加到監視視窗的二種方法
1.選中並右擊需要關註的變數,如對象student的成員,選擇快捷菜單占的
"添加監視"命令。
2.在監視1視窗中單擊名稱下的空白單元格,輸入"student",按Enter鍵。
小技巧
如果在你的Visual Studio中沒有出現監視視窗或者不小心把它關閉了,怎麼辦?
在Visual Studio的菜單欄中通過選擇“調試”→“視窗”→“監視”→“監視1”選
項,可以打開一個監視視窗,也可以通過這種方式打開多個監視視窗。
本章總結
★1.使用Visual Studio創建和運行C#控制台應用程式的步驟如下。
1.啟動Visual Studio 2010。
2.新建項目
3.生成可執行文件
4.開始運行
★2.C#採用命名空間組織程式,引入其他命名空間用using關鍵字。
★3.C#中使用控制台類Console的ReadLing()和WriteLine()方法輸入和輸出信息。
★4.C#中Main()方法的首字母大寫,根據返回值和參數的不同Main()方法有四種形式。
★5.C#中布爾類型使用bool關鍵字。
★6.C#中使用const關鍵字聲明常量。
★7.C#中有三種註釋類型,其中文檔註釋使用///表示。
★8.類是創建對象的模板,對象是類的一個具體實例。
★9.調試程式的步驟如下。
1.設置斷點:按F9快捷鍵。
2.啟動調度:按F5快捷鍵。
3.在監視視窗中查看變數的當前值。
第二章
C#語法快速熱身
1.掌握C#中的條件結構
2.掌握C#中的迴圈結構
3.掌握C#中的數組用法
4.掌握冒泡排序演算法
★1.條件結構
1.if結構
2.switch結構
經驗
switch結構中case子句的擺放是沒有順序的,可以把default子句放在最前面,
但要註意任何兩個case語句不能具有相同的值。
case中的值必須是常量表達式,不允許使用變數。
★2.數組與迴圈
1.一維數組
經驗
如果在程式中需要得到數組的長度,應該使用“數組名.Length”語句獲得,而不
是用數組定義的長度。這樣一旦數組長度發生變化,可以及時獲得數組當前的元素
個數。
2.迴圈結構
while do-while for foreach
經驗
1.while迴圈是先判斷條件表達式是否成立。若成立則執行迴圈體;否則結束迴圈。
2.do-while迴圈先執行一次迴圈體再判斷條件表達式是否成立。若成立則繼續循
環;否則結束迴圈。
3.for迴圈必須使用整型變數做迴圈計算器,通過條件表達式限定計數器變數值來控制迴圈。
4.foreach()自動遍歷給定集合的所有值。
5.break語句
除了在switch語句中可以使用break語句退出某個case語句外,也可以把它用於for、
while、do-while、foreach迴圈結構。break語句將使程式跳出當前迴圈結構,並繼續執行
該迴圈後面的語句。
6.continue語句
continue語句與break語句類似,它必須出現在for、while、do-while、foreach的迴圈結構
中。但continue語句的作用是退出當前迴圈結構的本次迴圈,並開始執行當前迴圈結構
的下一次迴圈,而不是退出當前迴圈結構。
★3.二重迴圈
★4.冒泡排序
▲1.冒泡排序演算法
1.當i=0時,是第一輪比較,數組中所有的元素都參與比較。
2.當i=1時,因為scores[4]已經是最大的數了,所以不參加比較。
3.當i=2時,scores[3]也不參與比較,只需要比較到scores[2],這輪一共比較2次。
4.當i=3時,scores[2]不參與比較,只需要比較scores[0]和scores[1],一共比較1次。
經驗
冒泡排序速記口決(升序):
1.N個數字來排隊,兩兩相比小靠前。
2.外層迴圈N-1,內層迴圈N-1-i。
3.如果要降序排序,只要把程式中的大於號換成小於號就行了。
本章總結
1.C#一維數組的聲明和初始化與Java略有不同,聲明時不能將數組名放在數據類型
和方括弧之間。
2.C#中有四種迴圈結構:while、do-while、for、foreach、其中foreach用來遍歷集合
或者數組中的每個元素。
3.二重迴圈就是在一個迴圈中嵌套另一個迴圈,必須將內層迴圈完整地包含在外層循
環的迴圈體內。
4.break和continue語句用在內層迴圈時,只對內層迴圈的執行有影響,並不影響外層
迴圈。
5.使用二重迴圈可以實現冒泡排序演算法,排序的過程是比較相鄰的兩個數並交換,直
到所有的數都比較過併排好順序。
第三章
本章技能目標
1.掌握C#中的訪問修飾符
2.掌握C#中的屬性
3.掌握C#中的值傳遞和引用傳遞
★1.private訪問修飾符
1.生活中的訪問級別
2.訪問修飾符
訪問修飾符 訪問許可權 訪問級別
public 不受任何限制 最高
private 只有類的內部可以使用 最低
註意
如果在成員定義之前沒有指定訪問修飾符,那麼這個類成員的訪問許可權預設為
internal,它只能在本項目內訪問。
★2.this關鍵字
private string _name;
public void SetName(string _name)
{
//this就是當前對象的本身
this._name = _name;//前對象本身的名字等於方法傳進來的本身
}
this關鍵字可以區分局部變數和成員變數。
★3.C#中屬性
1.用方法保證數據安全
2.用屬性實現欄位封裝
class Student
{
private string _name = "灰太狼";
private int _age;
public string _cardID;
public int Age
{
get
{
return _age;
}
set
{
if(value<0||value>100)
{
_age = 19;
}
else
{
_age = value;
}
}
}
}
class Program
{
static void Main(string[] args)
{
Student student = new Student();
//執行Age屬性的set訪問器代碼
student.Age = -20;
//執行Age屬性的get訪問器代碼
Console.WriteLine("年齡是{0}",student.Age);
student.Age = 40;
Console.WriteLine("年齡是{0}",student.Age);
}
}
2.屬性的數據類型
定義類中的一個屬性時,屬性的數據類型必須與它所訪問的欄位類型一致。
3.屬性的訪問類型
屬性除了可以約束數據訪問外,還可以設置讀,寫屬性來限定它的訪問類型。屬性的訪
問類型分為以下三種。
1.只讀屬性,只包含get訪問器。
2.只寫屬性,只包含set訪問器。
3.讀寫屬性,包含get和set訪問器。
4.在編碼中如何快速地創建屬性
選中這個欄位,右擊滑鼠,在彈出的快捷菜單中,選擇“重構”→“封裝欄位”命令,
選擇“封裝欄位”選項後,Visual Studio 會彈出一個視窗。你可以修改屬性的名稱,在
單擊“確定”
小技巧
封裝欄位的快捷鍵是Ctrl+R+E。
1:C#中,欄位和屬性的區別是什麼?
答案:通常將欄位指定為private,在類內部使用。將屬性指定為public,對外部公
開,通過get或set訪問器對欄位提供安全,有效範圍的保護。
2:C#中,屬性和方法的區別是什麼?
答案:C#中的屬性set訪問器和get訪問器後不使用"()",因為訪問器沒有返回
值,所以也不需要指定void。
面向對象的特征這————封裝
顧名思義,封裝表示將東西打包,使其以新的完整的形式出現。
封裝可以為我們帶來如下這些好處。
第五章
指導學習:庫存管理
1.使用類和屬性封裝貨品信息
2.使用對象數組存儲貨品信息
3.使用輸入輸出語句獲取、顯示貨品信息
4.使用類型轉換獲取用戶輸入的貨品作息
5.使用條件結構實現菜單管理
6.使用迴圈結構實現菜單管理
7.使用自定義方法完成特定的功能
8.使用String類方法實現字元串處理
★1.C#基本語法
1.變數、方法
2.Console類
3.數組
★2.流控制
1.條件語句
2.迴圈
★3.類和對象
1.屬性、方法
2.值傳遞和引用傳遞
值傳遞把值複製到裡面,原來的值沒有改變。
引用傳遞是把地址複製到裡面,原來的值會改變。
★4.屬性
1.不會直接訪問類中的欄位,通過get和set訪問器訪問
2.get返回相應的私有欄位的值
3.set設定相應的私有欄位的值
5
ERP--企業資源管理器
1.掌握資料庫的基本概念
2.掌握SSMS的基本操作
3.掌握如何創建和配置SQL Server資料庫
資料庫(Database,簡稱DB)技術是程式開發人員必須掌握的技術之一,在前面學習的
C#語言中,數據都是使用變數保存承記憶體中,一旦程式運行完畢,記憶體中的這些數據
信息也會隨之消失。
1.使用資料庫的必要性
使用資料庫可以高效且條理分明地存儲數據,它使人們能夠更加迅速和方便地管理數
據,主要體現在以下幾個方面。
1.可以結構化存儲大量的數據信息,方便用戶進行有效的檢索和訪問。
2.可以有效地保持數據信息的一致性、完整性、降低數據冗餘。
3.可以滿足應用的共用和安全方面的要求。
4.資料庫技術能夠方便智能化地分析,產生新的有用信息。
第六章
程式數據集散地:資料庫
本章技能目標
1.掌握資料庫的基本概念
2.掌握SSMS的基本操作
3.掌握如何創建和配置SQL Server資料庫
資料庫(Database,簡稱 DB)技術是程式開發人員必須掌握的技術之一,在前面學習的
C#語言中,數據都是使用變數保存在記憶體中,一旦程式運行完畢,記憶體中的這些數據
信息也會隨之消失。
第七章
用表組織數據
★1.表相關的幾個基本概念
數據完整性
1.實體完整性約束
實體完整性要求表中的每一行數據都反映不同的實體,不能存在相同的數據行。
通過索引,唯一約束,主鍵約束或標識列屬性。
2.域完整性約束
域完整性指的是給定列輸入的有效性。
通過限制數據類型,檢查約束,輸入格式,外鍵約束,預設值,非空約束等多種方法,
可以實現表的域完整性。
3.引用完整性約束
在輸入或刪除數據時,引用完整性約束用來保持表之間已定義的關係。
4.自定義完整性約束
用戶自定義完整性用來定義特定的規則。
★2.主鍵和外鍵
1.主鍵Primary Key
2.外鍵Foreign Key
★3.創建資料庫表
1.在SQL Server Management Studio 中建立資料庫表
2.確定列的數據類型
Unicode是一種在電腦上使用的字元編碼,它為每種語言中的每個字元設定了統一
並且唯一的二進位編碼,以滿足跨語言,跨平臺進行文本轉換,處理的要求。
3.保存資料庫表
★4.完善表的設計結構
1.是否允許為空值
2.建立主鍵
3.預設值
4.標識列
★5.向表中插入數據
★6.建立表間關係
1.如何建立表間關係
2.建立資料庫關係圖
★7.建立檢查約束
1.如何建立檢查約束
★8.刪除資料庫表
第八章
用SQL語句操作數據
本章技能目標
1.使用T-SQL向表中插入數據
2.使用T-SQL更新表中數據
3.使用T-SQL刪除表中數據
★1.SQL簡介
1.SQL能做什麼
SQL是針對資料庫而言的一門語言,它可以創建資料庫,數據表,可以針對資料庫的數
據進行增、刪、改、查等操作,可以創建視圖,存儲過程,可以賦予用戶許可權等。
2.SQL和T-SQL
SQL全稱是“結構化查詢語言(Stuctured Query Language)”
SQL語言不同於C#這樣的程式設計語言,它是只能被資料庫識別的指令,但是在程式
中,可以利用其他編程語言組織SQL語句發送給資料庫,資料庫再執行相應的操作。
3.SQL的組成
DML(Data Manipulation Language,數據操作語言,也稱為數據操縱語言):用來插
入,修改和刪除資料庫中的數據,如INSERT,U
第九章
數據查詢基礎
本章技能目標
1.理解查詢的機制
2.使用SELECT語句進行條件查詢
3.掌握查詢排序
4.使用表達式、運算符和函數實現查詢
★1.T-SQL查詢基礎
1.查詢機制簡介
查詢是針對錶中已經存在的數據行而言的,可以簡單地理解為“篩選”,將一定條件的
數據抽取出來。
數據表在接受查詢請求的時候,可以簡單地理解為“它將逐行判斷”,判斷是否符合查
詢條件。如果符合查詢條件就提取出來,然後把所有被選中的行組織在一起,形成另外
一個類似於表的結構,構成查詢的結果,通常叫做記錄集(RecordSet)。
由於記錄集的結構實際上和表的結構類似,都是由行組成的,因此在記錄集上依然可以
進行再次查詢。
★2.使用SELECT語句進行查詢
查詢使用SELECT語句,最簡單的查詢語句的格式可以表示為:
★語法
SELECT<列名>
FROM<表名>
[WHERE <查詢條件表達式>]
[ORDER BY <排序的列名>[ASC或DESC]]
其中,WHERE的條件是可選的,如果不限制,則查詢返回所有行的數據項。ORDER BY 是
用來排序的,後續內容將會詳細介紹。
經驗
查詢語句可以分為多個子句部分,例如,上面的查詢語法可以劃分為SELECT……
FROM……WHERE……ORDER BY……四個子句,對於複雜多行的SQL語句,可以將每個
子句單獨寫成一行,以方便調試和查找錯誤。
1.查詢所有的數據行和列
把表中的所有行和列都列舉出來比較簡間,這時候可以使用“*”表示所有的列:
SELECT * FROM Students
2.查詢部分行或列
查詢部分列需要列舉不同的列名,而查詢部分行需要使用WHERE子句進行條件限制,
查詢地址為“河南新鄉”的學生,並且只顯示編號,姓名和地址列。
SELECT Scode,SName,SAddress
FROM Students
WHERE SAddress = '河南新鄉'
3.在查詢中使用列的別名
AS子句可以用來改變結果集列的名稱,也可以為組合或者計算出的列指定名稱。
SELECT Scode AS 學生編號,SName AS 學生姓名,SAddress AS 學生地址
FROM Students
WHERE SAddress <> '河南新鄉'
假設在某資料庫的雇員表Employees存在FirstName列和LastName列,現在需要將這兩列
合併成一個叫做“姓名”的列,可以使用以下查詢語句:
SELECT FirstName+'.'+LastName AS 姓名
FROM Employees
重新命名列名還有一種方法,就是採用“=”來命名,例如:
SELECT 姓名 = FirstName+'.'+LastName
FROM Employees
4.查詢空值
第十章
模糊查詢和聚合函數
本章技能目標
1.使用LIKE、BETWEEN、IN進行模糊查詢
2.使用聚合函數統計和彙總查詢信息
★1.模糊查詢
模糊查詢提取的數據不一定是確切的,查詢者對查詢條件也是模糊的,大概的,不特別
明確的。
前面章節學習過的IS NULL查詢嚴格說也是一種模糊查詢。
★2.通配符
簡單地講,通配符是一類字元,它可以代替一個或多個真正的字元,查找信息時作為替
代字元出現。T-SQL中的通配符必須與LIKE關鍵字一起使用,以完成特殊的約束或要求。
通配符 解釋
_ 一個字元
A LIKE 'C_'
CS、Cd等
% 任意長度的字元串
B LIKE 'CO_%'
CONST、COKE等
[ ] 括弧中所指定範圍內的一個字元
C LIKE '9W0[1-2]'
9W01或9W02
[^] 不在括弧中所指定範圍內的一個字元
D LIKE '%[A-D][^1-2]'
9W03或9W07等
★3.使用LIKE進行模糊查詢
LIKE運算符用於匹配字元串或字元串的一部份(稱為子串)。由於該運算符只用於字元
串,所以僅與字元數據類型(char或varchar等)聯合使用。
查找姓張的學生信息
SELECT * FROM Students WHERE SName LIKE '張%'
或者查詢住址包含“北京”字樣的學生信息
SELECT * FROM Students WHERE SAddress LIKE '%北京%'
★4.使用BETWEEN在某個範圍內進行查詢
使用關鍵字 BETWEEN 可以查找那些介於兩個已知值之間的一組未知值。要實現這種查
找,必須知道查找的初值和終值,並且初值小於等於終值,初值和終值用單詞 AND 分
開,例如:
查詢分數在60(含)到80(含)之間的信息如下:
SELECT * FROM SCore WHERE Score BETWEEN 60 AND 80
如果寫成如下形式;
SELECT * FROM Score WHERE Score BETWEEN 80 AND 60
則不會報語法錯,但也不會查詢到任何信息。
查詢不在2010年1月1號2010年8月1號之間訂購的圖書列表
SELECT * FROM Sales WHERE ord_date NOT BETWEEN '2010-1-1' AND '2010-8-1'
★5.使用IN在列舉值內進行查詢
查詢的值是指定的某些值之一,可以使用帶列舉值的IN關鍵字來進行查詢。將列舉值
放在小括弧里,用逗號分開,例如:
查詢北京,廣州或者上海的學生姓名:
SELECT SName AS 學生姓名
FROM Students
WHERE SAddress IN ('北京','廣州','上海')
ORDER BY SAddress
同樣可以把 IN 關鍵字和 NOT 關鍵字合起來使用,這樣可以得到所有不匹配列舉值
的行。
★6.T-SQL中的聚合函數
聚合函數能夠基於列進行計算,將多個值合併為一個值,其作用是對一組值進行計算
,並返回計算後的值。
1.SUM()
SUM()返回表達式中所有數值的總和。
SUM()只能用於數字類型的列,不能夠彙總字元,日期等其他數據類型。
查詢學生編號為23的學生總分。
SELECT SUM(Score) AS 學號為23的學生總分
FROM Score
WHERE StudentID=23
註意這種查詢只返回一個數值,因此,不能夠直接與可能返回多行的列一起使用來進行
查詢
SELECT SUM(Score) AS 學號為23的學生總分,CourseID AS 科目編號
FROM Score
WHERE StudentID=23
2.AVG()
AVG()函數返回表達式中所有數值的平均值。
AVG()函數也只能用於數字類型的列。
查詢及格線以上學生的平均成績。
SELECT AVG(Score) AS 平均成績
FROM Score
WHERE Score>=60
3.MAX()和MIN()
MAX()返回表達式中的最大值,MIN()返回表達式中的最小值,
它們都可以用於數字型、字元型以及日期/時間類型的列。
查詢平均成績,最高分,最低分。
SELECT AVG(Score) AS 平均成績,MAX(Score) AS 平均成績,MIN(Score) AS 最低分
FROM Score
WHERE Score >=60
4.COUNT()
COUNT()返回提供的組或記錄集中的計數。COUNT()可以用於數字和字元類型的列。另
外,也可以使用星號(*)作為COUNT的表達式,使用星號可以不必指定特定的列而計算
所有的行數。
查詢及格人數的語句
SELECT COUNT(*) AS 及格人數
FROM Score
WHERE Score>=60
本章總結
1.通配符是一類字元,它可以代替一個或多個真正的字元,查找信息時作為替代字元
出現。
2.“_”和“%”分別匹配一個字元和多個字元。
3.使用LIKE、BETWEEN、IN關鍵字,能夠進行模糊查詢。
4.聚合函數能夠對列進行計算,對於分析和統計非常有用。
5.常用的聚合函數如SUM()、AVG()、MAX()、MIN()、COUNT()。
第十一章
聯接查詢和分組查詢
本章技能目標
1.使用GROUP BY 進行分組查詢
2.掌握多表聯接查詢
★1.分組查詢
1.使用GROUP BY進行分組查詢
採用分組查詢實現的T-SQL語句如下:
SELECT CourseID,AVG(Score) AS 課程平均成績
FROM Score
GROUP BY CourseID
1.查詢男女學生的人數各是多少
SELECT COUNT(*) AS 人數,SSex FROM Students
GROUP BY SSex
2.查詢每個年級的總人數
SELECT COUNT(*) AS 年級人數,SGrade FROM Students
GROUP BY SGrade
3.查詢每個科目的平均分,並且按照由低到高的順序排列顯示
對比
思路同前面的一樣,按照科目進行分組。
分數由高到低進行排序,需要用到ORDER BY子句,問題是這個ORDER BY子句
放在哪個位置?GROUP BY 子句之前還是之後?現在來仔細想一下,進行排序時,
應該是對分完組後的平均分進行一個排序,這樣想來應該放在GROUP BY子句之
完整的T-SQL語句如下。
SELECT CourseID,AVG(Score) AS 課程平均成績 FROM Score
GROUP BY CourseID
ORDER BY AVG(Score) DESC
★2.多列分組查詢
分組查詢有時候可能還要按照多個列來進行分組。例如,學生信息表Students中記錄了
每個學生的信息,包括所屬年級和性別等。
如果要統計每個學期的男女學生人數,則理論上先把每個學期分開,然後針對每個學
期,把男女學生人數各自統計,也就是需要按照兩個列進行分組,所屬年級和性別。
SELECT COUNT(*) AS 人數,SGrade AS 年級,SSex AS 性別 FROM Students
GROUP BY SGrade,SSex
ORDER BY SGrade
不難理解,使用GROUP BY 關鍵字時,在SELECT列表中可以指定的列是有限制的,僅
允許以下幾項。
1.被分組的列。
2.為每個分組返回一個值的表達式,例如聚合函數計算出的列。
★3.使用HAVING子句進行分組篩選
1.查詢年級總人數超過15的年級
首先可以通過分組查詢獲取每個年級的總人數。
SELECT COUNT(*) AS 人數,SGrade AS 年級 FROM Students
GROUP BY SGrade
但是還有一個條件:人數超過15的年級。這個時候,牽扯到分組統計後的條件限制。
限制條件為COUNT(*)>15。這時候使用WHERE子句是不能滿足查詢要求的,因為
WHERE子句只能對沒有分組統計前的數據行進行篩選。對分組後的條件的篩選必須使用
HAVING子句,簡單地說,HAVING子句用來對分組後的數據進行篩選,將“組”看做
“列”來限定條件。
SELECT COUNT(*) AS 人數,SGrade AS 年級 FROM Students
GROUP BY SGrade
HAVING COUNT(*)>15
2.查詢平均分及格的課程信息。
在查詢每個科目平均分的基礎上,增加了一個條件:平均分及格的科目。這樣按照科目
進行分組後,使用AVG(Score)>=60控制及格件即可。
SELECT CourseID AS 課程編號,AVG(Score) AS 課程平均成績
FROM Score
GROUP BY CourseID
HAVING AVG(Score)>=60
HAVING和WHERE子句可以在同一個SELECT語句中一起使用,使用順序應如下。
WHERE→GROUP BY→HAVING
在SELECT語句中,WHERE,GROUP BY,HAVING子句和聚合函數的執行次序
如下:WHERE子句從數據源中去掉不符合其搜索條件的數據:GROUP BY 子句搜
集數據行到各個組中,統計函數為各個組計算統計值:HAVING子句去掉符合其
組搜索條件的各組數據行。
3.查詢每門課程及格總人數和及格學生的平均分
分析
通過需求瞭解到所查詢的信息,都是要求及格的統計,這樣就首先從數據源中將不
及格的進行濾除,然後對符合及格要求的數據再進行分組處理。
SELECT COUNT(*) AS 人數,AVG(Score) AS 平均分,CourseID AS 課程 FROM Score
WHERE Score>=60
GROUP BY CourseID
4.查詢每門課程及格總人數和及格平均分在80分以上的記錄
分析
同上一個查詢需求思路一致,只是加了一個對分組後數據的條件:及格平均分在80
分以上,增加HAVING子句即可
SELECT COUNT(*) AS 人數,AVG(Score) AS 平均分,CourseID AS 課程 FROM Score
WHERE Score>=60
GROUP BY CourseID
HAVING AVG(Score)>=80
5.在按照部門分類的員工表中,查詢“有多個員工的工資不低於2000的部門編號”
分析
利用WHERE子句首先濾除工資低於2000的記錄,然後再按照部門進行分組,最後
對分組後的記錄進行條件限定。
SELECT 部門編號,COUNT(*) FROM 員工信息表
WHERE 工資 >= 2000
GROUP BY 部門編號
HAVING COUNT(*) > 1
★4.多表聯接查詢
▲1.多表聯接查詢的分類
多表聯接查詢實際上是通過各個表之間共同列的關聯性來查詢數據的,它是關係資料庫
查詢最主要的特征。
以下是幾種常用的聯接:內聯接,外聯接。
1.內聯接
內聯接是最典型,最常用的聯接查詢,它根據表中共同的列來進行匹配。特別是兩個表
存在主外鍵關係時通常會使用到內聯接查詢。
2.外聯接
外聯接是至少返回一個表中的所有記錄,根據匹配條件有選擇性地返回另一張表的記錄。
外聯接可以是左外聯接,右外聯接。
★5.內聯接查詢
內聯接查詢通常會使用像“=”或“<>”等比較運算符來判斷兩列數據值是否相等。
上面所說的根據學生學號來判斷出學生姓名的聯接就是一種內聯接。
內聯接使用INNER JOIN…ON關鍵字或WHERE子句來進行表之間的關聯。內聯接查詢可
以通過兩種方式實現。
1.在WHERE子句中指定聯接條件
例如查詢學生姓名和成績
SELECT Students.SName,Score.CourseID,Score.Score
FROM Students,Score
WHERE Students.SCode = Score.StudentID
2.在FROM 子句中使用INNER JOIN…ON
SELECT S.SName,C.CourseID,C.Score
FROM Students AS S
INNER JOIN Score AS C ON (S.SCode = C.StudentID)
在上面的內聯接查詢中:
INNER JOIN 用來聯接兩個表。
INNER 可以省略。
ON 用來設置條件。
AS 指定表的“別名”。如果查詢的列名在用到的兩個或多個表中不重覆,則對這
一列的引用不必用表名來限定。
查詢科目編號為1的及格學生的姓名和分數。WHERE子句用來限定查詢條件。
SELECT S.SName,C.CourseID,C.Score
FROM Students AS S
INNER JOIN Score AS C ON (S.SCode=C.StudentID)
WHERE C.Score>=60 AND C.CourseID=1
內聯接查詢通常不僅僅聯接兩個表,有時候還會牽涉到三個表或者更多表。
例如,除了學生信息表,學生成績表之外,還存在課程名稱表。上面的查詢不僅僅
要顯示學生姓名,分數,而且要通過課程編號來顯示課程名稱表中對應課程的名稱。
可以使用以下三表聯接查詢。
SELECT S.SName AS 學生姓名,CS.CourseName AS 課程名稱,C.Score AS 考試成績
FROM Students AS S
INNER JOIN Score AS C ON (S.SCode=C.StudentID)
INNER JOIN Course AS CS ON (CS.CourseID=C.CourseID)
★6.外聯接查詢
內聯接的結果是從兩個或兩個以上表的組合中挑選出符合聯接條件的數據,
如果數據無法滿足聯接條件則將其丟棄。在內部聯接中,參與聯接表的地位是平等的。
與內部聯接相對的方式稱為外部聯接。在外部聯接中參與聯接的表有主從之分,以主表
的每行數據匹配從表的數據列,將符合聯接條件的數據直接返回到結果集中,對那些不
符合聯接條件的列,將被填上NULL值(空值)後再返回到結果集中。
1.左外聯接查詢
左外聯接的結果集包括LEFT JOIN子句中指定的左表的所有行,而不僅僅是聯接列所匹
配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選
擇列均為空值。
左外聯接使用LEFT JOIN…ON或LEFT OUTER JOIN…ON關鍵字來進行表之間的關聯。
SELECT S.SName,C.CourseID,C.Score
FROM Students AS S
LEFT OUTER JOIN Score AS C ON S.SCode = C.StudentID
有部分學生可能沒有參加過任何科目的考試,所以成績表中沒有相關的考試記錄,對應
的科目編號和成績以NULL(空值)填充。
SELECT CS.CourseName,C.StudentID,C.Score
FROM Course AS CS
LEFT OUTER JOIN Score AS C ON CS.CourseID=C.CourseID
2.右外聯接查詢
右外聯接查詢與左外聯接查詢類似,只不過要包含右表中所有匹配的行。如果右表中有
的項在左表中沒有對應的項,則以NULL值填充。
右外聯接使用RIGHT JOIN…ON 或RIGHT OUTER JOIN…ON關鍵字來進行表之間的關聯。
本章總結
1.分組查詢是針對錶中不同的組分類統計和輸出的,GROUP BY 子句通常會結合聚合
函數一起來使用。
2.HAVING子句能夠在分組的基礎上,再次進行篩選。
3.多個表之間通常使用聯接查詢。
4.最常見的聯接查詢是內聯接(INNER JOIN…ON),通常會在相關表之間提取引用
列的數據項。
第十三章
項目案例:QQ資料庫管理
本章技能目標
1.掌握創建資料庫併為數據表添加約束
2.掌握創建數據表之間的關係
3.使用T-SQL語句對數據進行綜合管理
4.使用管理器進行資料庫的管理
▲1.用例1:創建QQ資料庫及登錄名
使用管理器創建QQ資料庫,併為其創建登錄名QQMaster,要求如下。
1.數據文件初始大小為10MB,文件按15%自動增長,最大文件大小不受限制。
2.日誌文件初始大小為5MB,文件按1MB自動增長,最大文件大小為50MB。
QQMaster許可權等同管理員許可權,自動創建關聯資料庫用戶QQMaster。
★提示
註意保存到本地磁碟的位置
▲2.用例2:創建表結構
在管理器中根據以上分析的QQ資料庫的表結構創建用戶表QQUser,用戶基本信息表
BaseInfo和用戶關係表Relation
★提示
根據實際情況,註意設置主鍵,數據類型長度,不允許為空的列等基本表結構要求。
▲3.用例3:添加約束
根據問題分析,歸納總結三個表所有的約束條件如下。
1.QQ密碼不得少於6位。
2.線上狀態的值必須為0,1,2, 0表示線上,1表示離線,2表示隱身。
3.用戶等級預設值為0。
4.性別允許為空值,但如果輸入值就必須為0或1,0表示男,1表示婦。
5.年齡必須是在1~100之間的整數。
6.用戶關係只能是數字0,1, 0表示好友,1表示黑名單人物。
▲4.用例4:建立關係
1.用戶表和基本信息表是--對應的關係,一個QQ號碼對應著一個用戶記錄和一個
基本信息記錄。
2.關係表中存在的QQ必然是在用戶表中存在的用戶QQ,並且一個QQ可以有多個
好友,多個黑名單人物,也可以是別人的好友,黑名單人物。
--▲5.用例5:插入數據
--請根據表提供的信息要求,在查詢視窗中使用T-SQL語句把表中的數據
--插入到對應的數據表中。
INSERT INTO QQUser (
[QQID]
,[PassWord]
,[LastLogTime]
,[Online]
,[Level])
SELECT '54789625','add512#&','2008-02-16 17:01:35',2,1 UNION
SELECT '88662753','admin0219','2008-02-19 21:08:50',0,5 UNION
SELECT '8855678','guest0221','2008-02-21 16:28:20',1,6
INSERT INTO BaseInfo ([QQID]
,[NickName]
,[Sex]
,[Age]
,[Province]
,[City]
,[Address]
,[Phone])
SELECT '54789625','蝴蝶飛飛',1,16,'北京','朝陽區','亞運村','37547388157668' UNION
SELECT '88662753','秋芙蓉',0,20,'河南省','南陽','方城博望','88715783657725' UNION
SELECT '8855678','雙眼皮の瀦',1,38,'北京','海澱區','雙榆樹東里','65794968876143'
INSERT INTO Relation ([QQID]
,[RelationQQID]
,[RelationStatus])
SELECT '54789625','88662753',0 UNION
SELECT '88662753','8855678',1 UNION
SELECT '8855678','8855678',0
SELECT * FROM QQUser
SELECT * FROM BaseInfo
SELECT * FROM Relation
--利用導入/導出嚮導將提供的文本文件中用戶信息,用戶基本信息,用戶關係信息的數
--據導入到相對應的數據表中。
--★提示
--導入用戶關係數據時,一定要註意三個QQ用戶已經使用T-SQL語句插入成功,因
--為其中的數據用到了這三個用戶。
--▲6.用例6:查詢數據
--編寫T-SQL語句按以下要求查詢數據。
--1.查詢QQ號碼為88662753的用戶的所有好友信息,包括QQ號碼(QQID),昵稱
--(NickName),年齡(Age)。
--★提示
--利用內聯接實現。
SELECT R.RelationQQID AS 好友QQ號碼,B.NickName AS 昵稱,B.Age AS 年齡
FROM BaseInfo AS B
INNER JOIN Relation AS R ON (B.QQID=R.RelationQQID)
WHERE R.QQID='88662753' AND R.RelationStatus=0
--2.查詢當前線上用戶的信息。
SELECT *
FROM BaseInfo AS B
INNER JOIN QQUser AS Q ON (Q.QQID=B.QQID)
WHERE Q.Online=0
--3.查詢北京的,年齡在18至45歲之間的線上用戶的信息。
SELECT *
FROM BaseInfo AS B
INNER JOIN QQUser AS Q ON (Q.QQID=B.QQID)
WHERE Q.Online=0 AND B.Province ='北京市' AND Age>=18 AND Age<=45
--4.查詢昵稱為“小笨豬”的用戶信息。
SELECT *
FROM BaseInfo AS B
WHERE B.NickName='小笨豬'
--5.查詢QQ號碼為54789625的用戶的好友中每個省份的總人數,並且按總人數由大
--到小排序。
--★提示
--利用SELECT…FROM…WHERE…GROUP BY…ORDER BY…實現,其
--中內聯接條件WHERE的T-SQL語句可參考如下。
--WHERE(Relation.QQID=54789625 AND Relation.RelationStatus=0 AND
--Relation.RelationQQID=BaseInfo.QQID)
SELECT B.Province AS 省份,COUNT(*) AS 好友總人數
FROM BaseInfo AS B,Relation AS R
WHERE(R.QQID='54789625' AND R.RelationStatus=0 AND
R.RelationQQID=B.QQID)
GROUP BY B.Province
ORDER BY COUNT(*) DESC
--6.查詢至少有150天未登錄QQ賬號的用戶信息,包括QQ號碼,最後一次登錄時
--間,等級,昵稱,年齡,並按時間的降序排列。
--★提示
--利用日期函數DATEDIFF()計算出超過150未登錄過的QQ號碼,再利用聯接查詢獲
--取相應的信息。
SELECT B.QQID AS QQ號碼,LastLogTime AS 最後一次登錄時間,Level AS 等級
,NickName AS 昵稱,Age AS 年齡
FROM BaseInfo AS B
INNER JOIN QQUser AS Q ON (Q.QQID=B.QQID)
WHERE DATEDIFF(DD,Q.LastLogTime,GETDATE())>=150
--7.查詢QQ號碼為54789625的好友中等級為10級以上的“月亮”級用戶信息。
--★提示
--利用三表聯接查詢。
SELECT B.QQID AS 好友QQ號碼,B.NickName AS 昵稱,B.Age AS 年齡,Q.Level AS 等級
FROM BaseInfo AS B
INNER JOIN Relation AS R ON (B.QQID=R.RelationQQID)
INNER JOIN QQUser AS Q ON (Q.QQID=B.QQID)
WHERE R.QQID='54789625' AND Q.Level>=10 AND R.RelationStatus=0
ORDER BY B.QQID
--8.查詢QQ號碼為54789625的好友中隱身的用戶信息。
SELECT B.QQID AS 好友QQ號碼,B.NickName AS 昵稱,B.Age AS 年齡
FROM BaseInfo AS B
INNER JOIN Relation AS R ON (B.QQID=R.RelationQQID)
INNER JOIN QQUser AS Q ON (Q.QQID=B.QQID)
WHERE R.QQID='54789625' AND Q.Online=2 AND R.RelationStatus=0
--9.查詢好友超過20個的用戶QQ號碼及其好友總數。
--★提示
--利用分組查詢,並且增加分組條件HAVING COUNT(*)>=20。
SELECT R.QQID AS 超過20個的用戶QQ號碼,COUNT(*) AS 好友總數
FROM Relation AS R
WHERE R.RelationStatus=0
GROUP BY R.QQID
HAVING COUNT(*)>=20
--10.為了查看信譽度,管理員需要查詢被當做黑名單人物次數排名前20的用戶。
--★提示
--利用分組查詢,註意需求,按照關係用戶QQ號碼RelationQQID進行分組。
SELECT TOP 20 (R.RelationQQID) AS 黑名單人物次數排名前20的用戶,COUNT(*) AS 黑名單次數
FROM Relation AS R
WHERE R.RelationStatus=1
GROUP BY R.RelationQQID
ORDER BY COUNT(*) DESC
--▲用例7:修改數據
--編寫T-SQL語句使其按以下要求修改數據。
--1.假設我的QQ號碼為8855678,今天我隱身登錄。
UPDATE QQUser
SET Online=2
WHERE QQID='8855678'
--2.假設我的QQ號碼為8855678,修改我的昵稱為“被淹死的魚”,地址為“解放中
--路6號院106室”。
UPDATE BaseInfo
SET NickName='被淹死的魚',Address='解放中路6號院106室'
WHERE QQID='8855678'
--3.假設我的QQ號碼為8855678,將我的好友“248624066”拖進黑名單。
UPDATE Relation
SET RelationStatus=1
WHERE QQID='8855678' AND RelationQQID='248624066'
--4.為了提高QQ用戶的聊天積極性,把等級小於6級的用戶等級都升升1個級別。
UPDATE QQUser
SET Level=Level+1
WHERE Level<6
--5.管理員將超過365天沒有登錄過的QQ鎖定(即將等級值設定為-1)。
UPDATE QQUser
SET Level=-1
WHERE DATEDIFF(DD,LastLogTime,GETDATE())>365
--6.為了獎勵用戶,將好友數量超過20的用戶等級提升1個級別。
--★提示
--首先,獲取好友超過20個的用戶QQ號碼結果集,參考用例7的需要9。
--其次,利用IN關鍵字模糊匹配結果集中的QQID進行更新。
--UPDATE QQUser SET…WHERE QQID IN (SELECT QQID FROM Relation…)
UPDATE QQUser
SET Level=Level+1
WHERE QQID IN (
SELECT QQID
FROM Relation AS R
WHERE R.RelationStatus=0
GROUP BY R.QQID
HAVING COUNT(*)>=20)
--7.把QQ號碼為286314的用戶的好友“嘟嘟魚”拖進黑名單中。
--★提示
--完成思路參考需求6,使用IN關鍵字進行模糊匹配。
UPDATE Relation
SET RelationStatus=1
WHERE QQID='286314' AND RelationQQID IN (
SELECT B.QQID
FROM BaseInfo AS B,Relation AS R
WHERE R.RelationStatus=0 AND B.NickName='嘟嘟魚')
--▲用例8:刪除數據
--1.把QQ號碼為54789625的用戶的黑名單中的用戶刪除。
DELETE FROM Relation WHERE QQID='54789625' AND RelationStatus=1
--2.QQ號碼為622009019用戶多次在QQ中發佈違法信息,造成了很壞的影響,因此
--管理員決定將其刪除。
--★提示
--此需求需要從三張表中刪除相關信息,註意從各表刪除的先後次序。
DELETE FROM Relation WHERE QQID='622009019' OR RelationQQID='622009019'
DELETE FROM BaseInfo WHERE QQID='622009019'
DELETE FROM QQUser WHERE QQID='622009019'
--3.管理員將超過1000天沒有登錄過的QQ刪除。
--★提示
--實現此需求,需要分四步走。
--第一步:查詢超過1000天沒有登錄過的QQID集。
SELECT QQID FROM QQUser WHERE DATEDIFF(DD,LastLogTime,GETDATE())>=1000
--第二步;刪除Relation表中的數據,利用IN關鍵字模糊匹配QQID集。參孝如下的
--T-SQL語句。
--DELETE FROM Relation
--WHERE QQID IN(…) OR RelationQQID IN(…)
DELETE FROM Relation
WHERE QQID IN(SELECT QQID FROM QQUser WHERE DATEDIFF(DD,LastLogTime,GETDATE())>=1000)
OR RelationQQID IN(SELECT QQID FROM QQUser WHERE DATEDIFF(DD,LastLogTime,GETDATE())>=1000)
--第三步:刪除BaseInfo表中的數據,同理利用IN關鍵字模糊匹配QQID集。
DELETE FROM BaseInfo
WHERE QQID IN(SELECT QQID FROM QQUser WHERE DATEDIFF(DD,LastLogTime,GETDATE())>=1000)
--第四步;刪除QQUser 表中的數據。
DELETE FROM QQUser
WHERE QQID IN(SELECT QQID FROM QQUser WHERE DATEDIFF(DD,LastLogTime,GETDATE())>=1000)
--▲用例9:分離資料庫
第十四章
使用ADO.NET 訪問資料庫
本章技能目標
1.瞭解ADO.NET的功能和組成
2.會使用Connection對象連接資料庫
3.會使用Command對象查詢單個值
4.會捕獲和處理程式中的異常
★1.ADO.NET概述
在信息系統中,常用的資料庫有很多種,比如有SQL Server、Access、Oracle等。為了
使客戶端能夠訪問資料庫伺服器上的數據,就需要用到資料庫訪問的方法和技術,
ADO.NET(ActiveX Data Objects)就是這種技術之一。
1.ADO.NET簡介
ADO.NET是,NET Framework中不可缺少的一部分,它是一組類。通過這些類,NET應
用程式就可以訪問資料庫了。ADO.NET的功能非常強大,它提供了對關係資料庫。XML
以及其他數據存儲的訪問。應用程式可以通過ADO.NET技術與這些數據源進行連接。
對數據進行增、刪、改、查等操作。
ADO.NET技術的一個非常大的優點是,它與數據源斷開連接時也可以使用數據。
ADO.NET可以把從數據源檢索到的數據保存在本地一個叫做“數據集”的地
方,這樣應用程式就可以直接操作本地的數據,而數據源可以為更多的應用程式提供服