图书(书号,书名,作者编号,价格,出版社编号) 作者(编号,姓名,电话) 出版社(编号,出版社名称,地址) 根据上面基本表的信息完成下列查询。 1 查询价格10元以下的图书作者信息 2 查询比“张力”写的书都便宜的图书信息 3 查询高教出版社出版的图书书名和作者姓名
时间: 2023-06-26 15:07:44 浏览: 448
1. 查询价格10元以下的图书作者信息:
```
SELECT 作者.编号, 作者.姓名, 作者.电话
FROM 图书, 作者
WHERE 图书.作者编号 = 作者.编号 AND 图书.价格 < 10;
```
2. 查询比“张力”写的书都便宜的图书信息:
```
SELECT *
FROM 图书
WHERE 价格 < (SELECT MIN(价格)
FROM 图书, 作者
WHERE 图书.作者编号 = 作者.编号 AND 作者.姓名 = '张力');
```
3. 查询高教出版社出版的图书书名和作者姓名:
```
SELECT 图书.书名, 作者.姓名
FROM 图书, 作者, 出版社
WHERE 图书.作者编号 = 作者.编号 AND 图书.出版社编号 = 出版社.编号 AND 出版社.出版社名称 = '高教';
```
相关问题
图书(书号,书名,作者编号,价格,出版社编号) 作者(编号,姓名,电话) 出版社(编号,出版社名称,地址) 建立作者的delete 触发器,只有当此作者没有任何作品才可删除,若有出书的记录不能删除。
好的,针对这个问题,我可以给出一个 MySQL 数据库的解决方案。
首先,我们需要创建三张表:`books`,`authors` 和 `publishers`。具体的 SQL 代码如下:
```sql
CREATE TABLE books (
book_id INT PRIMARY KEY AUTO_INCREMENT,
book_name VARCHAR(255) NOT NULL,
author_id INT NOT NULL,
price DECIMAL(10,2) NOT NULL,
publisher_id INT NOT NULL,
FOREIGN KEY (author_id) REFERENCES authors (author_id),
FOREIGN KEY (publisher_id) REFERENCES publishers (publisher_id)
);
CREATE TABLE authors (
author_id INT PRIMARY KEY AUTO_INCREMENT,
author_name VARCHAR(255) NOT NULL,
phone VARCHAR(20) NOT NULL
);
CREATE TABLE publishers (
publisher_id INT PRIMARY KEY AUTO_INCREMENT,
publisher_name VARCHAR(255) NOT NULL,
address VARCHAR(255) NOT NULL
);
```
接下来,我们需要创建一个名为 `check_author_books` 的存储过程,用于检查某个作者是否有任何作品。具体的 SQL 代码如下:
```sql
DELIMITER //
CREATE PROCEDURE check_author_books(IN author_id INT, OUT can_delete BOOL)
BEGIN
DECLARE book_count INT DEFAULT 0;
SELECT COUNT(*) INTO book_count FROM books WHERE author_id = author_id;
IF book_count > 0 THEN
SET can_delete = FALSE;
ELSE
SET can_delete = TRUE;
END IF;
END//
DELIMITER ;
```
最后,我们需要创建一个名为 `authors_delete_trigger` 的触发器,用于在删除作者时自动调用 `check_author_books` 存储过程。具体的 SQL 代码如下:
```sql
CREATE TRIGGER authors_delete_trigger
BEFORE DELETE ON authors
FOR EACH ROW
BEGIN
DECLARE can_delete BOOL;
CALL check_author_books(OLD.author_id, can_delete);
IF NOT can_delete THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Cannot delete author with books';
END IF;
END;
```
现在,当你尝试删除一个有作品的作者时,MySQL 会抛出异常并阻止删除操作。只有当此作者没有任何作品时才可删除。
mysql图书(书号,书名,作者编号,价格,出版社编号) 作者(编号,姓名,电话) 出版社(编号,出版社名称,地址) 建立作者的delete 触发器,只有当此作者没有任何作品才可删除,若有出书的记录不能删除。
您可以使用以下的 SQL 语句创建一个名为 `authors_delete_trigger` 的触发器,实现在删除作者的时候检查是否有此作者的作品记录,若有则不能删除,若没有则可以删除:
```sql
CREATE TRIGGER authors_delete_trigger
BEFORE DELETE ON authors
FOR EACH ROW
BEGIN
DECLARE num_books INT;
SELECT COUNT(*) INTO num_books FROM mysql图书 WHERE 作者编号 = OLD.编号;
IF num_books > 0 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = '该作者有出版的书籍,不能删除!';
END IF;
END;
```
该触发器在每次执行 `DELETE` 操作前会被触发,使用 `SELECT COUNT(*)` 统计该作者的作品记录数量,如果数量大于 0 ,则使用 `SIGNAL` 抛出一个自定义的异常信息,阻止删除操作继续执行。同时,使用 `OLD` 来引用被删除的作者记录。
阅读全文