数据库概述02

(第一题)

有一个关于商品供应及顾客订单的数据库。其中包括四个表,表中信息如下:

供应表apply(id、name、sid、price) 说明:id 供应厂家编号,name 供应厂家名称,sid 商品编号,price 商品价格。

顾客表customers(gid、name、address、balance) 说明:gid 顾客编号,name顾客名称,    address 地址,balance 余额。

订单表orders(sid、gid、date) 说明:sid 商品编号,gid 顾客编号,date 订单日期。

商品表goods(sid、name、count) 说明:sid 商品编号,name 商品名称,count 商品数量

写出SQL完成如下操作的SQL语句:

1)查询出2008-8-8这一天顾客的订单信息,要求包括顾客姓名、商品名称及订单日期.

SELECT customers.name, goods.name,date
FROM customers,goods,orders
WHERE date = '2008-8-8' and customers.gid=orders.gid and orders.sid=goods.sid;

2)将商品表中商品编号为'204'的商品名称更改为百事可乐

update goods

set name='百事可乐'

where sid='204';

3)将顾客表上余额不足1000元的,将其订单日期延后10天

update orders

set date=DATE_ADD(date, INTERVAL 10 DAY)

where gid in(

    select gid

    from customers

    where orders.gid=customers.gid and balance<1000);

4) 删除订单表中商品编号为102的订单记录

delete 

from orders

where sid='102';

5)将商品表中没有顾客订购的商品信息删除

delete

from goods

where goods.sid not in(

    select sid

    from orders

    where orders.sid=goods.sid);

(第二题)

已知进销存数据库Jxcxt包含如下数据表:

1)商品表:商品id(自增1), 商品名称, 单位, 单价, 商品状态

2)库存表:库存id(自增1), 商品id, 库存数量  请完成如下操作的SQL语句,表名和列名必须和上面的一致

1、创建以上两个表的SQL语句;

CREATE DATABASE jxcxt CHARSET utf8;
USE jxcxt;

CREATE TABLE IF NOT EXISTS goods (
  id INT AUTO_INCREMENT PRIMARY KEY,
  NAME VARCHAR(50) NOT NULL,
  unit VARCHAR(10) NOT NULL,
  price DECIMAL(8,2) NOT NULL,
  STATUS VARCHAR(20) DEFAULT '在售'
);

-- 库存表
CREATE TABLE IF NOT EXISTS stock(
  id INT AUTO_INCREMENT PRIMARY KEY,
  goods_id INT NOT NULL,
  quantity INT NOT NULL,
  FOREIGN KEY (goods_id) REFERENCES goods(id)
);

2、在商品表上创建一个触发器(名字自定),当删除商品时自动删除该商品在库存表中的记录。

DELIMITER $$
CREATE TRIGGER `delete_goods` BEFORE DELETE ON `goods` FOR EACH ROW
BEGIN
  DELETE FROM stock WHERE goods_id = OLD.id;
END ;;

第三题

已知选课管理系统Xkglxt包含如下数据表:

1)学生表: 学生id, 学号, 姓名, 专业, 年级, 姓名拼音缩写

2)课程表: 课程id, 课程名称, 学分  

3)选课表: 选课id, 学生id, 课程id, 成绩 

请完成如下操作的SQL语句,表名和列名必须和上面的一致:

1、创建以上三个表的SQL语句;

-- 学生表
CREATE TABLE 学生表 (
  学生id INT PRIMARY KEY AUTO_INCREMENT,
  学号 VARCHAR(20) NOT NULL,
  姓名 VARCHAR(20) NOT NULL,
  专业 VARCHAR(20) NOT NULL,
  年级 INT NOT NULL,
  姓名拼音缩写 VARCHAR(50) NOT NULL
);

-- 课程表
CREATE TABLE 课程表 (
  课程id INT PRIMARY KEY AUTO_INCREMENT,
  课程名称 VARCHAR(20) NOT NULL,
  学分 INT NOT NULL
);

-- 选课表
CREATE TABLE 选课表 (
  选课id INT PRIMARY KEY AUTO_INCREMENT,
  学生id INT NOT NULL,
  课程id INT NOT NULL,
  成绩 INT,
  FOREIGN KEY (学生id) REFERENCES 学生表(学生id),
  FOREIGN KEY (课程id) REFERENCES 课程表(课程id)
);

