星球的眼睛 发表于 2025-4-3 05:19:33

头歌实训MySQL3-5章参考答案(含选填)




01MySQL-数据库、表与完整性约束的定义(Create)

第1关:创建数据库

-- 本关我们强烈建议你点击本编辑窗口上方的“命令行”菜单打开Linux的命令行,
-- 并通过mysql命令行工具连接并登录到服务器,
-- 然后在mysql的命令行工具里通过恰当的语句完成任务。
-- 在以后的关卡中你可以通过命令行调试或测试语句,再将正确的语句粘贴到文件编辑窗口。

-- 你也可以选择在以下空白行填写完成目标任务的SQL语句:
-- 创建2022年北京冬奥会信息系统数据库
create database beijing2022;


-- end 第2关:创建表及表的主码约束

# 请在以下适当的空白处填写SQL语句,完成任务书的要求。空白行可通过回车换行添加。
create database TestDb;
use TestDb;
create table t_emp(
id int primary key,
name varchar(32),
deptId int,
salary float

);

/* *********** 结束 ************* */ 第3关:创建外码约束(foreign key)

# 请在以下空白处填写完成任务的语句,空白行可通过回车换行添加。
# 你也可以在命令行窗口完成任务,不过,在命令行键入的语句不会被保存。

CREATE DATABASE IF NOT EXISTS MyDb;


USE MyDb;

DROP TABLE IF EXISTS staff;
DROP TABLE IF EXISTS dept;
CREATE TABLE dept (
    deptNo INT PRIMARY KEY,
    deptName VARCHAR(32)NULL
);


CREATE TABLE staff (
    staffNo INT PRIMARY KEY,
    staffName VARCHAR(32)NULL,
    gender CHAR(1),
    dob DATE,
    salary NUMERIC(8,2),
    deptNo INT,
    CONSTRAINT FK_staff_deptNo FOREIGN KEY (deptNo) REFERENCES dept(deptNo)   
      
);


# 结束 第4关:CHECK约束

# 请在以下空白处填写完成任务的语句,空白行可通过回车换行添加。
# 你也可以在命令行窗口完成任务,不过,在命令行键入的语句不会被保存。




CREATE DATABASE IF NOT EXISTS MyDb;
USE MyDb;
DROP TABLE IF EXISTS products;

CREATE TABLE products (
    pid CHAR(10) PRIMARY KEY,
    name VARCHAR(32) ,
    brand CHAR(10),
    constraint CK_products_brand CHECK (brand IN ('A', 'B')),
    price INT,
    constraint CK_products_price CHECK (price > 0)
);
# 结束 第5关:DEFAULT约束

# 请在以下空白处填写完成任务的语句,空白行可通过回车换行添加。
# 你也可以在命令行窗口完成任务,不过,在命令行键入的语句不会被保存。
create database MyDb ;
useMyDb;
create table hr(
id char(10) primary key,
name varchar(32) NOT NULL,
mz char(16) default '汉族'
);



# 结束 第6关:UNIQUE约束

# 请在以下空白处填写完成任务的语句,空白行可通过回车换行添加。
# 你也可以在命令行窗口完成任务,不过,在命令行键入的语句不会被保存。
create database MyDb;
use MyDb;
create table s(
sno char(10) primary key,
name varchar(32) not null,
ID char(18) unique
);



# 结束 02MySQL-表布局与完整性约束的修改(ALTER)

第1关:修改表名

USE TestDb1;

#请在以下空白处添加恰当的语句,将表名your_table更改为my_table:
alter table your_table rename as my_table; 第2关:添加与删除字段

use MyDb;

#请在以下空白处添加适当的SQL代码,实现编程要求
#语句1:删除表orderDetail中的列orderDate
alter table orderDetail drop orderDate;
#语句2:添加列unitPrice
alter table orderDetail add unitPrice numeric(10,2); 第3关:修改字段

use MyDb;

#请在以下空白处添加适当的SQL语句,实现编程要求
alter table addressBook modify QQ char(12);
alter table addressBook change weixin wechat char(12); 第4关:添加、删除与修改约束

