数据库SQL语言实战(五)(数据库系统概念第三章练习题)

简介: 本文的SQL语言适用的是Oracle数据库与mySQL可能存在略微不同

注:本文的SQL语言适用的是Oracle数据库与mySQL可能存在略微不同

前言知识

一、 关系模式

  1. 模式的定义:模式则是指数据库中所有关系模式的集合,它代表了整个数据库的结构。模式不仅包含了所有的关系模式,还可能包括视图、索引等其他数据库对象的定义。模式是数据库的整体架构,它定义了数据库中数据的组织方式和存储结构
  2. 关系模式定义:关系模式可以被看作是数据库中表的蓝图或框架,它定义了表的结构,包括表的属性(即列)和每个属性上的约束条件。它是静态的定义,不随表中数据的变化而变化。关系模式通常使用五元组来表示,包含关系名、属性集合、属性对应的域、属性到域的映射以及属性间的依赖关系

关系模式:表示一张基本表上的所有因素(属性、属性域、属性关系等)

模式:表示整个数据库的结构,是一组基本表的集合

二、 属性域

例子

CREATE DOMAIN age_domain  as INTEGER
CHECK (value >= 0 AND value <= 150)
NOT NULL;

创建了一个age_domain,这个域是整形的,数值在0-150之间 且不能为空

介绍

域本身可以理解为一个特殊的变量类型,这个变量类型包括最基础的变量类型也包括变量的约束、限制等。定义完域后,我们可以在定义表中属性时直接使用属性域。如下:

CREATE TABLE person (
    id char(10) PRIMARY KEY,
    name VARCHAR(50),
    age age_domain
);

作用

  1. 提高数据一致性:通过为用户自定义数据类型添加约束,可以确保数据库中的数据满足特定的条件,从而维护数据的一致性和准确性。
  2. 简化数据类型管理:当需要对多个表或列应用相同的数据类型和约束时,用户自定义域可以减少重复代码,使数据库管理更加简洁高效。
  3. 促进代码重用:一旦定义了域,就可以在数据库中的任何表或列上重复使用它,这有助于保持数据类型的统一性和标准化。

三、Select常数

举例

 select 2
 from employe

结果为:

解释

1、select x from employee:在数据库中直接显示x这个数构成的元组,个数为employee中记录的个数

四、集合差运算

本质

A-B:A中有B中没有。在A中减掉B的部分

举例

-- 创建集合A和B的表
CREATE TABLE set_a (id INT);
INSERT INTO set_a (id) VALUES (1), (2), (3);
 
CREATE TABLE set_b (id INT);
INSERT INTO set_b (id) VALUES (1), (4);
 
-- 计算A减去B的结果
SELECT a.id
FROM set_a a
LEFT JOIN set_b b ON a.id = b.id
WHERE b.id IS NULL;

所得到的结果为:

 id
---
 2
 3

结论

集合差运算中B中有A中没有的部分对结果不产生影响

练习题

3.17

考虑图 3.19 中的雇员数据库。用 SQL 语句给出表达式

a. 给 "第一银行公司 "的所有员工加薪 10%

update works as T
set T.salary=T.salary*1.1
where company_name='First Bank Corporation'

b. 给 "第一银行公司 "的所有经理加薪 10%

update works as T
set T.salary=T.salary*1.1
where company_name='First Bank Corporation'
and T.id in(
  select id
  from manages
)

c. 删除 "小型银行公司 "员工在works关系中的所有元组

delete from works
where company_name='Small Bank Corporation'

3.18

给出图 3.19 中雇员数据库的 SQL 模式定义。为每个属性选择一个适当的域,为每个关系模式选择一个适当的主键。为每个关系模式选择适当的域和主键。包括任何可能合适的外键约束。适当的外键约束(不单单看create本身对不对,前后顺序也要注意。有外码的要保证外表已经被创建)

create domain company_names char(20)
create domain person_names char(20)
create domain city_names char(30)
 
create table employee(
  person_name person_names,
  street char(30),
  city city_names,
  ID char(4),
  primary key(ID)
)
create table company(
  company_name company_names,
  city city_names,
  primary key(company_name)
)
create table works(
  ID char(4),
  company_name company_names,
  salary int(8),
  foreign key(ID) references employee(ID),
  foreign key(company_name) references company(company_name)
)
create table manages(
  ID char(4),
  manager_id char(4)
  foreign key(id) references employee(id)
)

3.21

