数据库大题答案
目录
有一个关于商品供应及顾客订单的数据库
有一个涉及商品供应与顾客订单的数据库。它包括四个表: 供应表apply(id, name, sid, price) 说明:id 代表供应厂家编号;name 表示供应厂家名称;sid 代表商品编号;price 表示商品价格。 顾客表customers(gid, name, address, balance) 说明:gid 是顾客编号;name 是地址;balance 是余额。 订单表orders(sid, gid, date) 说明:sid 是商品编号;gid 是顾客编号;date 是订单日期。 商品表goods(sid, name, count) 说明:sid 是商品编号;name 是商品名称;count 是商品数量 编写完成以下操作所需的SQL语句
1)查询出2008-8-8这一天顾客的订单信息,要求包括顾客姓名、商品名称及订单日期.
2)将商品表中商品编号为'204'的商品名称更改为百事可乐
3)将顾客表上余额不足1000元的,将其订单日期延后10天
- 查询并清空订单表中商品编号为102的所有记录 5)移除商品表中包含未被顾客下单的商品信息
答案:
1.
**从 顾客名称、商品名称和订单日期中选择记录;由 订单编号、顾客编号和订单日期构成;满足 订单编号为 '2008-8-8' 的所有记录
顾客表.gid=订单表.gid AND 订单表.sid=商品表.sid;
2.
UPDATE 商品表 SET name="百事可乐" WHERE sid=204;
3.
UPDATE 顾客表 SET DATE=DATE_ADD(NOW(),INTERVAL 10 DAY)
WHERE gid=(SELECT gid FROM 顾客表 WHERE balance <100);
4.
DELETE FROM 订单表 WHERE sid=102;
5.
delete from goods where 'goods.sid' not in (select from 'orders');
已知进销存数据库Jxcxt包含如下数据表: 1)商品表:商品id(自增1), 商品名称, 单位, 单价, 商品状态 2)库存表:库存id(自增1), 商品id, 库存数量 请完成如下操作的SQL语句,表名和列名必须和上面的一致:
1、创建以上两个表的SQL语句;
在商品表上建立一个触发器(名称自定义),使得当删除商品时自动地从库存表中删除相应的记录。
答案:
1.
create table商品表(
商品id int not null auto_increment,
商品名称varchar(255),
单位varchar(10),
单价int,
商品状态varchar(10),
primarykey(商品id))charsetutf8;
create table库存表(
库存id int not null auto_increment,
商品id int,
库存数量int,
foreign key(商品id)references商品表(商品id),
primary key(库存id, 商品id))charsetutf8;
2.
创建一个名为'触发器名'的触发器,在删除操作发生时,在‘商品表’上执行,并在每一条记录处理后从‘库存表’中删除对应的条目;该触发器适用于‘商品表’中的所有记录并基于‘商品id’进行匹配。
已知选课管理系统Xkglxt包含了如下的数据表:
(1)学生表包括学号、姓名、专业、年级等信息。
(2)课程表记录了课程名称及其对应的学分数。
(3)选课表存储了选课关系及对应的成绩。
请根据以下要求编写相应的SQL语句:
1、创建以上三个表的SQL语句;
2、创建视图 V_选课,其中包含这些字段: 选课id, 学号, 姓名, 课程名, 成绩;
3、查询张三的数据开发技术课程的成绩。
(1) CREATE TABLE学生表(
学生id INT,
学号INT,
姓名VARCHAR(50),
专业VARCHAR(50),
年级VARCHAR(50),
姓名拼音缩写VARCHAR(50));
CREATE TABLE课程表(
课程id INT,
课程名称 VARCHAR(50),
学分DECIMAL(10,2));
CREATE TABLE选课表(
选课id INT,
学生id INT,
课程id VARCHAR(50),
成绩DECIMAL(10,2));
(2) CREATE VIEW V_选课 AS
SELECT选课id,学号,姓名,课程名称,成绩
FROM选课表,学生表,选课表
WHERE选课表.学生id=学生表.学生id AND选课表.课程id=课程表.课程id);
(3)SELECT 成绩 FROM V_选课 WHERE 姓名=张三AND课程名称=’数据库开发技术’;
4. 已知选课管理系统Xkglxt包含如下数据表: 1)学生表: 学生id, 学号, 姓名, 专业, 年级, 姓名拼音缩写 2)课程表: 课程id, 课程名称, 学分 3)选课表: 选课id, 学生id, 课程id, 成绩 系统已建有getstrpy(p_name VARCHAR(100))用户自定义函数。 请完成如下操作的SQL语句,表名和列名必须和上面的一致: 1、创建以上三个表的SQL语句; 2、创建一个存储过程(名字自定),实现学生表的插入,姓名拼音缩写需要调用getstrpy函数实现。
答案:
1.见上面一题的表
已知选课管理系统Xkglxt包含了所需的数据表以及自定义函数(这些函数已经预先定义完毕并可以直接调用):其中数据表包括学生表(该表格由学号字段、姓名字段、专业字段以及年级字段组成);此外还包括一个用于拼音缩写的自定义函数。请根据上述结构编写相应的SQL语句,在编写过程中应确保所引用的表名与列名与原文一致。
1、创建选课管理系统数据库以及学生表的SQL语句;
在学生表上建立一个triggers(名称自定义),当新增的学生时自动处理姓名拼音缩写。
答案:
1.见上面一题
2.
DELIMITER$$
CREATE TRIGGER t1
AFTER INSERT ON学生表 FOR EACH ROW
BEGIN
DECLARE sx VARCHAR(10)DEFAULT '';
SET sx=(pysx(new.姓名));
UPDATE 学生表 SET 姓名拼音缩写=sx WHERE 学生id=new.学生id;
END$$
5. 已知的产品销售数据库cpxs包含了以下数据表:
1)第一类产品:产品编号、产品名称、价格、库存量。
2)第二类产品:客户编号、客户名称、地区、负责人、电话。
3)第三类产品:销售日期、产品编号、客户编号、数量与销售额。
请编写完成以下操作所需的SQL语句:
1.写出产品表的建表语句
2.向产品表中插入如下记录: 0001 空调 3000 200 0002 冰箱 2500 300
3.将产品表中每种商品价格打八折后进行显示
4.搜索价格区间为2000至2900的产品名称。 5.为产品销售表建立对应的视图bxcp以存储冰箱相关数据
答案:
1.
create table产品表
(产品编号varchar(10)primary key,
产品名称varchar(255),
价格int,
库存量int)charsetutf8;
create table产品销售表(
销售日期date,
产品编号varchar(10),
客户编号varchar(10),
数量int,
销售额int,
foreign key(产品编号) references产品表(产品编号))charsetutf8;
2.
insert into产品表values(’0001’,’空调’,3000,200);
insert into产品表values(’0002’,’冰箱’,2500,300);
3.
update产品表set价格=价格*0.8;
select * from产品表;
4.
select产品名称from产品表where价格between 2000 and 2900;
5.
create a view named bxcp by selecting product lines from the products table along with the sale periods from the sales record and the quantity from the inventory data
from产品表,产品销售表
where产品表.产品编号=产品销售表.产品编号and产品表.产品名称=’冰箱’;
已知进销存系统中的数据库Jxcxt存储了以下数据表:
- 商品信息表: 包含商品ID字段、商品名称字段、单位字段、单价字段以及商品状态字段的数据。
- 存储信息表: 记录了库存ID字段、与商品ID相关的字段以及库存数量字段的信息。
请编写以下操作对应的SQL语句,并确保所有涉及的表名和列名与上述一致。
1、创建以上两个表的SQL语句;
编写一个存储过程(名称由自行定义),用于检查当前商品名称是否已存在,并实现商品表的插入。
答案:
1.create table商品表(
商品id int not null auto_increment,
商品名称varchar(255),
单位varchar(10),
单价int,
商品状态varchar(10),
primarykey(商品id))charsetutf8;
create table库存表(
库存id int not null auto_increment,
商品id int,
库存数量int,
foreign key(商品id) references 商品表 (商品id),
primary key(库存id, 商品id))charsetutf8;
DELIMITER
CREATE PROCEDURE `存储过程名`(商品id_in int, 商品名称_in varchar(255), 单位_in varchar(10), 单价_in int, 商品状态_in varchar(10)) BEGIN IF NOT EXISTS( SELECT * FROM `商品表` WHERE 商品名称=商品名称_in ) THEN INSERT INTO `商品表` VALUES(商品id,商品名称,单位,单价,商品状态); ELSEIF EXISTS (SELECT * FROM `商品表` WHERE 商品名称=商品名称_in) THEN SELECT '商品已存在'; END IF; END
DELIMITER ;
7.已知选课管理系统Xkglxt包含如下数据表: 1)学生表: 学生id, 学号, 姓名, 专业, 年级, 姓名拼音缩写 2)课程表: 课程id, 课程名称, 学分 3)选课表: 选课id, 学生id, 课程id, 成绩 请完成如下操作的SQL语句,表名和列名必须和上面的一致:
1、创建以上三个表的SQL语句;
请根据需求设计并命名为任意名称的存储过程,请具体操作时负责完成学分表的录入工作,并在录入阶段验证现有课程编号与学生学号的有效性
答案:
1.见第三题
DELIMITER
创建一个过程用于记录学生的选课信息。(注册学号 学号 课程代码 成绩 ) BEGIN 当用于判断是否存在同时满足以下两个条件的学生及其对应的课程记录时 INSERT INTO 选课表 VALUES(选课id_in,学生id_in,课程id_in,成绩_in); 否则从学生表和课程表中选取全部记录 WHERE 学生ID等于学生ID_在 AND 课程ID等于课程ID_在 SELECT '不存在学生id或课程id'; END IF; END
涉及商品供应与顾客订单管理的数据库。该系统包含四个表格用于存储相关信息。其中:
- 应用信息存储在apply表中(字段包括id代表供应厂家编号, name记录了供应厂家名称, Sid对应的商品编码, price表示商品价格)。其中:
- customers表用于记录顾客信息 (包含gid代表顾客编号, address记录地址信息, balance表示顾客账户余额)。其中:
- orders表用于管理订单情况 ( Sid对应的是订单中的具体商品编码, gid代表顾客编号)。其中:
- goods表详细存储每种商品的信息 ( Sid对应的商品编码, name记录商品名称, count表示库存数量)。其中:
- orders表中的 Sid字段对应的是订单中的具体商品编码
1)从供应表中查询全体供应厂商的基本信息
Retrieve the apply ID (via http://apply.id/).
Retrieve the apply name (via http://apply.name/).
Access the goods name (via http://goods.name/).
The quantity of goods.
Obtain the price of the apply.
FROM apply,goods
WHERE apply.sid=goods.sid;
2)从顾客表中查询地址在"长春"的顾客的顾客编号、顾客姓名及余额.
SELECT gid,name,balance
FROM customers
WHERE address='长春';
在商品表中检索出所有以"可乐"二字为后缀的商品名称与数量信息,并对结果按照商品数量降序排列
SELECT name,count
FROM goods
WHERE name LIKE '%可乐' ORDERBY count DESC;
4)从订单表中查询购买商品编号为"101"商品的顾客编号及订单日期.
SELECT gid,date FROM orders WHERE sid=101;
5)向商品表中追加一条纪录(204,可口可乐,900)
INSERT INTO goods VALUES(204, '可口可乐' ,900);
6)从商品表中查询最多商品数量、最少商品数量及商品总数量的记录信息
SELECT MAX(count),MIN(count),SUM(count)
FROM goods;
1、创建选课管理系统数据库以及学生表的SQL语句;
为学生表建立一个触发器名称自定义,在修改学生表的姓名时会自动执行对姓名拼音缩写的转换逻辑。
答案:
1.CREATE DATABASE xkglxt;
CREATE TABLE 学生表(
学生idINT,
学号INT,
姓名VARCHAR(50),
专业VARCHAR(50),`
年级VARCHAR(50),
姓名拼音缩写`VARCHAR(50));
2.DELIMITER$$
CREATE TRIGGER auto_add_pyjx
BEFORE UPDATE ON 学生表 FOR EACH ROW
BEGIN
SET new.姓名拼音缩写=(SELECT 'ssss');
END$$
已知选课管理系统Xkglxt由以下数据表构成:1)学生表: 学生ID, 学号, 姓名, 专业, 年级; 2)课程表: 课程ID, 课程名称, 学分; 3)选课表: 选课ID, 学生ID, 课程ID, 成绩。请根据以下要求编写相应的SQL语句:第一部分为创建这三个表的语句(要求与前面一致);第二部分为在课程表上设计一个自定义名为...的触发器(该触发器的功能为:每当删除课程信息时会自动地删除该课程所对应的选课记录)。
答案:
1.见上面3
2.DELIMITER$$
CREATE TRIGGER mytrigger
AFTER DELETE ON 课程表 FOR EACH ROW
BEGIN
DELETE FROM 选课表 WHERE 选课表.课程id=old.课程id;
END$$
