T-SQL提供的常用数据类型
表
CREATE DATABASE <数据库名>
USE <数据库名>
ALTER DATABASE <数据库名>
DROP DATABASE <数据库名>
CREATE TABLE <基本表名>
(<列名> <数据类型>[ <列级完整性约束条件> ]
[,<列名> <数据类型>[ <列级完整性约束条件>] ] …
[,<表级完整性约束条件> ] );
<表名>:所要定义的基本表的名字
<列名>:组成该表的各个属性(列)
<列级完整性约束条件>:涉及相应属性列的完整性约束条件
<表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件
列级完整性约束
例:定义SPDGB数据库的三个基本表
“商品订购数据库” 结构
数据库名:SPDG
包括三个基本表:
客户信息表(表名:KHB)
商品信息表(表名:SPB)
商品订购表(表名:SPDGB)
CREATE TABLE KHB (
客户编号 char(5) PRIMARY KEY,
客户名称 char(20) NOT NULL,
出生日期 datetime,
性别 char(2),
所在省市 varchar(50),
联系电话 varchar(12),
备注 text
);
CREATE TABLE SPB (
商品编号 char(8) PRIMARY KEY,
商品类别 char(20) NOT NULL,
商品名称 varchar(50) NOT NULL,
单价 float,
生产商 varchar(50),
保质期 datetime DEFAULT '2000-1-1',
库存量 int,
备注 text
);
CREATE TABLE SPDGB (
客户编号 char(5) NOT NULL,
商品编号 char(8) NOT NULL,
订购时间 datetime NOT NULL,
数量 int,
需要日期 datetime,
付款方式 varchar(40),
送货方式 varchar(50),
PRIMARY KEY (客户编号,商品编号,订购时间),
FOREIGN KEY (客户编号) REFERENCES KHB(客户编号),
FOREIGN KEY (商品编号) REFERENCES SPB(商品编号)
) ;
ALERT TABLE语句用于更改基本表结构
包括增加列、删除列、修改已有列的定义等
该语句的基本格式为:
ALTER TABLE <基本表名>
ALTER COLUMN <列名> <新数据类型>[NULL | NOT NULL]
-- 修改已有列定义
| ADD <列名> <数据类型> [约束] -- 增加新列
| DROP COLUMN <列名> -- 删除列
| ADD [CONSTRAINT <约束名>] <约束定义>
-- 添加约束
| DROP CONSTRAINT <约束名> -- 删除约束
DROP TABLE <基本表名>
语句格式 :
CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ]
INDEX <索引名>
ON <基本表名>(<列名> [ ASC | DESC ] [ { , <列名> [ ASC | DESC ] }… ] );
当不需要某个索引时,可使用DROP INDEX
语句将其删除。DROP INDEX语句的格式为:
DROP INDEX <基本表名>.<索引名>
CREATE VIEW <视图名> [(<列名>[,<列名> ])]
AS
<SELECT 查询语句>
ALTER VIEW <视图名> [(<列名>[,<列名> ])]
AS
<SELECT 查询语句>
DROP VIEW <视图名>
SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式>] …
FROM <表名或视图名>[, <表名或视图名> ] …
[ WHERE <条件表达式> ]
[ GROUP BY <列名1> ]
[ HAVING <条件表达式> ] ]
[ ORDER BY <列名2> [ ASC|DESC ] ];
SELECT 子句:指定要显示的属性列
FROM 子句:指定查询对象(基本表或视图)
WHERE子句:指定查询条件
GROUP BY 子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用集函数。
HAVING短语:筛选出只有满足指定条件的组
ORDER BY 子句:对查询结果表按指定列值的升序或降序排序
[NOT] LIKE ‘<匹配串>’ [ ESCAPE ‘ <换码字符>’]
[<表名1>.]<列名1> <比较运算符> [<表名2>.]<列名2>
比较运算符:<、<=、=、>、>=、!=、<>、!< 和 !>
[<表名1>.]<列名1> BETWEEN [<表名2>.]<列名2> AND[<表名2>.]<列名3>
FROM <表名1> JOIN <表名2> ON <表名1.列名>=<表名2.列名>
(2)外连接
LEFT OUTTER JOIN
RIGHT OUTTER JOIN
FULL OUTTER JOIN
有些嵌套查询可以用连接查询代替,但有些则不能
当子查询返回的结果是一个集合时,这样的子查询往往难以用连接查询代替
嵌套查询分类 :
嵌套查询求解方法 :
EXISTS谓词用于测试子查询的结果是否为空表。若子查询的结果集不空,则EXISTS返回TRUE,否则返回FALSE。
<表达式>{ < | <= | = | > | >= | != | <> | !< | !> } { ALL | SOME | ANY }(子查询)
ALL指定表达式要与子查询结果集中的每个值都进行比较,当表达式与每个值都满足比较关系时,才返回TRUE,否则返回FALSE。
ANY与SOME的限制含义相同,通常采用ANY,表示表达式只要与子查询结果集中的某个值满足比较关系时,就返回TRUE,否则返回FALSE。
Tip:通常,使用聚合函数实现子查询比直接使用ANY或ALL效率高
集合操作主要包括:
并(UNION)
交(INTERSECT)
差(EXCEPT)
INSERT INTO <表名> [(<列1> [,<列2>…])]
VALUES (<常量1> [,<常量2>…])
INSERT INTO <表名> [(<列1> [,<列2>…])]
<子查询>
UPDATE <表名> [ [ AS ] < 别名> ]
SET <列名> =<表达式> [,<列名>=<表达式> ]…
[WHERE <条件表达式>]
DELETE [FROM] <表名>
[WHERE <条件表达式>]
与表格操作相同
对某个基本表进行增、删、改操作有可能会破坏参照完
整性。
什么是基本表?什么是视图?二者有何关系与区别?
基本表:
基本表是独立存在于数据库中的表,是“实表”。
一个关系对应一个基本表,一个或多个基本表对应一个存储文件。
视图(View):
视图是从一个或几个基本表(或视图)导出的表,是“虚表”。
它本身不独立存在于数据库中,数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。
当基本表中的数据发生变化时,从视图中查询出来的数据也随之改变。
SQL语句按其功能分为哪几类?
数据定义
数据查询
数据操纵
数据控制
SQL的数据定义主要包括哪几类对象的定义?
模式
基本表
索引
什么是索引?定义索引的目的是什么?
什么是视图?视图有哪些优点?
设有学生成绩数据库XSCJ,期中包含关系如下:
(1)学生关系:名为Student,描述学生信息。
关系模式为:Student(学号,姓名,专业名,性别,出生时间,总学分,备注)
(2)Course(课程号,课程名,开课学期,学时,学分)
(3)StuCourse(学号,课程号,成绩)
试写出以下操作的SQL语句:
(1)查询专业名为”计算机科学与技术“的学生学号与姓名
select 学号,姓名
from Student
where 专业名='计算机科学与技术'
(2)查询开课学期为”2“的课程号与课程名
select 课程号,课程名
from Course
where 开课学期=”2“
(3)查询修读”计算机科学与技术“的学生的学号
select 学号
from StuCourse
where 课程号=
(
select 课程号
from Course
where 课程名='计算机科学与技术'
)