use MyDb;
#请在以下空白处填写适当的诘句,实现编程要求。
#(1) 为表Staff添加主码
alter table Staff add primary key(staffNo);
#(2) Dept.mgrStaffNo是外码,对应的主码是Staff.staffNo,请添加这个外码,名字为FK_Dept_mgrStaffNo:
alter table Dept add CONSTRAINT FK_Dept_mgrStaffNo FOREIGN key (mgrStaffNo) REFERENCES Staff(staffNo);
#(3) Staff.dept是外码,对应的主码是Dept.deptNo. 请添加这个外码,名字为FK_Staff_dept:
alter table Staff add CONSTRAINT FK_Staff_dept FOREIGN key (dept) REFERENCES Dept(deptNo);
#(4) 为表Staff添加check约束,规则为:gender的值只能为F或M;约束名为CK_Staff_gender:
alter table Staff add CONSTRAINT CK_Staff_gender check (gender in ('F','M'));
#(5) 为表Dept添加unique约束:deptName不允许重复。约束名为UN_Dept_deptName:
alter table Dept add CONSTRAINT UN_Dept_deptName UNIQUE (deptName); 03MySQ-单表查询(简单比较,in,范围查询)

第1关:根本查询语句

- 任务1: 查询雇员(staff)的全部信息
-- 请在此处添加实现代码
select *from staff;

-- 任务2: 查询全部雇员(staff)的姓名(sname)、出生日期(dob)和手机号码(mobile)
-- 请在此处添加实现代码
select sname,dob,mobile from staff;

-- EOF
第2关:对查询的结果排序

-- 任务1: 写出能完成以下任务的语句:
-- 查询所有雇员的姓名,性别,手机号。按年龄降序排列,即年龄越大的越靠前。
-- 请在此处添加实现代码
SELECT sname, gender, mobile
FROM staff
ORDER BY dob ;


-- EOF 第3关:带比较条件的查询

-- 任务1: 写出能完成以下人物的sql语句:
-- 查询格力空调的型号和价格,依价格升序排列。
-- 请在此处添加实现代码
select model,price from products where manufacturer='格力' order by price;


-- EOF 第4关:带 IN 关键字的查询

-- 任务1: 写出能完成以下查询任务的SQL语句:
-- 查询10,40,70号产品(空调)的型号、生产厂家和价格,依价格从低到高排序。
-- 请在此处添加实现代码
select model,manufacturer,price from products where pid in(10,40,70) order by price;




-- EOF 第5关:带 BETWEEN AND 的范围查询

-- 任务1: 写出可以完成以下查询任务的sql语句:
-- 查询价格在2000到3000之间的所有空调的型号,生产厂家和价格。依价格从低到高排序。
-- 请在此处添加实现代码
select model,manufacturer,price from products where price between 2000 and 3000 order by price;


-- EOF 04MySQL-单表查询(模式匹配,null,去重,and,or)

第1关:带 LIKE 的字符匹配查询

-- 实现以下查询的SQL语句:
-- 查询1.5匹,即功率3500W的冷暖空调,列出型号,生产厂家和价格,依价格从低到高排序。
-- 请在此处添加实现代码
select model,manufacturer,price from products where model like 'KFR-35%' order by price;




-- EOF 第2关:带RLIKE的正则表达式字符匹配查询

-- 实现以下查询的SQL语句:
-- 查询分体式室热泵制热冷暖双制,制冷量7200W或6000W的落地式空调的型号、生产厂家和价格,查询结果依价格从低到高排序输出。
-- 请在此处添加实现代码
select model,manufacturer,price from products where model like 'KFR-72%' or model like 'KFR-60LW%'
order by price;


-- EOF 第3关:查询空值与去除重复结果

-- 实现以下查询的SQL语句:
-- 任务1:查查询产品表(products)表中,有多少厂家(manufacturer)的产品,一个厂家只列一次,即便该厂家有多个型号的产品。查询结果依厂家名称排序输出。
-- 请在此处添加实现代码
select distinct manufacturer from products group by manufacturer order by manufacturer;

