日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

数据库笔记(基本介绍及增删改查操作举例)

發(fā)布時(shí)間:2023/12/15 综合教程 26 生活家
生活随笔 收集整理的這篇文章主要介紹了 数据库笔记(基本介绍及增删改查操作举例) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

第一章

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

數(shù)據(jù)是數(shù)據(jù)庫(kù)中存儲(chǔ)的基本對(duì)象。

數(shù)據(jù)定義為數(shù)據(jù)是描述事物的符號(hào)記錄。

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

數(shù)據(jù)庫(kù)數(shù)據(jù)具有永久存儲(chǔ)、有組織和可共享三個(gè)基本特點(diǎn)。

3.數(shù)據(jù)庫(kù)管理系統(tǒng)

數(shù)據(jù)庫(kù)管理系統(tǒng)位于用戶應(yīng)用程序與操作系統(tǒng)軟件之間。

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

數(shù)據(jù)庫(kù)系統(tǒng)由數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)管理系統(tǒng)、應(yīng)用程序、數(shù)據(jù)庫(kù)管理員組成。

“列”稱為字段,“行”稱為記錄。

文件方式管理數(shù)據(jù)有以下缺點(diǎn):

1.編寫應(yīng)用程序不方便。2.數(shù)據(jù)冗余不可避免。3.應(yīng)用程序依賴性。4.不支持對(duì)文件的并發(fā)訪問。5.數(shù)據(jù)間聯(lián)系弱。6.難以滿足不同用戶對(duì)數(shù)據(jù)的需求。7.無(wú)安全控制功能。

數(shù)據(jù)庫(kù)管理,對(duì)用戶來(lái)說,他只針對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,無(wú)需對(duì)數(shù)據(jù)文件進(jìn)行操作。

與文件管理數(shù)據(jù)相比,用數(shù)據(jù)庫(kù)技術(shù)管理數(shù)據(jù)具有以下特點(diǎn):

1.相互關(guān)聯(lián)的數(shù)據(jù)集合。2.較少的數(shù)據(jù)冗余。3.程序與數(shù)據(jù)相互獨(dú)立。4.保證數(shù)據(jù)安全、可靠。5.最大限度的保證數(shù)據(jù)的正確性。6.數(shù)據(jù)可以共享并能保證數(shù)據(jù)的一致性。

SQL Server只支持在Windows平臺(tái)上運(yùn)行,而Oracle有支持Windows平臺(tái)和Linux平臺(tái)的不同版本.

第二章

1.數(shù)據(jù)庫(kù)中的數(shù)據(jù)具有靜態(tài)特征和動(dòng)態(tài)特征

靜態(tài)特征:數(shù)據(jù)的基本結(jié)構(gòu)、數(shù)據(jù)間的聯(lián)系以及對(duì)數(shù)據(jù)取值范圍的約束。

動(dòng)態(tài)特征:對(duì)數(shù)據(jù)可以進(jìn)行的操作以及操作規(guī)則。

一般將對(duì)數(shù)據(jù)的靜態(tài)特征和動(dòng)態(tài)特征對(duì)的描述稱為數(shù)據(jù)模型的三要素,即在描述數(shù)據(jù)時(shí)要包括數(shù)據(jù)的基本結(jié)構(gòu)、數(shù)據(jù)的約束條件(這兩個(gè)屬于靜態(tài)特征)和定義在數(shù)據(jù)上的操作(屬于動(dòng)態(tài)特征)。

2.E-R模型

實(shí)體中每個(gè)具體的記錄值(一行數(shù)據(jù)),我們稱為實(shí)體的一個(gè)實(shí)例。

在實(shí)體屬性中,將能夠唯一標(biāo)識(shí)實(shí)體的一個(gè)屬性或最小的一組屬性(稱為屬性集或?qū)傩越M)稱為實(shí)體的標(biāo)識(shí)屬性,這個(gè)屬性或?qū)傩越M也稱為實(shí)體的碼。例如,“學(xué)號(hào)”就是學(xué)生實(shí)體的碼。

3.層次模型

層次模型是數(shù)據(jù)庫(kù)管理系統(tǒng)中最早出現(xiàn)的數(shù)據(jù)模型。

層次模型中的兩點(diǎn)限制:1.有且僅有一個(gè)節(jié)點(diǎn)無(wú)父節(jié)點(diǎn),這個(gè)節(jié)點(diǎn)即為樹的根。2.其他節(jié)點(diǎn)有且僅有一個(gè)父節(jié)點(diǎn)。

