帐户(编号,姓名,余额,建立日期,储蓄所编号) 储蓄所(编号,名称,地址,人数,所属城市) 借贷(帐户,借贷类型,金额,日期) 根据上面基本表的信息完成下列查询。 1 统计各个储蓄所的帐户个数和余额总数。
时间: 2023-07-27 11:11:01 浏览: 97
可以使用以下 SQL 语句来实现该查询:
```
SELECT 储蓄所.名称, COUNT(帐户.编号) AS 帐户个数, SUM(帐户.余额) AS 余额总数
FROM 储蓄所 INNER JOIN 帐户 ON 储蓄所.编号 = 帐户.储蓄所编号
GROUP BY 储蓄所.名称;
```
解释一下这个 SQL 语句的意思:
- 使用 INNER JOIN 将两个表连接起来,连接条件是储蓄所的编号等于帐户的储蓄所编号。
- 使用 COUNT 函数统计帐户编号的个数,使用 SUM 函数统计帐户余额的总数。
- 使用 GROUP BY 子句按照储蓄所的名称分组,得到每个储蓄所的帐户个数和余额总数。
相关问题
利用SQL Server Management Studio对象资源管理器建立帐户信息数据库,并定义以下基本表: 帐户(帐户编号,姓名,余额,建立日期,储蓄所编号) 储蓄所(储蓄所编号,名称,地址,人数,所属城市) 借贷(帐户编号,借贷类型,金额,日期)用代码输入数据
以下是建立帐户信息数据库和定义基本表的SQL代码:
```
CREATE DATABASE AccountInfo;
USE AccountInfo;
CREATE TABLE Account (
AccountNumber INT PRIMARY KEY,
Name VARCHAR(50) NOT NULL,
Balance DECIMAL(18,2),
CreationDate DATE,
SavingsBankNumber INT,
FOREIGN KEY (SavingsBankNumber) REFERENCES SavingsBank(SavingsBankNumber)
);
CREATE TABLE SavingsBank (
SavingsBankNumber INT PRIMARY KEY,
Name VARCHAR(50) NOT NULL,
Address VARCHAR(100),
NumberOfPeople INT,
City VARCHAR(50)
);
CREATE TABLE Loan (
AccountNumber INT,
LoanType VARCHAR(50),
Amount DECIMAL(18,2),
Date DATE,
FOREIGN KEY (AccountNumber) REFERENCES Account(AccountNumber)
);
INSERT INTO SavingsBank VALUES (1, 'ABC Savings Bank', '123 Main St.', 100, 'New York');
INSERT INTO SavingsBank VALUES (2, 'XYZ Savings Bank', '456 Maple Ave.', 200, 'Los Angeles');
INSERT INTO Account VALUES (1, 'John Smith', 5000.00, '2021-01-01', 1);
INSERT INTO Account VALUES (2, 'Jane Doe', 10000.00, '2021-02-15', 2);
INSERT INTO Loan VALUES (1, 'Personal Loan', 1000.00, '2021-03-01');
INSERT INTO Loan VALUES (2, 'Car Loan', 5000.00, '2021-04-15');
```
帐户(编号,姓名,余额,建立日期,储蓄所编号) 储蓄所(编号,名称,地址,人数,所属城市) 借贷(帐户,借贷类型,金额,日期) 建立储蓄所的delete 触发器,只有当此储蓄所没有帐户时才可删除,若有销售记录不能删除。
这是一个关于数据库设计的问题。根据你的需求,可以设计以下表:
1. 帐户表(Account):包括编号(AccountID)、姓名(Name)、余额(Balance)、建立日期(CreateDate)、储蓄所编号(SavingsID)等字段。
2. 储蓄所表(Savings):包括编号(SavingsID)、名称(Name)、地址(Address)、人数(PeopleNum)、所属城市(City)等字段。
3. 借贷表(Loan):包括帐户编号(AccountID)、借贷类型(LoanType)、金额(Amount)、日期(Date)等字段。
在设计完表之后,需要创建触发器来实现当删除储蓄所时的限制条件。具体步骤如下:
1. 创建一个名为“before_delete_savings”的BEFORE DELETE触发器。
2. 在触发器中,使用IF语句来判断当前储蓄所是否有帐户和销售记录。如果有,则使用RAISERROR语句抛出异常,阻止删除操作。
3. 如果当前储蓄所没有帐户,则允许删除操作继续进行。
以下是示例SQL代码:
```
CREATE TRIGGER before_delete_savings
ON Savings
BEFORE DELETE
AS
BEGIN
IF EXISTS(SELECT 1 FROM Account WHERE SavingsID = deleted.SavingsID)
BEGIN
RAISERROR('This savings has accounts, cannot be deleted!',16,1)
ROLLBACK TRANSACTION
RETURN
END
IF EXISTS(SELECT 1 FROM Sales WHERE SavingsID = deleted.SavingsID)
BEGIN
RAISERROR('This savings has sales records, cannot be deleted!',16,1)
ROLLBACK TRANSACTION
RETURN
END
END
```
注意,在创建触发器时要根据实际情况修改表名和字段名。另外,触发器中的RAISERROR语句可以根据需求自定义错误信息。
阅读全文