2、创建视图 V_选课,其中包含这些字段: 选课id, 学号, 姓名, 课程名, 成绩;

CREATE VIEW V_选课 AS
SELECT 选课表.选课id, 学生表.学号, 学生表.姓名, 课程表.课程名称, 选课表.成绩
FROM 选课表
INNER JOIN 学生表 ON 选课表.学生id = 学生表.学生id
INNER JOIN 课程表 ON 选课表.课程id = 课程表.课程id;

3、查询张三的数据开发技术课程的成绩;

SELECT 成绩
FROM V_选课
WHERE 姓名 = '张三' AND 课程名称 = '数据开发技术';

(第四题)

已知选课管理系统Xkglxt包含如下数据表:

1)学生表: 学生id, 学号, 姓名, 专业, 年级, 姓名拼音缩写

2)课程表: 课程id, 课程名称, 学分  

3)选课表: 选课id, 学生id, 课程id, 成绩 系统已建有getstrpy(p_name VARCHAR(100))用户自定义函数。 

请完成如下操作的SQL语句,表名和列名必须和上面的一致:

1、创建以上三个表的SQL语句;

CREATE TABLE 学生表 (
  学生id INT PRIMARY KEY AUTO_INCREMENT,
  学号 VARCHAR(20),
  姓名 VARCHAR(20),
  专业 VARCHAR(50),
  年级 VARCHAR(20),
  姓名拼音缩写 VARCHAR(100)
);
CREATE TABLE 课程表 (
  课程id INT PRIMARY KEY AUTO_INCREMENT,
  课程名称 VARCHAR(50),
  学分 INT
);
CREATE TABLE 选课表 (
  选课id INT PRIMARY KEY AUTO_INCREMENT,
  学生id INT,
  课程id INT,
  成绩 INT,
  FOREIGN KEY (学生id) REFERENCES 学生表(学生id),
  FOREIGN KEY (课程id) REFERENCES 课程表(课程id)
);

2、创建一个存储过程(名字自定),实现学生表的插入,姓名拼音缩写需要调用getstrpy函数实现。

DELIMITER;;
CREATE PROCEDURE insert_student (
  in_no VARCHAR(20),
  in_name VARCHAR(20),
  in_major VARCHAR(50),
  in_grade VARCHAR(20)
)
BEGIN
  DECLARE py_name VARCHAR(100);
  SET py_name = getstrpy(in_name);
  INSERT INTO 学生表 (学号, 姓名, 专业, 年级, 姓名拼音缩写) 
  VALUES (in_no, in_name, in_major, in_grade, py_name);
END;;

(第五题)

已知选课管理系统Xkglxt包含如下数据表和自定义函数(函数已定义好可直接使用):

1)学生表: 学生id, 学号, 姓名, 专业, 年级, 姓名拼音缩写

2)自定义函数拼音缩写查询: pysx('中文字符串') 返回该中文字符串的拼音缩写  

请完成如下操作的SQL语句,表名和列名必须和上面的一致:

 1、创建选课管理系统数据库以及学生表的SQL语句;

-- 创建选课管理系统数据库
CREATE DATABASE IF NOT EXISTS Xkglxt;
USE Xkglxt;

-- 创建学生表
CREATE TABLE IF NOT EXISTS 学生表 (
  学生id INT PRIMARY KEY AUTO_INCREMENT,
  学号 VARCHAR(20) NOT NULL,
  姓名 VARCHAR(20) NOT NULL,
  专业 VARCHAR(50) NOT NULL,
  年级 VARCHAR(10) NOT NULL,
  姓名拼音缩写 VARCHAR(50) NOT NULL
);

 2、在学生表上创建一个触发器(名字自定),当新增学生时自动处理姓名拼音缩写。

-- 创建触发器
DELIMITER;;
CREATE TRIGGER trg_update_pysx 
BEFORE INSERT ON 学生表 
FOR EACH ROW 
SET NEW.姓名拼音缩写 = pysx(NEW.姓名);

(第六题)

已知产品销售数据库cpxs包含如下数据表:

1)产品表:产品编号,产品名称,价格,库存量。

2)销售商表:客户编号,客户名称,地区,负责人,电话。

3)产品销售表:销售日期,产品编号,客户编号,数量,销售额。