層次模型的一個(gè)基本特點(diǎn):任何一個(gè)給定的記錄值只有從層次模型的根部開始按路徑查看時(shí),才能明確其含義,在任何節(jié)點(diǎn)都不能脫離父節(jié)點(diǎn)而存在。

4.數(shù)據(jù)的三級(jí)模式結(jié)構(gòu)

數(shù)據(jù)的三級(jí)模式結(jié)構(gòu)是指數(shù)據(jù)庫(kù)外模式、模式和內(nèi)模式。

廣義地講,內(nèi)模式是最接近物理存儲(chǔ)的,也就是數(shù)據(jù)的物理存儲(chǔ)方式,包括數(shù)據(jù)存儲(chǔ)位置、數(shù)據(jù)存儲(chǔ)方式等。外模式是最接近用戶的,也就是用戶所看到的數(shù)據(jù)視圖。模式是介于內(nèi)模式和外模式之間的中間層,是數(shù)據(jù)的邏輯組織方式。

第三章

1.數(shù)據(jù)庫(kù)數(shù)據(jù)的操作主要包括查詢、插入、刪除和更改數(shù)據(jù)四種。

2.在關(guān)系數(shù)據(jù)模型中,一般將數(shù)據(jù)完整性分為三類,即實(shí)體完整性、參照完整性和用戶定義的完整性。

前兩個(gè)是關(guān)系模型必須滿足的完整性約束,是系統(tǒng)級(jí)的約束。用戶定義的完整性主要是限制屬性的取值在有意義的范圍內(nèi),如限制性別的取值范圍為“男”和“女”。屬于應(yīng)用級(jí)的約束。

3.如果一個(gè)屬性或?qū)傩约闹的軌蛭ㄒ粯?biāo)識(shí)一個(gè)關(guān)系的元組而又不包括多余的屬性,則稱該屬性或?qū)傩约癁楹蜻x鍵。例如,學(xué)生(學(xué)號(hào)、姓名、年齡、性別、所在系)的候選鍵是學(xué)號(hào)。

候選鍵又稱為候選關(guān)鍵字或候選碼。在一個(gè)關(guān)系上可以有多個(gè)候選鍵。

當(dāng)一個(gè)關(guān)系中有多個(gè)候選鍵時(shí),可以從中選擇一個(gè)作為主鍵。每個(gè)關(guān)系只能有一個(gè)主鍵。

主鍵可以由一個(gè)屬性組成,也可以由多個(gè)屬性組成。我們稱由多個(gè)屬性共同組成的主鍵為復(fù)合主鍵。

4.實(shí)體完整性是指關(guān)系數(shù)據(jù)庫(kù)中所有的表都必須有主鍵,而且表中不允許存在以下記錄。

(1)無(wú)主鍵值的記錄。(2)主鍵值相同的記錄。

5.設(shè)F是關(guān)系R的一個(gè)或一組屬性,如果F與關(guān)系S的主鍵相對(duì)應(yīng),則稱F是關(guān)系R的外鍵。

“學(xué)生”關(guān)系中的“班號(hào)”屬性與“班”關(guān)系中的主鍵“班號(hào)”對(duì)應(yīng),因此,“學(xué)生”關(guān)系中的“班號(hào)”是外鍵,引用了“班”關(guān)系中的“班號(hào)”(主鍵)。這里,“班”關(guān)系是被參照關(guān)系,“學(xué)生”關(guān)系是參照關(guān)系。

對(duì)于外鍵,一般符合以下要求。

或者值為空。 或者等于其所參照的關(guān)系中的某個(gè)元組的主鍵值。

主鍵要求必須是非空且不重的,但外鍵無(wú)此要求。外鍵可以有重復(fù)值。

第四章

1.SQL中的字符串常量

SQL中的字符串常量要用單引號(hào)括起來(lái),如‘計(jì)算機(jī)系’。

2.定義架構(gòu):CREATE SCHEMA

為用戶“ZHANG”定義一個(gè)架構(gòu),架構(gòu)名為“S_C” CREATE SCHEMA S_C AUTHORIZATION ZHANG

3.刪除架構(gòu):DROP SCHEMA

4.定義約束

NOT NULL和DEFAULT只能定義在“列級(jí)完整性約束定義”處,其他約束均可在“列級(jí)完整性約束定義”和“表級(jí)完整性約束定義”處定義。

5.兩張表的創(chuàng)建

