第一章 第一個C#程式Vs2012密鑰RBCXF-CVBGR-382MK-DFHJ4-C69G801..net和C#的區別大概在2000年,微軟推出了一種革命性的產品--.NET(戰略)目標:任何人,在任何地方,使用任何終端設備,都可以訪問微軟提供的服務。.net Framew...
第一章 第一個C#程式
Vs2012密鑰
RBCXF-CVBGR-382MK-DFHJ4-C69G8
01..net和C#的區別
大概在2000年,微軟推出了一種革命性的產品--.NET(戰略)
目標:任何人,在任何地方,使用任何終端設備,都可以訪問微軟提供的服務。
.net Framework:要想讓我們自己寫的C#應用可以運行在Good Friend的Computer上,必須有.net Framework
IDE(Itergrated Developer Environment)集成開發環境
Linux:裝X
Window:傻X
解析:,net是一種平臺,這種平臺上可以跑多種語言,例如,vb,j#,C#
c#只是一種語言
02.解決方案和項目的關係
解析:一個解決方案下可以有多個項目。
03.Main方法四種形式,返回值只能是void或者int
Static void Main(){}
Static void Main(string[] args){}
Static int Main(){}
Static int Main(string[] args){}
04.什麼是常量
變數:可以變化的量。
Int num=5;
Num=7;
常量;一旦定義,其值不能再後續代碼中再次修改。
解析:PI
Int num=5;
05.海量代碼摺疊
快捷鍵是Ctrl+K+S:#region
05.C#中類,對象和方法
什麼是類?
解析:具有相同屬性和行為的一系列事物的統稱。
Car
Student
Teacher
Person
什麼是對象?
解析:對象是能在現實生活中找到的某個能區別於其他事物的一個獨特個體。
張靚穎家的紅色的小汽車
在清華大學大一音樂系的小王。
在哈弗大學教金融學劉老師。
在北大青鳥五道口校區四機房上課的“小蔡”
類和對象的關係
解析:類是對象的抽象(模板),對象是類的實例
06.Bank項目
光大銀行
開戶功能
存款
取款
轉賬
查詢餘額
修改密碼
作業;
第2章 c#語法快速熱身
01.預習檢查
1.c#與java的switch語句用法有什麼不同?
01.java中switch後的表達式取值只能為(int/char/常量),
但是c#中取值可以是(int/char/string)
02.java中case後如果有語句,可以沒有break語句,但是在c#中不行
case:
syso();
case:
cw();
break;
2.java中如何定義數組?
int[] nums=new int[]{1,2,3};
02.本章目標
1.掌握C#中的條件語句
2.掌握c#中的迴圈語句
3.掌握C#中數組用法
4.掌握冒泡排序演算法並且能夠編碼實現
03.c#中if條件結構
C#與java中的條件判斷語句對比
條件判斷語句 java c#
if if(){...}二者完全相同
if...else... 二者完全相同
註意:java和c#中switch用法有以下兩點不同:
01.java中switch後的表達式取值只能為(int/char),
但是c#中取值可以是(int/char/string)
02.java中case後可以沒有break語句,但是在c#則不行
多個可以case 可以共用一個break語句
04.c#中switch小結
條件判斷的表達式類型:整型、字元型或字元串
break語句的要求:
01,每個case都要有break
02,default也要有break
03,特殊情況:case中沒有其他語句時,不需要break語句
case "星期一":
case "星期二":
break;
05.c#中的一維數組
為什麼需要數組?
解析;我們可以將類型相同的多個數據放到一個箱子中,便於後續的維護。
考題:
//在C#中和java中如下語句都可以定義一個長度為3的int類型數組
方式一:
int[] arr=new int[]{1,2,3};
方式二:
int[] arr;
arr=new int[]{1,2,3};
//int[] arr=new int[3]{1,2,3;//C#中正確,java中不可以
該規則在C#中同樣適用。
foreach局限性:當需要改變數組中值的時候會報錯
01.C#中數組定義語法:
數據類型[] 數組名;
string[] arr1;
02.如何設置數組大小?
使用new設置大小:創建長度為5的整型數組
int[] array=new int[5];
03.數組初始化:
int[ ] arr = new int[5]{0,1,2,3,4};
int[ ] arr = new int[ ]{0,1,2,3,4}; // 省略長度
int[ ] arr = {0,1,2,3,4}; // 省略new
int [] ds=new int[]{1,2,3}
int [] ds={1,2,3}
[5]——方括弧中的數字決定數組的長度
{0,1,2,3,4}——大括弧中的元素個數決定數組的長度
04.如何獲取數組的長度(數組中元素的個數)
答:數組名.Length
05.如何迴圈輸出數組中元素?
// 迴圈輸出數組元素
int[ ] array = new int[5] { 0, 1 ,2, 3, 4}; // 聲明並初始化一維數組
for (int i = 0; i < array.Length;i++ ) // 輸出數組中的所有元素
{
Console.WriteLine(array[i]);
}
06.使用foreach迴圈遍曆數組元素
foreach迴圈一般用於遍歷整個集合或數組
語法:foreach (元素類型 變數名 in 集合或者數組名)
{
// 語句
}
07.continue和break語句的使用
continue:結束本次迴圈,繼續下一次迴圈
break:結束當前迴圈
08.二重迴圈複習
int i, j; // 迴圈變數
// 外層迴圈控制列印的行數
for (i = 1; i <= 5; i++)
{
// 內層迴圈控制每行列印數字的個數
for (j = 1; j <= i; j++)
{
Console.Write(j);
}
Console.WriteLine();
}
06.冒泡排序
規則:每次比較相鄰兩數,小的交換到前面,每輪節航速後最大的數交換到最後
用二重迴圈實現冒泡排序
例如:5(n)個數字存放在一維數組中,如何進行排序
分析:外層迴圈控制比較多少輪,迴圈變數i
內層迴圈控制每輪比較多少次,迴圈變數j
觀察規律,分析i和j的關係,最終得出結論
i=n-1,j=n-1-i
代碼框架如下:
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
//比較j和j+1位置的元素
//如果前大後小就交換
}
}
冒泡排序速記口訣(升序):
N個數字來排隊
兩兩相比小靠前
外層迴圈N-1
內層迴圈N-1-i
艱難的抉擇:
卡莉·菲奧麗娜 hp的CEO
Hp成功的合併了康柏
HP 和康柏
第三章 使用屬性升級MyBank
第3章 使用屬性升級MyBank系統
Bank系統
在Bank類中定義一個Card類型數組,存儲三張卡的信息,然後書寫了一個
Initial方法來初始化第一張卡。
Foreach(Card item in cards)
{
Item本身不能修改,但是可以修改item對象的各個屬性值,對其進行重新賦值
}
取款
轉賬
查詢餘額
修改密碼
1.訪問修飾符
public:在任何位置都可以訪問
private:只能在當前類中訪問
2.屬性
屬性作用:修改和獲取私有欄位的值(間接對私有欄位賦值,起到保護私有欄位的作用)
屬性語法
public class Person
{
private int age;
public int Age
{
//get
get
{
return age;
}
//set
set
{
age=value;
}
}
}
4.面向對象三大特性:
01.封裝
//可以將私有欄位封裝成屬性,看成是一種封裝(屬性封裝了欄位)
//可以將一個方法寫到類中這種方式成為封裝(類封裝了方法)
02.繼承
03.多態
5.01.對方法的返回值不敏感,怎麼定義方法的返回值。
02.返回值過程中出現的問題
第三章 使用屬性升級MyBank
一、預習檢查
01.創建屬性通過哪兩個訪問器?
02,本章介紹了哪些傳遞參數的方式?
二、本章任務
01.使用屬性封裝年齡欄位
02.使用屬性封裝身份證欄位
03.使用屬性封裝MyBank欄位
04.實現計算一組數的奇偶個數
三、本章目標
01.掌握C#中的訪問修飾符
02.掌握c#中的屬性
03,掌握c#中的值傳遞和引用傳遞
四、C#中的訪問修飾符
當類的某些敏感欄位只希望類內部使用時,可以使用private訪問修飾符
一個類的欄位一旦定義成private,其他類訪問不到
c#中的訪問修飾符:
public 不受任何限制,訪問級別最高
private 只有類的內部可以使用,訪問級別最低
五、this關鍵字的作用
c#中this關鍵字有什麼用?
this代表的是當前類的實例,通過this可以訪問當前類的對象的所有
成員變數和方法
六、數據安全
static void Main(string[] args)
{
Student stu = new Student();
stu._age = -2;//非法數據
stu. _idCard = "123456"; //身份證號不能被修改
}
有時候將類中的欄位公開是不安全的,但是如果設為私有成員:
無法正常賦值,無法獲得數據。
使用方法解決數據安全問題
1,使用者不可直接操作_age
2,用方法返回_age供讀取
3,用方法限制使用者的非法賦值
private int _age;
public int 方法1()
{
return this._age;
}
public void 方法2(int 參數)
{
if(參數<0||參數>100)
{
this._age=18;
}
else
{
this._age=參數;
}
}
這種寫法太麻煩,於是誕生了屬性
class Student
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
value相當於方法的參數,欄位和屬性的數據類型必須一致。
get用於獲取相應欄位的值,
set用於設置欄位的值。
get和set都存在,讀寫屬性。只有get時,只讀屬性。只有set時,只寫屬性。
屬性的作用:控制私有欄位的可訪問性,保護內部數據的安全。
建議:類內部敏感欄位使用屬性來控制訪問
快速書寫屬性的方法:用ctrl+R+E
類的成員:欄位、屬性和方法
屬性是不能用來存儲對數據的,真正的數據是存儲在欄位中的。
七、參數的傳遞方式
參數傳遞有兩種方式:值傳遞和引用類型傳遞
註意:值傳遞不能保留參數的修改,要按引用傳遞,使用ref
通過引用傳遞參數:
1.定義和調用時,在參數前都要使用ref
2.在方法調用前:作為參數的變數要聲明並賦值
3.使用場景:希望保留參數的更改。
課堂內容:
01.如果想讓一個欄位只能在當前類中方式問,那麼可以將訪問修飾符設置成private。
02.如果類中的一個欄位沒有訪問修飾符,那麼預設訪問修飾符是private,但是不建議省略。
03.什麼是封裝?
解析:我們可以將私有欄位封裝成公有的屬性看成是封裝的一種體現。
封裝的另一種體現是將多個欄位封裝到一個類中。
04.面向對象的三大特性?
解析:封裝,繼承和多態
05.屬性的本質也是方法。這也就是為什麼我在第一節通過GetName()和SetName()來引出屬性。
白話理解:其實微軟在你進行屬性書寫的時候,自動幫助我們構建了一個getName()方法和換一個
setName()方法。
06.真正存儲數據的是欄位 ,屬性是不能保存數據的。
3.值類型傳遞和引用類型傳遞
值類型傳遞(不加ref):
01.傳遞的參數是值類型:不用保留變數值的更改
02.傳遞的參數是引用類型:會保留變數值的更改
引用類型傳遞(加ref)
01.傳遞的參數是值類型:會保留變數值的更改
02.傳遞的參數是引用類型:會保留變數值更改
第4章 深入C#的String類
01.java中常用字元串處理方法
substring(3,5):
"我愛你中國,我愛你天安門!"
length()
indexof("中");
lastIndexOf()
split()
concat()
equals()
trim()
02.C# 中的類型轉換有哪幾種方式?
解析:
int.Parse("字元串")
Convert.ToInt32("任意類型")
(int)1.23 :類型相容
03.字元串的常用方法
IndexOf():查找某個字元在字元串中的位置
Substring():從字元串中截取子字元串
解析:第二個參數代表從第一個參數索引位置往後,截取幾個長度的字元
"明天是個好天氣"
words.Substring(4,3)
ToLower():將字元串轉換成小寫形式
Equals() :比較兩個字元串的值是否相等
Join():連接字元串
Split():分割字元串
Trim():去掉字元串兩邊的空格
Compare(string strA,string strB):比較字元串strA和strB的字典順序,方法返回值是int類型,
如果返回的是0,兩個字元串相等。
如果返回的是正數,第一個字元串大。
負數,第二個字元串大。
04.什麼MSDN?
解析:微軟推出的官方最權威的一個.NET平臺的技術的一個幫助文檔。
什麼Java API
就是sun公司推出的學習java技術最權威的幫助文檔。
05.什麼是URL?
解析:URL(Uniform Resoure Locator:統一資源定位器)
相當於老爺爺口中的網址。
三部分組成:http://wwww.baidu.com
01.協議類型:http協議 ftp https:加密協議
02.功能變數名稱(是IP地址經過映射後的字元串,為了便於網站用戶更方便的訪問該網站的資源)
03.資源
06.Format()方法
{索引,對齊:格式}
07.類型轉換
無論隱式類型,還是強制類型轉換,前提是類型相容,也就是要是數字都是數字。
double num=1;//隱式類型轉換
int number=(int)1.23;//強制類型轉換
01.Parse:應用場景
只有將字元串轉成數字這一種情況下可以使用XXX.Parse(字元串)
02.Convert.ToXXX(任意類型)
以後大家在編程時,本人強烈建議大家使用Convert進行類型轉換
第5章 庫存管理
效果圖:
第6章 程式數據的集散地:資料庫
01.講解SQLServer Management Studio ()
02.資料庫(DataBase) 為了保證數據的持久化,推出了資料庫
03.DBS(範圍廣:操作員:資料庫管理系統,硬體平臺) DBMS
04.系統資料庫
Master
Tempdb
Model
Msdb:調度!任務計劃
Resource:
05.登陸數據兩種驗證方式
Windows:操作系統登陸後,就可以直接登陸資料庫軟體
SQL Server
許可權最高的用戶:sa 機房預設密碼:
06.開啟服務的方案
01.保存在記憶體中的數據有什麼缺點?
解析:比如拿咱們書寫的Bank系統為例,如果您通過開戶功能
在數組中新增了一張銀行卡,那麼下次進入系統的時候, 數據不會
保留。
02.資料庫可以看成是一個永久保存數據的倉庫。
預習檢查
1.數據完整性指的是什麼?
解析:數據的準確性就是數據的完整性
SQL Server有哪兩種身份驗證方式?
解析:Windows身份驗證和SQL Server身份驗證
創建資料庫需要指定哪兩種文件?
解析:數據文件(.mdf) 和 日誌文件(.ldf)
03.為什麼要使用資料庫?
解析:可以存儲大量數據
可以保證數據的一致性和完整性
可以滿足應用的共用和安全要求
方便和智能化的分析,產生新的有用信息
02.行:記錄
列:欄位
03.數據冗餘:數據的重覆性
04.資料庫完整性:準確性
05.註意點:
當我們在連接(登陸)資料庫的時候,一定要保證
資料庫服務開啟:Sql Server(MSSQLServer)
04.登陸SQL Server兩種方式:
Windows身份驗證
SQL Server身份驗證:sa 機房密碼預設為空
核心內容
01.什麼是伺服器?
解析:提供服務的一個容器。一臺電腦上安裝了某個服務,例如資料庫這款軟體,那麼這台
電腦就稱之為資料庫伺服器。
02.常見的資料庫
oracle
DB2
sql server
mysql
sqllite
visual foxpro
access
02.增刪查改
發表評論:質量很好,就是發貨速度有點慢
購物車:刪除
瀏覽商品 :查詢
修改密碼:改
上網自己下(我就不告訴你)
05.DBMS和DBS的區別
DBMS:DataBase ManageMent System:資料庫管理系統
DBS:DataBase System 資料庫系統
關係:DBS包含DBMS
因為資料庫系統組成部分:
資料庫的操作者
資料庫軟體 (資料庫管理系統)
承載該軟體的電腦
06.資料庫服務啟動方法
方法一:對“我的電腦”→右鍵“服務”→SQL Server(MSSQLServer)
方法二:打開開始菜單→運行→services.msc回車 就可以打開服務視窗,後續操作同上
方法三:按住鍵盤上的“Win+R”打開命令提示符視窗,輸入→services.msc回車 就可以打開服務視窗,後續操作同上
07.系統資料庫
Resource資料庫:作用:用戶新建 了一個資料庫School,
那麼有些信息會自動從Resource中映射到School中
master資料庫:保存所有資料庫的信息,一旦損壞,整個資料庫軟體都無法運行。
model:模板資料庫
tempdb:臨時資料庫,保存臨時數據
msdb:代理,業務調度,警報作業等。
DBA:OK的
初級DBA
自動備份
10年
美工
軟體開發
1.如何將硬碟的資料庫文件拷貝到U盤?
解析:通過關閉服務的方式
2.如何將U盤中的資料庫文件還原成電腦上資料庫軟體中的一個資料庫存在?
解析:先將U盤上的數據文件拷貝到電腦的非系統盤,使用附加工具,找到對應位置的資料庫文件,進行附加操作
3.停止服務備份數據文件的缺陷?
解析:熱備份!
4.童鞋們:收縮資料庫乾什麼呀?
解析:節省硬碟空間
三種開啟服務方式:(曉鵬)
08.分離和附(方言)
09.備份和還原 (龍龍)
10.收縮資料庫
11.刪除資料庫
我站在這裡用血的教訓告訴大家,當你需要刪除資料庫的時候,
一定要備份,嚴重推薦,特別非常十分及其需要註意:在自己心裡先問3遍,你確定
這個數據要刪除嗎?讓你同桌看一下,是否代碼寫的正確,是否需要刪除?
前途:
備份:::::::::::::::
作業:1.bank系統終結版
2.手寫三遍:轉賬
3.第6章和第7章預習
4.blogs兩篇(MyBank 商品管理)
5.Java Logic
第7章 數據表
01.四種完整性約束
001.實體完整性:針對數據行設置的完整性
002.域完整性:針對數據列設置的完整性。
003.引用完整性:外鍵約束
004.自定義完整性:為了滿足我們的業務需求,我們自己量身定製的完整性約束,一般
通過存儲過程。
02.SQL Server中數據類型
int:存儲整型數字
numeric(18, 2):存儲小數
decimal(18, 2):存儲小數
nvarchar():存儲文字
以後嚴重建議大家只要是保存字元串就用nvarchar()類型,n代表的unicode編碼,該編碼是國際通用編碼,可以避免亂碼的出現。var代表長度可變。表中該列真正存儲的內容就占它本身的空間,而不會占用該列通過(20)設置的長度所占用的空間。
varchar():存儲可變長度的文本
char(4):存儲固定長度的文本
text();SQL Sever2000的使用使用的大文本類型,現在2005.2008 2012已經無情的毫無憐憫之心的拋棄了它,
nvarchar(Max)
DateTime:保存日期和時間
照片:image(二進位存儲)
--以後我們存儲姓名:nvarchar(20)
--存儲年齡:int
--存儲性別:bit
--存儲一篇文章:nvarchar(max)
儘量不要使用ntext或者是text,因為text和ntext讀取效率非常低。
作業:1.第六章和第七章數據類型形成blog文章
2.創建MySchool,並且形成Student,Result,Grade,Subject,數據類型,以及測試數據。
3.第六章選擇和簡答題
03.為表建立約束
01.主鍵約束
一張表一定要設置主鍵,否則別人會罵死你。
如果一張表不設置主鍵,到後續學習框架的時候,框架就欺負你,給你報錯。
不能給自增列手動給值,這個值是由系統自動給的。
02.非空約束
03.預設值約束
04.check約束
05.外鍵約束
註意:外鍵約束只能設置在外鍵表中
年級名稱和學生名稱同時獲取
年級名稱 學員姓名 學生成績
S1290 不知道 100
04.常見問題:
01.外鍵把控的不好
02.在SQL Server中,字元串和日期類型數據要加單引號,數值類型不用
03.每張表中必須都有一個主鍵,沒有主鍵的表是不行的。
04.主鍵列不允許為空
05.不推薦使用複合主鍵,主鍵列選擇依據:儘量簡單。
06.如果找不到有意義的列作為表的主鍵,那麼就加多一列ID作為
該表的主鍵列。
05.標識列:
為了唯一確定一行數據在該表中唯一而設定的一列。
--應用前提:
01.必須是int(smallint)類型
02.在標識規範處設置:標識種子,標識增量
(種子值:)標識種子:從哪個數據開始增長
(步長:)標識增量:每次增長幾個數
06.外鍵:
在一張表表A中某列是主鍵,但是在另外一張表表B中該列不是主鍵。那麼
表A稱為主鍵表,表B稱為外鍵表。
--只能在外鍵表中設置外鍵
%:代表任意長度的任意字元:特別聲明:包含0個
07.表內容圖
查詢機制
外鍵
那些年,第七章我們講了什麼?
解析:1主鍵:唯一的,一個
2.約束:
非空約束:
主鍵約束
預設值約束
Check約束
外鍵約束
3.實體完整性約束(行數據)
引用完整性約束(外鍵!)
4.自定義完整性約束(規則,存儲過程,觸發器)
5.域完整性約束(列 ,check約束)
6. 設置外鍵:
7.標識列
特征:自增,有種子和增量,前提(必須是int類型)
8.建立資料庫關係圖,更直觀的看出表之間的關係!
9.數據類型
文本:char nchar
Varchar nvarchar()
Text nvarchar(max)
10.check
男或者女 or
11.建立主鍵
多列共同確定一個主鍵,複合主鍵。
主鍵不一定是標識列。
12.通配符
_:有且只有一個字元
%任意個任意字元
Like ‘’
13.設置了標識列和約束,不符合約束,可能產生標識列斷裂的情況!
14.數據類型中的日期和時間 DateTime
15.刪除資料庫表,要想刪除有外鍵關係的表,必須先刪除子表(外鍵表)
16.貨幣數據類型money decimal(18,0)
17.int bit true false
18.字元編碼unicode
19.二進位數據 image
第8章 用SQL語句操作數據
DML:
DDL:
DQL:
DCL
01.SQL語句書寫規範
1,.在SQL Sever中,SQL語句不區分大小寫(資料庫名,表名,列名,關鍵字) ,SQL編譯器都識別
2,對錶進行操作的時候,一定要使先用use關鍵字切換到對應的資料庫
3.自增列不可以賦值
02.新增數據註意事項
01.如果新增全部列,那麼表名後可以不跟列名,但是要提供所有列的值,除非當前
列有預設值,那麼也要給出default關鍵字。
02.如果只想給一張表中添加部分列,那麼在表名後要跟上列名,並且需要保證除了你給出
的列的值之外,其他列都允許為空或者有預設值。
insert into goodPerson(stuName,stuAge) values('張曉玲',20)
03. 一次性向一張表中插入多條數據的解決方案
方案一:insert into 目標表
select * from 原表
註意事項:如果目標中有自增列,那麼不能使用*號。
方案二:select * into 目標表(不存在)
from 原表
該方式只保留了數據和子自增列,但是主鍵等約束就都沒有了。
方案三:insert into 目標表(存在)
select '高一二班'
union
select '高一五班'
04.幾個註意點
1.以後大家見到update語句,一定要跟where條件,打死也要跟。
2.在SQL Server中null代表不知道,所以如果where後的限定條件不能用=和null做對比,必須使用is null
05.delete和truncate區別?
解析:01.delete 後可以跟where條件,而truncate不行
02.delete刪除數據的時候會記錄日誌,而truncate不會
03.delete刪除表中所有資料庫,id編號不會從1開始,而truncate會。
同志們,有些童鞋問老濕,為什麼呀???
專業人士解析:因為truncate又稱為“截斷表”。編號從1開始。
--01.如果要進行數據表中數據的查詢,那麼必須先定位到該表所在的資料庫
use Myschool --切換資料庫
select StuId, StuName, StuAge, GradeId from Student
--我只想要年齡小於歲的學員信息
select * from Student where StuAge<=22
--新增數據
insert into GoodPerson values
('微冷的雨',50,'中國某地區','未知','希望大家努力學習,將來薪資K')
select * from goodperson
insert into goodperson(stuName,stuAge,stuAddress,stuLike,stuWishes) values('張靚穎',20,default,'大家微笑的臉龐','開心就好')
insert into goodPerson(stuName,stuAge) values('張曉玲',20)
delete from goodperson
where StuId=31
select * from goodPerson2
-- 一次性向一張表中寫入多條數據方案一
insert into goodPerson2
select StuName, stuAge, stuAddress, stuLike, stuWishes from goodPerson
delete from goodperson2
--方案二
select * into goodpersonbak
from goodperson
--方案三:
select * from grade
insert into grade
select '高一二班'
union
select '高一五班'
--更新高一三班位"無敵S1290"
update grade set gradename='無敵S1290'
where gradename='高一三班'
--將"王龍彪" 改成"李小龍"
--將年齡為歲的學員年齡改成
update goodpersonbak set stuname='李小龍',stuage=25
where stuname='微冷的雨'
select * from goodpersonbak
update goodpersonbak set stuname='微冷的鱷魚',stuage=10000
where stuid=1007
select * from goodperson
insert into goodperson(stuname,stuage,stulike)
values('李小龍',20,'吃faN')
select * from goodperson
where stuwishes is null
update grade set gradename='S1'
select * from goodpersonbak
下次:
前6章可以
第七章第八章課後題
第九章預習
第9章 數據查詢基礎
01.關於*會引起全表掃描問題
use MessageBoard
select * from Message --記憶體中
--*號會引起全表掃描,所以在真正的開發中,不推薦使用。最好使用
--確切的列名。
02.查找留言人是“羅雨萌”的所有留言信息
select *
from Message
where msgAuthor='羅雨萌'
03常見問題:
--01.SQL語句不區分大小寫
--02.字元串和日期類型都需要單引號
--03.起表名的時候,千萬不要起得太好,例如不要使用User作為表名。
-- 如果表名和關鍵字重覆了,我們可以通過[]取消轉義。
select * from [User]
--04.千萬註意新建查詢視窗中的中文空格。
select * from Message
04.別名
--別名方案一
select msgAuthor as 留言人,msgContent as 留言內容
from Message
select msgAuthor 留言人,msgContent 留言內容
from Message
--別名方案二
select 留言人=msgAuthor,留言內容=msgContent
from Message
05.將多列合併成一列顯示
select msgAuthor+'____'+msgContent as 留言人說的留言是一種留言留言
from Message
06.常量列
select *,'漢族'as 民族 from Message
07.常見事項說明
--通過Ctrl+R:可以顯示和隱藏結果集視窗
--真正的安裝順序,先安裝資料庫,再裝其他軟體。
--換一個版本。,換安裝包
--換系統
--來找我,我都解決不了,那麼就是人品
08.關於top關鍵字
--限制只檢索前幾條數據
use MySchool
select top 3 * from student
where Gender='0'
--按主鍵
--獲取Student表中的前20%的數據
--能大概推斷表中總共的數據數
select top 20 percent * from student
--腳本語言:不需要編譯器進行編譯,就可以直接解析執行的代碼
--編譯語言:
--從高版本向低版本附加,附加不上。
--比如說: SQL Server 2008
-- SQL Server 2005
09.Order by相關
--*****************************5.Order by相關***********************************
select * from Student
--預設按主鍵升序排序
select * from student
order by Gender desc
--按照多列排序(先按年級,再按性別)
select * from student
order by GradeId asc,Gender desc
--查詢北京的男同學
select * from student
where Address like '%北京%' and Gender='1'
--查詢“李X龍”的信息
select * from student
where StudentName like '李_龍'
10.通配符:
--%:任意長度的任意字元,(包含0個)
--:_:任意的單個字元,只能是一個
--查詢考試成績前五名的分數
select top 5 StudentNo,SubjectId,Studentresult
from result
order by Studentresult desc
--學號科目編號和分數(只要前3個人的)
--01.order by
--02.where後多個條件通過and連接,order by才用逗號
--03.=(完全匹配)和like(模糊查詢)
--*********************************************************************************
11.字元串函數
--******************************6.字元串函數***************************************
--函數名稱:CharIndex('str1','str2',index)//位置從開始
--參數含義:
--第一個參數:要查詢的字元串
--第二個參數:在哪個字元串中搜索
--第三個參數:從str2的第幾個字母開始搜索
--註意點:如果在str2中沒有找到str1,那麼返回
--案例:
select charindex('好好學','S1是S2的基礎,所以大家好好學',1)
SELECT CHARINDEX('JBNS','My Jbns Course')
select charindex('微冷的雨','好人啊微冷的雨',4)
select charindex('媽媽說','我們要為國家爭光,媽媽說,是人就要有理想',11)
--len():獲取小括弧中字元串的長度,空格也算一個字元長度
select len('明天咱們還上課,希望大家回去好好休息')
select len('大家都是好孩子 ')
--註意點:如果內容以多個空格結尾,那麼結尾的多個空格,是不計算長度的
--例如:
select len('我們都是好孩子 ')
SELECT LEN('SQL Server課程')
select len('我是這個世界上最大的王,你信嗎?')
--upper():將括弧中出現的英文全部轉換成大寫
select upper('i can speak english.你能嗎?')
select lower('I HAVE A DREAM')
select upper('i have a dream,俺有一個夢想')
--LTrim():清除括弧中內容左邊的空格(left:right)
select ltrim(' 生活不是林黛玉, '
select rtrim(' 生活不是林黛玉, ')
--既想移除左邊空格,也想移除右邊空格
select rtrim(ltrim(' 生活不是林黛玉, '))
select ltrim(rtrim(' 你還好吧! '))
--思路靈活
select len(rtrim('今年奇怪了,北京沒下雪,去去去 '))
--substring('字元串',截取的位置,截取的長度)
select substring('我是中國人,我愛自己偉大的祖國,真的',6,1)
--right():從字元串右邊返回指定類型的字元
select left('大家今天好像都沒有交日記本,我去',3)
select right('大家今天好像都沒有交日記本,我去',2)
--replace('str1','要替換的字元','目標字元'):
select replace('周傑倫,殘疾人,雖然手不殘疾,但是X殘疾','殘疾','好')
--stuff('字元串',刪除的起始位置,刪除的長度,'插入的字元串')
select stuff('我愛你中國,我愛你故鄉',4,2,'北京')
select stuff('我們都要有理想,為了理想我們熬夜,當然以犧牲身體為代價',6,2,'自信')
--****************************************************************************&
12.日期函數
--**********************************7.日期函數*************************************
--01.getdate():獲取當前日期和時間
select getdate()
--1000ms是s
--02.dateadd(按年/月/日添加,增量,時間)
select dateadd(yy,100,'2014-8-6')
select dateadd(year,-20,getdate())
--03.datediff(按年/月/日求差,小時間,大時間)
--高梓賀
select datediff(year,'1998-01-01',getdate())
--04.datename:獲取某個日期是星期幾
select datename(dw,'2014-08-06')
--05.datepart(mm,日期):獲取指定日期對應的年/月/日部分
select datepart(yy,getdate())
--Year yy
--Month mm
--Day dd
--push(推) pull(拉)
--通過該方式也可以獲取當天是周幾
select datepart(dw,getdate())
--數學函數
--01.rand():產生一個到之間的隨機數
select right(rand(),4)
Select rand()
--如果產生四位數(-9999)
--02.abs:取絕對值
select abs(-10)
select abs(10)
--非負數
--03.ceiling:天花板,你要看天花板,抬頭,向上取整
select ceiling(1.999991)
--04.floor:向下取整
select floor(1.999999)
select ceiling(1.000000000000001)
select floor(2.999999999999999)
--04.power(5,2)求冪值
select power(4,4)
select 1*2/3+5-56+100-5/100
select power(2,3)
--05.round:將一個數字四捨五入到指定精度
select round(42.564,1)
--06.sign:如果括弧中寫的是一個正數,返回,如果是負數,返回-1
--如果是返回
select sign(20)
select sign(0)
--07.sqrt()開平方
select sqrt(9)
第10章 模糊查詢和聚合函數
01.通配符使用
001.%:任意多個任意字元(含0個)
002._:任意的單個字元 (必須一個)
003.[0-9]:只能出現中括弧內指定範圍的一個字元
004.[^a-z]:不能出現任何字母,只能是字母之外的其他字元。
02.Between 80 and 100
做一個徘徊於牛A與牛C之間的人
Between and 等價於 >=和<=
但是嚴重推薦使用between and
03.in關鍵字的模糊查詢
select * from student
where address in('地址1','地址2')
04.聚合函數的應用場景?
解析:一般在做統計分析的時候需要使用聚合函數
count:統計一張表中總共有多少條數據
select SUM(StudentResult) as 總分 from Result
select AVG(studentresult) as 平均分 from Result
select MAX(studentresult) as 最高分 from Result
select min(studentresult) as 最高分 from Result
第11章 連接查詢和分組查詢
01.分組查詢:用於統計時經常使用分組查詢
--sum()--count()--max() min()--avg()
--01.查詢每個年級的總人數
--一旦通過group by分組,那麼我們只能獲取組相關的信息,而不能獲取組中成員的信息
--在select後只能跟聚合函數和group by後面的列,其他列不允許
select gradeid as 年級編號,COUNT(studentno) as 總人數
from student
group by gradeid
--多列分組
02.每個年級的男生總人數,,以及女生總人數
--年級編號 性別 總人數
select gradeid as 年級編號,gender as 性別,COUNT(studentno) as 總人數
from student
group by GradeId,Gender
order by GradeId,Gender
*03如何查詢每門課程的平均分
select SubjectId as 課程編號,AVG(studentresult) as 平均分 --05.投影結果
from Result --01。定位到表
where SubjectId<3 --, --02.分組前第一道過濾
group by SubjectId --03.分組
having COUNT(studentno)>3 --04.分組後第二道過濾
order by 課程編號 desc --06.最後排序
04獲取總人數超過3人的年級編號及人數
--年級編號 總人數
select gradeid as 年級編號,COUNT(studentno) as 總人數
from student
group by GradeId
having COUNT(studentno)>3
--having是對分組後的數據進行第二次篩選或者過濾,也就是說沒有group by就沒having
--註意:where之後不能有聚合函數
05.上機練習1
--**********************上機練習1********************************************
--查詢每個年級的總學時數,並按照升序排列
select gradeid as 年級編號,SUM(classhour) as 總學時數
from Subject
group by gradeid
order by 總學時數 asc
--查詢每個參加考試的學員平均分
select studentno as 學號,AVG(studentresult) as 平均分
from Result
group by studentno
--查詢每門課程的平均分,並按照降序排列
select subjectid as 課程編號,AVG(studentresult) as 平均分
from Result
group by SubjectId
order by 平均分 desc
--查詢每個學生參加所有考試的總分,並按照降序排列
select studentno as 學號,SUM(studentresult) as 總分
from Result
group by StudentNo
order by 總分 desc
06.上機練習2
--**********************上機練習2********************************************
S1:java html c# winform sql server
--查詢每年級學時數超過的課程數
select gradeid as 年級編號,COUNT(subjectid) as 課程總數
from Subject
where ClassHour>=50
group by GradeId
--查詢每年級學生的平均年齡:
select gradeid as 年級,AVG(DATEDIFF(YY,birthday,getdate())) as 平均年齡
from student
group by GradeId
--查詢每個年級包含北京的學生總數
select gradeid as 年級,COUNT(studentno) as 總人數
from student
where Address like '%北京%'
group by GradeId
--查詢參加年級考試的學生中,平均分及格的學生記錄,按照降序排列
select studentno as 學號,avg(StudentResult) as 平均分
from Result
group by StudentNo
having avg(StudentResult)>60
order by 平均分 desc
--查詢考試時間為2009-9-9課程的及格平均分
--課程編號 所有課程平均分
select subjectid as 課程編號,AVG(studentresult) as 所有課程平均分
from Result
where ExamDate>='2009-9-9' and ExamDate<'2009-9-