⑴ 如何進行sql性能優化
這里分享下mysql優化的幾種方法。
1、首先在打開的軟體中,需要分別為每一個表創建 InnoDB FILE的文件。
⑵ 資料庫實驗總結
資料庫實驗總結【一】
試驗內容
春茄消1、 數據表的建立
基本表《簡單的》帶有主鍵
帶有外碼約束的(外碼來自其他表或者本表)
2、 數據表的修改
添加刪除列
修改列屬性類型
添加刪除約束(約束名)
元組的添加,修改,刪除
刪除數據表
試驗過程
1、create table student
(
sno char(9) primary key , /*sno是主碼 列級完整性約束條件*/
sname char(20) unique, /*sname取唯一值*/
ssex char(2),
sage smallint, /*類型為smallint*/
sdept char(20) /*所在系*/
);
扒知create table course
(
cno char(4) primary key, /*列級完整性約束條件,cno是主碼*/
cname char(40),
cpno char(4), /*cpno的含義是先行課*/
ccredit smallint,
foreign key (cpno) references course(cno)
/*表級完整性約束條件,cpno是外碼,被參照表是course,被參照列是cno*/
);
create table sc
(
sno char(9),
cno char(4),
grade smallint,
primary key (sno,cno),
/*主碼有兩個屬性構成,必須作為表級完整性進行定義*/
foreign key (sno) references student(sno),
/*表級完整性約束條件,sno是外碼,被參照表是student*/
foreign key (cno) references course(cno),
/*表級完整性約束納彎條件,cno是外碼,被參照表示course*/
);
例1、create table s
(
cno varchar(3), /*變長的字元串,輸入2個字元就是兩個字元不會補空格*/
sname varchar(20),
status int,
city varchar(20),
constraint pk_sno primary key(sno), /*約束條件的名字為pk_sno*/
);
create table p
(
pno varchar(3),
pname varchar(20),
color varchar(3),
weight int,
constraint pk_pno primary key (pno), /*約束條件的名字是pk_pno*/
);
create table j
(
jno varchar(3),
jname varchar(20),
city varchar(20),
constraint pk_jno primary key(jno) /*約束條件的名字為pk_jno*/
);
例2、create table spj
(
sno varchar(3), /*第一個表中的主碼*/
pno varchar(3),
jno varchar(3),
qty int, /*數量*/
constraint pk_spj primary key(sno,pno,jno), /*主碼由3個屬性組成*/
foreign key(sno) references s(sno),
/*表級完整性約束條件,sno是外碼,被參照表是s*/
foreign key(pno) references p(pno),
/*表級完整性約束條件,pno是外碼,被參照表是p*/
foreign key(jno) references j(jno),
/*表級完整性約束條件,jno是外碼,被參照表是j*/
);
2、數據表的更改
在s表中添加一個concat 列
alter table s add concat varchar(20)
在s表中刪除concat 列
alter table s drop column concat
更改s表 concat列的屬性 把長度由20改為30
alter table s alter column concat varchar(30)
聯系方式 名字為concat 修改屬性為唯一的 屬性名為con_concat
alter table s add constraint con_concat unique(concat)
刪除約束關系con_concat
alter table s drop constraint con_concat
/*插入一個元組*/
insert into s valus(‘s1’,’精益’,20,’天津’) /*20不能寫成’20’*/
試驗中的問題的排除與總結:
1、在創建spj時
有三個實體所以從3個實體中取主碼,還有一個數量屬性也要寫上
主碼由那3個主碼確定
2、更改一個資料庫中數據表時一定要先使該資料庫處於正在使用狀態
3、constraint
是可選關鍵字,表示 primary key、not null、unique、foreign key 或 check 約束定義的開始。約束是特殊屬性,用於強制數據完整性並可以為表及其列創建索引。
4、--go可以不加但是要注意順序 註:go --注釋 提示錯誤
5、注意添加一個空元素用 null
附 sql備份
--創建一個資料庫 student
create database student
go
--在資料庫student中創建表student course sc 注意順序
use student
----------------------------------------------------------------
create table student
(
sno char(9) primary key, /*sno是主碼 列級完整性約束條件*/
sname char(10) unique, /*sname取唯一值*/
ssex char(2),
sage smallint, /*類型為smallint*/
sdept char(20) /*所在系*/
); /*;要加*/
-----------
資料庫實驗總結【二】
我在sql server 索引基礎知識系列中,第一篇就講了記錄數據的基本格式。那裡主要講解的是,資料庫的最小讀存單元:數據頁。一個數據頁是8k大小。
對於資料庫來說,它不會每次有一個數據頁變化後,就存到硬碟。而是變化達到一定數量級後才會作這個操作。 這時候,資料庫並不是以數據頁來作為操作單元,而是以64k的數據(8個數據頁,一個區)作為操作單元。
區是管理空間的基本單位。一個區是八個物理上連續的頁(即 64 kb)。這意味著 sql server 資料庫中每 mb 有 16 個區。
為了使空間分配更有效,sql server 不會將所有區分配給包含少量數據的表。sql server 有兩種類型的區:
統一區,由單個對象所有。區中的所有 8 頁只能由所屬對象使用。
混合區,最多可由八個對象共享。區中八頁的每頁可由不同的對象所有。
通常從混合區向新表或索引分配頁。當表或索引增長到 8 頁時,將變成使用統一區進行後續分配。如果對現有表創建索引,並且該表包含的行足以在索引中生成 8 頁,則對該索引的所有分配都使用統一區進行。
為何會這樣呢?
其實很簡單:
讀或寫 8kb 的時間與讀或寫 64 kb的時間幾乎相同。
在 8 kb 到 64 kb 范圍之內,單個磁碟 i/o 傳輸操作所花的時間主要是磁碟取數臂和讀/寫磁頭運動的時間。
因此,從數學上來講,當需要傳輸 64 kb 以上的 sql 數據時,
盡可能地執行 64 kb 磁碟傳輸是有益的,即分成數個64k的操作。
因為 64 kb 傳輸基本上與 8 kb 傳輸一樣快,而每次傳輸的 sql server 數據是 8 kb 傳輸的 8 倍。
我們通過一個實例來看 有and 操作符時候的最常見的一種情況。我們有下面一個表,
create table [dbo].[member]( [member_no] [dbo].[numeric_id] identity(1,1) not null, [lastname] [dbo].[shortstring] not null, [firstname] [dbo].[shortstring] not null, [middleinitial] [dbo].[letter] null, [street] [dbo].[shortstring] not null, [city] [dbo].[shortstring] not null, [state_prov] [dbo].[statecode] not null, [country] [dbo].[countrycode] not null, [mail_code] [dbo].[mailcode] not null, [phone_no] [dbo].[phonenumber] null, [photograph] [image] null, [issue_dt] [datetime] not null default (getdate()), [expr_dt] [datetime] not null default (dateadd(year,1,getdate())), [region_no] [dbo].[numeric_id] not null, [corp_no] [dbo].[numeric_id] null, [prev_balance] [money] null default (0), [curr_balance] [money] null default (0), [member_code] [dbo].[status_code] not null default (' '))
這個表具備下面的四個索引:
索引名 細節 索引的列
member_corporation_link nonclustered located on primary corp_no
member_ident clustered, unique, primary key located on primary member_no
member_region_link nonclustered located on primary region_no
memberfirstname nonclustered located on primary firstname
當我們執行下面的sql查詢時候,
select m.member_no, m.firstname, m.region_nofrom dbo.member as mwhere m.firstname like 'k%' and m.region_no > 6 and m.member_no < 5000go
sql server 會根據索引方式,優化成下面方式來執行。
select a.member_no,a.firstname,b.region_nofrom(select m.member_no, m.firstname from dbo.member as m where m.firstname like 'k%' and m.member_no < 5000) a , -- 這個查詢可以直接使用 memberfirstname 非聚集索引,而且這個非聚集索引覆蓋了所有查詢列-- 實際執行時,只需要 邏輯讀取 3 次
(select m.member_no, m.region_no from dbo.member as mwhere m.region_no > 6) b
-- 這個查詢可以直接使用 member_region_link 非聚集索引,而且這個非聚集索引覆蓋了所有查詢列-- 實際執行時,只需要 邏輯讀取 10 次
where a.member_no = b.member_no
不信,你可以看這兩個sql 的執行計劃,以及邏輯讀信息,都是一樣的。
其實上面的sql,如果優化成下面的方式,實際的邏輯讀消耗也是一樣的。為何sql server 不會優化成下面的方式。是因為 and 操作符優化的另外一個原則。
1/26 的數據和 1/6 的數據找交集的速度要比 1/52 的數據和 1/3 的數據找交集速度要慢。
select a.member_no,a.firstname,b.region_nofrom(select m.member_no, m.firstname from dbo.member as mwhere m.firstname like 'k%' -- 1/26 數據) a,
(select m.member_no, m.region_no from dbo.member as mwhere m.region_no > 6 and m.member_no < 5000-- 1/3 * 1/ 2 數據) bwhere a.member_no = b.member_no
當然,我們要學習sql 如何優化的話,就會用到查詢語句中的一個功能,指定查詢使用哪個索引來進行。
比如下面的查詢語句
select m.member_no, m.firstname, m.region_nofrom dbo.member as m with (index (0))where m.firstname like 'k%' and m.region_no > 6 and m.member_no < 5000go
select m.member_no, m.firstname, m.region_nofrom dbo.member as m with (index (1))where m.firstname like 'k%' and m.region_no > 6 and m.member_no < 5000goselect m.member_no, m.firstname, m.region_nofrom dbo.member as m with (index (membercovering3))where m.firstname like 'k%' and m.region_no > 6 and m.member_no < 5000goselect m.member_no, m.firstname, m.region_nofrom dbo.member as m with (index (memberfirstname, member_region_link))where m.firstname like 'k%' and m.region_no > 6 and m.member_no < 5000go
這里 index 計算符可以是 0 ,1, 指定的一個或者多個索引名字。對於 0 ,1 的意義如下:
如果存在聚集索引,則 index(0) 強制執行聚集索引掃描,index(1) 強制執行聚集索引掃描或查找(使用性能最高的一種)。
如果不存在聚集索引,則 index(0) 強制執行表掃描,index(1) 被解釋為錯誤。
總結知識點:
簡單來說,我們可以這么理解:sql server 對於每一條查詢語句。會根據實際索引情況(sysindexes 系統表中存儲這些信息),分析每種組合可能的成本。然後選擇它認為成本最小的一種。作為它實際執行的計劃。
成本代價計算的一個主要組成部分是邏輯i/o的數量,特別是對於單表的查詢。
and 操作要滿足所有條件,這樣,經常會要求對幾個數據集作交集。數據集越小,數據集的交集計算越節省成本。
的項目中,竟然出現了濫用聚集索引的問題。看來沒有培訓最最基礎的索引的意義,代價,使用場景,是一個非常大的失誤。這篇博客就是從這個角度來羅列索引的基礎知識。
使用索引的意義
索引在資料庫中的作用類似於目錄在書籍中的作用,用來提高查找信息的速度。
使用索引查找數據,無需對整表進行掃描,可以快速找到所需數據。
使用索引的代價
索引需要佔用數據表以外的物理存儲空間。
創建索引和維護索引要花費一定的時間。
當對表進行更新操作時,索引需要被重建,這樣降低了數據的維護速度。
創建索引的列
主鍵
外鍵或在表聯接操作中經常用到的列
在經常查詢的欄位上最好建立索引
不創建索引的列
很少在查詢中被引用
包含較少的惟一值
定義為 text、ntext 或者 image 數據類型的列
heaps是staging data的很好選擇,當它沒有任何index時
excellent for high performance data loading (parallel bulk load and parallel index creation after load)
excellent as a partition to a partitioned view or a partitioned table
聚集索引提高性能的方法,在前面幾篇博客中分別提到過,下面只是一個簡單的大綱,細節請參看前面幾篇博客。
何時創建聚集索引?
clustered index會提高大多數table的性能,尤其是當它滿足以下條件時:
獨特, 狹窄, 靜止: 最重要的條件
持續增長的,最好是只向上增加。例如:
identity
date, identity
guid (only when using newsequentialid() function)
聚集索引唯一性(獨特型的問題)
由於聚集索引的b+樹結構的葉子節點必須指向具體數據。如果你要建立聚集索引的列不唯一,並且你指定的創建的聚集索引是非唯一的聚集索引,則會有以下情況:
如果未使用 unique 屬性創建聚集索引,資料庫引擎 將向表自動添加一個四位元組 uniqueifier 列。必要時,資料庫引擎 將向行自動添加一個 uniqueifier 值,使每個鍵唯一。此列和列值供內部使用,用戶不能查看或訪問。
⑶ 查詢及sql語句的使用實驗總結與體會
檢查與管理的重要。
沒有範文。
以下供參考,
主要寫一下主要的工作內容,如何努力工作,取得的成績,最後提出一些合理化的建議或者新的努力方向。。。。。。。
工作總結就是讓上級知道你有什麼貢獻,體現你的工作價值所在。
所以應該寫好幾點:
1、你對崗位和工作上的認識2、具體你做了什麼事
3、你如何用心工作,哪些事情是你動腦子去解決的。就算沒什麼,也要寫一些有難度的問題,你如何通過努力解決了
4、以後工作中你還需提高哪些能力或充實哪些知識
5、上級喜歡主動工作的人。你分內的事情都要有所准備,即事前准備工作以下供你參考:
總結,就是把一個時間段的情況進行一次全面系統的總評價、總分析,分析成績、不足、經驗等。總結是應用寫作的一種,是對已經做過的工作進行理性的思考。
⑷ 學sql server 2012的感想,求一300字左右文章。
光陰似箭日月如梭。轉眼間,童年小學時光已曾昨天。
我不再是小學生。在中學學堂里。我明白已經開始長大了。我將在這里度過三年的成長。在這里,我將努力地學習新知識。和其他新同學一起成長。我們下課了的活動不再是去小賣部買吃的。而是三五成群去體育場打籃球。放學了,我們不再去網吧玩游戲。而是在電腦上查找學習豐富興趣愛好。。
我將在這里成長。我將在這里變得堅強不再像小時候一樣任性。我將學會如何生活,如何?節約勤儉。這將是我性格養成的關鍵三年。
現在,我可以結交同學為好朋友。一起探討我們的學習將來的夢想。我知道現在我們站在同一個起點。面臨同一個奮斗目標。將來可能會有困難。我們平時像對手一樣學習。放假了就想俺閨密一樣玩耍。對於未來,我們是未知的。對於未來我們想像的是美好的。願在新的環境里,像大孩子一樣,朝我們的理想和目標去努力。雖然現在沒有方向。三年以後,我們就知道自己該走什麼樣的路。而現在能做的,就是努力的打好基礎。初中是個重要的時刻。初中三年時光是值得珍惜的。我會努力過好這三年的每一天。以至於後來選擇沒有遺憾。
實驗中學,我的夢想。在這里,我將從童年過渡到青少年。在這里,我將不斷的完善自己人格。在這里我將培養自己的品質。在這里我要踏踏實實的好好學習。實中,我來了,懷揣著我的夢想。
⑸ SQL語言的基本操作方法實驗報告:嵌套查詢、集合查詢,深刻領會視圖的概念、實質和使用方法,SQL的9個動詞
嵌套查詢;一個select-from-where語句稱為一個查詢塊。將一個查詢塊嵌套在另一個查詢塊的where字句或having短語的條件中的查詢。
集合查詢:標准SQL直接支持的集合操作種類 並操作(UNION),一般商用資料庫支持的集合操作種類 並操作、叫操作、差操作。形式 :<查詢塊> UNION <查詢塊>
視圖概念:視圖時一個定製的虛擬表,它可以時本地的、遠程的或帶參數的。實質:一個虛擬表。使用方法:可以在項目管理器中瀏覽視圖,或用命令。
SQL的9個動詞 :
數據查詢:SELECT (查詢出數據,也可用於變數賦值)
數據定義(表/視圖/查詢/存儲過程/自定義函數/索引/觸發器等):CREATE (創建)、DROP(刪除)、ALTER(修改)
數據操作:INSERT(插入)、UPDATE(更新)、DELETE(刪除)
數據控制:Grant(授權)、revoke(回收許可權)
⑹ 資料庫中建立視圖、查詢和游標的實驗感想
眾所周知,資料庫就是數據的倉庫,是由許多數據組成的。 但有些時候我們只關心資料庫中的某些數據,就使用特定的SQL語言獲得此部分數據的信息,此部分數據就是所謂的視圖。 換句話說,視圖就是資料庫中我們希望查看的那部分數據,視圖可能是一個數據表,也可能是若干個數據表中的特定數據。 就好像在一個倉庫中,堆放了很多東西,而我們只關心的某些東西的某種關聯,就是我們相對這個倉庫的「視圖」。 官方定義是:視圖是一個虛擬表,其內容由一個查詢所定義。 存儲過程是集中存儲在資料庫管理系統中預先定義好並編譯的好的事務,一般有SQL語句和過程式控制制語言構成。比如根據不同的查詢條件,可以判斷結果,執行某些查詢語言或者資料庫操作語言。就好像高級語言的procere或function一樣。 游標是一種用於...
⑺ SQL的實驗報告怎麼寫
實驗報告要點
一、扉頁
並非所有的實驗報告都有標題頁,但是如果講師想要標題頁,那麼它應該是一個單獨的頁面,包括:實驗的題目、自己的名字和實驗室夥伴的名字、導師的名字、進行實驗或提交報告的日期。
二、標題
標題寫著做了什麼。它應該簡短,並描述實驗或調查的要點。
三、介紹
通常情況下介紹是解釋實驗室目標或目的的一個段落。用一句話陳述假設。有時介紹可能包含背景信息,簡要總結實驗是如何進行的,陳述實驗的發現,並列出調查的結論。
四、步驟
描述在調查過程中完成的步驟。要足夠詳細,任何人都可以閱讀這一部分並復制實驗。提供一個圖表來描述實驗設置可能會有所幫助。
五、數據
從過程中獲得的數字數據通常以表格的形式呈現。數據包告蠢括進行實驗時記錄的內容。
六、結果
用語言描述數據的含義。有時「結果」部分會與「討論」部分結合在一起。
七、討論或分析
數據部分包含數字,「分析」部分包含根據這些數字進行的任何計算。這是解釋數據和確定假設是否被接受的地方,也是討論在進行調查時可能犯的任何錯誤的地方。
八、結論
大多數情況下,結論是一個段落,總結啟友缺了實驗中發生的事情,假設是被接受還是被拒絕,以及這意味著什麼。
九、圖形和圖表
圖表和圖形都必須標有描述性的標題。在圖表上標注軸,確保包含測量單位。一定要參考報告正文中的圖悄辯和圖表。
十、參考
如果研究是基於別人的文獻,或者引用了需要文檔的事實,那麼應該列出這些參考文獻。
⑻ 實驗收獲怎麼寫
實驗收獲怎麼寫如下:
1、此次設計也讓我明白了思路即出路,有什仿凳么不懂不明白的地方要及時請教或上網查詢豎大銀,只要認真鑽研,動腦思考,動手實踐,就沒有弄不懂的知識,俗話說的好,讀書破萬卷下筆如有神,沒有學不會只有不肯學!我堅信,只要下一番功夫就能有理想的收獲!
2、通過這次實驗,讓我更加了解到地理信息系統原理與方法的重要性,以及它對我們資源勘查專業發展發揮的重要作用。學習,我覺得結果並不是最重要的,很多結果並不美好。
但是學習這個過程是不可少的。當自己把本課程所有的實驗做完後,才領悟到老師所說話的含義,要掌握一種新的軟體,得隨著實踐的演練,通過循序漸進的學習,才能更好的掌握它。這次實驗,學到的東西很多。
5、這次實驗雖然僅有短短的xx天,可是實習資料異常豐富,並且經過這個實習我們都得到了知識上的復習和本事上的提高。正是因為這個實習,加深了我對植物營養學這門學科的了解,同時對我們專業的發展方向有了初步認識。這次實習不但鞏固了我們平時所學,也為我們日後的專業工作供給了十分實際的便利。
⑼ 求SQL資料庫實驗報告
*****系實驗(上機)報告
課程名稱 資料庫系統基礎
實驗名稱 數據查詢與存儲過程
學號 33
學生姓名 嘻習喜戲
成績
年 月 日
序號 5 實驗名稱 SQL數據查詢
實驗目的:
熟練掌握SQL SELECT 語句,能夠運用該語句完成各種查詢。
實驗內容:
用SQL SELECT 語句完成下列查詢:
1. 查詢客戶表中的所有記錄。
2. 從訂購單表中查詢客戶號信息(哪些客戶有訂購單)。
3. 查詢單價在20元以上(含)的產品信息。
4. 查詢單價在20元以上(不含)的產品名稱為牛奶的產品信息。
5. 查詢單價在20元以上(不含)的產品名稱為牛奶或德國乳酪的產品信息。
6. 查詢有2003年7月訂購單的客戶名稱、聯系人、電話號碼和訂單號信息。
7. 查詢有德國乳酪訂貨的客戶的名稱、聯系人和電話號碼信息。
8. 查詢有德國乳酪訂購需求的訂單名細記錄。
9. 查詢所有訂購數量(即訂單名細中每個訂購項目的數量)都在10個以上的訂購單的信息。
10. 找出和德國乳酪同等價位的所有產品信息。
11. 查詢單價范圍在10元到30元范圍內的產品信息(使用BETWEEN…AND)。
12. 從客戶表中查詢出客戶名稱中有「公司」二字的客戶信息(使用LIKE運算符)。
13. 從客戶表中查詢出客戶名稱中沒有「公司」二字的客戶信息(使用NOT LIKE運算符)。
14. 按產品的單價升序列出全部產品信息。
15. 先按產品名稱排序,再按單價排序列出全部產品信息。
16. 從產品表中查詢共有幾種產品。
17. 從訂購名細表中查詢德國乳酪的訂購總數。
18. 計算德國乳酪所有訂購的總金額。
19. 求所有訂購單的平均金額,在查詢結果中列出訂購單的個數和平均金額。
20. 求每個訂購單訂購的項目數和總金額。
21. 求每個客戶包含了德國乳酪訂購的訂單號及其最高金額和最低金額。
22. 求至少有兩個訂購項目的訂購單的平均金額。
23. 找出尚未最後確定訂購單(即訂購日期為空值的記錄)的有關客戶信息(客戶的名稱、聯系人和電話號碼)和訂單號。
24. 找出在2000年1月1日之後簽訂的訂購單的客戶信息(客戶的名稱、聯系人和電話號碼)、訂單號和訂購日期。
25. 列出每類產品(相同名稱)具有最高單價的產品信息(產品號、名稱、規格說明和單價,提示:使用內外層互相關嵌套查詢)。
26. 確定哪些客戶目前沒有訂購單(使用謂詞NOT EXISTS)。
27. 查詢目前有訂購單的客戶的信息(使用謂詞EXISTS)。
28. 查詢符合條件的產品信息,要求該產品的單價達到了任意一款產品名稱為牛奶的單價的一半(使用ANY或SOME量詞)。
29. 查詢符合條件的產品信息,要求該產品的單價大於任何一款產品名稱為牛奶的單價(使用ALL量詞)。
30. 設計如下的連接操作,並分析各自的特點:
•廣義笛卡兒積
•內連接
•外連接
•左連接
•右連接
•全連接
掌握存儲過程的創建命令,按照題目要求創建存儲過程,理解存儲過程的作用。
(1) 建立存儲過程。查詢單價范圍在x元到y元范圍內的產品信息。
(2) 建立存儲過程。查詢在某年某月某日之後簽訂的訂購單的客戶信息(客戶的名稱、聯系人和電話號碼)、訂單號和訂購日期。
(3) 建立存儲過程。將某產品的訂購日期統一修改為一個指定日期。
(4) 建立存儲過程。刪除沒有簽訂單的客戶信息。
實驗要求:
用SELECT語句完成本次實驗,並提交上機報告。
(1) 掌握存儲過程的創建命令,按照實驗內容的要求創建存儲過程,理解存儲過程的作用。
(2) 用CREATE PROCEDURE和EXECUTE 語句完成本次實驗,並提交上機報告。
實驗准備(本實驗預備知識和為完成本實驗所做的准備):
仔細閱讀課本第五章關於SQL的數據查詢功能的內容
實驗過程(實驗的操作過程、遇到的問題及其解決辦法或未能解決的問題):
用SQL SELECT 語句完成以上30題查詢
實驗總結(總結本次實驗的收獲、未解決的問題以及體會和建議等):
熟練掌握SQL SELECT 語句,能夠運用該語句完成各種查詢
附錄(SQL語句):
--1. 查詢客戶表中的所有記錄。
select * from 客戶
--2. 從訂購單表中查詢客戶號信息(哪些客戶有訂購單)
select 客戶號from 訂單where 訂單號!=null
--3. 查詢單價在元以上(含)的產品信息。
select *from 產品where 單價> 20 or 單價=20
--4. 查詢單價在元以上(不含)的產品名稱為牛奶的產品信息。
select *from 產品where 單價>20 and 產品名稱='牛奶'
--. 查詢單價在元以上(不含)的產品名稱為牛奶或德國乳酪的產品信息
select *from 產品where 單價>20 and (產品名稱='牛奶'or 產品名稱='德國乳酪')
--6. 查詢有年月訂購單的客戶名稱、聯系人、電話號碼和訂單號信息
select 客戶名稱,聯系人, 電話,訂單號from 客戶,訂單where (year(訂購日期)=2003 and month (訂購日期)=7)and (訂單.客戶號=客戶.客戶號)
--7. 查詢有德國乳酪訂貨的客戶的名稱、聯系人和電話號碼信息。
select 客戶名稱,聯系人, 電話from 客戶
where
(客戶號= (select 客戶號from 訂單where(訂單號 =(select 訂單號from 訂單明細
where 產品號= ( select 產品號from 產品where 產品名稱= ' 德國乳酪' )))))
--8. 查詢有德國乳酪訂購需求的訂單名細記錄。
select * from 訂單明細where (數量!=null and 產品號=(select 產品號from 產品where 產品名稱= '德國乳酪'))
--9. 查詢所有訂購數量(即訂單名細中每個訂購項目的數量)都在個以上的訂購單的信息。
select * from 訂單where (訂單號in (select 訂單號from 訂單明細where (數量>10)))
--10. 找出和德國乳酪同等價位的所有產品信息。
select * from 產品where (
--11. 查詢單價范圍在元到元范圍內的產品信息(使用BETWEEN…AND)。
select * from 產品where (單價between 10 and 30)
--12. 從客戶表中查詢出客戶名稱中有「公司」二字的客戶信息(使用LIKE運算符)
select * from 客戶where 客戶名稱like '%公司%'
--13. 從客戶表中查詢出客戶名稱中沒有「公司」二字的客戶信息(使用NOT LIKE運算符)。
select * from 客戶where 客戶名稱not like '%公司%'
--14. 按產品的單價升序列出全部產品信息。
select *from 產品order by 單價
--15. 先按產品名稱排序,再按單價排序列出全部產品信息。
select * from 產品order by 產品名稱,單價
--16. 從產品表中查詢共有幾種產品。
select count ( distinct 產品名稱) as 產品總數from 產品
--17. 從訂購名細表中查詢德國乳酪的訂購總數
select sum (數量) as '訂購乳酪數量'
from 訂單明細
where 產品號in(select 產品號from 產品where 產品名稱='德國乳酪')
--18. 計算德國乳酪所有訂購的總金額
declare @a money
select @a=(select 單價from 產品where 產品名稱='德國乳酪')
declare @b int
select @b=(select sum (數量) as '訂購乳酪數量'
from 訂單明細
where 產品號in(select 產品號from 產品where 產品名稱='德國乳酪'))
declare @c int
select @c=@a*@b
select @c as 總金額
--19. 求所有訂購單的平均金額,在查詢結果中列出訂購單的個數和平均金額。
select 訂單均值= avg(單價*數量) ,訂單個數=count ( 訂單號)
from 訂單明細,產品
where 產品.產品號=訂單明細.產品號
--20. 求每個訂購單訂購的項目數和總金額。
select 訂單號, count (產品.產品號) as 項目數,sum(數量*單價) as 總金額
from 產品,訂單明細
where (產品.產品號=訂單明細.產品號)
group by 訂單號
--21.求每個客戶包含了德國乳酪訂購的訂單號及其最高金額和最低金額
select 客戶.客戶號,產品.產品號,數量*單價as 總金額
from 客戶,訂單,訂單明細,產品
where 客戶.客戶號=訂單.客戶號and 訂單.訂單號=訂單明細.訂單號and 訂單明細.產品號=產品.產品號and
產品名稱='德國乳酪'
order by 客戶號
compute max(數量*單價),min (數量*單價) by 客戶號
--22.求至少有兩個訂購項目的訂購單的平均金額
select 訂單號,avg(數量*單價),count(產品.產品號)
from 訂單明細,產品
where 訂單明細.產品號=產品.產品號
group by 訂單號
having count(產品.產品號)>=2
--23.找出尚未最後確定訂購單(即訂購日期為空值的記錄)的有關客戶信息
-- (客戶的名稱、聯系人和電話號碼)和訂單號
select 客戶名稱,聯系人,電話,訂單明細.訂單號
from 客戶, 訂單明細,訂單
where(客戶.客戶號= 訂單.客戶號) and 訂購日期=null
--24.找出在年月日之後簽訂的訂購單的客戶信息
--(客戶的名稱、聯系人和電話號碼)、訂單號和訂購日期
select 客戶名稱,聯系人,電話,訂單號,訂購日期
from 客戶,訂單
where 客戶.客戶號=訂單.客戶號
and year(訂購日期)>1996 and month(訂購日期)>4 and day(訂購日期)>2
--25.列出每類產品(相同名稱)具有最高單價的產品信息
--(產品號、名稱、規格說明和單價,提示:使用內外層互相關嵌套查詢)
select A.產品號, A.產品名稱, A.規格說明, A.單價
from 產品A
where 單價= (SELECT MAX(單價)
FROM 產品B
WHERE A.規格說明= B.規格說明)
--26.確定哪些客戶目前沒有訂購單(使用謂詞NOT EXISTS)
select *
from 客戶
where not exists (select* from 訂單where 客戶號=訂單.客戶號)
--27.查詢目前有訂購單的客戶的信息(使用謂詞EXISTS)
select *
from 客戶
where exists (select* from 訂單where 客戶號=訂單.客戶號)
--28.查詢符合條件的產品信息,要求該產品的單價達到了任
--意一款產品名稱為牛奶的單價的一半(使用ANY或SOME量詞)
select *
from 產品a
where(單價>any(select 單價/2 from 產品b where b.產品名稱='牛奶'))
--29.查詢符合條件的產品信息,要求該產品的單價大於任何
-- 一款產品名稱為牛奶的單價(使用ALL量詞)
select *
from 產品a
where(單價>all(select 單價from 產品b where b.產品名稱='牛奶'))
--30.設計如下的連接操作,並分析各自的特點:
-- •廣義笛卡兒積
SELECT *
FROM 客戶CROSS JOIN 訂購單
WHERE 客戶.客戶號= 訂購單.客戶號
-- •內連接
SELECT *
FROM 客戶INNER JOIN 訂購單
ON 客戶.客戶號= 訂購單.客戶號
-- •外連接
-- •左連接
SELECT *
FROM 客戶LEFT JOIN 訂購單
ON 客戶.客戶號= 訂購單.客戶號
-- •右連接
SELECT *
FROM 客戶RIGHT JOIN 訂購單
ON 客戶.客戶號= 訂購單.客戶號
-- •全連接
SELECT *
FROM 客戶FULL JOIN 訂購單
ON 客戶.客戶號= 訂購單.客戶號
說明:
1. 上機報告上傳到211.68.36.251的資料庫文件夾中的上傳目錄
2. 文件名的命名規則為:學號+姓名+實驗+序號。如:9724101汪偉的第二次上機報告名為:9724101汪偉實驗2
3. 封面由學生填寫;
4. 正文的實驗名稱、實驗目的、實驗內容、實驗要求已經由教師指定;
5. 實驗准備由學生在實驗或上機之前填寫;
6. 實驗過程由學生記錄實驗的過程,包括操作過程、遇到哪些問題以及如何解決等;
7. 實驗總結由學生在實驗後填寫,總結本次實驗的收獲、未解決的問題以及體會和建議等;
8. 將相關的語句粘貼到附錄中。
你自己改改吧。想要word原版的話再說一聲。
⑽ sql語言實驗報告
1>
select
*
from
教師表
where
系別
='cs';
2>
select
姓名,2011-年齡
as
出生日期
from
學生表
3>
select
*
from
學生表
where
年齡<=20
and
系別='cs';
4>
select
*
from
學生表
where
年齡
not
between
18
and
20;
5>
select
姓名,年齡
from
教師表
where
系別
in('cs','is');
6>
select
*
from
教師表
where
姓名
like
'%敏';
7>
select
*
from
選課表
where
先修課
is
null;
8>
select
count(*)
from
教師表
9>
select
avg(成績),max(成績),min(成績)
from
選課表
where
課程號=5;
10>
select
count(*)
from
選課表
group
by
課程號