数据库概论实验二 SQL语句使用

数据库概论实验二 SQL语句使用

使用create创建数据表语法

CREATE TABLE table_name(
 column_name column_type [not null],
 column_name column_type [not null],
 ...
 [constraint]
)

语法说明:

  • table_name:数据表名,在一个数据库中数据表名不能重复
  • column_name:表中的列名(字段名),一个表中的列名也是不能重复的
  • column_type:数据类型,设置当前列中允许存放的数据的数据类型
  • [not null]:设置该列插入数据时不能为空,如果不指定则默认表示该列允许为空
  • [constraint] :为表中的列设置约束(主键、外键、检查等)

实例:

学生表 tb_S(Snum, Sname, sex, birthday, dept)
课程表 tb_C(Cnum, Cname, Credit, Tnum)
选修表 tb_SC(Snum, Cnum, grade)
教师表 tb_T(Tnum, Tname, sex, birthday, dept, title)
  1. 学生表
字段名数据类型是否为空中文说明
Snumchar(5)not null学号
Snamevarchar(10)not null学生姓名
sexchar(2)not null学生性别
birthdaynumber(2)not null学生年龄
deptvarchar(20)not null系别
CREATE TABLE tb_S(
	Snum char(5) not null,
	Sname varchar(10) not null,
	sex char(2) not null,
	birthday number(2) not null,
	dept varchar(20) not null
);

在这里插入图片描述
2. 课程表

字段名数据类型是否为空中文说明
Cnumchar(2)not null课程号
Cnamevarchar(20)not null课程名
Creditnumber(1)not null学分
Tnumchar(5)not null教师号
CREATE TABLE tb_C(
	Cnum char(2) not null,
	Cname varchar(20) not null,
	Credit number(1) not null,
	Tnum char(5) not null
);

在这里插入图片描述

  1. 选修表
字段名数据类型是否为空中文说明
Snumchar(5)not null学号
Cnumchar(2)not null课程号
gradevarchar(3)null成绩
CREATE TABLE tb_SC(
	Snum char(5) not null,
	Cnum char(2) not null,
	grade varchar(3) null
);
ALTER TABLE tb_SC RENAME COLUMN Sname TO Snum;

在这里插入图片描述

  1. 教师表
字段名数据类型是否为空中文说明
Tnumchar(5)not null教师号
Tnamevarchar(10)not null教师姓名
sexchar(2)not null教师性别
birthdaynumber(2)not null教师年龄
deptvarchar(20)not null系别
titlevarchar(20)not null职位
CREATE TABLE tb_T(
	Tnum char(5) not null,
	Tname varchar(10) not null,
	sex char(2),
	birthday number(2),
	dept varchar(20) not null,
	title varchar(20) not null
);

在这里插入图片描述

实验

  1. 建立上述四个表
    在这里插入图片描述

创建以下学生信息

--学生表
97301, 刘三, M, 21, 99101
97302, 王利, W, 20, 99101
97303, 刘磊, M, 22, 99102
97304, 张二, W, 22, 99101
97305, 陈四, M, 21, 99102

使用SQL语句将信息依次插入到tb_S表中:

INSERT INTO tb_S
VALUES(
	'97301',
	'刘三',
	'M',
	'21',
	'99101'
);

创建以下课程信息

--课程表
C1, 高等数学, 5, T1
C2, 计算机网络, 3, T2
C3, 线性代数, 4, T1
C4, 数据库原理, 3, T3
C5, 程序设计, 3, T4

使用SQL语句将信息依次插入到tb_C表中:

INSERT INTO tb_C
VALUES(
	'C1',
	'高等数学',
	'5',
	'T1'
);

创建以下选课信息

97301, C1, 78
97301, C2, 82
97301, C3, 70
97301, C4, 58
97301, C5, 94
97302, C1, 66
97302, C2, 78
97302, C3, 60
97302, C4, NULL
97303, C1, 90
97303, C5, 88
97304, C1, 70
97304, C2, 74
97304, C4, 98

使用SQL语句将信息依次插入到tb_SC表中:

INSERT INTO tb_SC
VALUES(
	'97301',
	'C1',
	'78'
);

创建以下教师表

--教师表
T1, 李教, M, 50, 99101, 教授
T2, 陈四, W, 60, 99101, 教授
T3, 李华, M, 34, 99102, 讲师
T4, 刘丽, W, 44, 99102, 讲师

使用SQL语句将信息依次插入到tb_T表中:

INSERT INTO tb_T
VALUES(
	'T1',
	'李教',
	'M',
	'50',
	'99101',
	'教授'
);

:添加完数据库信息后,要执行commit;命令以提交修改。

  1. 查询每个学生的姓名和年龄,并按年龄降序排列
SELECT Sname, birthday 
FROM tb_S 
ORDER BY birthday DESC;

在这里插入图片描述

  1. 查询学生表中不姓‘王’的学生的情况
SELECT * FROM tb_S 
WHERE NOT Sname LIKE '王%';

在这里插入图片描述

  1. 查询选修了课程的学生姓名
SELECT DISTINCT Sname 
FROM tb_S, tb_SC 
WHERE tb_S.Snum=tb_SC.Snum;

在这里插入图片描述

  1. 查询所有有成绩的学生的学号、姓名、及课程名
SELECT tb_S.Snum, Sname, Cname 
FROM tb_S, tb_SC, tb_C 
WHERE tb_S.Snum=tb_SC.Snum 
AND tb_SC.Cnum=tb_C.Cnum 
AND tb_SC.grade>0;

在这里插入图片描述

  1. 查询所有女教师及其所上课程