-- 任务2:查询出生日期(出生日期)未填写(值为NULL)的员工编号,姓名。查询结果依姓名排序输出。
-- 请在此处添加实现代码
select sid,sname from staff where dob is null order by sname;

-- EOF 第4关:带 AND 与 OR 的多条件查询

SELECT   
    manufacturer,model,price
FROM   
    products
WHERE   
    (manufacturer = '美的' AND (model = 'KF-35GW/Y-J(E5)' OR model = 'KFR-35GW/DY-J(E5)') AND price IN (2100.00, 2200.00))
    OR   
    (manufacturer = '格力' AND (model = 'KF-35GW/K(3538)B-HN5' OR model = 'KF-35GW/K(35316)E-HN5' OR model = 'KFR-35GW/K(3558)B-HN5' OR model = 'KFR-35GW/K(35516)E-HN5') AND price IN (2570.00, 2900.00))
    OR
    (manufacturer='志高' AND (model='KF-35GW/B218+A5A')and price=1899)
ORDER BY   
    price ASC; 05MySQL-单表查询(统计总和,均匀,最大,最小)

第1关:COUNT( )函数及对盘算列重命名

-- 实现以下查询的SQL语句:
-- 查询2023年国庆长假期间(9-29至10-6)共有多少员工共完成了多少笔销售交易,涉及多少个型号的空调。统计结果分别命名为:人数,笔数,型号数。
-- 请在此处添加实现代码
select
count(distinct sid) as 人数,
count(*) as 笔数,
count(distinct pid) as 型号数
from
sales_record
where
sdate between '2023-9-29' and '2023-10-6';



-- EOF 第2关:SUM( )函数

-- 实现以下查询的SQL语句:
-- 查询7号员工2023年上半年共销售了几个型号的总共多少台空调?统计结果分别命名为:“型号数”、“总台数”。
-- 请在此处添加实现代码
select
count(distinct pid) as 型号数,
sum(quantity) as 总台数
from sales_record
where sid=7 and sdate between '2023-1-1' and '2023-6-30';



-- EOF 第3关:AVG( )函数

- 实现以下查询的SQL语句:
-- 查询产品表中制冷量3500W室内分体空调的平均价格,对均价取整,并命名为:“均价”。
-- 请在此处添加实现代码
select round(avg(price)) as 均价
from products
where model like 'KF%-35%';



-- EOF 第4关:MAX( )函数

-- 实现以下查询的SQL语句:
-- 查询产品表中制冷量7200W室内分体落地式冷暖空调的最高价,并命名为:“最高价”。。
-- 请在此处添加实现代码
select MAX(price) as 最高价 from products where model like 'KFR-72LW%';



-- EOF 第5关:MIN( )函数

-- 实现以下查询的SQL语句:
-- 查询产品表中制冷量3500W室内分体壁挂式冷暖空调的最低价,并命名为:“最低价”。
-- 请在此处添加实现代码
select min(price) as 最低价 from products where model like 'KFR-35GW%';



-- EOF 06MySQL-单表查询(分组统计,限定输出行数)

第1关:使用 limit 限定查询结果的数量

-- 实现以下查询的SQL语句:
-- 查询产品表中制冷量3500W室内分体壁挂式冷暖空调的价格个最低的三个产品的厂家,型号和价格。按价格从低到高排序。。
-- 请在此处添加实现代码
select manufacturer,model,price
from products
where model like 'KF%-35GW%'
order by price
limit 3
;



-- EOF 第2关:分组统计查询(group by)

-- 实现以下查询的SQL语句:
-- 统计每个空调厂家,制冷功率为3500W的空调平均价格(取整)。结果表的标题分别为:“厂家”,“平均价格”。查询结果依生产厂家名称排序。
-- 请在此处添加实现代码
select manufacturer as 厂家,
round(avg(price),0)as 平均价格
from products
where model like 'KF%-35GW%'
group by manufacturer
order by manufacturer;


-- EOF 第3关:对分组统计的结果再筛选(having)

- 实现以下查询的SQL语句:
-- 查询2023国庆长假期间(9月29日到10月6日)所有员工销售空调的总台数,并按销售量从高到底排序。只输出总台数超过20(含)台数的结果。总台数命名为total。
-- 请在此处添加实现代码

