文档库 最新最全的文档下载
当前位置:文档库 › SQL数据定义与数据查询

SQL数据定义与数据查询

SQL数据定义与数据查询
SQL数据定义与数据查询

数据库上机报告

——数据定义与数据查询

一、写明实验所采用的实验环境:

硬件环境:普通联网的PC机;

操作系统:Windows 2000或者Windows XP;

数据库管理系统:MS SQL Server 2005。

二、给出实验内容与完成情况:

(一)使用命令行方式建立学生课程数据库

(1) 用SQL语言建立学生课程数据库,数据库命名:SC_学号后四位及姓名,如SC_3112liyan;

CREATE DATABASE SC_1224cxj

ON

(NAME= SC_1224cxj_dat,

FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\

SC_1224cxj_dat.mdf')

LOG ON

(NAME= SC_1224cxj_log,

FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\ SC_1224_log.ldf');

(2) 用SQL语言在学生课程数据库中建立3个表,要求进行完整性定义:

学生关系Student(Sno,Sname,Ssex,Sage,Sdept)其中Sno不能为空,值是唯一的,并且Sname取值也唯一,Sage自定义约束“大于16”

课程关系Course(Cno,Cname,Cpno,Ccredit) 其中Cno不能为空,值是唯一的,并且Cname取值也唯一

教师关系Teacher(Tno,Tname,Department,Email,Salary) 其中Tno不能为空,值是唯一的

选修关系SC(Sno,Cno,Grade) 其中Sno和Cno不能为空,(Sno, Cno)为主码,

Grade的数据类型为int

建立Student表:

CREATE TABLE Student

(Sno CHAR(9)PRIMARY KEY,

Sname CHAR(40)UNIQUE,

Ssex CHAR(2),

Sage SMALLINT CHECK(Sage>16),

Sdept CHAR(20)

);

建立Course表:

CREATE TABLE Course

(Cno CHAR(4)PRIMARY KEY,

Cname CHAR(40)UNIQUE,

Cpno CHAR(4),

Credit SMALLINT,

CONSTRAINT FK_C FOREIGN KEY(Cpno)REFERENCES Course(Cno)

);

建立Teacher表:

CREATE TABLE Teacher

(Tno CHAR(4)PRIMARY KEY,

Tname CHAR(40),

Department CHAR(20),

Email CHAR(100),

Salary INT

);

建立SC表:

CREATE TABLE SC

(Sno CHAR(9),

Cno CHAR(4),

Grade SMALLINT,

PRIMARY KEY(Sno,Cno),

CONSTRAINT FK_SC1 FOREIGN KEY(Sno)REFERENCES Student(Sno),

CONSTRAINT FK_SC2 FOREIGN KEY(Cno)REFERENCES Course(Cno)

);

(3) 修改数据表:

?将SC表中Grade的数据类型改为float;

ALTER TABLE SC ALTER COLUMN Grade FLOAT;

?在Student表中增加一个属性Scome记录学生的入学时间,其数据类型为DATETIME;

ALTER TABLE Student ADD Scome DATETIME;

?删除Student表中新增加Scome属性;

ALTER TABLE Student DROP COLUMN Scome;

?删除表Teacher表中的Email属性;

ALTER TABLE Teacher DROP COLUMN Email;

?删除Student表中对Sname属性创建的Unique约束。(无法删除未建立名字的约束)

建立约束语句:

ALTER TABLE Student ADD CONSTRAINT S_CHECK UNIQUE(Sname);

删除约束语句:

ALTER TABLE Student DROP S_CHECK;

*(4) 用SQL语言分别在3个数据表中插入数据(具体数据可见教材P.82):INSERT

INTO Student

VALUES('200215121','李勇','男',20,'CS');

INSERT

INTO Student

VALUES('200215122','刘晨','女',19,'CS');

INSERT

INTO Student

VALUES('200215123','王敏','女',18,'MA');

INSERT

INTO Student

VALUES('200215125','张立','男',19,'IS');

INSERT

INTO Course

VALUES('1','数据库','5',4);

INSERT

INTO Course

VALUES('2','数学',NULL,2);

INSERT

INTO Course

VALUES('3','信息系统','1',4);

INSERT

INTO Course

VALUES('4','操作系统','6',3);

INSERT

INTO Course

VALUES('5','数据结构','7',4);

INSERT

INTO Course

VALUES('6','数据处理',NULL,2);

INSERT

INTO Course

VALUES('7','PALCAL语言','6',4);

INSERT

INTO SC

VALUES('200215121','1',92);

INSERT

INTO SC

VALUES('200215121','2',85);

INSERT

INTO SC

VALUES('200215121','3',88);

INSERT

INTO SC

VALUES('200215122','2',90);

INSERT

INTO SC

VALUES('200215122','3',80);

(5) 创建索引:

?在Student表上创建按sage降序排列的索引NON_Stusage;

CREATE INDEX NON_Stusage ON Student(Sage DESC);

?在Student表上为Sno列创建一个聚簇索引CLU_Stusno;

CREATE CLUSTERED INDEX CLU_Stusno ON Student(Sno);

?在Student表上为Sname列创建一个聚簇索引CLU_Stusname;(能否创建成功?为什么?)不能创建,因为已经存在一个聚簇索引,一个基本表中只能存在一个聚簇索引。

?在Course表上创建按ccredit升序排列的唯一性索引;

CREATE UNIQUE INDEX UNI_Ccre ON Course(Ccedit);

?在SC表上按Sno升序和Cno降序建立唯一索引UN_SC。

CREATE UNIQUE INDEX UN_SC ON SC(Sno,Cno DESC);

(6)删除索引CLU_Stusno、UN_SC:

DROP INDEX Student.CLU_Stusno;

DROP INDEX SC.UN_SC

(7) 删除Teacher表

DROP TABLE Teacher;

(8) 保存SQL文件,文件名:SC-姓名学号后四位.sql,如SC-xukai3112.sql

(二)使用命令行方式建立SPJ数据库

(1) 用SQL语言建立SPJ数据库,数据库命名:SPJBASE-学号后四位及姓名,如

SPJBASE-3112liyan;

CREATE DATABASE SPJBASE_1224cxj

ON

(NAME= SPJBASE_1224cxj_dat,

FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\

SC_1214fanglingzhi _dat.mdf')

LOG ON

(NAME= SPJBASE_1224cxj_log,

FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\

SC_1214zhuyameng _log.ldf')

(2) 用SQL语言在其中建立S表、P表、J表和SPJ表(要求进行完整性定义),

表结构如下;

厂家S(SNO,SNAME,STATUS,CITY),其中STATUS(状态)为整型,其他均为字符型

产品P(PNO,PNAME,COLOR,WEIGHT),其中WEIGHT(重量)为浮

点型,其他均为字符型

工程J(JNO,JNAME,CITY),其中各属性均为字符型

供应SPJ(SNO,PNO,JNO,QTY),其中QTY(供应量)为整型,其他均

为字符型

建立S表:

CREATE TABLE Ss

(SNO CHAR(9)PRIMARY KEY,

SNAME CHAR(40),

STATUS INT,

CITY CHAR(20)

);

建立P表:

CREATE TABLE P

(PNO CHAR(9)PRIMARY KEY,

PNAME CHAR(40),

COLOR CHAR(20),

WEIGHT FLOAT

);

建立J表:

CREATE TABLE J

(JNO CHAR(9)PRIMARY KEY,

JNAME CHAR(40),

CITY CHAR(20)

);

建立SPJ表:

CREATE TABLE SPJ

(SNO CHAR(9),

PNO CHAR(9),

JNO CHAR(9),

QTY INT,

PRIMARY KEY(SNO,PNO,JNO),

CONSTRAINT FK_SPJ1 FOREIGN KEY(SNO)REFERENCES S(SNO),

CONSTRAINT FK_SPJ2 FOREIGN KEY(PNO)REFERENCES P(PNO),

CONSTRAINT FK_SPJ3 FOREIGN KEY(JNO)REFERENCES J(JNO)

);

*(3) 用SQL语言分别在4个数据表中输入一定的记录;

省略

(4) 保存SQL文件,文件名:SPJ-姓名学号后四位.sql,如SPJ-xukai3112.sql

(三)针对学生课程数据库查询

(1)查询全体学生的学号与姓名。

SELECT Sno,Sname

FROM Student;

(2)查询全体学生的姓名、学号、所在系。

SELECT Sname,Sno,Sdept

FROM Student;

(3)查询全体学生的详细记录。

SELECT*

FROM Student;

(4)查全体学生的姓名及其出生年份。

SELECT Sname, Sage

FROM Student;

(5)查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名。

SELECT Sname,Sage,LOWER(Sdept)

FROM Student;

(6)使用列别名改变查询结果的列标题。

SELECT Sname NAME,'Year of Birth:' BIRTH,2000-Sage

BIRTHDAY,LOWER(Sdept) DEPARTMENT

FROM Student;

(7)查询选修了课程的学生学号。

SELECT DISTINCT Sno

FROM SC;

(8)查询所有年龄在20岁以下的学生姓名及其年龄。

SELECT Sname,Sage

FROM Student

WHERE Sage<20;

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

SELECT Sname,Sdept,Sage

FROM Student

WHERE Sage BETWEEN 20 AND 23;

(10)查询年龄不在20~23岁之间的学生姓名、系别和年龄。

SELECT Sname,Sdept,Sage

FROM Student

WHERE Sage NOT BETWEEN 20 AND 23;

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

SELECT Sname,Ssex

FROM Student

WHERE Sdept IN('IS','MA','CS');

(12)查询既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别。

SELECT Sname,Ssex

FROM Student

WHERE Sdept NOT IN('IS','MA','CS');

(13)查询所有姓刘学生的姓名、学号和性别。

SELECT Sname,Sno,Ssex

FROM Student

WHERE Sname LIKE'刘%';

(14)查询学号为20080711的学生的详细情况。(具体的学号值根据表中数据确定)

SELECT*

FROM Student

WHERE Sno='20060701';

(15)查询姓“欧阳”且全名为三个汉字的学生姓名。

SELECT Sname

FROM Student

WHERE Sname LIKE'欧阳__';

(16)查询名字中第2个字为“晨”字的学生的姓名和学号。

SELECT Sname,Sno

FROM Student

WHERE Sname LIKE'__晨%';

(17)查询所有不姓刘的学生姓名。

SELECT Sname,Sno,Ssex

FROM Student

WHERE Sname NOT LIKE'刘%';

(18)查询DB_Design课程的课程号和学分。

SELECT Cno,Ccredit

FROM Course

WHERE Cname LIKE'DB\_Design'ESCAPE'\';

(19)查询以"DB_"开头,且倒数第3个字符为 i的课程的详细情况。

SELECT*

FROM Course

WHERE Cname LIKE'DB\_%i_ _'ESCAPE'\';

(20)查询缺少成绩的学生的学号和相应的课程号。

SELECT Sno,Cno

FROM SC

WHERE Grade IS NULL;

(21)查所有有成绩的学生学号和课程号。

SELECT Sno,Cno

FROM SC

WHERE Grade IS NOT NULL;

(22)查询计算机系年龄在20岁以下的学生姓名。

SELECT Sname

FROM Student

WHERE Sdept='CS'AND Sage<20;

(23)查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和

性别。(使用多个条件表达式)

SELECT Sname,Ssex

FROM Student

WHERE Sdept='IS'OR Sdept='MA'OR Sdept='CS';

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

龄。(使用多个条件表达式)

SELECT Sname,Sdept,Sage

FROM Student

WHERE Sage>=20 AND Sage<=23;

(25)查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。

SELECT Sno,Grade

FROM SC

WHERE Cno='3'

ORDER BY Grade DESC;

(26)查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学

生按年龄降序排列。

SELECT*

FROM Student

ORDER BY Sdept,Sage DESC;

(27)查询年龄最大的前三个学生的姓名。

SELECT Top 3 Sname

FROM Student

Order by Sage DESC;

(28)查询学生总人数。

SELECT COUNT(*)

FROM Student;

(29)查询选修了课程的学生人数。

SELECT COUNT(DISTINCT Sno)

FROM SC;

(30)计算1号课程的学生平均成绩。

SELECT AVG(Grade)

FROM SC

WHERE Cno='1';

(31)查询选修1号课程的学生最高分数。

SELECT MAX(Grade)

FROM SC

WHERE Cno='1';

(32)求各个课程号及相应的选课人数。

SELECT Cno,COUNT(Sno)

FROM SC

GROUP BY Cno;

(33)查询选修了3门以上课程的学生学号。

SELECT Sno

FROM SC

GROUP BY Sno

HAVING COUNT(*)>3;

(34)查询有3门以上课程是90分以上的学生的学号及(90分以上的)课程数。

SELECT Sno,COUNT(*)

FROM SC

WHERE Grade>=90

GROUP BY Sno

HAVING COUNT(*)>=3;

(35)查询学生20060711选修课程的总学分。

SELECT Sum(Ccredit)

FROM SC,Course

WHERE Sno='20060711'AND

https://www.wendangku.net/doc/915934349.html,o=https://www.wendangku.net/doc/915934349.html,o;

(36)查询每个学生选修课程的总学分。

SELECT Sum(Ccredit)

FROM SC,Course

WHERE https://www.wendangku.net/doc/915934349.html,o=https://www.wendangku.net/doc/915934349.html,o

GROUP BY Sno;

(37)查询每个学生及其选修课程的情况。

SELECT Student.*,SC.*

FROM Student,SC

WHERE Student.Sno=SC.Sno;

(38)查询每一门课的间接先修课(即先修课的先修课)。

SELECT https://www.wendangku.net/doc/915934349.html,o,SECOND.Cpno

FROM Course FIRST,Course SECOND

WHERE FIRST.Cpno=https://www.wendangku.net/doc/915934349.html,o;

(39)查询每个学生及其选修课程的情况包括没有选修课程的学生(用外连接)。

SELECT Student.*, SC.*

FROM Student join SC on Student.Sno = SC.Sno;

(40)查询选修2号课程且成绩在90分以上的所有学生的学号、姓名。

SELECT Student.Sno, Student.Sname

FROM Student, SC

WHERE Student.Sno=SC.Sno AND https://www.wendangku.net/doc/915934349.html,o='2'AND SC.Grade>90; (41)查询每个学生的学号、姓名、选修的课程名及成绩。

SELECT Student.Sno,Sname,Cname,Grade

FROM Student,SC,Course

WHERE Student.Sno=SC.Sno AND

https://www.wendangku.net/doc/915934349.html,o=https://www.wendangku.net/doc/915934349.html,o;

(42)查询与“刘晨”在同一个系学习的学生(分别用嵌套查询和连接查询)。嵌套查询:

SELECT Sno,Sname,Sdept

FROM Student

WHERE Sdept=

(SELECT Sdept

FROM Student

WHERE Sname='刘晨');

连接查询:

FROM Student S1,Student S2

WHERE S1.Sdept=S2.Sdept AND S2.Sname='刘晨';

(43)查询选修了课程名为“信息系统”的学生学号和姓名。

SELECT S1.Sno,S1.Sname,S1.Sdept

SELECT Sno,Sname

FROM Student

WHERE Sno IN

(SELECT Sno

FROM SC

WHERE Cno IN

(SELECT Cno

FROM Course

WHERE Cname='信息系统'));

(44)查询其他系中比信息系任意一个(其中某一个)学生年龄小的学生姓名和年龄。

SELECT Sname,Sage

FROM Student

WHERE Sage

(SELECT Sage

FROM Student

WHERE Sdept='IS')

AND Sdept<>'IS';

(45)查询其他系中比信息系所有学生年龄都小的学生姓名及年龄。分别用

ALL谓词和集函数。

ALL谓词:

SELECT Sname,Sage

FROM Student

WHERE Sage

FROM Student

WHERE Sdept='IS')

AND Sdept<>'IS';

集函数:

SELECT Sname,Sage

FROM Student

WHERE Sage<

(SELECT MIN(Sage)

FROM Student

WHERE Sdept='IS')

AND Sdept <>'IS';

(46)查询所有选修了1号课程的学生姓名。(分别用嵌套查询和连查询)

嵌套查询:

SELECT Sname

FROM Student

WHERE Sno IN

FROM SC

WHERE Cno='1');

连接查询:

SELECT Student.Sname

FROM Student,SC

WHERE Student.Sno=SC.Sno AND https://www.wendangku.net/doc/915934349.html,o='1';

(47)查询没有选修1号课程的学生姓名。

SELECT Sname

FROM Student

WHERE NOT EXISTS

(SELECT*

FROM SC

WHERE Sno=Student.Sno AND

Cno='1');

(48)查询选修了全部课程的学生姓名。

SELECT Sname

FROM Student

WHERE NOT EXISTS

(SELECT*

FROM Course

WHERE NOT EXISTS

(SELECT*

FROM SC

WHERE SC.Sno=Student.Sno AND

Cno=https://www.wendangku.net/doc/915934349.html,o));

(49)查询至少选修了学生95002选修的全部课程的学生号码。

SELECT DISTINCT Sno

FROM SC SCX

WHERE NOT EXISTS

(SELECT*

FROM SC SCY

WHERE SCY.Sno='95002'AND

NOT EXISTS

(SELECT*

FROM SC SCZ

WHERE SCZ.Sno=SCX.Sno AND

https://www.wendangku.net/doc/915934349.html,o=https://www.wendangku.net/doc/915934349.html,o))AND Sno<>'20060702';

或:

SELECT Sno

FROM Student

WHERE NOT EXISTS

FROM SC SCX

WHERE SCX.Sno='95002'AND

NOT EXISTS

(SELECT*

FROM SC SCY

WHERE SCY.Sno=Student.Sno AND

https://www.wendangku.net/doc/915934349.html,o=https://www.wendangku.net/doc/915934349.html,o))AND

Sno<>'95002';

(50)查询计算机科学系的学生及年龄不大于19岁的学生的信息。

SELECT*

FROM Student

WHERE Sdept='CS'

UNION

SELECT*

FROM Student

WHERE Sage<=19;

(51)查询选修了课程1或者选修了课程2的学生的信息。

SELECT Sno

FROM SC

WHERE Cno='1'

UNION

SELECT Sno

FROM SC

WHERE Cno='2';

(52)查询计算机科学系中年龄不大于19岁的学生的信息。

SELECT*

FROM Student

WHERE Sdept='CS'

INTERSECT

SELECT*

FROM Student

WHERE Sage<=19;

(53)查询既选修了课程1又选修了课程2的学生的信息。

SELECT Sno

FROM SC

WHERE Cno='1'

INTERSECT

SELECT Sno

FROM SC

WHERE Cno='2';

(54)查询计算机科学系的学生与年龄不大于19岁的学生的差集。

SELECT Sname

FROM Student

EXCEPT

SELECT Tname

FROM Teacher;

(四)针对SPJ数据库查询

1.查询为工程J1 供货的厂商号,并按厂商号升序。

SELECT SNO

FROM SPJ

WHERE JNO='J1'

ORDER BY SNO ASC;

2.查询供货量在300 - 500 之间的所有供货情况。

SELECT*

FROM SPJ

WHERE QTY BETWEEN 300 AND 500;

3.查询重量15 以下, Paris 生产的产品号和产品名。

SELECT P.PNO,PNAME

FROM S,P,SPJ

WHERE S.SNO=SPJ.SNO AND

SPJ.PNO=P.PNO AND

WEIGHT<15 AND

CITY='Paris';

4.查询高于Clark的状态的所有厂家号和厂家名。

SELECT SNO,SNAME

FROM S

WHERE STATUS>

(SELECT STATUS

FROM S

WHERE SNAME='Clark');

5.查询供应P1,P2两种产品的厂家名。

SELECT SNAME

FROM S, SPJ

WHERE S.SNO=SPJ.SNO AND

PNO='P1'

INTERSECT

SELECT SNAME

FROM S,SPJ

WHERE S.SNO=SPJ.SNO AND

PNO='P2';

6.查询由S1 提供产品的工程名。

SELECT DISTINCT JNAME

FROM J,SPJ

WHERE SPJ.JNO=J.JNO AND SNO='S1';

7.查询使用了颜色为Red 产品,在城市Athens的工程名。

SELECT JNAME

FROM J

WHERE CITY='Athens'AND

JNO IN

(SELECT JNO

FROM SPJ

WHERE PNO IN

(SELECT PNO

FROM P

WHERE COLOR='Red'));

8.求使用了全部零件的工程名。

SELECT JNAME

FROM J

WHERE NOT EXISTS

(SELECT*

FROM P

WHERE NOT EXISTS

(SELECT*

FROM SPJ

WHERE SPJ.JNO=J.JNO AND

SPJ.PNO=P.PNO));

9.查询未采用由London 供应者提供颜色为Red零件的工程名。

SELECT JNAME

FROM J

WHERE NOT EXISTS

(SELECT*

FROM S,P,SPJ

WHERE SPJ.SNO=S.SNO AND

SPJ.PNO=P.PNO AND

SPJ.JNO=J.JNO AND

CITY='London'AND

COLOR='Red');

10.查询全部由厂家S2 提供零件的工程名。

SELECT JNAME

FROM J

WHERE NOT EXISTS

(SELECT*

FROM S

WHERE SNO='S2'AND

NOT EXISTS

(SELECT*

FROM SPJ

WHERE SPJ.SNO=S.SNO AND

SPJ.JNO=J.JNO));

11.求供给London 的所有工程的零件名。

SELECT PNAME

FROM P

WHERE NOT EXISTS

(SELECT*

FROM J

WHERE CITY='London'AND

NOT EXISTS

(SELECT*

FROM SPJ

WHERE SPJ.JNO=J.JNO AND

SPJ.PNO=P.PNO));

12.查询由London的厂商供给London的工程的产品名。

SELECT PNAME

FROM S,P,J,SPJ

WHERE SPJ.SNO=S.SNO AND

SPJ.PNO=P.PNO AND

SPJ.JNO=J.JNO AND

S.CITY='London'AND

J.CITY='London';

13.查询由供应者S1 提供零件的工程项目总数。

SELECT COUNT(DISTINCT JNO)

FROM SPJ

WHERE SNO='S1';

14.查询由供应者S1 提供零件P1 的总量及总供应量。

SELECT COUNT(QTY),SUM(QTY)

FROM SPJ

WHERE SNO='S1'AND PNO='P1';

15.查询至少使用Nut 和Cam两种产品的工程号和工程名。

SELECT DISTINCT JNO,JNAME

FROM J

WHERE NOT EXISTS

(SELECT*

FROM P

WHERE(PNAME='Nut'OR

PNAME='Cam')AND

NOT EXISTS

(SELECT*

FROM SPJ

WHERE SPJ.PNO=P.PNO AND

SPJ.JNO=J.JNO)); 16.查询至少使用了S1 所提供的全部零件的工程名。

SELECT JNAME

FROM J

WHERE NOT EXISTS

(SELECT*

FROM S

WHERE SNO='S1'AND

NOT EXISTS

(SELECT*

FROM SPJ

WHERE SPJ.SNO=S.SNO AND

SPJ.JNO=J.JNO)); 17.查询不使用产品P2的工程号和工程名。

SELECT JNO,JNAME

FROM J

WHERE JNO NOT IN

(SELECT JNO

FROM SPJ,P

WHERE SPJ.PNO=P.PNO AND

P.PNO='P2');

18.查询不供应红色产品的厂家号和厂家名。

SELECT SNO,SNAME

FROM S

WHERE SNO NOT IN

(SELECT SNO

FROM P,SPJ

WHERE P.COLOR='Red'AND

SPJ.PNO=P.PNO AND

SPJ.SNO=S.SNO);

19.查询只使用厂家S1供应产品的工程号和工程名。

SELECT DISTINCT J.JNO,JNAME

FROM S,J,SPJ

WHERE SPJ.SNO=S.SNO AND

SPJ.JNO=J.JNO AND

S.SNO NOT IN

(SELECT SNO

FROM S

WHERE SNO!='S1');

20.查询只供应红色产品的厂家号和厂家名。

SELECT S.SNO,SNAME

FROM S,P,SPJ

WHERE SPJ.SNO=S.SNO AND

SPJ.PNO=P.PNO AND

COLOR NOT IN

(SELECT COLOR

FROM P

WHERE COLOR!='Red');

三、列出没有解决的问

1.删除Student表中对Sname属性创建的Unique约束。

怎样可以删除未建立名字的约束?

需要在图形界面下,查看系统默认的约束是如何命名的,然后再删除。

2.STATUS为什么会被系统自动变成蓝色,是不是因为STATUS为系统自动保留字符?

一般系统的保留字符是不能够作为表的名字或字段的名字的,可能是其他的原因。

SQL数据的定义实验报告

实验1、数据定义 班级:计自1101班姓名:陈德顺学号:201126100402 1、实验目的 熟悉SQL的数据定义语言,能够熟练地使用SQL语句来创建和更改基本表,创建和取消索引。 2、实验内容 ●用SSMS创建数据库University_Mis ●使用CREATE语句创建基本表。 ●更改基本表的定义: 增加列,删除列,修改列的数据类型。 ●创建表的升、降序索引。 ●删除基本表的约束、基本表的索引或基本表。 3、实验步骤 (1)用SSMS创建数据库University_Mis 通过菜单[Microsoft SQL Server]→[启动SSMS]。 利用SSMS工具新建数据库University_Mis 数据库名称:University_Mis 数据库相关参数设置:采用系统默认设置 (2)在SSMS中用SQL语句创建关系数据库基本表: ?学生表Students(Sno,Sname, Semail,Scredit,Sroom); ?教师表T eachers(Tno,Tname,T email,T salary);

?课程表Courses(Cno,Cname,Ccredit); ?成绩表Reports(Sno,Tno,Cno, Score); 其中:Sno、Tno、Cno分别是表Students、表Teachers、表Courses的主键,具有唯一性约束,Scredit具有约束“大于等于0”;Reports中的Sno,Tno,Cno是外键,它们共同组成Reports的主键。 (3)更改表Students:增加属性Ssex(类型是CHAR,长度为2),取消Scredit “大于等于0”约束。把表Courses中的属性Cname的数据类型改成长度为30。 (4)删除表Students的一个属性Sroom。 (5)删除表Reports。 (6)为Courses表创建按Cno降序排列的索引。 (7)为Students表创建按Sno升序排列的索引。 (8)创建表Students的按Sname升序排列的唯一性索引。 (9)删除Students表Sno的升序索引。 4、实验要求 实验之前请细细阅读实验总体要求与说明指导书,在SQL Server 2005或2008的SSMS环境中,完成以上实验(2)-(9)步所有SQL数据定义操作,并将操作窗口剪贴到实验报告中,按顺序标号,做必要的说明。 在实验步骤1完成之后,查看创建的数据库文件名及事务日志文件名,填入下表中。

SQL-数据定义语言

宁波工程学院 数据库理论与技术课程实验报告 学院:电信学院专业:计科年级:091 实验时间:11.4.2 组长:熊剑文学号:组_______ 姓名:林静冰学号:09401010108 组_______ 姓名:学号:组_______ 姓名:学号:组_______ 指导教师签字:成绩: 实验名称:SOL-数据定义语言 一、实验目的和要求 1、通过对SQL SERVER2005的使用,了解数据库管理系统的工作原理和系统构架,加深对数据库基本知识的理解。 2、通过实验加深对数据库对象模式、表、索引的理解,掌握SQL 中数据定义语言的基本功能。 二、实验内容和原理 1、了解SQL SERVER中服务的涵义,学会启动和停止服务。 2、掌握SOL Server Management Studio的启动方式和连接方法。了解对象资源管理器,SQL语句的编译运行过程。 3、在SQL Server Management Studio中创建数据库Library。Create Database Library

4、在模式Lib中创建三张表Books、Readers、L_R。 Books(bookid,classid,bookname,author,price,pubcompany,csl) 要求:在创建表的工程中为每张表设置主码。 5、AL TER TABLE语句练习。在已建好的三张表中,增加新的列、修改已有的列。 6、分别在Books、Readers、L_R表中创建索引。 三、实验过程及数据记录 CREA TE TABLE Books( bookid varchar(20) PRIMARY KEY, classid varchar(20) NOT NULL, bookname varchar(20) NOT NULL, author varchar(20) NOT NULL, price money NOT NULL, pubcompany varchar(50) NOT NULL, csl int NOT NULL ); CREA TE TABLE Readers( rno varchar(20) PRIMARY KEY, rname varchar(20) NOT NULL, rsex char(1) default('M') CHECK (rsex='M'OR rsex='F') NOT NULL, spet varchar(50) NOT NULL,

实验四SQL语言数据定义语言DDL(精)

实验四 SQL 语言数据定义语言 DDL 一、实验目的 SQL(Structured Query Language 语言是关系数据库的标准语言。是一种介于关系代数与关系演算之间的结构化查询语言,其功能并不仅仅是查询, SQL 语言是一个通用的、功能极强的关系数据库语言。 本次实验了解 SQL 语言中 DDL 语言的 CREATE 、 DROP 、 ALTER 对表、索引、视图的操作,掌握在 Navicat for MySQL 中用 DDL 语言进行对表、索引、视图的增加、删除和改动。掌握使用 SQL 语句增加或删除约束, 加深对完整性概念的理解, 达到灵活应用的目的。掌握使用 SQL 语句定义和删除同义词。 二、实验要求 1、实验前:预习实验内容,学习相关知识。 2、实验中:按照实验内容要求进行实验,实验时注意每种 SQL 语句的基本命令及各个关键字的含义,做好实验记录。 3、实验后:分析实验结果,总结实验知识,得出结论,按格式写出实验报告。 4、在整个实验过程中,要独立思考、独立按时完成实验任务,不懂的要虚心向教师或同学请教。 5、要求按指定格式书写实验报告,且报告中应反映出本对次实验的总结,下次实验前交实验报告。 三、实验的重点与难点 1、重点: (1用 SQL 语句定义表结构(创建、修改和删除。

(2用 SQL 语句定义索引(创建、删除。 (3用 SQL 语句定义视图(创建、删除。 (4用 SQL 语句定义同义词(创建、删除。 2、难点: 完整性约束的定义、增加及删除。 同义词的定义与删除。 四、仪器设备及用具 硬件:投影仪、每位同学分配已连接校园网 PC 机一台。 软件:本机已安装 MySQL 5.5数据库平台。 五、教学过程 (一实验预习 (1熟悉 SQL 中的 CREATE 、 DROP 、 ALTER 语句的格式及所用的关键字含义及用法。 (2掌握完整性约束定义、增加和删除的一般用法。 (3掌握同义词定义、删除的一般用法。 (二实验原理 在 Navicat for MySQL 中使用 CREATE 命令完成对表、索引、视图、同义词的创建,使用 DROP 命令完成对表、索引、视图、同义词的删除,使用 ALTER 命令对表结构进行修改及完整性约束的增加、删除。 (三实验内容

SQL-数据定义及查询)

《数据库原理》实验报告 姓名学号日期201.04.23 实验室A205 指导教师设备编号M10 实验题目实验单元二SQL 数据定义及查询 一、实验目的 1)熟悉SQL数据定义语言,能够熟练的用SQL语句创建数据库、基本表、索引。 2)熟悉SQL Server 2000中提供的数据类型和T-SQL数据定义语句CREATE的语法格式。 3)熟练的用SQL语句进行单表查询、多表连接查询、嵌套查询、集合查询。 二、实验内容 1)还原数据库student 2)向student表中增加备注列Comment,数据类型是字符型,固定长度50个字符,并且允许该列为空 3)把student中的备注列的数据类型改为变长字符型,长度255字符 4)使用SQL语句在SPJ数据库中创建S、P、J、SPJ四个关系模式。 5)按教材第二章习题(5)的数据,创建S、P、J、SPJ四个关系模式。 6)求供应工程J1零件的供应商号码SNO; 7)求供应工程J1零件P1的供应商号码SNO; 8)找出使用供应商S1所供应零件的工程号; 9)找出工程项目J2使用的各种零件的名称及其数量; 10)找出上海厂商供应的所有零件号码; 11)在D盘以自己名字建立文件夹,将SPJ数据库备份到该文件夹中。 三、实验要求 1)创建四个表时,首先要规划好字段类型及长度。 2)创建四个表时,要指定主码、外码及对其他字段设置约束。 3)实验报告中要求列出操作步骤以及创建表的SQL语句。 4)实验总结中写出实验中遇到的问题和解决方案以及实验的收获。 四、实验结果 2)alter table student add coment char(50);

SQL入门基础语法word版本

S Q L入门基础语法

SQL语句的概述 SQL语言的分类 数据定义语言(Data Definition Language)主要用于修改、创建和删除数据库对象,其中包括CREATE ALTER DROP语句。 数据查询语言(Data Query Language)主要用于查询数据库中的数据,其主要是SELECT语句,SELECT语句包括五个子句,分别是FROM WHERE HAVING GROUP BY 和WITH语句。 数据操作语言(Data Manipulation Language)主要用于更新数据库里数据表中的数据,包括INSERT UODATE DELETE语句。 数据控制语言(Data Control Language)主要用于授予和回收访问数据库的某种权限。包括GRANT REVOKE等语句。 事物控制语言,主要用于数据库对事物的控制,保证数据库中数据的一致性,包括COMMIT ROLLBACK语句。 常用的数据类型 MYSQL: 整型 浮点型

字符类型 SQL语句的书写规范 SQL语句中不区分关键字的大小写 SQL语句中不区分列名和对象名的大小写 SQL语句对数据库中数据的大小写敏感 SQL语句中使用--注释,当使用--注释时,--后面至少有--个空格,多行注释用/* */ 数据库的创建与删除 数据库的创建 CREATE DATABASE database_name; 在MYSQL COMMAND LINE CLIENT中书写SQL语句时,在SQL语句后面都要加上分号 数据库的删除 DROP DATABASE database_name; 数据表的创建与更新 数据库中的表 数据记录:在数据表中的每一行被称为数据记录 字段:数据表中的每一列被称为字段

SQL数据定义与数据查询

数据库上机报告 ——数据定义与数据查询 一、写明实验所采用的实验环境: 硬件环境:普通联网的PC机; 操作系统:Windows 2000或者Windows XP; 数据库管理系统:MS SQL Server 2005。 二、给出实验内容与完成情况: (一)使用命令行方式建立学生课程数据库 (1) 用SQL语言建立学生课程数据库,数据库命名:SC_学号后四位及姓名,如SC_3112liyan; CREATE DATABASE SC_1224cxj ON (NAME= SC_1224cxj_dat, FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\ SC_1224cxj_dat.mdf') LOG ON (NAME= SC_1224cxj_log, FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\ SC_1224_log.ldf'); (2) 用SQL语言在学生课程数据库中建立3个表,要求进行完整性定义: 学生关系Student(Sno,Sname,Ssex,Sage,Sdept)其中Sno不能为空,值是唯一的,并且Sname取值也唯一,Sage自定义约束“大于16” 课程关系Course(Cno,Cname,Cpno,Ccredit) 其中Cno不能为空,值是唯一的,并且Cname取值也唯一 教师关系Teacher(Tno,Tname,Department,Email,Salary) 其中Tno不能为空,值是唯一的 选修关系SC(Sno,Cno,Grade) 其中Sno和Cno不能为空,(Sno, Cno)为主码,

SQLServer集成环境、数据库的定义_图文(精)

SQL Server 集成环境、数据库的定义 一、 SQL Server 服务的启动与停止 使用 SQL Server 配置管理器来启动或停止服务。步骤:“开始”菜单→“所有程序”→ “Microsoft SQL Server 2005” →“配置工具”→“SQL Server Configuration Manager” , 启动后界面如图 1-1 图 1-1 二、 SQL Server 2005的一般使用 启动 SQL Server Management Studio 方法:“开始”菜单→“所有程 序”→“Microsoft SQL Server 2005” →单击“ SQL Server Management Studio ” ,出现如图

1-2 图 1-2点击连接,出现如图 1-3 图 1-3

在对象资源管理器中 ,展开某数据库,选中某表,在其上右击鼠标,在弹出的快捷菜单中单击“打开表”菜单,出现如图 1-4,在显示的表内容上可以完成表记录的添加、修改、删 除等维护功能,请同学们尝试操作。 图 1-4 打开表 car 后, 单击查询设计器工具条上的按钮, 表维护子窗体拆分成上下两部分, 如图 1-5,上部分显示打开表相应的 SELECT 查询命令,在这里可以输入并执行 其他 SQL 命令,并单击查询设计器工具条上的按钮来执行新命令。请同学们

尝试操作。 图 1-5 三、创建数据库 创建数据库可以通过在 Management Studio 中或是利用 CREATE DATABASE 语句来创建。 (1使用 Management Studio 创建数据库 在 Management Studio 的“对象资源管理器”中展开已连接数据库引擎的节点。在“对象资源管理器” 中, 在“数据库” 节点或某用户数据库节上右击, 在弹出的快捷菜单中, 选择“新建数据库”菜单项,会弹出如图 1-6所示的对话框。在右边常规页框中,要求用户确定数据库名称、所有者信息。在这里所有者为默认值。不需修改。

实验一SQL数据定义

实验一SQL数据定义 一、实验目的 1、了解SQL Server2008数据库管理系统启动;熟悉和使用SSMS的使用界面;理解数据库和表架构;加深表完整性的理解。 2、熟练掌握利用SQL建立数据库和表,掌握利用图形操作向数据库输入数据、修改数据和删除数据的操作。 3、熟悉SQL数据定义语言(DDL) 二、实验要求 1、在SQL SERVER中建立数据库(SQL命令实现),数据库名称为XSGL; 2、有关系模式S(SNO,SNAME,AGE,SEX, Sdept)、C(CNO,CNAME,Cpno, Ccredit)和SC(SNO,CNO,GRADE),设计基本表结构; 3、在XSGL数据库中,在默认模式DBO中,利用SQL命令创建各表; 4、输入多条实际数据(图形操作界面完成),并实现数据的增、删、改操作。 5、待输入的数据内容如下: S(学生)

C(课程) SC(选课) 三、实验步骤: 1、启动SQL Server2008:依次单击开始->所有程序->SQL Server 2008->SQL Server Management Studio 启动SQL Server 2008数据库管理系统;选择混合模式登录数据库服务器:登录名为sa登录。 2、在数据库管理系统中的SSMS中利用SQL语句(非图形操作界面)实现学生管理的数据库的创建,数据库名为XSGL。 (1)、创建数据库XSGL的SQL命令:

在新建查询窗口中,打开master数据库(use maser),执行如下SQL 命令。 CREATE DATABASE XSGL ON (NAME='XSGLData', FILENAME='C:\SQL\XSGLData.MDF', SIZE= 5, MAXSIZE= 10, FILEGROWTH= 1) LOG ON(NAME='XSGLLog', FILENAME='C:\sql\XSGLLog.LDF' ,SIZE= 2, MAXSIZE= 4, FILEGROWTH= 1) go (2)、执行结果: 3、学生管理数据库中(XSGL)包含学生信息,课程信息和选课信息。数据库XSGL包含下列3 个表: (l)、student:学生基本信息。 (2)、course:课程信息表。 (3)、sc:学生选课表。

相关文档