SELECT Tname, Cname
FROM tb_T, tb_C
WHERE tb_T.Tnum=tb_C.Tnum
AND tb_T.sex='W';

在这里插入图片描述

  1. 查询职称为教授的教师人数
SELECT COUNT(Tnum)
FROM tb_T
WHERE title='教授';

在这里插入图片描述

  1. 查询与‘刘三’同一系的学生
SELECT Sname
FROM tb_S
WHERE dept
IN (
	SELECT dept 
	FROM tb_S 
	WHERE Sname='刘三'
	);

在这里插入图片描述

  1. 查询各个课程号及其相应的选课人数
SELECT DISTINCT Cnum, COUNT(Snum)
FROM tb_SC
GROUP BY Cnum
ORDER BY Cnum;

在这里插入图片描述

  1. 查询选修了‘数据库原理’的学生的姓名和成绩
SELECT Sname, grade
FROM tb_S, tb_SC, tb_C
WHERE tb_S.Snum=tb_SC.Snum
AND tb_SC.Cnum=tb_C.Cnum
AND Cname='数据库原理';

在这里插入图片描述

  1. 查询教师‘李教’所上的所有课程及其平均成绩
SELECT Cname, AVG(grade)
FROM tb_T, tb_SC, tb_C
WHERE tb_T.Tnum = tb_C.Tnum
AND tb_C.Cnum=tb_SC.Cnum
AND Tname='李教'
GROUP BY Cname;

在这里插入图片描述

  1. 查询学生姓名及所选修的课程名和成绩
SELECT Sname, Cname, grade
FROM tb_S, tb_C, tb_SC
WHERE tb_S.Snum=tb_SC.Snum
AND tb_SC.Cnum=tb_C.Cnum;

在这里插入图片描述

  1. 查询选修了3门及以上课程的学生姓名及平均成绩(不统计不及格课程),并按照平均成绩降序排列
SELECT Sname, AVG(grade)
FROM tb_S, tb_SC
WHERE tb_S.Snum=tb_SC.Snum
AND grade>=60
GROUP BY Sname
HAVING COUNT(Cnum)>=3
ORDER BY AVG(grade) DESC;

在这里插入图片描述

  1. 查询99101班中所有课程的成绩都在60分以上的学生姓名
SELECT DISTINCT Sname
FROM tb_S, tb_SC
WHERE tb_S.Snum NOT IN (
	SELECT tb_SC.Snum
	FROM tb_SC
	WHERE tb_S.Snum=tb_SC.Snum
	AND grade<60)
AND dept='99101';
  1. 查询每个学生已选修课程的门数及平均成绩
SELECT Sname, COUNT(Cnum), AVG(grade)
FROM tb_S, tb_SC
WHERE tb_S.Snum=tb_SC.Snum
GROUP BY Sname;

在这里插入图片描述

  1. 查询每门课程的选修人数、最高分、最低分及平均成绩
SELECT tb_SC.Cnum, Cname, COUNT(tb_SC.Snum), MAX(grade), MIN(grade), AVG(grade)
FROM tb_SC,tb_C
WHERE tb_C.Cnum=tb_SC.Cnum
GROUP BY tb_SC.Cnum, Cname
ORDER BY tb_SC.Cnum;

在这里插入图片描述

  1. 查询选修但没参加考试(缺成绩)的学生姓名、课程及学分
SELECT Sname, Cname, Credit
FROM tb_S, tb_C, tb_SC
WHERE tb_S.Snum=tb_SC.Snum
AND tb_SC.Cnum=tb_C.Cnum
AND grade IS NULL;

在这里插入图片描述

  1. 查询选修了所有课程的学生学号、姓名
SELECT Snum, Sname
FROM tb_S
WHERE NOT EXISTS(
	SELECT * 
	FROM tb_C
	WHERE NOT EXISTS(
		SELECT *
		FROM tb_SC
		WHERE tb_SC.Snum=tb_S.Snum
		AND tb_SC.Cnum = tb_C.Cnum
	)
);

在这里插入图片描述

  1. 将学生刘磊新选修的数据库原理插入选修课表中
INSERT INTO tb_SC
VALUES(
	(SELECT Snum FROM tb_S WHERE Sname='刘磊'),
	(SELECT Cnum FROM tb_C WHERE Cname='数据库原理'),
	NULL
);

在这里插入图片描述

  1. 对每一个系,求学生的平均年龄并把结果存入数据库中
CREATE TABLE tb_Age(
	dept VARCHAR(20) NOT NULL,
	age NUMBER(2) NULL
);
SELECT dept, AVG(birthday)
INTO tb_Age
FROM tb_S
GROUP BY dept;
);
GROUP BY dept
  1. 将学生王利选修的C3课程的成绩加10分
UPDATE tb_SC
SET grade=grade+10
WHERE Snum IN (
	SELECT Snum
	FROM tb_S
	WHERE Sname='王利'
)
AND Cnum='C3';

在这里插入图片描述

  1. 将‘数据库’的学分改成与‘高等数学’的学分相等
UPDATE tb_C
SET Credit=(
	SELECT Credit 
	FROM tb_C 
	WHERE Cname='高等数学'
)
WHERE Cname='数据库原理';

在这里插入图片描述

  1. 将学生97301删除
DELETE FROM tb_S
WHERE Snum='97301';

在这里插入图片描述

  1. 将学生王利选修的‘数据库’删除
DELETE FROM tb_SC
WHERE Snum IN (
	SELECT Snum 
	FROM tb_S 
	WHERE Sname='王利'
)
AND Cnum IN (
	SELECT Cnum 
	FROM tb_C 
	WHERE Cname='数据库原理'
);

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值