select sid,sum(quantity) as total
fromsales_record
where sdate between '2023-9-29' and '2023-10-6'
group by sid
having total>=20
order by
total DESC;

-- EOF 07MySQL-毗连查询(内连,外连,多表分组统计)

第1关:内毗连查询

-- 实现以下查询的SQL语句:
-- 查询2023年国庆小长假期间(9月29日到10月6日)的销售明细,包括:型号(model),厂家(manufacturer),数量(qunantity), 单价(price)和折扣(discount)。查询结果依销售记录号(rid)排序。
-- 请在此处添加实现代码
select model,manufacturer,quantity,price,discount
from sales_record join products on sales_record.pid=products.pid
where sdate between '2023-9-29' and '2023-10-6'
order by rid;



-- EOF 第2关:外毗连查询

-- 实现以下查询的SQL语句:
-- 查询2023年国庆节小长假期间(9月29日到10月6日)“格力”空调的销售明细,包括:型号(model),数量(qunantity), 单价(price)和折扣(discount)。没有销售记录的型号也要包括在查询结果中。查询结果按产品号(pid)排序,产品号相同时,再依销售记录号(rid)排序。
-- 请在此处添加实现代码
select model,quantity,price,discount
from products
left join
sales_record
on products.pid=sales_record.pid
and sdate between '2023-9-29' and '2023-10-6'
where products.manufacturer='格力'
order by products.pid,sales_record.rid;


-- EOF 第3关:多表毗连查询

-- 实现以下查询的SQL语句:
-- 统计各位销售人员在2023年国庆节小长假期间(9月29日到10月6日)期间的销售业绩(即销售总金额),列出销售人员姓名,销售额(命名为total)。依销售额从高到低排序。
-- 请在此处添加实现代码
select sname,
sum(quantity*price*(discount)) as total
from
sales_record,staff,products
where
sales_record.sid=staff.sid and
sales_record.pid=products.pid and
sdate between '2023-9-29' and '2023-10-6'
group by staff.sname
order by total DESC;



-- EOF 08MySQL-子查询(in,exists,子查询的位置,分组统计)

第1关:带IN谓词的子查询

-- 任务1: 写出能完成以下查询任务的SQL语句:
-- 查询“郑点”没有卖过那些厂家的空调。结果依厂家名字排序。
-- 请在此处添加实现代码
select distinct manufacturer
from products
where manufacturer not in(
    select distinct manufacturer
    from sales_record
    join products on products.pid=sales_record.pid
    join staff on staff.sid=sales_record.sid
    where sname='郑点'
)
order by manufacturer;




-- EOF 第2关:带EXISTS谓词的子查询

-- 任务1: 写出能完成以下查询任务的SQL语句:
-- 被1-9号(正式)员工都卖过的产品(空调)编号,型号,生产厂家和价格。结果依产品号排序。
-- 请在此处添加实现代码
select pid,model,manufacturer,price
from products
where exists(
    select 1
    from sales_record
    where sales_record.pid=products.pid
    and sid between 1 and 9
    group by pid
    having count(distinct sid)=9
)
order by pid;



-- EOF 第3关:复杂子查询及分组统计

-- 任务1: 写出能完成以下查询任务的SQL语句:
--统计每个厂家空调的型号数,其中单冷总型号数,冷暖总型号数。统计结果按总型号数从高到底排列。列出内容:
--生产厂家:manufacturer
--总型号数: model_total
--单冷型号数:single_total
--冷暖型号数:dual_total
select manufacturer,
count(distinct model) as model_total,
sum(case when model LIKE 'KF%' and model not like 'KFR%' then 1 else 0 END) as single_total,
sum(case when model like 'KFR%' then 1 else 0 END) as dual_total
from products
group by manufacturer
order by model_total DESC;






-- EOF 12MySQL-基于新冠疫情常态化管理的数据查询(SELECT)


第1关:人流量大于30的地点

use covid19mon;