CREATE TABLE Jobs(

Jid char(6) PRIMARY KEY, --在列級(jí)定義主鍵

Descp nchar(20) NOT NULL,

EduReq nchar(6) DEFEAT '本科',

MinSalary int,

MaxSalary int,

CHECK(MaxSalary>=MinSalary) --多列的CHECK約束必須定義在表級(jí)

CREATE TABLE Employees(

Eid char(10),

Ename nvarchar(20) NOT NULL,

Sex nchar(1) CHECK(Sex='男' OR Sex='女'), --一列

BirthDate date,

JobDate datetime DEFAULT GetDate(), --默認(rèn)為系統(tǒng)的當(dāng)前日期和時(shí)間

Sid char(18) UNIQUE, --取值不重復(fù)

Jid char(6),

Tel char(11),

PRIMAARY KEY(Eid), --在表級(jí)定義主鍵

FOREIGN KEY(Jid) REFERENCES Jobs(Jid)

)

6.修改表結(jié)構(gòu)

為Employees表添加工資列,此列的列名為Salary,數(shù)據(jù)類型為Int,允許空。

ALTER TBLE Employees

ADD Salary INT

將Jobs表的Descp列的數(shù)據(jù)類型改為NCHAR(40)。

ALTER TABLE Jobs

ALTER COLUMN Descp NCHAR(40)

刪除Employees表的Tel列。

ALTER TBLE Employees

DROP COLUMN Tel

為Jobs表中MinSalary列添加約束:大于等于1600.

ALTER TABLE Jobs

ADD CHECK(MinSalary>=1600)

7.刪除表

DROP TABLE Employees

刪除表時(shí)必須先刪外鍵所在的表,然后再刪除被參照的主鍵所在表。創(chuàng)建表時(shí)必須先建立被參照的主鍵所在表,然后建立外鍵所在表。

第五章

1.查詢?nèi)w學(xué)生的詳細(xì)記錄

Select Sno,Sname,Ssex,Sage,Sdept from Student

等價(jià)于 Select * from Student

2.查詢?nèi)w學(xué)生的姓名及出生年份

Student表中只記錄了學(xué)生的年齡,沒有記錄學(xué)生的出生年份,但我們可以經(jīng)過計(jì)算得到出生年份,即用當(dāng)前年減去年齡,得到出生年份。

Select Sname,2015-Sage from Student

3.含字符串常量的列

含字符串常量的列:查詢?nèi)w學(xué)生的姓名和出生年份,并在出生年份列前加入一個(gè)列,此列的每行數(shù)據(jù)均為“出生年份”常量值。

Select Sname,'出生年份',2015-Sage from Student

備注:經(jīng)過計(jì)算的列、常量列的顯示結(jié)果都沒有列名,可以用表達(dá)式【AS】列別名的方式起列名。

4.去掉查詢語(yǔ)句的重復(fù)行

Select distinct Sno from SC

5.查詢計(jì)算機(jī)系全體學(xué)生的姓名

Select Sname from Student where Sdept='計(jì)算機(jī)系'

6.查詢所有年齡在20歲以下的學(xué)生姓名及年齡

Select sname,Sage from Student where Sage<20

7.查詢考試成績(jī)有不及格課程的學(xué)生的學(xué)號(hào)

Select distinct Sno from SC where Grade<60

8.查詢年齡在20~23歲的學(xué)生的姓名、所在系和年齡

Select Sname,Sdept,Sage from Student where sage between 20 and 23

此句等價(jià)于

Select Sname,Sdept,Sage from Student where Sage>=20 and Sage<=23

9.IN運(yùn)算符的含義

IN運(yùn)算符的含義為:當(dāng)列中的值與集合中的某個(gè)常量值相等時(shí),結(jié)果為true,表明此記錄為符合查詢條件的記錄。

NOT IN運(yùn)算符的含義正好相反:當(dāng)列中的值與集合中的某個(gè)常量值相等時(shí),結(jié)果為false,表明此記錄為不符合查詢條件的記錄。

10.查詢信息管理系、通信工程系和計(jì)算機(jī)系學(xué)生的姓名和性別

Select Sname,Ssex from Student where Sdept=('信息管理系','通信工程系',‘計(jì)算機(jī)系’)

此句等價(jià)于:Select Sname,Ssex from Student where Sdept='信息管理系' OR Sdept='通信工程系'OR Sdept='計(jì)算機(jī)系'

11.查詢信息管理系、通信工程系和計(jì)算機(jī)系三個(gè)系之外的其他系學(xué)生的姓名和性別

