INDEX
【例3.13】新建索引
在SQL语句中,建立索引使用CREATE INDEX语句,格式一般为:
CREATE [UNIQUE] INDEX <索引名> ON <表名>(<列名>[<次序>]);
CREATE [CLUSTER] INDEX <索引名> ON <表名>(<列名>[<次序>]);
次序可以用于指定索引值的排列次序,ASC为升序,DESC为降序,ASC为默认值。
CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucno ON Course(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);
【例3.14】修改索引
对于已经建立的索引,如果需要对其重新命名,可以使用ALTER INDEX语句。
格式为:
ALTER INDEX <旧索引名> RENAME TO <新索引名>
ALTER INDEX SCno RENAME TO SCSno;
但是此时程序报错,提示“在“RENAME”附近有语法错误”,在SQL Server中,ALTER不能改变表名和索引名,如果需要改变索引名就需要调用存储过程。
【例3.15】删除索引
语法一般为:
DROP INDEX <索引名>;
DROP INDEX Stusname
但是此时程序报错
根据提示可知道应该改为:
DROP INDEX <表名>.<索引名>
DROP INDEX Student.Stusname;
INSERT
【例3.69】插入元组
语法为:
INSERT
INTO<表面>[(<属性列1>[,<属性2>]…)]
VALUES(<常量1>[,<常量2>]…);
INSERT INTO Student(Sno,Sname,Ssex,Sdept,Sage)
VALUES('201215128','陈东','男','IS',18);
SELECT * FROM Student
此时报错,提示为:“违反了 PRIMARY KEY 约束“PK__Student__CA1FE464CD209441”。不能在对象“dbo.Student”中插入重复键。重复键值为 (201215128)。”
按照提示可知,是由于学号重复了,所以只需要更换一个学号即可。
【例3.70】插入元组
INSERT INTO Student
VALUES('201215126','张成民','男',18,'CS');
SELECT * FROM Student
【例3.71】插入元组
INSERT INTO SC
VALUES('201215128','1',NULL);
SELECT * FROM SC
此时如果直接插入那么就会报错,提示为:“INSERT 语句与 FOREIGN KEY 约束"FK__SC__Cno__403A8C7D"冲突。该冲突发生于数据库"SCHOOL",表"dbo.Course", column ‘Cno’。”
那是因为在数据库“SCHOOL”的“dbo.Course”中没有数据。所以在运行以上代码之前,我们需要先写入以下程序:
INSERT INTO Course
VALUES('1','数据库',NULL,4);
SELECT * FROM Course
最后就可以插入想插入的元组
结果为:
SELECT
进行单表查询之前,应该要建立表。
【例3.16】查询指定列
语法一般为:
SELECT <目标列表达式>
SELECT Sno,Sname
FROM Student;
【例3.17】
SELECT Sname,Sno,Sdept
FROM Student;
【例3.18】
查询全部列,两种方法,一种是在SELECT关键字后列出所有名,或者直接将<目标列表达式>指定为*。
SELECT *
FROM Student;
SELECT Sno,Sname,Ssex,Sage,Sdept
FROM Student;
【例3.19】查询经过计算的值
SELECT<目标表达式>,目标表达式不仅是算术表达式,还可以是字符串常量、函数等。
SELECT Sname,2014-Sage
FROM Student;
【例3.20】
SELECT Sname,'Year of Birth:',2014-Sage,LOWER(Sdept)
FROM Student;
SELECT Sname NAME,'Year of Birth:' BIRTH,2014-Sage BIRTHDAY,LOWER(Sdept) DEPARTMENT
FROM Student;
【例3.21】
SELECT Sno
FROM SC;
SELECT DISTINCT Sno
FROM SC;
【例3.22】查询满足条件的元组
SELECT Sname
FROM Student
WHERE Sdept='CS';
【例3.23】
SELECT Sname,Sage
FROM Student
WHERE Sage<20;
【例3.24】
SELECT DISTINCT Sno
FROM SC
WHERE Grade<90;
【例3.25】
SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23;
【例3.26】
SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage NOT BETWEEN 20 AND 23;
【例3.27】
SELECT Sname,Ssex
FROM Student
WHERE Sdept IN('CS','MA','IS');
【例3.28】
SELECT Sname,Ssex
FROM Student
WHERE Sdept NOT IN('CS','MA','IS');