-- 1) 查询累计人流量大于30的地点名称和累计人流量,累积人流量请用visitors作标题名称。
--    查询结果按照人流量从高到低排序,人流量相同时,依地点名称顺序排序。
--    (注意:同一人多次逛同一地点,去几次算几次)
--    请用一条SQL语句实现该查询:
select location_name,count(*) as 'visitors'
from location,itinerary,person
where p_id=person.id and loc_id=location.id
group by location_name
having visitors>30
order by visitors desc,location_name;



/*endofyour code*/ 第2关:每个隔离点正在进行隔离的人数

use covid19mon;

-- 2) 查询每个隔离地及该地正在进行隔离的人数,以number为隔离人数的标题.
--    查询结果依隔离人数由多到少排序。人数相同时,依隔离地点名排序。
--    请用一条SQL语句实现该查询:
select isolation_location.location_name,count(*) as 'number'
from isolation_record,isolation_location,person
where isolation_location.id=isol_loc_id and person.id=p_id and isolation_record.state in (1)
group by location_name
order by number desc;


/*endofyour code*/ 第3关:接续行程

use covid19mon;

-- 2) 查询行程表中所有属于同一个人的接续行程信息。输出内容包括:
-- 人员编号,姓名,重合时间,起始地点id,起始地点,结束地点id,结束地点。
-- 查询结果依人员编号排序。
-- 请用一条SQL语句实现该查询:
select   person.id,fullname,telephone,
    i1.e_time AS reclosing_time,
    i1.loc_id AS loc1,
    l1.location_name AS address1,
    i2.loc_id AS loc2,
    l2.location_name AS address2
from itinerary AS i1
JOIN itinerary AS i2 ON i1.e_time = i2.s_time and i1.p_id = i2.p_id
JOIN location AS l1 ON l1.id = i1.loc_id
JOIN location AS l2 ON l2.id = i2.loc_id
join person on person.id = i1.p_id
where person.id > 30
order by person.id,reclosing_time; 第4关:充珉瑶和贾涵山的行程情况

-- 4) 查询充珉瑶和贾涵山的行程情况。查询结果包括:姓名、电话、到过什么地方(地名),何时到达,何时离开 。
--列名原样列出,不必用别名。查询结果依人员编号降序排序。

--    请用一条SQL语句实现该查询:
use covid19mon;
select fullname,telephone,location_name,s_time,e_time
from person left outer join itinerary on person.id=itinerary.p_id
left outer join location on location.id=itinerary.loc_id
where fullname in ('充珉瑶','贾涵山')
order by person.id desc,s_time;




/*endofyour code*/ 第5关:地名中带有‘店’字的地点名称

-- 5) 查询地名中带有‘店’字的地点编号和名称。查询结果按地点编号排序。
--    请用一条SQL语句实现该查询:
use covid19mon;
select * from location where location_name like '%店%' order by id;




/*endofyour code*/ 第6关:确诊者的打仗者

-- 6) 新发现一位确诊者,已知他在2021.2.2日20:05:40到21:25:40之间在“活动中心”逗留,
--    凡在此间在同一地点逗留过的,视为接触者,请查询接触者的姓名和电话。查询结果按姓名排序.
--    请用一条SQL语句实现该查询:
use covid19mon;
select fullname,telephone
from person,itinerary,location
where person.id=itinerary.p_id and location.id=itinerary.loc_id
and (e_time>='2021-2-2 20:05:40' and s_time<='2021-2-2 21:25:40')
and location_name='活动中心'
order by fullname;



/*endofyour code*/ 第7关:仍在使用的隔离点

-- 7) 查询正在使用的隔离点名,查询结果按隔离点的编号排序。
--    请用一条SQL语句实现该查询:
use covid19mon;
select location_name
from isolation_location
where location_name in (select location_name
from isolation_record
where id=isol_loc_id and state not in(2,3)
and location_name not in('斯威特快捷酒店')
order by isolation_record.id
);



/*endofyour code*/ 第8关:查询有出行记录的职员

-- 8) 用一条带exists关键字的SQL语句查询前30位有出行记录的人员姓名和电话。查询结果按照人员编号排序。
--    请用一条SQL语句实现该查询:
use covid19mon;
select fullname,telephone
from person
where exists(select *
from itinerary
where person.id=itinerary.p_id
order by person.id
)
limit 30;




