作业5 sql练习 INDEX / INSERT / SELECT的练习

INDEX

  • 1.建立索引

语句如下

   CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…);

注释:
表名:要建索引的基本表的名字
索引:可以建立在该表的一列或多列上,各列名之间用逗号分隔
次序:指定索引值的排列次序。
升序:ASC
降序:DESC
缺省值:ASC
UNIQUE:此索引的每一个索引值只对应唯一的数据记录 CLUSTER:表示要建立的索引是聚簇索引

[例3.13] 为学生-课程数据库中的Student,Course,SC三个表建立索引。Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引

   CREATE UNIQUE INDEX  Stusno ON Student(Sno);
   CREATE UNIQUE INDEX  Coucno ON Course(Cno);
   CREATE UNIQUE INDEX  SCno ON SC(Sno ASC,Cno DESC);

第三个索引中,Sno升序排列与Cno降序排列,二者是否会发生冲突呢?
显而易见,我们建立的第三个索引是先按照学号升序排序,在学号相同的情况下,再按照课程号降序进行排列的,所以并不会产生冲突。

  • 2.修改索引

语句如下

 ALTER INDEX <旧索引名> RENAME TO <新索引名>

[例3.14] 将SC表的SCno索引名改为SCSno

ALTER INDEX SCno RENAME TO SCSno;

但在SQL上运行时会出现 ERROR:Incorrect syntax near ‘RENAME’.错误
得知“”RENAME”附近的语法不正确
查询得知应用EXEC sp_rename ‘SCno’,‘SCSno’,‘index’;即可修改索引名。

  • 3.删除索引

语句如下

DROP INDEX <索引名>;

注释:删除索引时,系统会从数据字典中删去有关该索引的 描述。

[例3.15] 删除Student表的Stusname索引

DROP INDEX Stusname;

然而直接执行这条语句并不会打到删除目的,sql继续报错,若想打到删除目的应该指明目的表内索引。

DROP INDEX Stusname on Student;或DROP INDEX Student.Stusname;

INSERT

  • 1.插入元组

语句如下:

INSERTINTO <表名> [(<属性列1>[,<属性列2 >…)]VALUES (<常量1> [,<常量2>]… );

注释:
INTO子句 指定要插入数据的表名及属性列
属性列的顺序可与表定义中的顺序不一致
没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定义中的顺序一致
指定部分属性列:插入的元组在其余属性列上取空值
VALUES子句 提供的值必须与INTO子句匹配
值的个数
值的类型

[例3.69]将一个新学生元组(学号:201215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。

INSERT
INTO  Student (Sno,Sname,Ssex,Sdept,Sage)
VALUES ('201215128','陈冬','男','IS',18);

在这里插入图片描述
[例3.70]将学生张成民的信息插入到Student表中。
(INTO 子句不写属性名的情况)

INSERT
	INTO  Student
	VALUES ('201215126','张成民','男’,18,'CS'); 

[例3.71] 插入一条选课记录( ‘200215128’,'1 ')。

    INSERT INTO SC(Sno,Cno)
    VALUES ('201215128 ',' 1 ');
 or
    INSERT INTO SC
    VALUES (' 201215128 ',' 1 ',NULL);

SELECT

语句如下

SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>] …
FROM <表名或视图名>[,<表名或视图名> ]…|(SELECT 语句)      [AS]<别名>
[ WHERE <条件表达式> ]
[ GROUP BY <列名1> [ HAVING <条件表达式> ] ]
[ ORDER BY <列名2> [ ASC|DESC ] ];
 

注释:
SELECT子句:指定要显示的属性列
FROM子句:指定查询对象(基本表或视图)
WHERE子句:指定查询条件 GROUP
BY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用聚集函数。
HAVING短语:只有满足指定条件的组才予以输出 ORDER BY子句:对查询结果表按指定列值的升序或降序排序

[例3.16] 查询全体学生的学号与姓名。

SELECT Sno,Sname
FROM Student; 

[例3.17] 查询全体学生的姓名、学号、所在系。

SELECT Sname,Sno,Sdept
FROM Student;
  • 查询全部列

选出所有属性列:
在SELECT关键字后面列出所有列名
将<目标列表达式>指定为 *

[例3.18] 查询全体学生的详细记录

SELECT  Sno,Sname,Ssex,Sage,Sdept 
FROM Student; 
or
SELECT  *  //用*代指全部学生
FROM Student; 

【例 3.19】查全体学生的姓名及其出生年份。

SELECT Sname,2020-Sage
FROM Student;

【例 3.20】查询全体学生的姓名、出生年份和所在的院系,要求用小写字母表示系名。

SELECT Sname,'Year of Birth:',2020-Sage,LOWER(Sdept)
FROM Student;

【例 3.21】查询选修了课程的学生学号。

SELECT Sno FROM SC; 或者为 SELECT ALL Sno FROM SC;

【例 3.22】查询计算机科学系全体学生的名单。

SELECT Sname
FROM Student
WHERE Sdept = 'CS';

【例 3.23】查询所有年龄在20岁以下的学生姓名及其年龄。

SELECT Sname,Sage
FROM Student
WHERE Sage < 20;

【例 3.24】查询考试成绩有不及格的学生的学号。

SELECT DISTINCT Sno
FROM SC
WHERE Grage < 60;

DISTINCT 的作用就相当于对于相同的学号,将会显示其中一个

【例 3.25】查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄

DELECT Sname,Sdept,Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23;

确定范围 BETWEEN AND//包括边界值
【例 3.26】查询年龄不在20~23岁之间的学生姓名、系别和年龄

DELECT Sname,Sdept,Sage
FROM Student
WHERE Sage NOT BETWEEN 20 AND 23;

[例3.27]查询计算机科学系(CS)、数学系(MA)和信息系(IS)学生的姓名和性别。

SELECT Sname, Ssex
FROM  Student
WHERE Sdept IN ('CS','MA’,'IS' );

[例3.28]查询既不是计算机科学系、数学系,也不是信息系的学生的姓名和性别。

SELECT Sname, Ssex
FROM Student
      WHERE Sdept NOT IN ('IS','MA’,'CS' );
  • 不得不说SQL的练习对我来说是个稍显艰巨的任务,但跟着老师的脚步慢慢理解SQL语句的过程无疑是极其有趣的,哪怕偶尔碰壁,愿越挫越勇。
发布了11 篇原创文章 · 获赞 6 · 访问量 2711

猜你喜欢

转载自blog.csdn.net/lrx359641708/article/details/104877613