Select Sname,Ssex from Student where Sdept NOT IN('信息管理系','通信工程系',‘計(jì)算機(jī)系’)

此句等價(jià)于:Select Sname,Ssex from Student where Sdept!='信息管理系' AND Sdept!='通信工程系'AND Sdept!='計(jì)算機(jī)系'

12.匹配串中可以包含如下4種通配符

_下畫線:匹配任意一個(gè)字符 %百分號(hào):匹配0到多個(gè)字符【】:匹配【】中的任意一個(gè)字符。 【^】:不匹配【】中的任意一個(gè)字符。

13.查詢姓“張”的學(xué)生的詳細(xì)信息

Select * from Student where Sname like '張%'

14.查詢姓“張”、姓“李”和姓“劉”的學(xué)生的詳細(xì)信息

Select * from Student where Sname like '[張李劉]%'

15.查詢名字的第二個(gè)字為“小”或“大”的學(xué)生的姓名和學(xué)號(hào)

Select Sname,Sno from Student where Sname like '_[小大]%'

16.查詢所有不姓“劉”的學(xué)生姓名

Select Sname from Student where Sname NOT LIKE '劉%'

17.在Student表中查詢學(xué)號(hào)的最后一位不是2、3、5的學(xué)生的詳細(xì)信息

Select Sname from Student where Sno like '%[^235]'

18."ESCAPE"轉(zhuǎn)義字符

"ESCAPE"轉(zhuǎn)義字符是任何一個(gè)有效的字符,匹配串中也包含這個(gè)字符,表明位于該字符后面的那個(gè)字符將被視為普通字符,而不是通配符。

例如:為查找field1字段中包含字符串“30%”的記錄,可在where子句中指定:

Where field1 like '%30!%%' escape '!’

又如,為查找field1字段中包含下畫線(_)的記錄,可在where子句中指定:

Where field1 like '%!_%' escape '!'

19.判斷某個(gè)值是否為NULL

由于空值是不確定的值,因此判斷某個(gè)值是否為NULL,不能使用比較運(yùn)算符,只能使用專門的判斷NULL值的子句來(lái)完成。而且,NULL不能與確定的值進(jìn)行比較。

20.查詢沒有考試的學(xué)生的學(xué)號(hào)和相應(yīng)的課程號(hào)

select sno,cno from sc

where grade is null

21.查詢所有已經(jīng)考試了的學(xué)生的學(xué)號(hào)、課程號(hào)和考試成績(jī)

select sno , cno , grade from sc

where grade is not null

22.查詢計(jì)算機(jī)系年齡20歲以下的學(xué)生的姓名

select sname from student

where sdept = '計(jì)算機(jī)系' and sage <20

23.查詢計(jì)算機(jī)系和信息管理系學(xué)生中年齡在18~20的學(xué)生的 、姓名、所在系和年齡

select sno,sname,sdept,sage from student

where (sdept ='計(jì)算機(jī)系' or sdept = '信息管理系')

and sage between 18 and 20

注意:or運(yùn)算符的優(yōu)先級(jí)小于and,要改變運(yùn)算的順序,可以通過加括號(hào)的方式來(lái)實(shí)現(xiàn)。

查詢語(yǔ)句也可以寫成 where sdept in ('計(jì)算機(jī)系','信息管理系')

24.排序

ASC表示按列值進(jìn)行升序排序,DESC表示按列 值進(jìn)行降序排序。默認(rèn)排序方式ASC。

25.將學(xué)生按年齡升序排序

select * from student order by sage

查詢選修了“C002”課程的學(xué)生的學(xué)號(hào)及成績(jī),查詢結(jié)果按成績(jī)降序排列.

select sno,grade from sc

where cno ='C002'

order by grade desc

查詢?nèi)w學(xué)生的信息,查詢結(jié)果按所在系的系名升序排列,同一個(gè)系的學(xué)生按年齡降序排列.

select * from student

order by sdept ASC,sage DESC

26.統(tǒng)計(jì)表中元組的個(gè)數(shù)

count(*):統(tǒng)計(jì)表中元組的個(gè)數(shù). 除count(*)之外,其他函數(shù)在計(jì)算過程中均忽略null值。

27.統(tǒng)計(jì)學(xué)生總?cè)藬?shù)

select count(*) from student

統(tǒng)計(jì)選了課程的學(xué)生人數(shù)

select count(distinct sno) from sc

28.統(tǒng)計(jì)學(xué)號(hào)為“0811101”的學(xué)生的考試總成績(jī)

select sum(grade) from sc where sno='0811101'