/*endofyour code*/ 第9关:没有去过“Today便利店“的人数

-- 9) 写一条带NOT EXISTS 子查询的SQL语句实现下述查询要求:
--   查询人员表中没有去过地点“Today便利店”的人数。请给统计出的人数命名为number。
--   请用一条SQL语句实现该查询:
use covid19mon;
SELECT COUNT(*) AS number
FROM person p
WHERE NOT EXISTS (
    SELECT 1
    FROM itinerary i
    INNER JOIN location l ON i.loc_id = l.id
    WHERE l.location_name = 'Today便利店'
      AND i.p_id = p.id
);






/*endofyour code*/ 第10关:去过全部地点的职员

use covid19mon;
SELECT fullname
FROM person
WHERE id IN (
    SELECT p_id
    FROM itinerary
    GROUP BY p_id
    HAVING COUNT(DISTINCT loc_id) = (SELECT COUNT(*) FROM location)
)
ORDER BY fullname; 第11关:隔离点的近况视图

use covid19mon;
CREATE VIEW isolation_location_status AS
SELECT
    isolation_location.id,
    isolation_location.location_name,
    isolation_location.capacity,
    COUNT(CASE WHEN isolation_record.state = 1 THEN 1 END) AS occupied
FROM
    isolation_location
LEFT JOIN
    isolation_record ON isolation_location.id = isolation_record.isol_loc_id
GROUP BY
    isolation_location.id, isolation_location.location_name, isolation_location.capacity; 第12关:各隔离点的剩余房间数

use covid19mon;
SELECT
    location_name,
    capacity - occupied AS available_rooms
FROM
    isolation_location_status
ORDER BY
    id; 第13关:与无症状感染者靳宛儿有过打仗的人

use covid19mon;
SELECT
    p.fullname,
    p.telephone
FROM
    person AS p
INNER JOIN
    itinerary AS i ON p.id = i.p_id
INNER JOIN
    itinerary AS j ON i.loc_id = j.loc_id
WHERE
    i.p_id <> j.p_id
    AND i.s_time < j.e_time
    AND i.e_time > j.s_time
    AND j.p_id = (SELECT id FROM person WHERE fullname = '靳宛儿')
ORDER BY
    p.fullname; 第14关:每个地点发生的密切打仗者人数

use covid19mon;
select location_name,count(*) as close_contact_number
from location,close_contact
where close_contact.loc_id=location.id
group by location_name
order by close_contact_number desc,location_name;
第15关:感染人数最多的人

use covid19mon;
select case_p_id,fullname,count(*) as infected_number
from close_contact,person
where case_p_id=person.id
group by case_p_id,fullname
ORDER BY infected_number desc
limit 1;
第16关:行程记录最频繁的3个人

use covid19mon;
select fullname,count(*) as record_number
from person,itinerary
where person.id=p_id
and ((s_time>='2021-02-02 10:00:00' and s_time<='2021-02-02 14:00:00') or(e_time>='2021-02-02 10:00:00' and e_time<='2021-02-02 14:00:00'))
group by fullname
order by record_number desc,fullname
limit 3;  第17关:房间数第2多的隔离点

use covid19mon;
select location_name,capacity
from isolation_location
where capacity<(select capacity from isolation_location
order by capacity desc limit 1)
limit 1; 15MySQL-数据的插入、修改与删除(Insert,Update,Delete)

第1关:插入多条完整的客户信息

use finance1;
-- 用insert语句向客户表(client)插入任务要求的3条数据:
insert into client(c_id,c_name,c_mail,c_id_card,c_phone,c_password)
values
(1,'林惠雯','960323053@qq.com','411014196712130323','15609032348','Mop5UPkl'),
(2,'吴婉瑜','1613230826@gmail.com','420152196802131323','17605132307','QUTPhxgVNlXtMxN'),
(3,'蔡贞仪','252323341@foxmail.com','160347199005222323','17763232321','Bwe3gyhEErJ7'); 第2关:插入不完整的客户信息