考虑图 3.20 中的图书馆数据库,用 SQL 编写以下查询

a. 找出每位至少借过一本“麦格劳-希尔”出版的书的会员的编号和姓名

select memb_no,name
from member
where memb_no in(
  select memb_no
  from book bk,borrowed bw
  where bk.isbn=bw.isbn
  and publisher='McGraw-Hill'
)

b.找出每一位借过“麦格劳-希尔”出版的所有书的会员的编号和姓名

select memb_no,name
from member m
where no exists(
  (
    select isbn
    from book bk
    where publisher='McGraw-Hill'
  )
  minus
  (
    select isbn
    from borrowed bw
    where m.memb_no=bw.memb_no
  )
)

c.对于每个出版商,找出每个借了该出版商五本书以上的会员的编号和姓名

select memb_no,name
from member m
where memb_no in(
  select memb_no
  from borrowed bw,book bk
  where bw.isbn=bk.isbn
  group by publisher,memb_no
  having (count(*)>5)
)

d.找出每位会员的平均借书量。考虑到如果一个成员没有借阅任何书籍,那么该成员根本不会出现在借阅关系中,但该成员仍然计算在平均值中

select avg(ci)
from(
    select member.memb_no,count(isbn)
    from borrowed,member
    where borrowed.memb_no(+)=member.memb_no
    group by member.memb_no) as tab1(memb_no,ci)
2.

总结

如果能帮助到大家,大家可以点点赞、收收藏呀~

相关文章
|
2月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
305 7
|
3月前
|
SQL 数据管理 关系型数据库
SQL 语言入门:开启数据管理的大门
在数字化时代,数据已成为核心资产,而 SQL 作为操作关系型数据库的标准语言,是数据从业者、程序员及办公人员必备技能。本文从基础概念讲起,详解 SQL 的核心用法,包括数据查询、插入、修改、删除及表结构操作,并通过实例演示帮助读者快速上手。掌握 SQL,不仅能提升数据处理效率,更为深入理解数据管理打下坚实基础。
|
人工智能 关系型数据库 OLAP
聚光灯已就位!阿里云瑶池数据库邀你征战Cursor首届实战征文大赛
阿里云AnalyticDB携手Cursor中文社区,正式发起首届实战征文大赛!我们诚邀开发者融合Cursor的智能编程能力与AnalyticDB PostgreSQL提供的Supabase服务进行项目开发,让优秀项目被专家看见、被机遇拥抱!
|
6月前
|
关系型数据库 MySQL 数据库连接
Django数据库配置避坑指南:从初始化到生产环境的实战优化
本文介绍了Django数据库配置与初始化实战,涵盖MySQL等主流数据库的配置方法及常见问题处理。内容包括数据库连接设置、驱动安装、配置检查、数据表生成、初始数据导入导出,并提供真实项目部署场景的操作步骤与示例代码,适用于开发、测试及生产环境搭建。
250 1
|
6月前
|
SQL 数据建模 关系型数据库
别光知道存数据库了,数据建模才是王道!(入门指南+实战代码)
别光知道存数据库了,数据建模才是王道!(入门指南+实战代码)
802 4
|
2月前
|
SQL Oracle 关系型数据库
SQL语言小结
针对数据库、表单和数据行的增删改,没有涉及到sql真正的用途也就是查询,sql提供的查询语句的关键字占 sql 语言的一半之多,查询语句还是得单拿出来讲,不然太多了。 因为没有涉及到查询,所以sql的新增和修改都是很笼统的做法,drop、alter drop、delete这些很容易,逻辑性也不强,再次说明sql的真正精髓在于查询,不然为啥叫做结构化查询语言
276 0
|
2月前
|
SQL 关系型数据库 MySQL
(SQL)SQL语言中的查询语句整理
查询语句在sql中占了挺大一部分篇幅,因为在数据库中使用查询语句的次数远多于更新与删除命令。而查询语句比起其他语句要更加的复杂,可因为sql是数据库不可或缺的一部分,所以即使不懂,也必须得弄懂,以上。
222 0
|
3月前
|
存储 数据库 开发者
Python SQLite模块:轻量级数据库的实战指南
本文深入讲解Python内置sqlite3模块的实战应用,涵盖数据库连接、CRUD操作、事务管理、性能优化及高级特性,结合完整案例,助你快速掌握SQLite在小型项目中的高效使用,是Python开发者必备的轻量级数据库指南。
285 0
|
3月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
138 3
|
3月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。

热门文章

最新文章