【数据库】期末必知必会-----第六章 实验部分

第六章 实验部分

(这一部分是考试重点)

1、SQL语言的组成、特点?

组成:

1)DDL(数据库定义语言:CREAT、DROP、ALTER)

2)DML(数据库操纵语言:INSERT、UPDATE、DELETE、SELECT)

3)DCL(数据库控制语言:GRANT、REVOKE)

特点:

综合统一、高度非过程化、面向集合、语言简洁、易学易会

2、写SQL数据定义语句(创建删除数据库、数据表、会修改表结构)?

//创建数据库
CREATE DATABASE D1;
//删除数据库
DROP DATABASE D1;
//创建表
CREATE TABLE student(
 学号 char(4) NOT NULL PRIMARY KEY,
 姓名 char(8) NOT NULL,
 性别 char(2),
 出生日期 date,
 家庭住址 varchar(50)
);
//删除表
DROP TABLE student;

//修改表结构
ALTER TABLE grade 
ADD CONSTRAINT fk1 FOREIGN KEY(学号) REFERENCES student(学号);

ALTER TABLE grade 
ADD CONSTRAINT fk2 FOREIGN KEY(课程编号) REFERENCES curriculum(课程编号);

ALTER TABLE student
ADD 备注 varchar(50);
.......

3、写SQL查询(基本查询、条件怎么写;嵌套查询、连接查询、集合查询;order by、 group by,聚集函数都要会)?

//基本查询
SELECT 学号,姓名,出生日期 FROM student;
SELECT 姓名,家庭住址 FROM student WHERE 学号='0002';
SELECT 姓名,出生日期 FROM student
WHERE 出生日期>='2001-01-01' and 性别='女';

//条件查询
SELECT * FROM grade WHERE 分数 BETWEEN 70 AND 80;
SELECT AVG(分数) 平均分 FROM grade WHERE 课程编号='0002';
SELECT COUNT(*) 选课人数,COUNT(分数) 有成绩人数 FROM grade WHERE 课程编号
='0003';
SELECT 姓名,出生日期 FROM student WHERE 家庭住址 LIKE '杭州%'ORDER BY 出生
日期 DESC;
SELECT 学号,姓名 FROM student WHERE 姓名 LIKE '张%'

//嵌套查询
(
1)
SELECT 姓名,出生日期 FROM student
WHERE 性别=(SELECT 性别 FROM student WHERE 姓名='刘东阳');
(
2)
SELECT 学号,姓名,性别 FROM student
WHERE 学号 IN(SELECT 学号 FROM grade
WHERE 课程编号 IN ('0002','0005'));
(
3)
SELECT 课程编号,分数 FROM grade
WHERE 学号='0001' and 分数>ANY(SELECT 分数 FROM grade
WHERE 学号='0002');
(
4)
SELECT 课程编号,分数 FROM grade
WHERE 学号='0001' and 分数>ALL(SELECT 分数 FROM grade
WHERE 学号='0002');

//连接查询

(
1)SELECT s.学号,姓名,分数 FROM student s,grade g
WHERE s.学号=g.学号 and 分数 BETWEEN 80 AND 90;
(
2)
SELECT s.学号,姓名,分数 FROM student s INNER JOIN grade g
ON s.学号=g.学号 INNER JOIN curriculum c ON g.课程编号=c.课程编号
WHERE 课程名称='数据库原理及应用';
或
SELECT s.学号,姓名,分数 FROM student s , grade g,curriculum c
WHERE s.学号=g.学号 and g.课程编号=c.课程编号
and 课程名称='数据库原理及应用';
(
3)
SELECT s.学号,姓名,MAX(分数) 最高成绩
FROM student s,grade g
WHERE s.学号=g.学号
GROUP BY s.学号;
(
4)
SELECT s.学号,姓名,SUM(分数) 总成绩
FROM student s LEFT OUTER JOIN grade g ON s.学号=g.学号
GROUP BY s.学号;
注:outer 可以不写。
(
5)
insert into curriculum values('0006', 'Python', 3);
INSERT INTO grade VALUES('0004','0006',76);
SELECT g.课程编号,课程名称,count(学号) 选修人数
FROM grade g RIGHT OUTER JOIN curriculum c ON g.课程编号=c.课程编号
GROUP BY g.课程编号; 

4、要会写SQL数据更新语句(插入、修改、删除)?

//插入
INSERT INTO grade VALUES('0001','0001',80);
INSERT INTO grade VALUES('0001','0002',91);

//删除
DELETE FROM stu WHERE 学号='0004';

//修改
UPDATE stu SET 家庭住址='滨江市新建路 96 号' WHERE 学号='0002';

5、视图的概念,表和视图的区别?

概念:虚表,从一个或几个表中导出的表

区别:

1)视图是编译好的SQL语句

2)表有物理结构,视图无

3)表属于内模式,视图属于外模式

4)表是内容,试图是窗口

5)删除和创建视图不会影响表

6、创建、删除视图的语句?

//创建
CREATE VIEW <视图名>;

//删除
DROP VIEW <视图名>;

7、视图的作用?

1)提高了重用性,视图就像一个函数。
2) 对数据库重构,却不影响程序的运行。
3) 提高了安全性能。可以对不同的用户,设定不同的视图。
4) 让数据更加清晰。想要什么样的数据,就创建什么样的视图。

8、NULL的含义,用法?

含义:不知道、不存在、无意义

用法:

1)赋值,给某一个变量赋NULL值

2)判断,判断某一个变量是否为NULL

9、索引的概念,类型,作用,创建方法?

概念:是一个排序的列表,存储着索引值和这个值对应的物理地址

类型:聚集类,非聚集类

作用:加快查询的速率,加快表与表之间的连接

创建方法:

CREATE UNIQUE INDEX <索引名> ON grade(学号);

CREATE INDEX <索引名> ON grade(学号);

猜你喜欢

转载自blog.csdn.net/m0_55858611/article/details/125693948