写出SQL完成如下操作的SQL语句:

1.写出产品表的建表语句

CREATE TABLE 产品表 (
    产品编号 VARCHAR(10) PRIMARY KEY,
    产品名称 VARCHAR(100),
    价格 DECIMAL(10, 2),
    库存量 INT
);

2.向产品表中插入如下记录: 0001  空调  3000  200 0002  冰箱  2500  300

INSERT INTO 产品表 (产品编号, 产品名称, 价格, 库存量) VALUES ('0001', '空调', 3000, 200);
INSERT INTO 产品表 (产品编号, 产品名称, 价格, 库存量) VALUES ('0002', '冰箱', 2500, 300);

3.将产品表中每种商品价格打八折后进行显示

SELECT 产品编号, 产品名称, 价格*0.8 AS 折后价格, 库存量 FROM 产品表;

4.查找价格在2000到2900之间的产品名称

SELECT 产品名称 FROM 产品表 WHERE 价格 BETWEEN 2000 AND 2900;

5.在产品销售表上创建“冰箱”产品表的视图bxcp

CREATE VIEW bxcp AS
SELECT *
FROM 产品销售表
WHERE 产品编号 = '0002';

(第七题)

已知进销存数据库Jxcxt包含如下数据表:

1)商品表:商品id, 商品名称, 单位, 单价, 商品状态

2)库存表:库存id, 商品id, 库存数量  请完成如下操作的SQL语句,表名和列名必须和上面的一致

1、创建以上两个表的SQL语句;

-- 创建商品表
CREATE TABLE 商品表 (
  商品id INT PRIMARY KEY,
  商品名称 VARCHAR(50) NOT NULL,
  单位 VARCHAR(20) NOT NULL,
  单价 DECIMAL(10, 2) NOT NULL,
  商品状态 VARCHAR(20) NOT NULL
);

-- 创建库存表
CREATE TABLE 库存表 (
  库存id INT PRIMARY KEY,
  商品id INT NOT NULL,
  库存数量 INT NOT NULL,
  FOREIGN KEY (商品id) REFERENCES 商品表(商品id)
);

2、创建一个存储过程(名字自定),实现商品表的的插入,需要判断当前商品名称是否存在。

-- 创建存储过程

delimiter;;
CREATE PROCEDURE insert_goods(IN goods_id INT, IN goods_name VARCHAR(50), IN unit VARCHAR(20), IN price DECIMAL(10, 2), IN status VARCHAR(20))
BEGIN
  DECLARE exists_count INT;
  SELECT COUNT(*) INTO exists_count FROM 商品表 WHERE 商品名称 = goods_name;
  IF exists_count > 0 THEN
    SELECT '商品名称已存在,插入失败';
  ELSE
    INSERT INTO 商品表 (商品id, 商品名称, 单位, 单价, 商品状态) VALUES (goods_id, goods_name, unit, price, status);
    SELECT '商品插入成功';
  END IF;
END;;

(第八题)

已知选课管理系统Xkglxt包含如下数据表:

1)学生表: 学生id, 学号, 姓名, 专业, 年级, 姓名拼音缩写

2)课程表: 课程id, 课程名称, 学分  

3)选课表: 选课id, 学生id, 课程id, 成绩 

请完成如下操作的SQL语句,表名和列名必须和上面的一致:

1、创建以上三个表的SQL语句;

-- 学生表
CREATE TABLE 学生表 (
    学生id INT PRIMARY KEY,
    学号 VARCHAR(20) UNIQUE,
    姓名 VARCHAR(20),
    专业 VARCHAR(20),
    年级 VARCHAR(20),
    姓名拼音缩写 VARCHAR(50)
);

-- 课程表
CREATE TABLE 课程表 (
    课程id INT PRIMARY KEY,
    课程名称 VARCHAR(50),
    学分 FLOAT
);

-- 选课表
CREATE TABLE 选课表 (
    选课id INT PRIMARY KEY,
    学生id INT,
    课程id INT,
    成绩 FLOAT,
    FOREIGN KEY (学生id) REFERENCES 学生表(学生id),
    FOREIGN KEY (课程id) REFERENCES 课程表(课程id)
);

2、创建一个存储过程(名字自定),实现选课表的插入,需要判断当前课程id和学生id是否存在。