統(tǒng)計(jì)“0831103”學(xué)生的考試平均成績(jī).

只計(jì)算有成績(jī)的考試平均成績(jī)

select avg(grade) from sc where sno = '0831103'

29.查詢“C001”課程考試成績(jī)的最高分和最低分

select max(grade) 最高分,min(grade) 最低分 from sc where cno='C001'

30.統(tǒng)計(jì)每門課程 的選課人數(shù),列出課程號(hào)和選課人數(shù)

select cno as 課程號(hào),count(sno) as 選課人數(shù) from sc group by cno

該語(yǔ)句首先對(duì)sc表中的數(shù)據(jù)按cno值進(jìn)行分組,所有具有相同cno值的元組歸為一組,然后再對(duì)每一組使用count函數(shù)進(jìn)行計(jì)算,求出每組的學(xué)生人數(shù)

31.統(tǒng)計(jì)每個(gè)學(xué)生 的選課門數(shù)和平均成績(jī)

select sno 學(xué)號(hào),count(*) 選課門數(shù),avg(grade) 平均成績(jī) from sc group by sno

注意:group by 字句中的分組依據(jù)列必須是表中存在的列名,不能使用as子句指定的列別名。例如不能寫成group by 學(xué)號(hào)

32.統(tǒng)計(jì)每個(gè)系的學(xué)生人數(shù)和平均年齡

select sdept,count(*) as 學(xué)生人數(shù),avg(sage) as 平均年齡 from student group by sdept

33.統(tǒng)計(jì)每個(gè)系的女生人數(shù)

select sdept, count(*) 女生人數(shù) from student where ssex='女' group by sdept

34.按多個(gè)列分組

按多個(gè)列分組.統(tǒng)計(jì)每個(gè)系的男生人數(shù)和女生人數(shù)以及男生的最大年齡和女生的最大年齡。結(jié)果按系名升序排列.

分析:這個(gè)查詢首先應(yīng)該按“所在系”進(jìn)行分組,然后再每個(gè)系組中再按“性別”分組,而將每個(gè)系每個(gè)性別的學(xué)生聚集到一個(gè)組中,最后再對(duì)最終的分組結(jié)果進(jìn)行統(tǒng)計(jì).

注意:當(dāng)有多個(gè)分組依據(jù)列時(shí),統(tǒng)計(jì)是以最小組為單位進(jìn)行的.

select sdept,ssex,count(*)人數(shù),max(sage) 最大年齡 from student group by sdept,ssex order by sdept

35.HAVING子句

HAVING子句用于對(duì)分組后的統(tǒng)計(jì)結(jié)果再進(jìn)行篩選,它的功能有點(diǎn)像WHERE子句,但它用于組,而不是單個(gè)記錄. 在HAVING子句中可以使用聚合函數(shù),但在WHERE子句中則不能.

查詢選課門數(shù)超過3門的學(xué)生的學(xué)號(hào)和選課門數(shù)

select sno,count(*) 選課門數(shù) from sc group by sno having count(*)>3

分析:此語(yǔ)句的處理過程為 先執(zhí)行g(shù)roup by 子句對(duì)sc表數(shù)據(jù)按sno 進(jìn)行分組統(tǒng)計(jì)出每個(gè)學(xué)生的選課門數(shù),然后再用聚合函數(shù)count對(duì)每一組進(jìn)行統(tǒng)計(jì),最后篩選出統(tǒng)計(jì)結(jié)果大于3的組.

36.查詢計(jì)算機(jī)系和信息管理系每個(gè)系的學(xué)生人數(shù)

select sdept,count (*) from student where sdept in ('計(jì)算機(jī)系','信息管理系')

group by sdept

37.查詢每個(gè)系年齡小于等于20的學(xué)生人數(shù)

select sdept,count (*) from student where sage <=20 group by sdept

38.查詢每個(gè)學(xué)生及其選課的信息

由于學(xué)生信息存放在student表中,學(xué)生選課信息存放在sc表中,因此這個(gè)查詢涉及兩個(gè)表,這兩個(gè)表之間進(jìn)行連接的條件是兩個(gè)表中的sno相等.

select * from student inner join sc on student.sno=sc.sno

sno列有兩個(gè):一個(gè)來(lái)自student表,一個(gè)來(lái)自sc表,這兩個(gè)列的值完全相同(因?yàn)檫@里的連接條件是student.sno=sc.sno).使用多表連接查詢語(yǔ)句時(shí)一般將這些重復(fù)的列去掉,方法是在select子句中直接寫所需要的列名,而不是寫“*”。另外,由于進(jìn)行多表連接后,在連接生成的表中可能存在列名相同的列,因此,為了明確需要的事哪個(gè)列,可以在列名前添加表名前綴限制.