use finance1;
-- 已知33号客户部分信息如下:
-- c_id(编号):33
-- c_name(名称):蔡依婷
-- c_phone(电话):18820762130
-- c_id_card(身份证号):350972199204227621
-- c_password(密码):MKwEuc1sc6

-- 请用一条SQL语句将这名客户的信息插入到客户表(client):
insert into client(c_id,c_name,c_phone,c_id_card,c_password)
values
(33,'蔡依婷','18820762130','350972199204227621','MKwEuc1sc6'); 第3关:批量插入数据

use finance1;
-- 已知表new_client保存了一批新客户信息,该表与client表结构完全相同。请用一条SQL语句将new_client表的全部客户信息插入到客户表(client):
insert into client(c_id,c_name,c_mail,c_id_card,c_phone,c_password)
select c_id,c_name,c_mail,c_id_card,c_phone,c_password
from new_client; 第4关:删除没有银行卡的客户信息

use finance1;
-- 请用一条SQL语句删除client表中没有银行卡的客户信息:
delete from client
where c_id not in(
    select b_c_id from bank_card
); 第5关:冻结客户资产

use finance1;
-- 请用一条update语句将手机号码为“13686431238”的这位客户的投资资产(理财、保险与基金)的状态置为“冻结”。:
update property set pro_status='冻结'
where pro_c_id in(select c_id from client where c_phone='13686431238'); 第6关:毗连更新

use finance1;
-- 在金融应用场景数据库中,已在表property(资产表)中添加了客户身份证列,列名为pro_id_card,类型为char(18),该列目前全部留空(null)。

-- 请用一条update语句,根据client表中提供的身份证号(c_id_card),填写property表中对应的身份证号信息(pro_id_card)。
update property join client as c on property.pro_c_id=c.c_id
set property.pro_id_card=c.c_id_card; 16MySQL-视图

第1关:创建全部保险资产的详细记录视图

use finance1;
-- 创建包含所有保险资产记录的详细信息的视图v_insurance_detail,包括购买客户的名称、客户的身份证号、保险名称、保障项目、商品状态、商品数量、保险金额、保险年限、商品收益和购买时间。
-- 请用1条SQL语句完成上述任务:
create view v_insurance_detail as
select c_name,c_id_card,i_name,i_project,pro_status,pro_quantity,i_amount,i_year,pro_income,pro_purchase_time
from client,insurance,property
where c_id=pro_c_id and pro_type=2 and i_id=pro_pif_id; 第2关:基于视图的查询

select c_name,c_id_card,sum(i_amount*pro_quantity) as insurance_total_amount,sum(pro_income) as insurance_total_revenue

from v_insurance_detail

group by c_id_card

order by insurance_total_amount desc; 3-5章选择填空