DELIMITER $$
CREATE PROCEDURE Insert_选课表 (
    IN 学生id_in INT,
    IN 课程id_in INT,
    IN 成绩_in FLOAT
)
BEGIN
    DECLARE 学生存在 INT;
    DECLARE 课程存在 INT;
    SELECT COUNT(*) INTO 学生存在 FROM 学生表 WHERE 学生id = 学生id_in;
    SELECT COUNT(*) INTO 课程存在 FROM 课程表 WHERE 课程id = 课程id_in;
    IF 学生存在 = 0 THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '学生id不存在';
    END IF;
    IF 课程存在 = 0 THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '课程id不存在';
    END IF;
    INSERT INTO 选课表 (学生id, 课程id, 成绩) VALUES (学生id_in, 课程id_in, 成绩_in);
END$$
DELIMITER ;

(第九题)

有一个关于商品供应及顾客订单的数据库。其中包括四个表,表中信息如下:

供应表apply(id、name、sid、price) 说明:id 供应厂家编号,name 供应厂家名称,sid 商品编号,price 商品价格。

顾客表customers(gid、name、address、balance) 说明:gid 顾客编号,address 地址,balance 余额。

订单表orders(sid、gid、date) 说明:sid 商品编号,gid 顾客编号,date 订单日期。

商品表goods(sid、name、count) 说明:sid 商品编号,name 商品名称,count 商品数量

请完成如下操作的SQL语句,表名和列名必须和上面的一致:

1)从供应表中查询全体供应厂商的基本信息

2)从顾客表中查询地址在"长春"的顾客的顾客编号、顾客姓名及余额.

3)从商品表中查询以"可乐"两个字结尾的商品名称及数量,并按商品数量降序排序

4)从订单表中查询购买商品编号为"101"商品的顾客编号及订单日期.

5)向商品表中追加一条纪录(204,可口可乐,900)

6)从商品表中查询最多商品数量、最少商品数量及商品总数量的记录信息

(第十题)

已知选课管理系统Xkglxt包含如下数据表:

1)学生表: 学生id, 学号, 姓名, 专业, 年级, 姓名拼音缩写

2)课程表: 课程id, 课程名称, 学分  

3)选课表: 选课id, 学生id, 课程id, 成绩 

请完成如下操作的SQL语句,表名和列名必须和上面的一致:

1、创建以上三个表的SQL语句;

-- 学生表
CREATE TABLE 学生表 (
    学生id INT PRIMARY KEY,
    学号 VARCHAR(20),
    姓名 VARCHAR(20),
    专业 VARCHAR(20),
    年级 INT,
    姓名拼音缩写 VARCHAR(20)
);

-- 课程表
CREATE TABLE 课程表 (
    课程id INT PRIMARY KEY,
    课程名称 VARCHAR(20),
    学分 INT
);

-- 选课表
CREATE TABLE 选课表 (
    选课id INT PRIMARY KEY,
    学生id INT,
    课程id INT,
    成绩 INT,
    FOREIGN KEY (学生id) REFERENCES 学生表(学生id),
    FOREIGN KEY (课程id) REFERENCES 课程表(课程id)
);

2、创建一个存储过程(名字自定),实现课程表的插入,需要判断当前课程名称的课程是否存在。

DELIMITER ;;

CREATE PROCEDURE insert_course(IN p_course_name VARCHAR(20), IN p_credit INT)
BEGIN
    DECLARE v_course_count INT;
    SET v_course_count = (SELECT COUNT(*) FROM 课程表 WHERE 课程名称 = p_course_name);
    IF v_course_count > 0 THEN
        SELECT '该课程已存在';
    ELSE
        INSERT INTO 课程表 (课程名称, 学分) VALUES (p_course_name, p_credit);
        SELECT '课程插入成功';
    END IF;
END ;;

DELIMITER ;

该存储过程接受课程名称和学分作为输入参数,首先查询课程表中是否已经存在该课程,如果存在则返回提示信息,否则将课程名称和学分插入到课程表中,并返回提示信息。可以通过以下方式调用该存储过程:
CALL insert_course('数学', 4);

(第十一题)

已知选课管理系统Xkglxt包含如下数据表和自定义函数(函数已定义好可直接使用):

1)学生表: 学生id, 学号, 姓名, 专业, 年级, 姓名拼音缩写

