数据库作业5:SQL练习2 - INDEX / INSERT / SELECT

一、索引的建立与删除

建立索引格式:
CREATE [UNIQUE] [CLUSTERED] INDEX <索引名>
ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…);

在这里插入图片描述

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

ASC是升序,DESC是降序,默认值为ASC。
在这里插入图片描述
当输入如下语句时,一直显示REMAME附近有语法错误:

ALTER INDEX SCno RENAME TO SCSno;

在这里插入图片描述
我很疑惑🤔,于是百度查到原因:alter不能改变索引名,如若改变索引名就需要调用存储过程。(不懂就要问,那alter index到底还能不能用了???)
正确代码如下:

EXEC sp_rename 'SC.SCno','SCSno','index'
/*或者如下*/
EXEC sp_rename @objname = 'SC.SCno',@newname = 'SCSno',
@objtype = 'index'

我用的前一种方法,成功啦!
调用存储过程时会出现:在这里插入图片描述
这时命令已经成功过执行了。
(原文:https://www.cnblogs.com/Neavotre/articles/11463366.html)
在这里插入图片描述
一般格式:

DROP INDEX Stusname;

执行后会显示:
在这里插入图片描述
所以应该为:

DROP INDEX Student.Stusname;

(告诉我们什么呢!一定要严谨!!!😤)



二、插入数据
在这里插入图片描述

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

在这里插入图片描述

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

这两个例子说明:
1、INTO子句中没有出现的属性列,新元组在这些列上将取空值,但如果表定义时,定义的not null,则不能为空,否则会错误。
2、如果INTO字句上没有任何属性值,那么新插入的元组必须在每个属性列上均有值,且与CREATE TABLE中属性列的次序一一对应。
3、字符串常数要用单引号括起来(英文符号哦)。
在这里插入图片描述

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

当执行时发生错误:
在这里插入图片描述
是因为外键约束!注意啦!!!我这里SC表里的Sno和Cno有外键约束,分别引用于Course表的主键Cno和Student表的主键Sno,那么在向SC表插入数据时,插入的数据必须分别为Course表和Student表中已经存在的值,如过向SC表中存放一个Course表或Student表没有的值,则会报违反外键约束!!!
当我把数据补充完整后则执行成功。😎



三、数据查询
(1)查询指定列:
在这里插入图片描述

SELECT Sno,Sname
FROM Student;

查询结果展示:在这里插入图片描述
在这里插入图片描述

SELECT Sname,Sno,Sdept
FROM Student;

查询结果展示:在这里插入图片描述
查询时各个列的顺序可以和表的不一致。


(2)查询全部列:
在这里插入图片描述

SELECT *
FROM Student;
/*等价于*/
SELECT Sno,Sname,Ssex,Sage,Sdept
FROM Student;

查询结果展示:在这里插入图片描述


(3)查询经过计算的值:
在这里插入图片描述

SELECT Sname,2014-Sage
FROM Student;

查询结果展示:在这里插入图片描述
<目标列表达式>不仅可以是算术表达式,还可以是字符串常量、函数等。
在这里插入图片描述

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;

查询结果展示:在这里插入图片描述


(4)消除取值重复的行:
在这里插入图片描述

SELECT DISTINCT Sno
FROM SC;

如果没有指定DISTINCT,则默认为ALL,即保留取值结果中重复的值。


(5)查询满足条件的元组:
在这里插入图片描述

SELECT Sname
FROM Student
WHERE Sdept='CS';

在这里插入图片描述

SELECT DISTINCT Sno
FROM SC
WHERE Grade<60;

这里使用了DISTINCT语句,当有一个学生多门成绩不及格时,只显示一次学号。
在这里插入图片描述

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

在这里插入图片描述

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

谓词BETWEEN…AND…和NOT BETWEEN…AND…可以用来查找属性值在(或不在)指定范围内的元组,其中BETWEEN后是范围的下限,.AND是范围的上限。
在这里插入图片描述

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

在这里插入图片描述

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

谓词IN可以用来查找属性值属于指定集合的元组。
与IN相对的谓词是NOT IN。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值