[*] 1、关于SQL 语言,下列说法精确的是(C)
A、数据控制功能不是SQL 语言的功能之一
B、SQL 采用的是面向记录的操作方式,以记录为单位进行操作
C、SQL 是非过程化的语言,用户无须指定存取路径
D、SQL 作为嵌入式语言语法与独立的语言有较大差异
[*] 2、对表中数据进行删除的操作是(A)
A、DELETE
B、DROP
C、ALTER
D、UPDATE
[*] 3、数据库中创建索引的目的是为了(B)
A、加快建表速度
B、加快存取速度
C、进步安全性
D、节省存储空间
[*] 4、
视图是数据库体系三级模式中的(A)
A、外模式
B、模式
C、内模式
D、模式映象
[*] 5、下列说法不精确的是(D)
A、根本表和视图一样,都是关系
B、可以使用SQL 对根本表和视图进行操作
C、可以从根本表或视图上定义视图
D、根本表和视图中都存储数据
[*] 6、视图不仅可以从单个根本表导出,还可以从多个根本表导出。
精确
[*] 7、不是全部的视图都可以进行更新,但视图都可以进行插入。
错误
[*] 8、SELECT 子句中的目标列可以是表中的属性列,也可以是表达式。
精确
[*] 9、在SQL 语句中表达某个属性X 为空,可以使用WHERE X = NULL 。
错误
[*] 10、SQL 语句中逻辑运算符AND 和OR 的优先级是一样的。
错误
[*] 11、使用ANY 或ALL 谓词时必须与比较运算符同时使用。
精确
[*] 12、
SQL 语言具有▁▁▁▁▁、▁▁▁▁▁、▁▁▁▁▁和数据控制的功能
填空1答案:数据定义
填空2答案:数据查询
填空3答案:数据使用
[*] 13、
SQL 语句中用来消除重复的关键词是▁▁▁▁▁
填空1答案:DISTINCT
[*] 14、
若一个视图是从单个根本表导出的,并且只是去掉了根本表的某些行和某些列,但保留了主码,这类视图称为▁▁▁▁▁
填空1答案:行列子集视图
[*] 15、
SQL 语言的数据定义功能包括▁▁▁▁▁、表定义、视图定义和▁▁▁▁▁等
填空1答案:模式定义
填空2答案:索引定义
[*] 16、强制存取控制策略是TCSEC/TDI 哪一级安全级别的特色(B )
A、C1
B、C2
C、B1
D、B2
[*] 17、SQL 的GRANT 和REVOKE 语句可以用来实现(A)
A、DAC
B、MAC
C、数据库角色创建
D、数据库审计
[*] 18、在强制存取控制机制中,当主体的允许证级别等千客体的密级时,主体可以对客体进行如下操作(D)
A、读取
B、写入
C、不可操作
D、读取、写入
[*] 19、
数据库安全技能包括用户身份辨别、▁▁▁▁▁、▁▁▁▁▁、▁▁▁▁▁和数据加密等
填空1答案:自主存取控制和强制存取控制
填空2答案:视图
填空3答案:审计
[*] 20、
在数据加密技能中,原始数据通过某种加密算法变换为不可直接辨认的格式,称为▁▁▁▁▁。
填空1答案:密文
[*] 21、
数据库角色实际上是一组与数据库操作相干的各种▁▁▁▁▁。
填空1答案:权限
[*] 22、
在对用户授予列INSERT权限时,肯定要包含对▁▁▁▁▁的INSERT权限,否则用户的插入会因为空值被拒绝。除了授权的列,其他列的值大概取▁▁▁▁▁,大概为▁▁▁▁▁。
填空1答案:主码
填空2答案:空值
填空3答案:默认值
[*] 23、定义关系的主码意味着主码属性(D)
A、必须唯-
B、不能为空
C、唯一且部门主码属性不为空
D、唯一且所可主码属性不为空
[*] 24、关于语句CREATE TABLE R(no int,sum int CHECK(sum> O} )和CREATE TABLE R(no int,sum int,CHECK(sum > O)) ,以下说法不精确的是(C)
A、两条语句都是合法的
B、前者定义了属性上的约束条件,后者定义了元组上的约束条件
C、两条语句的约束结果不一样
D、当sum属性改变时检查,上述两种CHECK约束都要被检查
[*] 25、下列说法精确的是(A)
A、使用ALTER TABLE ADD CONSTRAINT 可以增长基于元组的约束
B、假如属性A 上定义了UNIQUE 约束,则A 不可以为空
C、假如属性A 上定义了外码约束,则A 不可以为空
D、不能使用ALTER TABLE ADD CONSTRAINT 增长主码约束
[*] 26、
在CREATE TABLE 时,用户定义的完整性可以通过▁▁▁▁▁、▁▁▁▁▁、▁▁▁▁▁等子句实现。
填空1答案:NOT NULL
填空2答案:UNIQUE
填空3答案:CHECK
[*] 27、
关系R的属性A参照引用关系T的属性A,T的某条元组对应的A属性值在R中出现,当要删除T的这条元组时,体系可以采用的策略包括▁▁▁▁▁、▁▁▁▁▁、▁▁▁▁▁。
填空1答案:拒绝执行
填空2答案:级联删除
填空3答案:设为空值
[*] 28、
定义数据库完整性一般是由SQL的▁▁▁▁▁语句实现的。
填空1答案:DDL

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 头歌实训MySQL3-5章参考答案(含选填)