2)自定义函数拼音缩写查询: pysx('中文字符串') 返回 该中文字符串的拼音缩写  

请完成如下操作的SQL语句,表名和列名必须和上面的一致:

1、创建选课管理系统数据库以及学生表的SQL语句;

-- 创建选课管理系统数据库
CREATE DATABASE Xkglxt;

-- 选择数据库
USE Xkglxt;

-- 创建学生表
CREATE TABLE 学生 (
    学生id INT NOT NULL AUTO_INCREMENT,
    学号 VARCHAR(20) NOT NULL,
    姓名 VARCHAR(20) NOT NULL,
    专业 VARCHAR(20),
    年级 INT,
    姓名拼音缩写 VARCHAR(20),
    PRIMARY KEY (学生id)
);

2、在学生表上创建一个触发器(名字自定),当修改学生表的姓名时自动处理姓名拼音缩写

-- 创建触发器
CREATE TRIGGER trig_姓名拼音缩写_update
BEFORE UPDATE ON 学生
FOR EACH ROW
BEGIN
    SET NEW.姓名拼音缩写 = pysx(NEW.姓名);
END;

(第十二题)

已知选课管理系统Xkglxt包含如下数据表:

1)学生表: 学生id, 学号, 姓名, 专业, 年级, 姓名拼音缩写

2)课程表: 课程id, 课程名称, 学分  

3)选课表: 选课id, 学生id, 课程id, 成绩 

请完成如下操作的SQL语句,表名和列名必须和上面的一致:

1、创建以上三个表的SQL语句;

CREATE TABLE 学生表(
    学生id INT PRIMARY KEY AUTO_INCREMENT,
    学号 VARCHAR(20) UNIQUE,
    姓名 VARCHAR(20) NOT NULL,
    专业 VARCHAR(20) NOT NULL,
    年级 VARCHAR(20) NOT NULL,
    姓名拼音缩写 VARCHAR(20) NOT NULL
);

CREATE TABLE 课程表(
    课程id INT PRIMARY KEY AUTO_INCREMENT,
    课程名称 VARCHAR(20) UNIQUE,
    学分 FLOAT NOT NULL
);

CREATE TABLE 选课表(
    选课id INT PRIMARY KEY AUTO_INCREMENT,
    学生id INT NOT NULL,
    课程id INT NOT NULL,
    成绩 FLOAT,
    FOREIGN KEY (学生id) REFERENCES 学生表(学生id),
    FOREIGN KEY (课程id) REFERENCES 课程表(课程id)
);

2、在课程表上创建一个触发器(名字自定)。,当删除课程信息时自动删除该课程的选课信息。

delimiter;;

CREATE TRIGGER trigger_delete_course AFTER DELETE ON 课程表
FOR EACH ROW
BEGIN
    DELETE FROM 选课表 WHERE 课程id = OLD.课程id;
END;;
以上SQL语句会创建一个名为'trigger_delete_course课程表中的一条记录时自动执行,删除'选课表选课表中与该课程id对应的所有选课记录。注意,该触发器是一个AFTER DELETE类型的触发器,即在删除之后才会执行,同时使用'FORFOR EACH ROW指定它是一个针对每一行的触发器,即每当删除'课程课程表的一行时都会执行一次触发器。在触发器内部,使用'OLD.列名OLD.列名来引用删除的行的列值。

(第十三题)

已知进销存数据库Jxcxt包含如下数据表:

1)商品表:商品id(自增1), 商品名称, 单位, 单价, 商品状态

2)库存表:库存id(自增1), 商品id, 库存数量 

请完成如下操作的SQL语句,表名和列名必须和上面的一致:

1、创建以上两个表的SQL语句;

