《数据库系统概念(第六版)》读书笔记——第6章:高级SQL

这篇读书笔记探讨了《数据库系统概念》第6章的内容,主要关注高级SQL特性,包括JDBC、函数和过程的声明与调用,以及触发器的定义、需求和适用场景。文章通过示例解释了SQL与Java/C++/C编写函数和过程的区别,并提醒读者触发器虽然功能强大,但在某些情况下并不推荐使用。
摘要由CSDN通过智能技术生成

高级SQL

标签(空格分隔): 数据库


JDBC

示例(来自课后习题)

public class ResultSetTable {
   
    private ResultSet resultSet;
    private ResultSetMetaData reslutSetMetaDate;
    private int cols_num;

    public void resultSetTable (ResultSet resultSet) throws SQLException {
        this.resultSet = resultSet;
        reslutSetMetaDate = resultSet.getMetaData();
        cols_num = reslutSetMetaDate.getColumnCount();

        for (int i = 1; i <= cols_num; i++) {
            System.out.println(reslutSetMetaDate.getColumnName(i) + '  ');
        }
        while ( resultSet.next()) {
            for (int i = 1; i  <= cols_num; i++) {
                system.out.println(reslutSet.getString(reslutSetMetaDate.getColumnName(i)) + ' ');}
        }
    }
}

示例二

函数和过程

1. SQL和Java/C++/C都可以编写函数和过程,有什么不同?

SQL
函数和过程允许“业务逻辑”作为存储过程记录在数据库中,并在数据库内执行。尽管这样的“业务逻辑”能被写成程序设计语言过程并完全存储在数据库之外,但把它们定义成数据库的存储过程有以下的优点

- 允许多个应用访问
- 当业务规则发生变化时,进行单个节点的改变,而不必更改应用程序的其他部分
- 应用代码可以调用存储过程,而不是直接更新数据库关系
程序设计语言
SQL标准不被很多数据库所支持,由此,即便是最基本的特性在不同的数据库产品中,都会有不同的语法与语义。在这种情况下,使用一种命令式程序设计语言,从SQL查询和触发器的定义中调用,可以免去程序员学习多种非标准数据库语言的烦恼。

2. 声明和调用SQL函数和过程

示例一:普通函数
--声明函数
--给定系名,返回该系的教师数木
create function dept_count (dept_name varchar(20))
    returns integer
    beign
        declare d_count integer
        select d_count integer
        from instructor
        where instructor.dept_name = dept_name;
        return d_count;
    end
--调用函数
--返回教师数大于12的所有系的名称和预算
select dept_name, budget
from department
where dept_count(dept_name) > 12;
示例二:表函数——返回表作为结果
--声明函数
--返回包含某特定系的所有教师的表
create function instructor_of(dept_name varchar(20))
    returns table(
            ID varchar(5),
            name varchar(20),
            dept_name varchar(20),
            salary numeric(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值