第六章 实验部分
(这一部分是考试重点)
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、索引的概念,类型,作用,创建方法?
标签:分数,学号,必知,视图,grade,-----,student,第六章,SELECT From: https://blog.51cto.com/u_15754851/5764394概念:是一个排序的列表,存储着索引值和这个值对应的物理地址
类型:聚集类,非聚集类
作用:加快查询的速率,加快表与表之间的连接
创建方法:
CREATE UNIQUE INDEX <索引名> ON grade(学号); CREATE INDEX <索引名> ON grade(学号);