-- 创建商品表
CREATE TABLE 商品表 (
  商品id INT(11) NOT NULL AUTO_INCREMENT,
  商品名称 VARCHAR(50) NOT NULL,
  单位 VARCHAR(20) DEFAULT NULL,
  单价 DECIMAL(10, 2) DEFAULT NULL,
  商品状态 TINYINT(4) NOT NULL DEFAULT '1',
  PRIMARY KEY (商品id)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- 创建库存表
CREATE TABLE 库存表 (
  库存id INT(11) NOT NULL AUTO_INCREMENT,
  商品id INT(11) NOT NULL,
  库存数量 INT(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (库存id),
  KEY 商品id (商品id),
  CONSTRAINT FK_库存表_商品表 FOREIGN KEY (商品id) REFERENCES 商品表 (商品id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

2、在商品表上创建一个触发器(名字自定),当新增商品时自动在库存表中插入该商品的库存信息(库存数量为0)。

-- 创建触发器

delimiter;;
CREATE TRIGGER `新增商品` AFTER INSERT ON `商品表` FOR EACH ROW
BEGIN
  -- 插入库存信息
  INSERT INTO 库存表 (商品id, 库存数量) VALUES (NEW.商品id, 0);
END;;

(第十四题)

已知选课管理系统Xkglxt包含如下数据表:

1)学生表: 学生id, 学号, 姓名, 专业, 年级, 姓名拼音缩写

2)课程表: 课程id, 课程名称, 学分  

3)选课表: 选课id, 学生id, 课程id, 成绩 

请完成如下操作的SQL语句,表名和列名必须和上面的一致:

1、创建以上三个表的SQL语句;

-- 学生表
CREATE TABLE 学生表 (
    学生id INT PRIMARY KEY AUTO_INCREMENT,
    学号 VARCHAR(20) UNIQUE NOT NULL,
    姓名 VARCHAR(20) NOT NULL,
    专业 VARCHAR(20) NOT NULL,
    年级 VARCHAR(20) NOT NULL,
    姓名拼音缩写 VARCHAR(20) NOT NULL
);

-- 课程表
CREATE TABLE 课程表 (
    课程id INT PRIMARY KEY AUTO_INCREMENT,
    课程名称 VARCHAR(20) NOT NULL,
    学分 INT NOT NULL
);

-- 选课表
CREATE TABLE 选课表 (
    选课id INT PRIMARY KEY AUTO_INCREMENT,
    学生id INT NOT NULL,
    课程id INT NOT NULL,
    成绩 INT,
    FOREIGN KEY (学生id) REFERENCES 学生表(学生id) ON DELETE CASCADE ON UPDATE CASCADE,
    FOREIGN KEY (课程id) REFERENCES 课程表(课程id) ON DELETE CASCADE ON UPDATE CASCADE
);

2、创建一个存储过程(名字自定),实现学生表的插入,需要判断当前学号的学生是否存在。

-- 创建存储过程
DELIMITER ;;
CREATE PROCEDURE Insert_Student (
    IN s_id VARCHAR(20),
    IN s_name VARCHAR(20),
    IN s_major VARCHAR(20),
    IN s_grade VARCHAR(20),
    IN s_py VARCHAR(20)
)
BEGIN
    DECLARE cnt INT;
    SELECT COUNT(*) INTO cnt FROM 学生表 WHERE 学号=s_id;
    IF cnt > 0 THEN
        SELECT '学号已存在';
    ELSE
        INSERT INTO 学生表 (学号, 姓名, 专业, 年级, 姓名拼音缩写) VALUES (s_id, s_name, s_major, s_grade, s_py);
        SELECT '插入成功';
    END IF;
END ;;
CALL Insert_Student('101', '张三', '计算机科学与技术', '2022', 'zs');

四、计算题

(第一题)

按照要求,完成以下操作。

1)建立一个通信录数据库,要求需要有以下三个表:

lxrenb(联系人表) 其字段为(联系人编号、姓名、联系电话、家庭地址),

thjlb(通话记录表) 其字段为(通话记录编号、联系人编号、通话开始时间、通知结束时间、通话类别、通话状态),

dxjlb(短信记录表) 其字段为(短信记录编号、联系人编号、接发时间、短信内容、短信类别)。

请在SQL SERVER 下建立这个数据库,数据库名为:TXLSJK。字段名以及字段数据类型可自拟。

-- 创建通信录数据库
CREATE DATABASE TXLSJK;
USE TXLSJK;

-- 创建联系人表 lxrenb
CREATE TABLE lxrenb (
  lxrbh INT IDENTITY(1,1) PRIMARY KEY, -- 联系人编号,自增
  xm VARCHAR(20) NOT NULL, -- 姓名,非空
  lxdh VARCHAR(20) NOT NULL, -- 联系电话,非空
  jtdz VARCHAR(100) NULL -- 家庭地址,可空
);