去掉例40中的重復(fù)列

select student.sno,sname,ssex,sage,sdept,cno,grade from student join sc on student.sno=sc.sno

39.查詢計(jì)算機(jī)系學(xué)生的選課情況,列出學(xué)生的名字、所選課程的課程號(hào)和考試成績(jī)

select sname,cno,grade from student join sc on student.sno=sc.sno where sdept='計(jì)算機(jī)系'

40.自連接查詢中要求必須為表指定別名

select sname,cno,grade from student as s join sc on s.sno=sc.sno where sdept='計(jì)算機(jī)系'

注意:當(dāng)為表指定了別名后,在查詢語(yǔ)句中的其他地方,所有用到該表名的地方都必須使用別名,不能再使用原表名.

每連接一張表,就需使用一個(gè)join子句

select sname,cname,grade from student s join sc on s.sno=sc.sno join course c on c.cno=sc.cno where sdept ='信息管理系' and cname='計(jì)算機(jī)文化學(xué)'

41.查詢所有選了vb課程的 學(xué)生姓名和所在系

select sname,sdept from student s

join sc on s.sno=sc.sno

join course c on c.cno=sc.cno

where cname='vb'

42.有分組統(tǒng)計(jì)的多表連接查詢。統(tǒng)計(jì)每個(gè)系的學(xué)生的考試平均成績(jī)

select sdept,avg(grade) as averagegrade from student s join sc on s.sno=sc.sno group by sdept

43.有分組和行選擇條件的多表連接查詢 。統(tǒng)計(jì)計(jì)算機(jī)系學(xué)生中每門課程的選課人數(shù)、平均成績(jī)、最高成績(jī)和最低成績(jī)

select cno,count(*) as total,avg(grade) as avggrade,max(grade) as maxgrade,min(grade) as mingrade from student s join sc on s.sno=sc.sno where sdept = '計(jì)算機(jī)系' group by cno

44.自連接是一種特殊的內(nèi)連接,是指相互連接的表在物理上為同一張表,但在其邏輯上將其看成是兩張表

要讓物理上的一張表在邏輯上成為兩張表,必須通過為表起別名的方法

from 表1 as t1 join 表1 as t2 on 表1.列名=表2.列名

45.查詢與劉晨在同一個(gè)系學(xué)習(xí)的學(xué)生姓名和所在系

select s2.sname,s2.sdept

from student s1 join student s2

on s1.sdept=s2.sdept --是同一個(gè)系的學(xué)生

where s1.sname='劉晨 ' --s1表作為查詢條件表

and s2.sname!='劉晨' --s2表作為結(jié)果表,并從中去掉“劉晨”本人

46.查詢與“數(shù)據(jù)結(jié)構(gòu)”課程在同一個(gè)學(xué)期開設(shè)的課程的課程名和開學(xué)學(xué)期

select c1.cname,c1.semester --c1作為查詢結(jié)果表

from course c1 join course c2

on c1.semester=c2.semester --是同一學(xué)期開設(shè)的課程

where c2.cname='數(shù)據(jù)結(jié)構(gòu)' --c2表作為查詢條件表

47.外連接是只限制一張表中的數(shù)據(jù)必須滿足連接條件,而另一張表中的數(shù)據(jù)不必滿足連接條件.外連接分為左外連接和右外連接兩種

左外連接的含義是限制表2中的數(shù)據(jù)必須滿足連接條件,而不管表1中的數(shù)據(jù)是否滿足連接條件,均輸出表1中的內(nèi)容;右外連接的含義是限制表1中的數(shù)據(jù)必須滿足連接條件,而不管表2中的數(shù)據(jù)是否滿足連接條件,均輸出表2中的內(nèi)容.

48.查詢?nèi)w學(xué)生的選課情況,包括選了課的學(xué)生和沒有選課的學(xué)生

這個(gè)查詢需要輸出全體學(xué)生(student表中的全部數(shù)據(jù))的信息,而不管這個(gè)學(xué)生是否選了課程(若沒選課,則在sc表中將沒有該學(xué)生的學(xué)號(hào),即這些學(xué)生將不能滿足連接條件:student.sno=sc.sno)

selecct s.sno,sname,cno,grade

from student s

left outer join sc

on s.sno=sc.sno

