1、说明:创建数据库
CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建 备份数据的 device USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat' --- 开始 备份
BACKUP DATABASE pubs TO testBack 4、说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根据已有的表创建新表:
A:create table tab_new like tab_old (使用旧表创建新表)
B:create table tab_new as select col1,col2„ from tab_old definition only 5、说明:删除新表 drop table tabname 6、说明:增加一个列
Alter table tabname add column col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、说明:添加主键: Alter table tabname add primary key(col) 说明:删除主键: Alter table tabname drop primary key(col)
8、说明:创建索引:create [unique] index idxname on tabname(col„.) 删除索引:drop index idxname
注:索引是不可更改的,想更改必须删除重新建。
9、说明:创建视图:create view viewname as select statement 删除视图:drop view viewname
10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料! 排序:select * from table1 order by field1,field2 [desc] 总数:select count as totalcount from table1 求和:select sum(field1) as sumvalue from table1 平均:select avg(field1) as avgvalue from table1 最大:select max(field1) as maxvalue from table1 最小:select min(field1) as minvalue from table1 11、说明:几个高级查询运算词 A: UNION 运算符
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 B: EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。 C: INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。 注:使用运算词的几个查询结果行必须是一致的。 12、说明:使用外连接 A、left outer join:
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。 SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c B:right outer join:
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。 C:full outer join:
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
一、定义基本表
SQL语言使用CREATE TABLE语句定义基本表,其一般格式如下: CREATE TABLE <表名>(<列名><数据类型>[列级完整性约束条件] [,<列名><数据类型>[列级完整性约束条件]]„„ [,<表级完整性约束条件>]);
例1 建立一个“学生”表student,它由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成。其中学号不能为空,值是唯一的,并且姓名取值也唯一。 CREATE TABLE Student
(Sno CHAR(5) NOT NULL UNIQUE, /*列级完整性约束条件,Sno取值唯一,不许取空值*/ Sname CHAR(20) UNIQUE, Ssex CHAR(1), Sage INT,
Sdept CHAR(15));
定义表的各个属性时需要指明其数据类型及长度。 SMALLINT 半字长二进制整数。
INTEGER或INT 全字长二进制整数。
DECIMAL(p[,q]) 压缩十进制数,共P位,其中小数后有q 或DEC(p[,q]) 位。0<=q<=p<=15,q=0时可以省略不写。 FLOAT 双字长浮点数。
CHARTER(n)或CHAR(n) 长度为n的定长字符串。 VARCHAR(n) 最大长度为n的变长字符串。 GRAPHIC(n) 长度为n的定长图形字符串。
VARGRAPHIC(n) 最大长度为n的变长图形字符串。 DATE 日期型,格式为YYYY-MM-DD。 TIME 时间型,格式为HH.MM.SS。 TIMESTAMP 日期加时间。 二、修改基本表
SQL语言使用ALTER TABLE 语句修改基本表,其一般格式如下: ALTER TABLE <表名>
[ADD<新列名><数据类型>[完整性约束]] [DROP<完整性约束名>]
[MODIFY<列名><数据类型>];
例2 向Student表增加“入学时间”列,其数据类型为日期型。 ALTER TABLE Student ADD Scome DATE; 例3 将年龄的数据类型改为半字长整数。
ALTER TABLE Student MODIFY Sage SMALLINT; 三、删除基本表
当某个基本表不再使用时,可以使用DROP TABLE语句删除它。其一般格式为: DROP TABLE <表名>; 例4 删除Student表。 DROP TABLE Student; 一、建立索引
SQL语言中,建立索引使用CREATE INDEX语句,其一般格式为: CREATE[UNIOUE][CLUSTER]INDEX<索引名>
ON <表名>(<列名>[<次序>][,<列名>[<次序>]]„„);
UNIQUE 表明此索引的每一个索引值只对应唯一的数据记录。
CLUSTER 表示要建立的索引是聚簇索引,所谓聚簇索引是指索引项的顺序与表中记录的物理顺序一致的索引组织。 二、删除索引
SQL语言中,删除索引使用DROP INDEX语句,其一般格式为: DROP INDEX <索引名> 3.3 查询
查询的一般格式为:
SELECT[ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]„„ FROM<表名或视图名>[,<表名或视图名>]„„ [WHERE <条件表达式>]
[GROUP BY<列名1>[HAVING<条件表达式>]] [ORDER BY<列名2>[ASC|DESC]]; 3.3.1 单表查询
一、选择表中若干列 1.查询指定列
例7:查询全体学生的学号与姓名。 SELECT Sno,Sname FROM Student; 2.查询全部列
例8 查询全体学生的详细记录。 SELECT *
FROM Student; 等价于: SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student;
3.查询经过计算的值
例9 查全体学生的姓名及其出生年份 SELECT Sname,1996-Sage FROM Student; 3.3 查询
查询的一般格式为:
SELECT[ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]„„ FROM<表名或视图名>[,<表名或视图名>]„„ [WHERE <条件表达式>]
[GROUP BY<列名1>[HAVING<条件表达式>]] [ORDER BY<列名2>[ASC|DESC]]; 二、选择表中的若干元组 1.消除取值重复的行
两个本来并不完全相同的元组,投影到指定的某些列上后,可能变成相同的行了。 例 10 查询选修了课程的学生学号。 SELECT Sno FROM SC;
该查询结果里包含了许多重复的行。如果想去掉结果表中的重复项,必须指定DISTINCT短语: SELECT DISTINCT Sno FROM SC;
如果没有指定DISTINCT短语,则缺省为ALL,即保留结果表中的重复的行。 3.3 查询
查询的一般格式为:
SELECT[ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]„„ FROM<表名或视图名>[,<表名或视图名>]„„ [WHERE <条件表达式>]
[GROUP BY<列名1>[HAVING<条件表达式>]] [ORDER BY<列名2>[ASC|DESC]]; 二、选择表中的若干元组 2.查询满足条件的元组。 (1)比较大小
查询满足条件的元组可以通过WHERE子句实现。 用与进行比较的运算符一般包括:
=(等于),>(大于),<(小于),>=(大于等于),<=(小于等于),!=或<>(不等于)。 还包括:!>(不大于),!<(不小于)。
例11 查询所有年龄在20岁以下的学生姓名及年龄。 SELECT Sname,Sage FROM Student WHERE Sage<20;
或 SELECT Sname,Sage FROM Student
WHERE NOT Sage>=20; (2)确定范围
谓词BETWEEN„„AND„„和NOT BETWEEN„„AND„„可以用来查询属性值在(或不在)指定范围内的元组,其中BETWEEN后是范围的下限(即低值),AND后是范围的上限(即高值)。 例12 查询年龄不在20 ~23岁之间的学生姓名、系别和年龄。 SELECT Sname,Sdept,Sage FROM Student
WHERE Sage NOT BETWEEN 20 AND 23; (3)确定集合
谓词IN可以用来查找属性值属于指定集合的元组。
例13 查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。 SELECT Sname,Ssex FROM Student
WHERE Sdept IN('IS','MA','CS') (4)字符匹配
谓词LIKE可以进行字符串的匹配。其一般格式如下: [NOT]LIKE奇<匹配串>‘[ESCAPE奇<换码字符>']
.%(百分号) 代表任意长度(长度可以为0)的字符串。例如a%b表示以a开头,以b结尾的任意长度的字符串。
._(下横线) 代表任意单个字符。
例14 查询学号为95001的学生的详细情况。 SELECT *
FROM Student
WHERE Sno LIKE'95001'; 等价于:SELECT *
FROM Student
WHERE Sno ='95001';
例15 查询名字第二个字为“阳”字的学生的姓名和学号。 SELECT Sname,Sno FROM Student
WHERE Sname LIKE'_ _阳%';
如果用户查询的字符串的字符串本身就含有%或_ _,这时就要使用ESCAPE '<换码字符>'短语对通配符进行转义了。
例16 查询以“DB_”开头,且倒数第3个字符为i的课程的详细情况。 SELECT * FROM Course
WHERE Cname LIKE 'DB\_%i_ _'ESCAPE'\'; (5)涉及空值的查询
例17 查询所有有成绩的学生学号和课程号。 SELECT Sno,Cno FROM SC
WHERE Grade IS NOT NULL; (6)多重条件查询
逻辑运算符AND和OR可用来联结多个查询条件。AND的优先级高于OR,但用户可以用括号改变优先级。
例18 查询计算机系年龄在20岁以下的学生姓名。 SELECT Sname FROM Student
WHERE Sdept='cs'AND Sage<20; 四、使用集函数
SQL提供的集函数主要有:
COUNT([DISTINCT|ALL]*) 统计元组个数
COUNT([DISTINCT|ALL]<列名>) 统计一列中值的个数(空值不计)
SUM ([DISTINCT|ALL]<列名>) 计算一列值的总和(此列必须是数值型) AVG([DISTINCT|ALL]<列名>) 计算一列值的平均值(此列必须是数值型) MAX([DISTINCT|ALL]<列名>) 求一列值中的最大值 MIN([DISTINCT|ALL]<列名>) 求一列值中的最小值 五、对查询结果分组
GROUP BY子句将查询结果表按某一列或多列值分组,值相等的为一组。如果 分组后还要求按一定的条件对这些组进行筛选,最终只输出满足指定条件的 组,则可以使用HAVING短语指定筛选条件。 连接查询
若一个查询同时涉及两个以上的表,则称之为连接查询。 一、等值与非等值连接
当连接运算符为=时,称为等值连接。
若在等值连接中把目标列中重复的属性列去掉则为自然连接。 例:查询每个学生及其选修课程的情况 SELECT Student.*,SC.* FROM Student,SC
WHERE Student.Sno=SC.Sno; 二、外连接
例:SELECT Student.Sno,SNAME,Cno,Grade FROM Student LEFT JOIN SC WHERE Student.Sno=SC.Sno;
CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建 备份数据的 device USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat' --- 开始 备份
BACKUP DATABASE pubs TO testBack 4、说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根据已有的表创建新表:
A:create table tab_new like tab_old (使用旧表创建新表)
B:create table tab_new as select col1,col2„ from tab_old definition only 5、说明:删除新表 drop table tabname 6、说明:增加一个列
Alter table tabname add column col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、说明:添加主键: Alter table tabname add primary key(col) 说明:删除主键: Alter table tabname drop primary key(col)
8、说明:创建索引:create [unique] index idxname on tabname(col„.) 删除索引:drop index idxname
注:索引是不可更改的,想更改必须删除重新建。
9、说明:创建视图:create view viewname as select statement 删除视图:drop view viewname
10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料! 排序:select * from table1 order by field1,field2 [desc] 总数:select count as totalcount from table1 求和:select sum(field1) as sumvalue from table1 平均:select avg(field1) as avgvalue from table1 最大:select max(field1) as maxvalue from table1 最小:select min(field1) as minvalue from table1 11、说明:几个高级查询运算词 A: UNION 运算符
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 B: EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。 C: INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。 注:使用运算词的几个查询结果行必须是一致的。 12、说明:使用外连接 A、left outer join:
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。 SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c B:right outer join:
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。 C:full outer join:
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
一、定义基本表
SQL语言使用CREATE TABLE语句定义基本表,其一般格式如下: CREATE TABLE <表名>(<列名><数据类型>[列级完整性约束条件] [,<列名><数据类型>[列级完整性约束条件]]„„ [,<表级完整性约束条件>]);
例1 建立一个“学生”表student,它由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成。其中学号不能为空,值是唯一的,并且姓名取值也唯一。 CREATE TABLE Student
(Sno CHAR(5) NOT NULL UNIQUE, /*列级完整性约束条件,Sno取值唯一,不许取空值*/ Sname CHAR(20) UNIQUE, Ssex CHAR(1), Sage INT,
Sdept CHAR(15));
定义表的各个属性时需要指明其数据类型及长度。 SMALLINT 半字长二进制整数。
INTEGER或INT 全字长二进制整数。
DECIMAL(p[,q]) 压缩十进制数,共P位,其中小数后有q 或DEC(p[,q]) 位。0<=q<=p<=15,q=0时可以省略不写。 FLOAT 双字长浮点数。
CHARTER(n)或CHAR(n) 长度为n的定长字符串。 VARCHAR(n) 最大长度为n的变长字符串。 GRAPHIC(n) 长度为n的定长图形字符串。
VARGRAPHIC(n) 最大长度为n的变长图形字符串。 DATE 日期型,格式为YYYY-MM-DD。 TIME 时间型,格式为HH.MM.SS。 TIMESTAMP 日期加时间。 二、修改基本表
SQL语言使用ALTER TABLE 语句修改基本表,其一般格式如下: ALTER TABLE <表名>
[ADD<新列名><数据类型>[完整性约束]] [DROP<完整性约束名>]
[MODIFY<列名><数据类型>];
例2 向Student表增加“入学时间”列,其数据类型为日期型。 ALTER TABLE Student ADD Scome DATE; 例3 将年龄的数据类型改为半字长整数。
ALTER TABLE Student MODIFY Sage SMALLINT; 三、删除基本表
当某个基本表不再使用时,可以使用DROP TABLE语句删除它。其一般格式为: DROP TABLE <表名>; 例4 删除Student表。 DROP TABLE Student; 一、建立索引
SQL语言中,建立索引使用CREATE INDEX语句,其一般格式为: CREATE[UNIOUE][CLUSTER]INDEX<索引名>
ON <表名>(<列名>[<次序>][,<列名>[<次序>]]„„);
UNIQUE 表明此索引的每一个索引值只对应唯一的数据记录。
CLUSTER 表示要建立的索引是聚簇索引,所谓聚簇索引是指索引项的顺序与表中记录的物理顺序一致的索引组织。 二、删除索引
SQL语言中,删除索引使用DROP INDEX语句,其一般格式为: DROP INDEX <索引名> 3.3 查询
查询的一般格式为:
SELECT[ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]„„ FROM<表名或视图名>[,<表名或视图名>]„„ [WHERE <条件表达式>]
[GROUP BY<列名1>[HAVING<条件表达式>]] [ORDER BY<列名2>[ASC|DESC]]; 3.3.1 单表查询
一、选择表中若干列 1.查询指定列
例7:查询全体学生的学号与姓名。 SELECT Sno,Sname FROM Student; 2.查询全部列
例8 查询全体学生的详细记录。 SELECT *
FROM Student; 等价于: SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student;
3.查询经过计算的值
例9 查全体学生的姓名及其出生年份 SELECT Sname,1996-Sage FROM Student; 3.3 查询
查询的一般格式为:
SELECT[ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]„„ FROM<表名或视图名>[,<表名或视图名>]„„ [WHERE <条件表达式>]
[GROUP BY<列名1>[HAVING<条件表达式>]] [ORDER BY<列名2>[ASC|DESC]]; 二、选择表中的若干元组 1.消除取值重复的行
两个本来并不完全相同的元组,投影到指定的某些列上后,可能变成相同的行了。 例 10 查询选修了课程的学生学号。 SELECT Sno FROM SC;
该查询结果里包含了许多重复的行。如果想去掉结果表中的重复项,必须指定DISTINCT短语: SELECT DISTINCT Sno FROM SC;
如果没有指定DISTINCT短语,则缺省为ALL,即保留结果表中的重复的行。 3.3 查询
查询的一般格式为:
SELECT[ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]„„ FROM<表名或视图名>[,<表名或视图名>]„„ [WHERE <条件表达式>]
[GROUP BY<列名1>[HAVING<条件表达式>]] [ORDER BY<列名2>[ASC|DESC]]; 二、选择表中的若干元组 2.查询满足条件的元组。 (1)比较大小
查询满足条件的元组可以通过WHERE子句实现。 用与进行比较的运算符一般包括:
=(等于),>(大于),<(小于),>=(大于等于),<=(小于等于),!=或<>(不等于)。 还包括:!>(不大于),!<(不小于)。
例11 查询所有年龄在20岁以下的学生姓名及年龄。 SELECT Sname,Sage FROM Student WHERE Sage<20;
或 SELECT Sname,Sage FROM Student
WHERE NOT Sage>=20; (2)确定范围
谓词BETWEEN„„AND„„和NOT BETWEEN„„AND„„可以用来查询属性值在(或不在)指定范围内的元组,其中BETWEEN后是范围的下限(即低值),AND后是范围的上限(即高值)。 例12 查询年龄不在20 ~23岁之间的学生姓名、系别和年龄。 SELECT Sname,Sdept,Sage FROM Student
WHERE Sage NOT BETWEEN 20 AND 23; (3)确定集合
谓词IN可以用来查找属性值属于指定集合的元组。
例13 查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。 SELECT Sname,Ssex FROM Student
WHERE Sdept IN('IS','MA','CS') (4)字符匹配
谓词LIKE可以进行字符串的匹配。其一般格式如下: [NOT]LIKE奇<匹配串>‘[ESCAPE奇<换码字符>']
.%(百分号) 代表任意长度(长度可以为0)的字符串。例如a%b表示以a开头,以b结尾的任意长度的字符串。
._(下横线) 代表任意单个字符。
例14 查询学号为95001的学生的详细情况。 SELECT *
FROM Student
WHERE Sno LIKE'95001'; 等价于:SELECT *
FROM Student
WHERE Sno ='95001';
例15 查询名字第二个字为“阳”字的学生的姓名和学号。 SELECT Sname,Sno FROM Student
WHERE Sname LIKE'_ _阳%';
如果用户查询的字符串的字符串本身就含有%或_ _,这时就要使用ESCAPE '<换码字符>'短语对通配符进行转义了。
例16 查询以“DB_”开头,且倒数第3个字符为i的课程的详细情况。 SELECT * FROM Course
WHERE Cname LIKE 'DB\_%i_ _'ESCAPE'\'; (5)涉及空值的查询
例17 查询所有有成绩的学生学号和课程号。 SELECT Sno,Cno FROM SC
WHERE Grade IS NOT NULL; (6)多重条件查询
逻辑运算符AND和OR可用来联结多个查询条件。AND的优先级高于OR,但用户可以用括号改变优先级。
例18 查询计算机系年龄在20岁以下的学生姓名。 SELECT Sname FROM Student
WHERE Sdept='cs'AND Sage<20; 四、使用集函数
SQL提供的集函数主要有:
COUNT([DISTINCT|ALL]*) 统计元组个数
COUNT([DISTINCT|ALL]<列名>) 统计一列中值的个数(空值不计)
SUM ([DISTINCT|ALL]<列名>) 计算一列值的总和(此列必须是数值型) AVG([DISTINCT|ALL]<列名>) 计算一列值的平均值(此列必须是数值型) MAX([DISTINCT|ALL]<列名>) 求一列值中的最大值 MIN([DISTINCT|ALL]<列名>) 求一列值中的最小值 五、对查询结果分组
GROUP BY子句将查询结果表按某一列或多列值分组,值相等的为一组。如果 分组后还要求按一定的条件对这些组进行筛选,最终只输出满足指定条件的 组,则可以使用HAVING短语指定筛选条件。 连接查询
若一个查询同时涉及两个以上的表,则称之为连接查询。 一、等值与非等值连接
当连接运算符为=时,称为等值连接。
若在等值连接中把目标列中重复的属性列去掉则为自然连接。 例:查询每个学生及其选修课程的情况 SELECT Student.*,SC.* FROM Student,SC
WHERE Student.Sno=SC.Sno; 二、外连接
例:SELECT Student.Sno,SNAME,Cno,Grade FROM Student LEFT JOIN SC WHERE Student.Sno=SC.Sno;