-- 创建通话记录表 thjlb
CREATE TABLE thjlb (
  thjlbh INT IDENTITY(1,1) PRIMARY KEY, -- 通话记录编号,自增
  lxrbh INT NOT NULL, -- 联系人编号,非空
  thkssj DATETIME NOT NULL, -- 通话开始时间,非空
  thjssj DATETIME NOT NULL, -- 通话结束时间,非空
  thlb VARCHAR(10) NOT NULL, -- 通话类别,非空
  thzt VARCHAR(10) NOT NULL, -- 通话状态,非空
  FOREIGN KEY (lxrbh) REFERENCES lxrenb(lxrbh) -- 外键约束,关联联系人表
);

-- 创建短信记录表 dxjlb
CREATE TABLE dxjlb (
  dxjlbh INT IDENTITY(1,1) PRIMARY KEY, -- 短信记录编号,自增
  lxrbh INT NOT NULL, -- 联系人编号,非空
  jfsj DATETIME NOT NULL, -- 接发时间,非空
  dxnr VARCHAR(200) NOT NULL, -- 短信内容,非空
  dxlb VARCHAR(10) NOT NULL, -- 短信类别,非空
  FOREIGN KEY (lxrbh) REFERENCES lxrenb(lxrbh) -- 外键约束,关联联系人表
);

2)在联系人表中插入以下5条记录:

(1,朱红敏,15857455696,河南洛阳市中学路1号)

(2,张丽花,18953991767,河南洛阳市武汉路2号)

(3,梁宝莉,13752317719,河南洛阳市大学路3号)

(4,王君志,13057676112,河南洛阳市大学路4号)

(5,李保江,13752309239,河南洛阳市大学路5号)

INSERT INTO lxrenb (联系人编号, 姓名, 联系电话, 家庭地址)
VALUES
(1, '朱红敏', '15857455696', '河南洛阳市中学路1号'),
(2, '张丽花', '18953991767', '河南洛阳市武汉路2号'),
(3, '梁宝莉', '13752317719', '河南洛阳市大学路3号'),
(4, '王君志', '13057676112', '河南洛阳市大学路4号'),
(5, '李保江', '13752309239', '河南洛阳市大学路5号');

3)在短信记录表中插入以下一条记录(1,1,当前系统时间,你的书已到请速来领取,1)

INSERT INTO dxjlb (联系人编号, 接发时间, 短信内容, 短信类别) 
VALUES (1, GETDATE(), '你的书已到请速来领取', 1);

4)更新联系人编号为4的联系人电话为13938801001

UPDATE lxrenb
SET 联系电话 = '13938801001'
WHERE 联系人编号 = 4;

5)依据联系人表和通话记录表建立视图:v_lxren_thjlb(联系人编号、姓名、通话类别、通话状态)

CREATE VIEW v_lxren_thjlb AS
SELECT lxrenb.联系人编号, lxrenb.姓名, thjlb.通话类别, thjlb.通话状态
FROM lxrenb
INNER JOIN thjlb ON lxrenb.联系人编号 = thjlb.联系人编号;
这个视图将联系人表和通话记录表联接起来,返回联系人编号、姓名、通话类别和通话状态这些字段的值。可以通过下面的查询语句使用这个视图:

SELECT * FROM v_lxren_thjlb;

(第二题)

学生选课系统,主要表有:

学生基本信息表steudents(学号sid、姓名sname、性别ssex、专业spro、出生年月sbirthday等),

选课表courses_selection(学号sid、课程号cid、分数score),

课程表courses(课程号cid、课程名cname、所属专业professional、学分credits)

要求:写出SQL语句。

1) 查询所有选SQL课程的学生学号,姓名和专业。

SELECT s.sid, s.sname, s.spro
FROM students s
INNER JOIN courses_selection cs ON s.sid = cs.sid
INNER JOIN courses c ON cs.cid = c.cid
WHERE c.cname = 'SQL';

2) 删除所有选择数学的同学的选课记录。

DELETE FROM courses_selection WHERE cid IN (
  SELECT cid FROM courses WHERE cname = '数学'
);

3) 查询有哪些课程没有被任何同学报选。

SELECT c.cid, c.cname, c.professional, c.credits
FROM courses c
LEFT JOIN courses_selection cs ON c.cid = cs.cid
WHERE cs.cid IS NULL;

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值