注意:在連接結(jié)果中,將一個(gè)表中不滿足連接條件的數(shù)據(jù)構(gòu)成的元組中的來(lái)自其他表的列均置成null

此查詢也可以用右外連接實(shí)現(xiàn)

select s.sno,sname,cno,grade

from sc right outer join student s

on s.sno=sc.sno

49.查詢沒有人選的課程的課程名

分析:如果某門課程沒有人選,則必定在course表中有,但在sc表中沒出現(xiàn)的課程,即進(jìn)行外連接時(shí),沒有人選的課程對(duì)應(yīng)在sc表中相應(yīng)的sno,cno或grade列上必定是空值,因此查詢時(shí)只要在連接后的結(jié)果中選出sc表中sno為mull或者cno為mull的記錄即可.

select cname from course c left join sc

on c.cno=sc.cno

where sc.cno is null

50.查詢計(jì)算機(jī)系沒有選課的學(xué)生,列出學(xué)生的姓名和性別

select sname,ssex

from student s left join sc on s.sno=sc.sno

where sdept='計(jì)算機(jī)系'

and sc.sno is null

51.統(tǒng)計(jì)計(jì)算機(jī)系每個(gè)學(xué)生的選課門數(shù),包括沒有選課的學(xué)生

select s.sno as 學(xué)號(hào),count(sc.cno) as 選課門數(shù)

from student s left join sc on s.sno=sc.sno

where sdept='計(jì)算機(jī)系'

group by s.sno

52.查詢信息管理系選課門數(shù)少于3門的學(xué)生的學(xué)號(hào)和選課門數(shù),包括沒選課的學(xué)生.查詢結(jié)果按選課門數(shù)遞增排序

select s.sno as 學(xué)號(hào),count(sc.cno) as 選課門數(shù)

from student s left join sc on s.sno=sc.sno

where sdept='信息管理系'

group by s.sno

having count(sc.cno)<3

order by count(sc.cno) asc

53.top子句寫在select單詞的后邊(如果有distinct,則在distinct單詞后),查詢列表的前邊

查詢年齡最大的三個(gè)學(xué)生的姓名、年齡及其所在系

select top 3 sname,sage,sdept

from student

order by sage desc

若要包括年齡并列第3名的所有學(xué)生,則此句可寫成

select top 3 with ties sname,sage,sdept

from student

order by sage desc

注意:如果在top子句中使用了with ties謂詞,則要求必須使用order by子句對(duì)查詢結(jié)果進(jìn)行排序,否則會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤

54.查詢vb考試成績(jī)最高的前三名學(xué)生的姓名、所在系和vb考試成績(jī)

select top 3 with ties sname,sdept,grade

from student s join sc on s.sno=sc.sno

join course c on c.cno=sc.cno

where cname='vb'

order by grade desc

55.查詢選課人數(shù)最少的兩門課程(不包括沒有人選的課程),列出課程號(hào)和選課人數(shù)

select top 2 with ties cno,count(*) 選課人數(shù)

from sc

group by cno

order by count(cno) asc

56.查詢計(jì)算機(jī)系選課門數(shù)超過兩門的學(xué)生中考試平均成績(jī)最高的前兩名(包括并列情況)學(xué)生的學(xué)號(hào)、選課門數(shù)和平均成績(jī)

select top 2 with ties s.sno,count (*) 選課門數(shù),avg(grade) 平均成績(jī)

from student s join sc on s.sno=sc.sno

where sdept='計(jì)算機(jī)系'

group by s.sno

having count(*)>2

order by avg(grade) desc

57.查詢選了vb課程的學(xué)生的學(xué)號(hào)、姓名、所在系和成績(jī),計(jì)算機(jī)系顯示cs ,信息管理系顯示im,通信工程系com

select s.sno 學(xué)號(hào),sname 姓名,

case sdept

when '計(jì)算機(jī)系' then 'cs'

when '信息管理系' then 'im'

when '通信工程系' then 'com'

end as 所在系,grade 成績(jī)

from student s join sc on s.sno=sc.sno

join course c on c.cno=sc.cno

where cname='vb'

58.查詢計(jì)算機(jī)系學(xué)生的學(xué)號(hào)、姓名、性別和年齡,并將查詢結(jié)果保存到新表student_cs中

select sno,sname,ssex,sage

into student_cs

from student where sdept = '計(jì)算機(jī)系'

59.查詢與劉晨在同一系學(xué)習(xí)的學(xué)生

select sno,sname,sdept from student --外層查詢

