![SQL數(shù)據(jù)庫語法總結(jié)_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-7/3/a635f6b1-a1ac-4627-8756-f492b2c72d2b/a635f6b1-a1ac-4627-8756-f492b2c72d2b1.gif)
![SQL數(shù)據(jù)庫語法總結(jié)_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-7/3/a635f6b1-a1ac-4627-8756-f492b2c72d2b/a635f6b1-a1ac-4627-8756-f492b2c72d2b2.gif)
![SQL數(shù)據(jù)庫語法總結(jié)_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-7/3/a635f6b1-a1ac-4627-8756-f492b2c72d2b/a635f6b1-a1ac-4627-8756-f492b2c72d2b3.gif)
![SQL數(shù)據(jù)庫語法總結(jié)_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-7/3/a635f6b1-a1ac-4627-8756-f492b2c72d2b/a635f6b1-a1ac-4627-8756-f492b2c72d2b4.gif)
![SQL數(shù)據(jù)庫語法總結(jié)_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-7/3/a635f6b1-a1ac-4627-8756-f492b2c72d2b/a635f6b1-a1ac-4627-8756-f492b2c72d2b5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、SQL Sever 2008 數(shù)據(jù)庫語法總結(jié)1.數(shù)據(jù)庫創(chuàng)建管理1.1 創(chuàng)建數(shù)據(jù)庫CREATE DATABASE DBON PRIMARY(NAME = DB_data,FILENAME = 'F:DB_data1.mdf', SIZE = 10MB,MAXSIZE = UNLIMTED),(NAME = DB_data2,FILENAME = 'F:DB_data2.ndf', SIZE = 11MB,MAXSIZE = 20MB, FILEGROWTH = 2MB)LOG ON(NAME = DB_log1,FILENAME = 'F:DB_log1.
2、ldf', SIZE = 1MB,MAXSIZE = 30MB,FILEGROWTH = 10%)1.2 修改數(shù)據(jù)庫1.2.1 增加數(shù)據(jù)文件語法:alter database 數(shù)據(jù)庫名稱add file 數(shù)據(jù)文件to file group 文件組名稱add log file 日志文件操作:ALTER DATABASE DB ADD FILE ( NAME = , FILENAME = , SIZE = , FILEGROWTH = )1.2.2 增加日志文件ALTER DATABASE DBADD LOG FILE ( NAME = , FILENAME = , SIZE = , FI
3、LEGROWTH = ,MAXSIZE = )1.2.3 修改數(shù)據(jù)文件語法:ALTER DATABASE 數(shù)據(jù)庫名MODIFY FILE 文件屬性操作:將數(shù)據(jù)庫db1中的數(shù)據(jù)文件data2的初始大小改為10MB,最大容量為20MB,增長幅度為10%alter database db1 modify file(name = data2,size = 10,maxsize = 20,filegrowth = 10%)ALTER DATABASE DBMODIFY FILE( NAME = , SIZE = ,)1.2.4 刪除數(shù)據(jù)文件和日志文件語法:alter database 數(shù)據(jù)庫名稱remo
4、ve file 數(shù)據(jù)文件或日志文件的邏輯文件名操作:刪除數(shù)據(jù)庫db1中的數(shù)據(jù)文件data4和日志文件log2 alter database db1 remove data4 alter database db1 remove log21.2.5 增加文件組語法:alter database 數(shù)據(jù)庫名add filegroup 文件組名操作:在數(shù)據(jù)庫db1中增加一個g2文件組 alter database db1 add filegroup g21.2.6 重命名文件組語法:alter database 數(shù)據(jù)庫名modify filegroup 文件組名name=新文件組名操作:將數(shù)據(jù)庫db1中
5、的文件組g2更名為g3alter database db1 modify filegroup g2 name=g31.2.7 刪除文件組語法:alter database 數(shù)據(jù)庫名稱remove filegroup 文件組名操作:刪除數(shù)據(jù)庫db1的文件組g3 alter database db1remove filegroup g31.2.8 修改數(shù)據(jù)庫名稱語法:alter database 數(shù)據(jù)庫名modify name = 新數(shù)據(jù)庫名操作:將數(shù)據(jù)庫db1的名字修改為glalter database db1modify name = gl1.3 刪除數(shù)據(jù)庫語法: Drop database
6、數(shù)據(jù)庫名 ,n操作:刪除數(shù)據(jù)庫DB1,DB2,DB3DROP DATABASE DB1,DB2,DB32. 創(chuàng)建與管理表2.1 創(chuàng)建表(Create table )語法 Create table 表名( 列名 數(shù)據(jù)類型 是否允許為空值, . 列名 數(shù)據(jù)類型 是否允許為空值)2.2 修改表(Alert table )語法(1)修改表指定數(shù)據(jù)類型Alert table 表名Alert column 列名 數(shù)據(jù)類型 NOT NULL/NULL (2) 增加列Alert table 表名Add column 列名 數(shù)據(jù)類型 NOT NULL/NULL (3) 刪除列Alert table 表名Drop
7、 column 列名 (4)添加主鍵Alert table 表名add primary key(列名,列名,)(5)刪除主鍵Alert table 表名Drop 主鍵名 /主鍵名是指“PK”+“_”+“表名”(6)刪除關(guān)系A(chǔ)lert table 表名Drop 關(guān)系名 操作:Alert table 學(xué)生表Drop FK_學(xué)生表_專業(yè)表 2.3 刪除表(Drop)語法(1)Drop table 表名(2)刪除索引Drop index 索引名/2.5 修改基本表2.5.1 增加列語法: alter table 表名 add <列定義><列約束> ,n 關(guān)于“標(biāo)識列”: 每個表
8、中都可以有一個標(biāo)識列,其作用是由系統(tǒng)自動生成能標(biāo)識表中每一行數(shù)據(jù)的惟一序列值。(其實可以理解為行號)“標(biāo)識列”定義格式: identity (seed, increment) 說明:seed為初始值,increment為增長的步長。意思就是你從幾開始增長,每次增長幾。省略時,初始值為1,步長為1.操作:在student表中,增加三列alter table studentadd address char(10) constraint df_xsqk_jg default shanghai , email varchar(30), number int identitygo2.5.2 修改列語法:
9、 alter table 表名 alter column 列名 新類型(長度,小數(shù)位數(shù))操作1:將sc表的grade列的數(shù)據(jù)類型修改為numeric(4,1)alter table sc alter column grade numeric(4,1)操作2:將sc表的grade列的數(shù)據(jù)類型修改為intalter table scalter column grade int注意:1.不能修改text、image、ntext、gimestamp類型的列;2.不能修改類型是varchar、nvarchar、varbinary的列的數(shù)據(jù)類型,但可增加其長度。3.不能修改是主鍵、外鍵列的類型,但可增加其
10、長度;4.不能修改包含索引、有默認(rèn)值、檢查約束和惟一性約束列的類型,但可增加其長度。5.不能修改用列表達(dá)式定義或被引用在列表達(dá)式中的列。6.不能修改復(fù)制列。2.5.3 修改表中的數(shù)據(jù)(對記錄進(jìn)行修改)語法:update 表名set 列名 = 表達(dá)式 | null | default , n ) where 邏輯表達(dá)式 即:update 表名set 列名 = 新值| null | default , n where 列名=條件表達(dá)式 操作:將sc表中的課程號為101的成績不及格的學(xué)生的成績都加上10分update scset grade = grade + 10where ( cno =
11、9;101' and grade < 60)2.6 刪除基本表2.6.1 刪除列(刪除的是表結(jié)構(gòu))注意:若列上有約束,所以應(yīng)先刪除該約束后,再刪除該列。語法: alter table 表名 drop column 列名操作:-先刪除表中的約束Alter table student drop constraint df_xsqk_jg-再刪除表中的列Alter table student drop column address,email,number 2.6.2 刪除行(刪除的是記錄)語法: delete from表名 where 邏輯表達(dá)式 delete from表名 wher
12、e 列名=條件表達(dá)式操作:刪除student表中姓名為zhangsan的數(shù)據(jù)記錄delete from student where name = 'zhangsan'2.6.3 重命名數(shù)據(jù)表語法: exec sp_rename '表名','新表名'操作:將student表重命名為rename_studentexec sp_rename student,'rename_student'2.6.4 刪除數(shù)據(jù)表注意:如果要刪除的表T1是其他表T2的參照表,即如果T2有外鍵約束,參照了T1的數(shù)據(jù)項,則不能刪除。需要先取消T2表中的外鍵約束
13、載刪除T1,或者先刪除T2表再刪除T1表。語法: drop table 表名 ,n 操作:已知sc表設(shè)置了外鍵約束,參照了表student和表course,現(xiàn)在要刪除student表和course表。Drop table sc goDrop table student ,course2.7 向表中插入( insert into )數(shù)據(jù)(插入記錄)2.7.1 插入單行數(shù)據(jù)語法: insert into 表名 (字段名列表) values (字段值列表)即:insert into 表名 (列名,列名,列名,) values (數(shù)據(jù),數(shù)據(jù),數(shù)據(jù),)操作:已知student有以下數(shù)據(jù)項:SNO,SNA
14、ME,SAGE,SEX,SAGE,SDEPT,現(xiàn)向student表中插入數(shù)據(jù)INSERT INTO Student(SNO,SNAME,SAGE,SDEPT) VALUES ('132','ZHANGSAN',23,'ASD')INSERT INTO Student VALUES ('1234','ZHANGSAN','143','MAN',22,'YI',)注意:字符型、日期型數(shù)據(jù)要用單引號括起來。2.7.2 插入多行數(shù)據(jù)語法: insert into 目的表名 (
15、 字段列表 ) select 源表名 . 列名 , n from 源表名 , n where 邏輯表達(dá)式 操作:將sc表中的成績不及格的記錄,插入到nopass表中,或者完全寫出一一對應(yīng)的列名。參考語法說明insert into nopass select * from sc where grade<60注意: 1.查詢的值與列名按順序?qū)?yīng),要求值類型與列數(shù)據(jù)類型一致。2.對語句中無值對應(yīng)的列名賦NULL。3.如果沒有指明列名表,則新插入記錄的值的順序必須與表中列的順序一致,且每一列均有值(可為空)3.設(shè)置主鍵3.4 創(chuàng)建基本表3.4.1 表約束類型:主鍵(PRIMARY KEY)約束惟
16、一(UNIQUE)約束外鍵(FOREIGN KEY)約束檢查(CHECK)約束說明:非空和默認(rèn)值也可看成是約束。 創(chuàng)建表約束的方法:新建表時,在單列后創(chuàng)建約束或者在所有列之后,再創(chuàng)建約束;如果表已存在,只能通過修改表,添加約束。語法:create table 表名(字段名 類型(長度) ,n)操作:CREATE TABLE Student( SNO CHAR(7) PRIMATY KEY, SNAME NCHAR(5) NOT NULL, SID CHAR(18) UNIQUE, SEX NCHAR(1) DEFAULT 'MAN', SAGE TINYINT CHECK (S
17、AGE >= 15 AND SAGE <= 40) SDEPT NVARCHAR(20) CREATE TABLE Course( cno CHAR(6) PRIMARY KEY, cname NVARCHAR(20) NOT NULL, credit NUMRIC(3,1) CHECK (credit > 0), senester TINYINT) CREATE TABLE SC( sno CHAR(7) NOT NULL, cno CHAR(9) NOT NULL, grade TINYINT, PRIMARY KEY (sno, cno) FOREIGN KEY (sn
18、o) REFERENCES Student (SNO) FOREIGN KEY (cno) REFERENCES Course (cno)3.4.2索引 PRIMARY KEY主鍵約束的作用:1.避免輸入重復(fù)的值2.不能取空值 (當(dāng)主鍵是由多個屬性組成時:某一屬性上的數(shù)據(jù)可以重復(fù),但其組合必須是惟一的;每個屬性的值都不能為空。)3.一個表上只能有一個主鍵。 UNIQUE惟一性約束的作用:保證列中不會出現(xiàn)重復(fù)的數(shù)據(jù)。主鍵約束與惟一性約束的區(qū)別:1.一個表中只能定義一個主鍵約束,但可以定義多個惟一約束。 2.定義了惟一約束的列數(shù)據(jù)可以為空值,而定義了主鍵約束的列數(shù)據(jù)不能
19、為空值。 FOREIGN KEY外間約束的作用:用于建立和強(qiáng)制兩個表間的關(guān)聯(lián),限制外鍵的取值必須是主表的主鍵值。 CHECK檢查約束的作用: 1.用來限制列上可以接受的數(shù)據(jù)值 2.使用邏輯表達(dá)式來判斷數(shù)據(jù)合法性 DEFAULT默認(rèn)約束的作用:當(dāng)列值未確定且該列又不能為空時,可由系統(tǒng)自動為該列添加一個值3.4.3 添加主鍵約束操作:在學(xué)生情況表student中,添加“sno”的主鍵約束,主鍵約束命名為pk_student如果表不存在create table student ( sno char (6), sname char (8), ssex bit
20、, sphone char(11) constraint pk_student primary key (sno)如果表已存在alter table studentadd constraint pk_studentprimary key (sno)3.4.4 創(chuàng)建唯一性約束操作:在student表中,創(chuàng)建“sphone”字段惟一性約束,并且將約束命名為uq_sphonealter table student add constraint uq_sphone unique (sphone)2.4.4 創(chuàng)建外鍵約束create table sc( sno char ( 6 ) not null r
21、eferences student ( sno ), cno char ( 3 ), grade tinyint primary key (sno,cno), foreign key ( cno ) references course ( cno )3.4.6 創(chuàng)建檢查約束操作1:在student表中,設(shè)置名為ck_student的檢查約束,該約束限制“性別”為man或womanalter table student add constraint ck_student check (sex=man or sex=woman)操作2:在學(xué)生與課程表sc中,添加名ck_sc j的檢查約束,該約束限
22、制“成績”在0到100之間alter table scadd constraint ck_sccheck (grade>=0 and grade<=100)3.4.7 設(shè)置默認(rèn)約束操作1:新建表時添加create table student(name char(6) not null,age int(10) null,sex char(5) default 'man')操作2:修改已有的表alter table student add constraint df_student default 'man' for sex3.4.8創(chuàng)建約束小結(jié)crea
23、te table student (sno char (6) not null , sname char (8) not null , ssex bit , 電話 char(11) )alter table xsqk add constraint pk_xsqk_xh primary key (學(xué)號), constraint df_xsqk_xb default 1 for 性別, constraint ck_xsqk_xb check (性別=1 or 性別=0 ), constraint uq_xsqk_dh unique (電話)create table student ( sno ch
24、ar (6) primary key (學(xué)號) check (學(xué)號 like '0-9 0-9 0-9 0-9 0-9 0-9'), sname char (8) not null , ssex bit default 1 check (ssex=0 or ssex=1) , sphone char(11) unique (sphone) )3.4.9 刪除約束alter table student drop constraint pk_xsqk_xhalter table student drop constraint uq_xsqk_dhalter table studen
25、t drop constraint ck_xsqk _xbalter table student drop constraint ck_xsqk _xhalter table student drop constraint df_xsqk_xb 4.數(shù)據(jù)庫查詢4.1 基本查詢語句結(jié)構(gòu)語法:select <目標(biāo)列名序列> - 需要哪些列form <表名> - 來自于哪些表where <行選擇條件> - 根據(jù)什么條件group by <分組依據(jù)列> -分組依據(jù)having <組選擇條件>order by <排序依據(jù)列><
26、目標(biāo)列名序列>部分能夠包含的內(nèi)容有如下結(jié)構(gòu):SELECT ALL | DISTINCT TOP expression PERCENT WITH TIES <select_list><select_list> :=*| table_name | view_name | table_alias .*| table_name | view_name | table_alias . column_name | $IDENTITY | expression AS column_alias | column_alias = expression ,.n 4.2 單表查詢4.2
27、.1 未做處理的查詢 查詢部分信息操作:查詢student表中的全體學(xué)生姓名和年齡select name,age from student 查詢?nèi)啃畔⒉僮鳎翰樵內(nèi)w學(xué)生的信息select * from student4.2.2 指定列別名語法: 列名 | 表達(dá)式 AS 列別名操作:在Student表中查詢學(xué)生的姓名,和年齡(年齡由計算得出),將年齡列命名為ageSELECT name,year(getdate() - year(Birthdate) AS age FROM Student4.2.3 消除相同行(distinct)語法:在要求不重復(fù)的數(shù)據(jù)列前使用di
28、stinct關(guān)鍵字select distinct 列名from 表名操作:select distinct Sno from SC4.2.4 where 指定查詢條件常用查詢條件如下表where查詢條件查詢條件謂詞比較運算符比較運算符 =, >, >=, <, <=, <>(或!=)確定范圍between and, not between and確定集合in,not in字符匹配like,not like空值IS NULL, IS NOT NULL多重條件AND, OR操作:查詢不及格的學(xué)生姓名SELECT DISTINCT Sno FROM SC WHERE
29、 Grade < 604.2.5 查詢范圍語法:BETWEENAND NOT BETWEENAND說明:BETWEEN后是范圍的下限,AND后是范圍的上限操作1:查詢考試成績在8090之間的學(xué)生學(xué)號、課程號和成績SELECT Sno, Cno, Grade FROM SC WHERE Grade BETWEEN 80 AND 90等價與下面這句話SELECT Sno, Cno, Grade FROM SC WHERE Grade >=80 AND Grade <=90操作2:查詢考試成績不在8090之間的學(xué)生學(xué)號、課程號和成績SELECT Sno, Cno, Grade FR
30、OM SC WHERE Grade NOT BETWEEN 80 AND 90等價與下面這句話SELECT Sno, Cno, Grade FROM SC WHERE Grade < 80 AND Grade > 904.2.6 IN 確定集合語法:列名 NOT IN (常量1, 常量2, )作用:用來查找屬性值屬于指定集合的元組操作1:查詢信息管理系、通信工程系和計算機(jī)系學(xué)生的姓名和性別select name, sex from sudentwhere dept in ('信息管理系','通信工程','計算機(jī)系')等價于select
31、 name, sex from sudentwhere dept = '信息管理系' or dept = '通信工程系' or dept = '計算機(jī)系'操作2:查詢信息管理系、通信工程系和計算機(jī)系三個系之外的其他系學(xué)生的姓名和性別SELECT Sname, Sex FROM Student WHERE Dept NOT IN ( '信息管理系', '通信工程系', '計算機(jī)系')等價于SELECT Sname, Sex FROM Student WHERE Dept!= '信息管理系
32、9; AND Dept!= '通信工程系' AND Dept!= '計算機(jī)系'4.2.7 LIKE 字符串匹配(用like實現(xiàn)模糊查詢)語法:列名 not like <匹配串> escape <轉(zhuǎn)義字符>說明:匹配串中可包含如下通配符:1.%(百分號):匹配0個或多個字符。2._(下劃線):匹配一個字符。3.:匹配方括號中的任何一個字符。4.:不匹配方括號中的任何一個字符。如果比較的字符是連續(xù)的,則可以用連字符“-”表達(dá),例如,要匹配b、c、d、e中的任何一個字符,則可以表示為:b-e(說實話這不就是簡化版的正則表達(dá)式么?)操作1:查詢姓
33、“張”的學(xué)生詳細(xì)信息select * from student where name like '張%'操作2:查詢姓“張”、姓“李”和姓“劉”的學(xué)生的詳細(xì)信息select * from student where name like '張劉李%'操作3:查詢名字的第2個字為“小”或“大”的學(xué)生的姓名和學(xué)號select * from student where name like '_大小%'操作4:查詢所有不姓“張”的學(xué)生姓名select name from student where name not like '張%'操作5
34、:在Student表中查詢學(xué)號的倒數(shù)第三為位不是1、2、3的學(xué)生信息select * from student where number like '%123_'3.2.8 ESCAPE 轉(zhuǎn)義字符語法:ESCAPE 轉(zhuǎn)義字符如果要查找的字符串正好含有通配符,比如下劃線或百分號,就需要用ESCAPE來說明。其中“轉(zhuǎn)義字符”是任何一個有效的字符,在匹配串中也包含這個字符,表明位于該字符后面的那個字符將被視為普通字符,而不是通配符。操作:查找字段t1中包含字符串“30%”的記錄where t1 like '%30!%' escape '!'4.2.9
35、NULL 空值查詢語法: 列名 IS NOT NULL 空值是未確定的值或其值尚不知道。操作:查詢還沒有考試的學(xué)生的學(xué)號和相應(yīng)的課程號SELECT Sno, Cno FROM SC WHERE Grade IS NULL注意:空值不是一個確定的值,所以不可以用等于或不等于來比較或衡量4.2.10 and 、or 多重條件查詢語法:當(dāng)需要多個查詢條件時,可以在WHERE子句中使用邏輯運算符AND和OR來組成多條件查詢操作:查詢C002和C003課程中考試成績在8090的學(xué)生的學(xué)號、課程號和成績select Sno, Cno, Grade from SC where Cno IN( 'C0
36、02', 'C003') and Grade BETWEEN 80 AND 90注意:OR的優(yōu)先級小于AND,要改變運算的順序可以通過加括號的方式實現(xiàn)SELECT Sno, Cno, Grade FROM SC WHERE (Cno = 'C001' OR Cno = 'C002') AND Grade BETWEEN 80 AND 904.2.11 order by 對查詢結(jié)果排序語法:order by <列名> asc| desc ,<列名> 說明:按<列名>進(jìn)行升序(ASC)或降序(DESC)排序
37、;當(dāng)用多個列排序時,這些列在該子句中出現(xiàn)的順序決定了對結(jié)果集進(jìn)行排序的方式操作:查詢?nèi)w學(xué)生詳細(xì)信息,結(jié)果按系名升序排列,同一個系的學(xué)生按出生日期降序排列SELECT * FROM Student order by Dept ASC, Birthdate desc4.2.12 使用聚合函數(shù)語法:COUNT(*):統(tǒng)計表中元組的個數(shù)。COUNT(DISTINCT <列名>):統(tǒng)計列值個數(shù)SUM(<列名>):計算列值的和值(必須是數(shù)值型列)。AVG(<列名>):計算列值的平均值(必須是數(shù)值型列)。MAX(<列名>):得到列值的最大值。MIN(<
38、列名>):得到列值的最小值。除COUNT(*)外,其他函數(shù)在計算過程中均忽略NULL值。操作1:統(tǒng)計選修了課程(SC)的學(xué)生人數(shù)。SELECT COUNT(DISTINCT Sno) FROM SC操作2:計算學(xué)號為“0811101”的學(xué)生的考試總成績SELECT SUM(Grade) FROM SC WHERE Sno = '0811101'注意!:聚合函數(shù)不能出現(xiàn)在WHERE子句中。操作:查詢學(xué)分最高的課程名,如下寫法是錯誤的!SELECT Cname FROM Course WHERE Credit = MAX(Credit)應(yīng)該改為:declare credit
39、intselect credit=max(credit) from courseselect cname from course where credit=credit4.2.13 GROUP BY 分組語法: GROUP BY <分組條件>作用:細(xì)化聚合函數(shù)的作用對象操作1:統(tǒng)計每門課程的選課人數(shù),列出課程號和選課人數(shù)。對查詢結(jié)果按Cno的值分組,所有具有相同Cno值的元組為一組,然后再對每一組使用COUNT計算,求出每組的學(xué)生人數(shù)。SELECT Cno, COUNT(Sno) FROM SC GROUP BY Cno操作2:統(tǒng)計每個學(xué)生的選課門數(shù)和平均成績。SELECT Sno
40、 as 學(xué)號, COUNT(*) as 選課門數(shù), AVG(Grade) as 平均成績 FROM SC GROUP BY Sno注意: 1.GROUP BY子句中的分組依據(jù)列必須是表中存在的列名,不能使用AS子句指派的列別名。 2.帶有GROUP BY 子句的SELECT語句的查詢列表中只能出現(xiàn)分組依據(jù)列和統(tǒng)計函數(shù),因為分組后每個組只返回一行結(jié)果。操作3:帶WHERE子句的分組。統(tǒng)計每個系的女生人數(shù)。SELECT Dept, Count(*) 女生人數(shù) FROM Student WHERE Sex = '女' GROUP BY Dept操作4:按多個列分組。統(tǒng)計每個系的男生人
41、數(shù)和女生人數(shù),結(jié)果按系名的升序排序。SELECT Dept, Sex, Count(*) 人數(shù), FROM Student GROUP BY Dept, Sex ORDER BY Dept4.2.14 HAVING 限制分組結(jié)果語法:HAVING用于對分組自身進(jìn)行限制,它有點象WHERE子句,但它用于組而不是對單個記錄。操作1: 查詢選課門數(shù)超過3門的學(xué)生的學(xué)號和選課門數(shù)。SELECT Sno, Count(*) 選課門數(shù) FROM SC GROUP BY Sno HAVING COUNT(*) > 3處理過程:先執(zhí)行GROUP BY子句對SC表數(shù)據(jù)按Sno進(jìn)行分組,然后再用統(tǒng)計函數(shù)CO
42、UNT分別對每一組進(jìn)行統(tǒng)計,最后篩選出統(tǒng)計結(jié)果滿足大于3的組。分組的優(yōu)先級大于查詢,having是分組內(nèi)操作。操作2:查詢選課門數(shù)大于等于4門的學(xué)生的平均成績和選課門數(shù)SELECT Sno, AVG(Grade) 平均成績, COUNT(*) 選課門數(shù) FROM SC GROUP BY Sno HAVING COUNT(*) >= 44.2.15 小結(jié)1.在分組操作之前應(yīng)用的篩選條件,比在WHERE子句中指定更有效。2.在HAVING子句中指定的篩選條件,應(yīng)該是那些必須在執(zhí)行分組操作之后應(yīng)用的篩選條件。3.將所有應(yīng)該在分組之前進(jìn)行的篩選條件放在WHERE子句中而不是HAVING子句中。3
43、.3 多表查詢多表連接查詢分類三種:1.內(nèi)連接(INNER JOIN):分為三種:等值連接、自連接、不等連接 2.外連接(OUTER JOIN):分為三種:左外連接、右外連接、全外連接 3.交叉連接(CROSS JOIN) :沒有WHERE子句,它返回連接表中所有數(shù)據(jù)行的笛卡爾積3.3.1 內(nèi)連接語法:ANSI方式的連接格式FROM 表1 INNER JOIN 表2 ON <連接條件>連接條件語法格式:<表名1.><列名1><比較運算符><表名2.><列名2>內(nèi)連接執(zhí)行過程:首先取表1中的第1個元組,然后從頭開始掃描表2,
44、逐一查找滿足連接條件的元組,找到后就將表1中的第1個元組與該元組拼接起來,形成結(jié)果表中的一個元組。表2全部查找完畢后,再取表1中的第2個元組,然后再從頭開始掃描表2, 重復(fù)這個過程,直到表1中的全部元組都處理完畢為止。操作1:查詢學(xué)生的選課情況。學(xué)生信息在student表中,選課信息在sc表中。兩張表都存放著學(xué)生的學(xué)學(xué)號sno。SELECT * FROM Student INNER JOIN SCON Student.Sno=SC.Sno操作2:去除重復(fù)列。如果不指定查詢結(jié)果的列名(如操作1)則直接將兩個表拼接在一起,學(xué)號列會重復(fù)。為了避免重復(fù),需要制定列名。SELECT Student.Sn
45、o, Sname, Sex, Sage, Dept, Cno, Grade FROM Student JOIN SC ON Student.Sno = SC.Sno操作3:指定列別名 ,參照前面說過的格式:<源表名> AS <表別名>SELECT Sname, Cno, Grade FROM Student S JOIN SC ON S.Sno = SC.Sno WHERE Dept = '計算機(jī)系'注意:當(dāng)為表指定了別名時,在查詢語句中的其他地方,所有用到表名的地方都要使用別名,而不能再使用原表名。操作4:三張表的連接查詢。查詢“信息管理系”修了“計算
46、機(jī)文化學(xué)” 的學(xué)生姓名和成績。SELECT Sname, Grade FROM Student s JOIN SC ON s.Sno = SC. Sno JOIN Course c ON c.Cno = SC.Cno WHERE Dept = '信息管理系' AND Cname = '計算機(jī)文化學(xué)'操作5:綜合使用聚合函數(shù)、多表連接、分組。 有分組和行選擇條件的多表連接查詢。統(tǒng)計計算機(jī)系學(xué)生每門課程的選課人數(shù)、平均成績、最高成績和最低成績。 SELECT Cno, COUNT(*) AS Total, AVG(Grade) as AvgGrade, MAX(Gr
47、ade) as MaxGrade, MIN(Grade) as MinGrade FROM Student S JOIN SC ON S.Sno = SC.Sno WHERE Dept = '計算機(jī)系' GROUP BY Cno 4.索引4.1 創(chuàng)建索引語法:create unique clustered | nonclustered index 索引名on 表名 | 視圖名 ( 列名 asc | desc , .n )注意:1.一個表中只能創(chuàng)建1個聚集索引。(由于系統(tǒng)已自動在主鍵上創(chuàng)建了聚集索引,所以用戶不能再創(chuàng)建,除非先刪除已有的索引,重新創(chuàng)建)2.一個表中可以創(chuàng)建若干個非
48、聚集索引。操作:在kc表中,重新創(chuàng)建名為“ix_kcm”的索引,使其成為惟一性的非聚集索引create unique index ix_kcm on kc ( 課程名 desc)with drop_existing -刪除已存在的索引,創(chuàng)建新的索引4.2 刪索索引語法:drop index 表名 . | 視圖名 . 索引名 , n 注意:SQL Server系統(tǒng)自動建立的索引不能用drop index刪除,只能用alter table語句中的drop constraint子句來解除加在該字段上的主鍵約束或惟一性約束,這些約束一解除,相關(guān)的索引也就被刪除了。4.3 查看索引語法:exec sp_
49、helpindex 表名 | 視圖名 5.視圖5.1 視圖介紹5.1.1 視圖的含義和作用視圖是基于某個查詢結(jié)果的虛表。是用戶查看和修改數(shù)據(jù)表中數(shù)據(jù)的一種方式。每個視圖都有幾個被定義的列和多個數(shù)據(jù)行。5.1.2 視圖與基本表1.視圖中的數(shù)據(jù)列和行來源于其所引用的基表。2.視圖所對應(yīng)的數(shù)據(jù)并不實際存儲在數(shù)據(jù)庫中,而是仍存儲在視圖所引用的基表中。3.數(shù)據(jù)庫中只存儲視圖的定義。5.1.3 使用視圖的目的與好處1.聚焦特定數(shù)據(jù):使用戶只能看到和操作與他們有關(guān)的數(shù)據(jù),提高了數(shù)據(jù)的安全性。2.簡化數(shù)據(jù)操作:使用戶不必寫復(fù)雜的查詢語句就可對數(shù)據(jù)進(jìn)行操作。3.定制用戶數(shù)據(jù):使不同水平的用戶能以不同的方式看到不
50、同的數(shù)據(jù)。4.合并分離數(shù)據(jù):視圖可以從水平和垂直方向上分割數(shù)據(jù),但原數(shù)據(jù)庫的結(jié)構(gòu)保持不變。5.2 創(chuàng)建視圖語法:create view 視圖 (列名表) with encryption -用于加密視圖的定義,用戶只能查看不能修改。asselect查詢語句 with check option -強(qiáng)制所有通過是同修改的數(shù)據(jù),都要滿足select語句中指定的條件操作1:創(chuàng)建一個 名為“v1”的視圖,用于查詢計算機(jī)網(wǎng)絡(luò)專業(yè)男生的學(xué)號、姓名、出生日期,并將視圖的列名分別改為:學(xué)生學(xué)號、男生姓名、生日。create view v1 (學(xué)生學(xué)號,男生姓名, 生日) as select 學(xué)號, 姓名, 出生日
51、期 from xsqk where 專業(yè)名=計算機(jī)網(wǎng)絡(luò) and 性別=1go使用視圖select * from v15.3 修改視圖語法:alter view 視圖 (列名表) with encryption asselect查詢語句 with check option 操作:在“v1”的視圖中增加兩列:專業(yè)名和所在系。alter view v1 (學(xué)生學(xué)號,男生姓名,生日,專業(yè),系) as select 學(xué)號,姓名,出生日期,專業(yè)名,所在系 from xsqk where 專業(yè)名=計算機(jī)網(wǎng)絡(luò) and 性別=1)5.4 刪除視圖語法: drop view 視圖名 ,n 5.5 通過視圖管理表中的數(shù)據(jù)5.5.1 使用視圖插入數(shù)據(jù)注意:1.可通過視圖向基表中插入數(shù)據(jù),但插入的數(shù)據(jù)實際上存放在基表中,而不是存放在視圖中。2.如果視圖引用了多個表,使用insert語句插入的列必須屬于同一個表。3.若創(chuàng)建視圖時定義了“with check option”選項,則使用視圖向基表中插入數(shù)據(jù)時,必須保證插入后的數(shù)據(jù)滿足定義視圖的限制條件。操作1:向“V1”視圖中添加兩條記錄。 insert into v1 values(020106,張三,1981-04-22,計算機(jī)網(wǎng)絡(luò),計算機(jī))
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 環(huán)境保護(hù)教育推廣與實踐
- 環(huán)境藝術(shù)設(shè)計中的視覺體驗與審美需求
- 生態(tài)環(huán)保理念在辦公空間的設(shè)計實踐
- 環(huán)保材料在環(huán)境藝術(shù)設(shè)計中的應(yīng)用前景
- 生活用紙的創(chuàng)新設(shè)計與實踐案例分享
- 《2 顏色填充和橡皮擦工具》(說課稿)-2023-2024學(xué)年五年級下冊綜合實踐活動吉美版
- 2023八年級物理上冊 第四章 光現(xiàn)象第5節(jié) 光的色散說課稿 (新版)新人教版
- 2024年八年級物理下冊 第8章 第3節(jié) 摩擦力說課稿 (新版)新人教版
- 3 歡歡喜喜慶國慶 (說課稿)2023-2024學(xué)年統(tǒng)編版道德與法治二年級下冊
- 24 延安我把你追尋(說課稿)2024-2025學(xué)年統(tǒng)編版語文四年級上冊001
- 企業(yè)招聘技巧培訓(xùn)
- 學(xué)校校本課程《英文電影鑒賞》文本
- 中考語文句子排序練習(xí)題(文本版)
- 華為HCSA-Presales-IT售前認(rèn)證備考試題及答案
- 預(yù)算績效評價管理機(jī)構(gòu)入圍投標(biāo)文件(技術(shù)方案)
- 小腸梗阻的護(hù)理
- 非物質(zhì)文化遺產(chǎn)拓印 課件
- 環(huán)境檢測實驗室分析人員績效考核方案
- 全過程工程咨詢管理服務(wù)方案
- YYT 0681.4-2010 無菌醫(yī)療器械包裝試驗方法 第4部分 染色液穿透法測定透氣包裝的密封泄漏
- 《麻風(fēng)病防治知識》課件
評論
0/150
提交評論