第一篇:淺談關于SQL數據庫中Group By的用法
淺談關于SQL數據庫中Group By的用法
指定用來放置輸出行的組,并且如果 SELECT 子句 中包含聚合函數,則計算每組的匯總值。指定 GROUP BY 時,選擇列表中任一非聚合表達式內的所有列都應包含在 GROUP BY 列表中,或者 GROUP BY 表達式必須與選擇列表表達式完全匹配。
?
SELECT U_ID,House_Addrinfo, COUNT(U_ID)AS CX FROM YX_ChuShou GROUP BY U_ID ORDER BY CX DESC
這條語句出現“選擇列表中的列 'YX_ChuShou.House_Addrinfo' 無效,因為該列沒有包含在聚合函數或 GROUP BY 子句中。”的錯誤提示。
正確的寫法是
?
4SELECT U_ID,min(House_Addrinfo),COUNT(U_ID)AS CXFROM YX_ChuShouGROUP BY U_IDORDER BY CX DESC
或
?
SELECT U_ID,House_Addrinfo,COUNT(U_ID)AS CXFROM YX_ChuShouGROUP BY U_ID ,House_Addrinfo ORDER BY CX DESC
第二篇:SQL數據庫心得
黃淮學院 2015---2016學年第 一 學期 《C#數據庫應用程序開發技術與案例教程》課程
題目:
學習報告
院
系:數學科學系 專
業:數學與應用數學 年
級:1301B 姓
名:曹占營 學
號:1331110101 任課教師:楊鋒英
2015年 12 月 30日
C#數據庫學習報告
在日常生活中,我們和朋友、親戚聯系,會廣泛用到通訊錄,因此這門課程以通訊錄開發為案例,教我們學習軟件開發。
軟件開發是一項非常注重實踐工作,不可能只憑看書、看視頻就學會軟件開發,必須扎扎實實、一行一行的編寫代碼,不斷積累項目經驗,才能真正掌握編程技術,所以我們要親自上級編寫程序,才能真正掌握軟件開發技術。
本書分為基礎篇、進階篇、高級篇,由淺入深地介紹了基于C#的數據庫編程技術,所用的開發工具為Visual Studio 2008、SQL Server 2005以及Access 2007。
學習數據庫的內容是從數據庫、數據表的創建和修改開始的,表是建立關系數據庫的基本結構,用來存儲數據具有已定義的屬性,在表的操作過程中,有查看表信息、查看表屬性、修改表中的數據、刪除表中的數據及修改表和刪除表的操作。從課程中讓我更明白一些知識,查詢可以通過SQL語言進行完成,這樣加深了查詢語句的基本結構,讓我們能更好的掌握其中語句,方便于我們后面的學習和應用。表是數據最重要的一個數據對象,表的創建好壞直接關系到數數據庫的成敗,表的內容是越具體越好,但是也不能太繁瑣,以后在實際應用中多使用表,對表的規劃和理解就會越深刻。在編程方面是需要我們對于編程有邏輯思維能力及一定的編程技巧。在數據庫中插入表、表中的信息等都需要注意,不然很容易出錯。
在基礎篇中,詳細講解了通訊錄系統的設計、開發和安裝部署這樣一個完整過程,對各個任務進行詳細講解。基礎篇學習分為9個任務,分別為系統分析與設計、用戶登錄、主窗體設計、聯系人分組管理、聯系人管理、用戶密碼修改、數據庫備份與恢復、設計“關于”窗體、系統安裝與部署。學完基礎篇,即可開發出一個功能較為完備的通訊錄系統。在聯系人管理任務學習中,由于在Contact表中保存的是分組編號,而窗體上要顯示的是分組名稱,所以在查詢語句中需要級聯查詢,即SQL語句為”select Contact.Id, Name, Phone, Email, QQ, GroupName from Contact, ContactGroup where Contact.GroupId = ContactGroup.Id”。為了實現代碼復用,可以提供查詢功能,根據用戶選擇的擦尋天劍,拼接產生SQL語句。同時為了支持模糊查詢,還在SQL語句中用了like語句。通過SqlDataAdapter的Fill方法填充數據集,獲取數據。數據集中有了數據以后,我們只需設置DataGridView控件的DataSource屬性,就可以顯示數據了。
在進階篇中,介紹了企業項目開發中廣發用到的參數化SQL語句、存儲過程使用及定義數據庫操作類,分為3個任務學習,分別為使用參數化SQL語句、使用存儲過程、使用自定義數據庫操作類,進一步提高我們的數據庫編程能力。在使用存儲過程任務學習中,了解到存儲過程是在大型數據庫系統中,一組為了完成特定功能的SQL語句集,經編譯后存儲在數據庫中,用戶通過指定存儲過程的名字并給出參數(如果該存儲過程帶有參數)來執行它。在性能方面,存儲過程有如下的優點。(1)與編譯,存儲過程預先編譯好放在數據庫內,減少編譯語句所花的時間。(2)緩存,編譯好的存儲過程會進入緩存,所以對于經常執行的存儲過程,除了第一次執行外,其他次執行的書都會有明顯提高。(3)減少網絡傳輸,特別對于處理一些數據的存儲過程,不必像直接用SQL語句實現那樣多次傳送數據到客戶端。通過前面的學習,細細體會對數據庫的操作,可以發現,這么多操作其實可以分為4種。(1)對數據庫進行非連接式查詢操作,返回多條記錄。這種操作可以通過SqlDataAdapter對象的Fill方法來完成,即把查詢得到的結果填充到DataTable(或DataSet)對象中。(2)對數據庫進行連接式查詢操作,返回多條查詢記錄。這種操作可以通過SqlCommand對象的ExecuteReader方法來完成,返回SqlDataReader對象。(3)從數據庫中檢索單值。這種操作可以通過SqlCommand對象的ExecuteNonQuery方法來完成。ExecuteScalar方法返回的是Object類型,需要根據實際情況進行類型轉換。(4)對數據庫執行增、刪、改操作。這種操作可以通過SqlCommand對象的ExecuteNonQuery方法來完成,返回增、刪、改操作后數據庫中受影響的行數。
在高級篇中,分為4個任務學習,分別為開發基于三層構架的通訊錄程序、開發基于Access的通訊錄程序、實現基于抽象工廠模式的三層架構、使用MD5加密用戶密碼。首先詳細講解了基于三層構架的通訊錄程序開發過程以及如何開發一個基于Access的通訊錄系統。最后,介紹了如何采用MD5加密技術對用戶密碼加密。MD5加密技術也是實際項目開發中廣泛用到的,通過MD5加密用戶密碼,可以提高程序的安全性。“三層架構”一詞中的“三層”是指:“表示層”、“業務邏輯層”、“數據訪問層”。表示層:位于最外層,離用戶最近。用于顯示和接收用戶輸入的數據,為用戶提供一種交互式操作界面。表示層的常見形式為WinFrom和WebForm。業務邏輯層:負責處理用戶輸入的信息,或者是將這些信息發送給數據訪問層進行保存,或者是調用數據訪問層中的函數再次讀出這些數據。業務邏輯層也可以包括一些對“商業邏輯”描述代碼在里面。數據訪問層:僅實現對數據的保存和讀取操作。可以訪問數據庫系統、二進制文件、文本文檔或是XML文檔。
在這一學期有限的幾次實驗課后,我雖然沒有學會很多,但也學會了一些簡單的操作,我學會了一些簡單的數據運算,會建立一些簡單的表。有時候在做實驗時,對于實驗中的一些東西我不怎么了解,但我還會去做,因為我想只有多練習才能熟練,也才能理解掌握知識。我不知道這一門課對其他同學來說怎么樣,但對我來說卻有些難,但我會努力。因為我認為它對我以后考計算機二級有很大的幫助。
很快這一學期馬上就要結束了,數據庫這一門課也很快就要結束了,但這一學期的學習讓我知道了很多,也告訴了我在以后的人生中如何去做事,如何去做人。尤其是老師的耐心,老師的敬業精神感動了我,再做任何事時都應該認真負責,任何一個人都應該被尊重。
第三篇:SQL中forXML語句用法總結
-------raw模式:raw模式將查詢結果集中的每一行轉換為帶有通用標識符row或可能提供元素名稱的xml元素。(將查詢結果集中的每一行轉換為row元素的屬性或row元素的子無素)-------------行集中非Null的每列值都將映射為row元素的一個屬性--------------------------
select top 10 *
from mixtureMeasureMonitor
for xml raw
---將elements指令添加到for xml子句,則行集中非null的每列值都將映射為row元素的一個子元素
-----------
select top 10 *
from mixtureMeasureMonitor
for xml raw,elements
----在指定elements指令的同時指定xsinil選項,則將行集中為null的每例值映射為具有屬性xsi:nil=“true”的一個元素
---------------------------
select top 10 *
from mixtureMeasureMonitor
for xml raw,elements XSINIL
-Auto模式根據查詢確定返回的xml的形式--------------
select pmm.id,pmm.ppId,pp.MixPropNo,pmm.criterion
from mixtureMeasureMonitor as pmm inner join
produceProportion as pp on pp.id=pmm.ppid and pp.cOrgID=pmm.cOrgID tOption as tp on tp.cValue=pmm.Criterion inner join
where tp.ckey='Criterion '
for xml auto
select
pmm.id,pp.MixPropNo,pmm.ppId,pmm.criterion,pmm.temperatureMark,pmm.remark
from mixtureMeasureMonitor as pmm inner join
produceProportion as pp on pp.id=pmm.ppid and pp.cOrgID=pmm.cOrgID tOption as tp on tp.cValue=pmm.Criterion inner join
where tp.ckey='Criterion '
for xml auto,elements xsinil
-----------------explicit模式:使用RAW和AUTO模式不能很好地控制從查詢結果生成的XML的形狀。但是,對于要從查詢結果生成的XML,EXPLICIT模式會提供非常好的靈活性-----------------------
select
pp.MixPropNo,pmm.id,pmm.ppId,pmm.criterion,pmm.temperatureMark,pmm.remark
from mixtureMeasureMonitor as pmm inner join
produceProportion as pp on pp.id=pmm.ppid and pp.cOrgID=pmm.cOrgID tOption as tp on tp.cValue=pmm.Criterion inner join
where tp.ckey='Criterion '
for xml explicit
-------------------------OPENXML語句,對XML文件進行查詢,然后返回指定的XML中的結果集數據---------------------------
/*openxml(idoc int [in],rowpattern nvarchar[in],[flags byte [in]])
[WITH(SchemaDeclaration|TableName)]
Idoc:XML文檔的內部表示形式的文檔句柄
RowPattern:XPath模式,用來標識要作為行處理的節點
Flags:指示應在XML數據和關系行集間使用映射,以及應如何填充溢出列
SchemaDeclaration:窗體的架構定義
TableName:如果具有所需架構的表已經存在且不要求列模式,則為給定的表名*/ DECLARE @idoc int
declare @doc varchar(2000)
set @doc='
'
EXEC sp_xml_preparedocument @idoc output,@doc
select *
from openxml(@idoc,'/ROOT/Customer',1)
with(CustomerID varchar(10),ContactName varchar(20))/*path()括號內的參數是控制節點名稱的,不指定括號時控制節點默認是row。rooot選項來添加單個頂級元素*/
------------------path選項不帶()時,默認控制節點是row,其他字段元素都是row元素的子元素----------
select ID ,name
from MtrlBaseName
for xml path
--------------------------ID,name是product標簽的子標簽---------------select ID ,name
from MtrlBaseName
for xml path('Product'),root('ProductExport')
------------------ID是Product標簽的屬性,name是Product標簽的內容-----------------------------
select ID [@ID],name as [*]
from MtrlBaseName
for xml path('Product'),root('ProductExport')
------------------ID,name是Product標簽的屬性
----
select ID [@ID],name as [@name]
from MtrlBaseName
for xml path('Product'),root('ProductExport')
第四篇:數據庫sql語言總結
插入句型:
insertinto<表名> [各屬性名]values(<常量1>,<常量2>……)
刪除元組或者二維表:
delete from<表名>[ where <條件> ]
刪除屬性:
altertable<表名>dropcolumn<列名>
增加某表的屬性:
altertable<表名>add<列名> 類型
修改句型:
update<表名>set<列名> =<表達式>[where<條件>]
修改某表當中的屬性類型:
altertable<表名>altercolumn<列名><轉換的類型>;
顯示表的一些基本情況
EXEC sp_help'<表名>'
更改當前數據庫中用戶創建對象(如表、列或用戶定義數據類型)的名稱 sp_rename ‘<舊的表名>’, ‘<新的表名>’
修改表的列名 sp_rename'<表名>.
小注:上面的語句最后不需要加分號
判斷表中是否存在某列的語句
if exists(select * from syscolumns where id = object_id('stu')and name='Sno')
print 'stu exists'
else print 'stu not exists'
將表中的某列設置為主碼:
alter table stu addSno char primary key;
判斷表是否存在if exists(select count(*)from sysobjects where type='U' and name='stu')
查詢某個表中字段的列名和數據類型
select column_name,data_type from information_schema.columns where table_name = '表名';
第五篇:數據庫SQL語句十題
作業十題
1.查詢所有學生的基本信息,并按學號降序排列
SELECT * FROM STUDENT
ORDER BY sno DESC;
2.查詢系別代碼為“02”的女同學信息
SELECT * FROM STUDENT
WHERE ssex=’女’ and sdept=‘02’;
3.查詢學生的總人數
SELECT COUNT(*)AS 學生總人數
FROM STUDENT;
4.所有選修課學生的姓名,課程名及成績
SELECT sname,cname,grade
FROM STUDENT,COURSE,SC
WHERE STUDENT.sno=SC.sno and COURSE.cno=SC.cno;
5.不及格學生姓名(合并重復項)
SELECT distinct sname
FROM SC,STUDENT
WHERE grade<=60 and STUDENT.sno=SC.sno;
6.查詢學號為“011110”的學生的哪些課程的成績比他數據庫的成績要高 SELECT cno
FROM COURSE
WHERE sno=’011110’ and grade>(SELECT grade FROM COURSE,SC
WHERE cname=’數據庫’ and sno=‘011110’ and
COURSE.cno=SC.cno);
7.查詢選修課在3門以上(包括3門)的學生學號及選課門數 SELECT sno,COUNT(*)AS 選修門數
FROM SC
GROUP BY sno HAVING COUNT(*)>=3;
8.查詢學號為“011110”的學生的平均成績,并以平均成績命名 SELECT AVG(grade)AS average grade
FROM SC
WHERE sno=’011110’;
9.查詢計算機系或英語系的所有學生的個人信息
SELECT*FROM STUDENT
WHERE sdeptIN(SELECT sdept FROM DEPT
WHERE sdname=’計算機系’OR sdname=’英語系’);
10.查詢與“羅宇波”同一個系的學生情況
SELECT * FROM STUDENT
WHERE sdept=(SELECT sdept FROM STUDENT
WHERE sname=’羅宇波’);