where sdept in(select sdept from student where sname='劉晨') --子查詢

60.使用子查詢實(shí)現(xiàn):查詢考試成績(jī)大于90分的學(xué)生的學(xué)號(hào)和姓名

select sno,sname from student

where sno in(select sno from sc where grade > 90)

61.查詢選了"c004"號(hào)課程且成績(jī)高于此課程平均成績(jī)的學(xué)生的學(xué)號(hào)和該門課程成績(jī)

select sno,grade from sc

where cno='c004' and grade<(

select avg(grade) from sc where cno='c004')

62.exists的含義是:當(dāng)子查詢中有滿足條件的數(shù)據(jù)時(shí),返回真值,否則返回假值

not exists的含義是:當(dāng)子查詢中有滿足條件的數(shù)據(jù)時(shí),返回假值,否則返回真值

查詢沒選“c001”號(hào)課程的學(xué)生的姓名和所在系

a.在子查詢中否定

select sname,sdept from student

where exists(

select * from sc

where sno = student.sno

and cno!='c001')

b.在外層查詢中否定

select sname,sdept from student

where not exists(

select * from sc

where sno = student.sno

and cno = 'c001')

63.將一個(gè)新生插入student表中,其學(xué)號(hào)為0821105,姓名為陳冬,性別為男,年齡為18歲,信息管理系學(xué)生

insert into student values('0821105','陳冬,'男',18,'信息管理系')

在sc表中插入一條新紀(jì)錄,學(xué)號(hào)為“0821105”,選修的課程號(hào)為“c001”,成績(jī)暫缺

insert into sc(sno,cno) values('0821105','c001')

注意:由于提供的常量值個(gè)數(shù)與表中的列個(gè)數(shù)不一致,因此在插入時(shí)必須列出列名.而且,sc表中的grade列必須允許為null

64.創(chuàng)建一個(gè)新表,然后將計(jì)算機(jī)系每個(gè)學(xué)生的姓名、選的課程名和考試成績(jī)插入到此表中

(1)創(chuàng)建表

create table cs_student(

sname varchar( 20),

cname varchar(40),

grade tinyint)

(2)插入數(shù)據(jù)

insert into cs_student

select sname,cname,grade from student s

join sc on s.sno=sc.sno

join course c on c.cno=sc.cno

where sdept='計(jì)算機(jī)系'

65.無(wú)條件更新

將所有學(xué)生的年齡加1

update student set sage=sage+1

66.有條件更新

(1)基于本表?xiàng)l件的更新

將“0811104”號(hào)學(xué)生的年齡改為18歲

update student set sage = 18

where sno='0811104'

(2)基于其他表?xiàng)l件的更新

將計(jì)算機(jī)系全體學(xué)生的成績(jī)加5分

-用子查詢實(shí)現(xiàn)

update sc set grade=grade+5

where sno in

(select sno from student where sdept='計(jì)算機(jī)系')

-用多表連接實(shí)現(xiàn)

update sc set grade=grade+5

from sc join student on sc.sno=student.sno

where sdept='計(jì)算機(jī)系'

67.修改全體學(xué)生的vb考試成績(jī):對(duì)通信工程系學(xué)生,成績(jī)加10分。對(duì)信息管理系學(xué)生,成績(jī)加5分。對(duì)其他系學(xué)生,成績(jī)不變

update sc set grade =grade+

case sdept

when '通信工程系' then 10

when '信息管理系' then 5

else 0

end

from student s join sc on s.sno=sc.sno

join course c on c.cno=sc.cno

where cname='vb'

68.無(wú)條件刪除

刪除所有學(xué)生的選課記錄

delete from sc --sc成空表

有條件刪除

(1)基于本表?xiàng)l件的刪除

刪除所有不及格學(xué)生的修課記錄

delete from sc where grade < 60

(2)基于其他表?xiàng)l件的刪除

刪除計(jì)算機(jī)系不及格學(xué)生的修課記錄

-用子查詢 實(shí)現(xiàn)

delete from sc

where grade<60 and sno in(

select sno from student

where sdept ='計(jì)算機(jī)系')

-用多表連接

delete from sc

from sc join student on sc.sno=student.sno

where sdept='計(jì)算機(jī)系' and grade<60

作者:天際使徒
出處:http://www.cnblogs.com/Horizon-asd/
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須在文章頁(yè)面給出原文連接,否則保留追究法律責(zé)任的權(quán)利。

總結(jié)

以上是生活随笔為你收集整理的数据库笔记(基本介绍及增删改查操作举例)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。