"这些练习题主要涉及SQL语言的基础操作,包括创建表、更新数据、查询数据、连接查询、创建视图以及权限管理等。"
在SQL语言中,创建表是数据库操作的基础,例如创建图书表的SQL语句:
```sql
CREATE TABLE book (
Book_id CHAR(10) PRIMARY KEY,
Name VARCHAR(30) NOT NULL,
Author VARCHAR(20),
Publish VARCHAR(30),
Price DECIMAL(6,2)
);
```
这个语句创建了一个名为`book`的表,包含了图书ID(主键)、书名(非空)、作者、出版社和价格字段。
更新数据是数据库维护的重要环节,如将编号为“NEU1105101”的图书的定价改为50元,可以使用:
```sql
UPDATE book
SET price = 50
WHERE book_id = 'NEU1105101';
```
查询操作则涵盖了多种类型,例如查询所有男性读者的姓名和出生日期:
```sql
SELECT name, birthdate
FROM reader
WHERE sex = '男';
```
查询不同出版社并按升序排列:
```sql
SELECT publish
FROM book
ORDER BY publish ASC;
```
多表连接查询在处理复杂数据关系时十分常见,比如查询借阅过20到40元图书的读者姓名:
```sql
SELECT Name
FROM borrow
JOIN book ON borrow.book_id = book.book_id
JOIN reader ON borrow.reader_id = reader.reader_id
WHERE price BETWEEN 20 AND 40;
```
统计每个读者的借阅数量:
```sql
SELECT COUNT(book_id), reader_id
FROM borrow
JOIN book ON borrow.book_id = book.book_id
JOIN reader ON borrow.reader_id = reader.reader_id
GROUP BY reader_id;
```
权限管理用于控制用户对数据的访问,给用户user001分配对图书表的更新权限:
```sql
GRANT UPDATE ON book TO user001;
```
创建视图可以简化查询,例如创建一个名为view001的视图,展示出版社信息:
```sql
CREATE VIEW view001 AS
SELECT publish, COUNT(book_id), MAX(price), MIN(price)
FROM book
GROUP BY publish;
```
最后,查询出版图书超过100本的出版社及其数量:
```sql
SELECT COUNT(book_id), publish
FROM book
GROUP BY publish
HAVING COUNT(book_id) > 100;
```
这里的`HAVING`子句用于过滤分组后的结果,因为它不能与聚合函数一起在`WHERE`子句中使用。