《SQL数据库语句总结.pdf》由会员分享,可在线阅读,更多相关《SQL数据库语句总结.pdf(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据库 T-SQL 语句 1、创建数据库 create database 数据库名 2、选择数据库 use 数据库名 3、删除数据库 drop database 数据库名 用 SSMS 1、创建数据库 2、查看可修改数据库参数 3、删除数据库 基本表(仅仅是对表结构(属性和约束)的操作,而非表中数据)T-SQL 语句 1、创建基本表 2、修改基本表(约束或属性)3、删除基本表 4、基本表的索引 用 SSMS 1、创建基本表(课本 137)2、建立表的约束条件和索引(课本 138)3、修改表结构(课本 141)1、创建基本表 数据(是对表中数据(属性和约束)的操作(增删改查),而非表结构)T-S
2、QL 语句 1、数据插入 2、数据修改 3、数据删除 4、数据查找 视图 T-SQL 语句 1、建立视图 2、删除视图 3、查询视图 4、更新视图 用 SSMS(课本 167)1、建立视图 2、删除视图 3、查询视图 4、更新视图 别名 可能破坏参照完整性的情况及违约处理 In 和 exist 的区别 1、创建基本表 CREATE TABLE 库名表名(列名 数据类型列级完整性约束条件,列名 数据类型列级完整性约束条件 ,n ,表级完整性约束条件 ,n)针对属性值设置的限制条件列级 1)NOT NULL 或 NULL 约束。NOT NULL 约束不允许字段值为空,而 NULL 约束允许字段值为
3、空。2)UNIQUE 约束。惟一性约束,即不允许列中出现重复的属性值。3)PRIMARAY KEY CLUSTERED|NON CLUSTERED:定义该字段为主码并建立聚集(非)索引 Not null unique 和 primary key 的区别:DBMS 会给 primary key 建立索引 多个属性构成的主码只能通过表级约束条件定义 PRIMARY KEY(Sno,Cno)单个属性构成的主码可通过列级或表级约束条件定义 Sno CHAR(9)PRIMARY KEY 或 PRIMARY KEY(Sno)4)DEFAULT 约束。默认值约束。DEFAULT约束名 默认值FOR列名 5)
4、CHECK 约束。检查约束。CONSTRAINT约束名CHECK(约束条件表达式)单一属性设限 CONSTRAINT C2 CHECK(性别 IN(男,女)CONSTRAINT C3 CHECK(成绩 BETWEEN 0 AND 100)CHECK(Sage 30)多属性之间设限 CHECK(Ssex=女 OR Sname NOT LIKE Ms.%)性别是女性的元组都能通过该项检查,因为 Ssex=女 成立;当性别是男性时,要通过检查则名字一定不能以 Ms.打头 6)identity(初值,步长):定义字段为数值型数据,并指出它的初始值和逐步增加的步长值 7)reference 参照表(对应
5、字段):定义该字段为外码,并指出被参照表及对应字段 涉及到关系中一个或多个列或表间的限制条件记录/字段 表级 格式:CONTRAINT约束名 Sname CHAR(20)CONSTRAINT C2 NOT NULL 1)UNIQUE 约束。惟一性约束。2)PRIMARY KEYCLUSTERED|NON CLUSTERED定义主码,保证惟一性和非空性。建立聚集(非)索引。CONTRAINT约束名PRIMARY KEY CLUSTERED(列组)3)check(条件表达式):定义记录应满足的条件 4)FOREIGN KEY 约束。用于定义参照完整性。CONTRAINT约束名FOREIGN KEY
6、(外码)REFERENCES被参照表名(与外码 对应的主码名)2、修改基本表(约束或属性)ALTER TABLE表名 alter column(列名 新类型完整性约束,n)修改字段定义或约束条件 ADD(新列名 数据类型完整性约束,n)增加字段或者字段和表的约束 DROP完整性约束名删除字段或约束 check|nocheckconstraintall|约束名组使约束有效或无效(check 使之有效,nocheck 使之无效,all 指全部约束)MODIFY(列名 数据类型,n)增加约束 ALTER TABLE Student ADD CONSTRAINT C3 CHECK(Sage 40)增加
7、属性 ALTER TABLE Student ADD S_entrance DATE 3、删除基本表 drop table 表名 4、基本表的索引 1)创建索引 CREATE UNIQUE CLUSTERED|NONCLUSTERED INDEX索引名 ON表名(列名次序,列名次序);UNIQUE:建立唯一索引,不允许有两行具有相同索引值 CLUSTERED|NONCLUSTERED:建立聚集或者非聚集索引,每张表只能有一个聚集索引,默认值为非聚集索引 2)删除索引 DROP INDEX 索引名 1.索引的作用 1)使用索引可以明显地加快数据查询的速度。2)使用索引可保证数据的惟一性。3)使用
8、索引可以加快连接速度。2.建立索引的原则 1)索引的建立和维护由 DBA 和 DBMS 完成。2)大表应当建索引,小表则不必建索引。3)对于一个基本表,不要建立过多的索引。4)根据查询要求建索引。3.例子 学生表按学号升序建立索引;CREATE UNIQUE INDEX stusno ON 学生(学号);课程表按课程号升序建惟一索引;CREATE UNIQUE INDEX coursno ON 课程(课程号);选课表按学号升序和课程号降序建惟一索引。CREATE UNIQUE INDEX scno ON 选课(学号 ASC,课程号 DESC);用 SSMS 1、创建基本表(课本 137)2、建
9、立表的约束条件和索引(课本 138)3、修改表结构(课本 141)数据(是对表中数据(属性和约束)的操作(增删改查),而非表结构)T-SQL 语句 1、数据插入 1)使用常量插入单个元组 INSERT INTO表名(属性列 1,属性列 2)VALUES(常量 1,常量 2)如果没有列出任何列名,则必须将所有列名对应的值,包括空值“”,也要列出来;如果列出了列名,则值要与列名出现的先后顺序对应,没有列出的属性会设为空,此时要注意该属性能否为空。2)在表中插入子查询的结果集(一次插入多个元祖)INSERT INTO表名(属性列 1,属性列 2)子查询 子查询常常为 select 语句 2、数据修改
10、 UPDATE表名 SET列名=表达式,列名=表达式,n WHERE条件 5、数据删除 DELETE FROM表名 WHERE条件;6、数据查找 SELECT查询列组 Into 新表名 FROM数据源 WHERE元组选择条件 GROUP BY分列组HAVING 组选择条件 ORDER BY排序列 1 排序要求 1,n compute统计列组by表达式 Select 和 from 为必选子句!1)SELECT 子句:指明需查找目标列(字段、表达式、函数表达式、常量)。SELECTall|distincttop 数值percent查询列组 All:返回所有结果(默认)Distinct:查找后去重再
11、返回 top 数值:返回结果中的前数值行,如果有percent则返回结果中的百分之数值行记录 查询列组可具体表示为:查询列组:=*|表或视图.*|列名或表达式AS列别名|列别名=表达式*:指明返回在 from 子句中包括的表和视图的全部列 表或视图.*:指明返回指定表和视图的全部列 列别名:用来代替出现在结果集中的列名或表达式,其可在ORDER BY 中出现,不能在 where,group by,having 中出现 基本表中相同的列名表示为:表名.列名 2)into 子句:创建一个表,并将查询结果添加到该表中。若创建的是临时表,需在表明前加#;into 不能喝 compute 子句同时使用。
12、3)FROM 子句:指明数据源。表名间用“,”分割。数据源不在当前数据库中,使用“数据库名.表名”表示。如果需要一表多用,需增设别名标识,在各自使用中用不同的表别名表示。定义表别名:表名 别名 From 学生 a b -将学生表重命名(另起别名为 a 和 b)4)WHERE 子句:元组选择条件。5)GROUP BY 子句:结果集分组。Group by all 当目标列中有统计函数,则统计为分组统计,否则为对整个结果集统计。子句后带上HAVING 子句表达组选择条件(带函数的表达式)。6)having:位于 group by 之后,用于指定组或汇总筛选条件。一般为函数的条件表达式。7)ORDER
13、 BY 子句:指明排序项和排序要求。Order byASC|DESC,n 当排序要求为 ASC 时升序排序(默认);排序要求为 DESC 时降序排列。查询结果集可以按多个排序列进行排序,每个排序列后都可以跟一个排序要求。Order by 类别 ASC 8)compure 子句:产生汇总至,并在结果集中后将汇总值放入摘要列。Compute统计函数组by分组项 Compute 和 by 配合,可起到换行和分段小计的作用。Compute by 必须和 order by 配合使用,分组项应完全等于排序项。查询语句中使用的运算符号,特殊操作符,统计函数见课本 148 查询分类 简单查询 链接查询 嵌套查
14、询 组合查询 使用 GROUP BY 分组和 SQL 函数查询 使用 compute 和 compute by 查询 In 和 exist 的区别 1、简单查询:查询过程中只涉及到一个表的查询语句。2、链接查询:连接查询中的连接条件通过 WHERE 子句表达,连接条件和元组选择条 件之间用 AND(与)操作符衔接。1)内连接:结果中只保留符合条件的元组,排除了两表中没有匹配的元组。(1)等值连接和非等值连接 表名 1.列名 1 比较运算符表名 2.列名 2(2)自身连接 例如,课程表中的先行课是在上学期应开设的,先行课的先行课,即间接先行课应提前一学年开设。如果求查询某门课的间接先行课或全部课
15、程的间接先行课,就需要对课程表进行自身连接。需用到为表重命名,再进行查询 Eg.查询每一门课的间接先行课 Select a.课程号,a.课程名,b.先行课(将 a 表看成课程表,b 表看成先行课表)From 先行课 a b Where a.先行课=b.课程号 (3)一般内连接 Select 职工.*,部门,电话 From 职工 linner join 部门 on 职工.所在部门=部门.部门号 2)外部连接:把舍弃的元组也保存在结果关系中,而在其他属性上填空值(Null)可用于检验数据的正确与否(1)全外连接:如果把两表中非匹配项都保存在结果关系中,而在非匹配项所对应的其他属性上填空值(Null
16、)Select 职工.*,部门,电话 From 职工 full join 部门 on 职工.所在部门=部门.部门号(2)左外连接:只把左边关系 R 中要舍弃的元组保留 *=Select 职工.*,部门,电话 From 职工 left join 部门 on 职工.所在部门=部门.部门号(3)右外连接:如果只把右边关系 S 中要舍弃的元组保留 =*Select 职工.*,部门,电话 From 职工 right join 部门 on 职工.所在部门=部门.部门号 图 Eg.3、嵌套查询 1)使用 IN 操作符的嵌套查询 在 SQL 语言中,一个 selectfromwhere 语句成为一个查询块儿。
17、将一个查询块嵌套在另一个查询块的 where 子句或 having 短语的条件中的查询即为嵌套查询。Eg.SELECT 学号,姓名 FROM 学生 WHERE 学号 IN(SELECT 学号 FROM 选课 WHERE 课程号 IN(SELECT 课程号 FROM 课程 WHERE 课程名=高等数学)In 和=的区别:in 用于划定某个属性的取值范围,而=用于限定某个属性的唯一取值 所以,在查找结果唯一是可以用=,不唯一使用 in 2)使用比较符的嵌套查询 比较后面的值需要查询得到 Eg.SELECT 学号,成绩 FROM 选课 WHERE 课程号=C1 AND 成绩 (SELEC 成绩 FR
18、OM 选课 WHERE 课程号=C1AND 学号=(SELECT 学号 FROM 学生 WHERE 姓名=张三)3)使用 ANY 或 ALL 操作符的嵌套查询 字段 比较符ANY|ALL子查询 Eg.SELECT*FROM 学生 WHERE 年龄 ANY(SELECT 年龄 FROM 学生 WHERE 所在系=计算机系)AND 所在系计算机系 4)使用(NOT)EXISTS 操作符的嵌套查询 Exists 代表存在。Exist 操作符后子查询结果若非空,则从表中选出非空值对应的查询结果。Not exist 后子查询结果若为空,则从表中选出空值对应的查询结果 Eg.求选修了 C2 课程的学生姓名
19、 SELECT 姓名 FROM 学生 WHERE EXISTS(SELECT*FROM 选课 WHERE 学生.学号=学号 AND 课程号=C2)相当于(连接查询)SELECT 姓名 FROM 学生,选课 WHERE 学生.学号=选课.学号 AND 课程号=C2 Eg.求没选修 C2 课程的学生姓名 SELECT 姓名 FROM 学生 WHERE NOT EXISTS(SELECT*FROM 选课 WHERE 学生.学号=学号 AND 课程号=C2)4、组合查询 Union(all)Union 代表并。Union all 在并操作是保留重复的元组。Eg.SELECT 学号 FROM 选课 WH
20、ERE 课程号=C1 UNION SELECT 学号 FROM 选课 WHERE 课程号=C2 5、使用 GROUP BY 分组和 SQL 函数查询 未对查询结果(一般为 select)按指定的一列或多列值分组,聚集函数将作用于整个查询结果;对查询结果分组后,聚集函数将分别作用于每个组。常用函数如下 Eg.求课程和选修该课程的人数。SELECT 课程号,COUNT(学号)FROM 选课 GROUP BY 课程号 求选修课超过 3 门课的学生学号。SELECT 学号 FROM 选课 GROUP BY 学号 HAVING COUNT(*)3 HAVING 后跟分组后筛选条件 Having 和 wh
21、ere 的区别 Having 必和 group by 连用,不会单独出现,其作用于组,从中选择满足条件的组。where 作用于基表或视图,从中选择满足条件的元组,不限于组。Group by 和 group by all 的区别 Group by 只对查询结果分组,而 group by all 不仅会对查询结果分组,还会对不满足查询结果的元组分组,即对整个查找范围(from 后的范围)分组。但由于查找结果中会有统计函数,而该统计函数只对查找结果进行了处理,查找范围之内查找结果之外的元组并没有进行处理,所以这一部分返回 null。Eg.Select 类别,AVG(定价)平均值 from 图书 Wh
22、ere 出版社=机械工业出版社 Group by 类别 Order by 类别 ASC AVG(定价)平均值:使用平均值做 AVG(定价)别名,输出时别名将会作为结果列名 6、使用 compute 和 compute by 查询 Compute 可以建立一个汇总摘要,compute by 可建立分组汇总摘要。Eg.select 书号,书名,定价 from 图书 Where 类别=计算机类 Order by 书号 ASC Compute count(*),sum(定价)by 出版社 结果集中,后面以摘要形式列出一条 count 和 sum 记录 compute 后函数不受 group by 影响
23、,但受到 where 影响(即和 group by 同级,并行)后面加 by,则会先 by 后的条件分类,再执行 compute 后的函数 别名 属性或表名或数据库名或函数结果 别名 即:属性或表名或数据库名或函数结果+空格+别名 别名将代替被别名者(被 DBMS 识别或者作为结果输出)关系定义的完整性约束条件及违约处理 1、实体完整性:定义 若属性 A 是基本关系 R 的主属性,则属性 A 的值不能为空值。1)实体完整性能够保证实体的唯一性。2)实体完整性能够保证实体的可区分性。使用 create table 中用 primary key 定义 1)单属性构成的码 定义为列级约束条件 Sno
24、 CHAR(9)PRIMARY KEY 定义为表级约束条件 PRIMARY KEY(Sno)2)单属性构成的码 定义为表级约束条件 PRIMARY KEY(Sno,Cno)检查和违约性处理 1.检查主码值是否唯一,如果不唯一则拒绝插入或修改 2.检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改 2、参照完整性:定义 若属性(或属性组)F 是基本关系 R 的外码,它与基本关系 S 的主码 Ks 相对应(基本关系 R 和 S 不一定是不同的关系),则对于 R 中每个元组在 F 上的值:取空值(F 的每个属性值均为空值)或者等于 S 中某个元组的主码值 使用:create table 中用
25、 foreign key+reference 定义 FOREIGN KEY 定义哪些列为外码;REFERENCES 指明这些外码参照哪些表的主码 FOREIGN KEY(Sno)REFERENCES Student(Sno)检查和违约性处理 1.拒绝(NO ACTION)执行 默认策略 2.级联(CASCADE)操作 3.设置为空值(SET-NULL)对于参照完整性,除了应该定义外码,还应定义外码列是否允许空值 3、用户定义的完整性:定义 针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。由 RDBMS 提供,而不必由应用程序承担。使用:属性上的约束条件:CRE
26、ATE TABLE 时定义 列值非空(NOT NULL)Sno CHAR(9)NOT NULL 列值唯一(UNIQUE)Dname CHAR(9)UNIQUE 检查列值是否满足一个布尔表达式(CHECK)Ssex CHAR(2)CHECK(Ssex IN(男,女)元组上的约束条件:在 CREATE TABLE 时可以用 CHECK 短语定义元组上的约束条件,即元组级的限制 同属性值限制相比,元组级的限制可以设置不同属性之间的取值的相互约束条件 CHECK(Ssex=女 OR Sname NOT LIKE Ms.%)定义了元组中 Sname 和 Ssex 两个属性值之间的约束条件 性别是女性的元
27、组都能通过该项检查,因为 Ssex=女成立;当性别是男性时,要通过检查则名字一定不能以 Ms.打头 检查及违约处理 插入元组或修改属性的值时,RDBMS 检查元组上的约束条件是否被满足 如果不满足则操作被拒绝执行 4、完整性约束命名子句 CONSTRAINT PRIMARY KEY 短语 CONSTRAINT StudentKey PRIMARY KEY(Sno)|FOREIGN KEY 短语|CHECK 短语CONSTRAINT C1 CHECK(Sno BETWEEN 90000 AND 99999)In 和 exist 的区别:执行顺序不同 In:查询先产生结果集,然后主查询再去结果集里
28、去找符合要求的字段列表,符合要的输出,反之,则不输出。Exist:先运行一次主查询,再去子查询里查询与其的结果,如果是 true 则输出,反之,则不输出。只要not in的子查询中包含空值,那么最终的结果就为空;not in 查询,外表存在空值,存在空值的那条记录最终将被过滤,其他数据不受影响,内表存在空值将导致最终的查询结果为空 not exists 查询,外表存在空值,存在空值的那条记录将被输出,内表存在空值,对查询结果没有影响 视图 1、视图的特点 1)虚表,是从一个或几个基本表(或视图)导出的表 2)只存放视图的定义,不存放视图对应的数据 3)基表中的数据发生变化,从视图中查询出的数据
29、也随之改变 SQL 语句 2、视图的创建 CREATE VIEW (,)AS WITH CHECK OPTION;1)组成视图的属性列名:全部省略或全部指定 2)子查询不允许含有 ORDER BY 子句和 DISTINCT 短语 3)WITH CHECK OPTION:表示在对视图进行 update,insert,delete 操作是,要保证操作的数据满足视图定义中的谓词条件(视图子查询中的 where 子句条件)例建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生 。CREATE VIEW IS_Student AS SELECT Sno,Sname,Sage FROM Student WHERE Sdept=IS WITH CHECK OPTION;对 IS_Student 视图的更新操作:修改操作:自动加上 Sdept=IS的条件 删除操作:自动加上 Sdept=IS的条件 插入操作:自动检查 Sdept 属性值是否为IS 如果不是,则拒绝该插入操作 如果没有提供 Sdept 属性值,则自动定义 Sdept 为IS 2、视图的特点 2、视图的特点 2、视图的特点
限制150内