【问题标题】:SQL library database schemaSQL 库数据库架构
【发布时间】:2019-10-01 05:39:25
【问题描述】:

我的问题是找到 John Smith 当前正在借阅的所有图书的图书 ID、书名和到期日期。

这是架构:

  • 图书(bookID (PK)、ISBN、书名、作者、出版年份、类别)
  • 成员(memberID (PK)、姓氏、名字、地址、电话号码、限制)
  • CurrentLoan(memberID (PK)、bookID (PK)、贷款日期、到期日)
  • 历史记录(memberID (PK)、bookID (PK)、借出日期 (PK)、归还日期)

会员可以从图书馆借书。他们可以借书的数量受成员关系的“限制”字段的限制(不同的成员可能会有所不同)。书籍的类别包括小说、非小说、儿童和参考书。 CurrentLoan 表表示有关当前已签出的书籍的信息。当图书归还图书馆时,该记录将从 CurrentLoad 关系中删除,并以归还日期插入到 History 关系中。一个图书馆可能拥有同一本书的多个副本,在这种情况下,每个副本都有自己的 bookID,但所有副本共享相同的 ISBN。

CREATE TABLE Book
(
    bookID INT NOT NULL,
    ISBN INT NOT NULL,
    title VARCHAR NOT NULL,
    Author CHAR,
    publish_year INT, 
    category VARCHAR,      
    PRIMARY KEY (bookID)
);

CREATE TABLE Member_
(
    memberID INT NOT NULL,
    lastname CHAR NOT NULL,
    firstname CHAR NOT NULL,
    address_ VARCHAR,    
    phone_number INT,   
    limit_ INT,

    PRIMARY KEY (memberID, lastname, firstname)
);

CREATE TABLE CurrentLoan
(
    memberID INT NOT NULL,
    bookID INT NOT NULL,
    loan_date DATE,
    due_date DATE,

    PRIMARY KEY (memberID, bookID),
    FOREIGN KEY (bookID) REFERENCES Book(bookID)
);

CREATE TABLE History
(
    memberID INT NOT NULL,
    bookID INT NOT NULL,
    loan_date DATE NOT NULL,
    return_date DATE,

    PRIMARY KEY (memberID, bookID, loan_date),
    FOREIGN KEY (bookID) REFERENCES Book(bookID),
    FOREIGN KEY (memberID) REFERENCES Member_(memberID)
);

INSERT INTO Member_ 
VALUES (1001, 'Smith', 'John', 'Captial road', 9195863230, 10);

INSERT INTO Member_ 
VALUES (2123, 'Sacks', 'Mark', '7th Black Street', 9195627774, 10);

INSERT INTO Member_ 
VALUES (3456, 'Johnson', 'Susan', '405 South', 9198564325, 10);

INSERT INTO Member_ 
VALUES (4223, 'States', 'Nick', '12th East Street', 9198889999, 10);

INSERT INTO Member_ 
VALUES (5987, 'Stew', 'Martha', '85 North', 9193642256, 10);

INSERT INTO Book 
VALUES (0001, 444222666325, 'Mars', 'Mark Sas', 2001, 'fiction');

INSERT INTO Book 
VALUES (0002, 784566512135, 'The Cow', 'Stephy Williams', 1996, 'children');

INSERT INTO Book 
VALUES (0003, 488984115444, 'XML for beginners', 'Jake Snow', 2005, 'non-fiction'); 

INSERT INTO Book 
VALUES (0004, 544465545655, 'Into Thin Air', 'Jon Krakauer', 1990, 'non-fiction'); 

INSERT INTO Book 
VALUES (0005, 878745656513, 'And Tango Makes Three', 'Peter Parnell', 1956, 'children');

INSERT INTO Book 
VALUES (0006, 564564123213, 'Swimmy', 'Leo Lionni', 2010, 'children');

INSERT INTO Book 
VALUES (0007, 132125645678, 'XML and XQuery Tutorial', 'Lee Cakes', 2014, 'non-fiction');

INSERT INTO Book 
VALUES (0008, 132154548746, 'Happy Places', 'Steve Zus', 1998, 'refrence');

INSERT INTO Book 
VALUES (0009, 788897998754, 'The Mascot', 'Kevin Bacon', 1987, 'fiction');

INSERT INTO Book 
VALUES (0010, 878561132116, 'XQuery for beginners', 'Virginia 

伍尔夫,2018,“非小说”);

INSERT INTO CurrentLoan VALUES (5987, 0004, '13-SEP-17', '14-NOV-17');
INSERT INTO CurrentLoan VALUES (2123, 0003, '13-JAN-17', '15-NOV-17');
INSERT INTO CurrentLoan VALUES (4223, 0009, '14-FEB-17', '12-MAR-17');
INSERT INTO CurrentLoan VALUES (1001, 0005, '12-OCT-17', '09-NOV-17');
INSERT INTO CurrentLoan VALUES (2123, 0002, '13-APR-17', '12-MAY-17');

INSERT INTO History VALUES (4223, 0007, '14-Jan-17', '04-OCT-17');
INSERT INTO History VALUES (3456, 0001, '12-Jan-17', '04-NOV-17');
INSERT INTO History VALUES (1001, 0003, '14-APR-17', '08-OCT-17');
INSERT INTO History VALUES (5987, 0009, '14-MAY-17', '04-DEC-17');

这是查询,但它输出所有 CurrentLoan 值,谁能帮我让它只输出 John Smith 的值:

SELECT 
    Book.bookID, title, due_date 
FROM 
    Book, Member_ 
INNER JOIN 
    CurrentLoan ON Book.bookID = CurrentLoan.bookID 
WHERE 
    Member_.lastname = 'Smith' AND Member_.firstname = 'John';

我需要回答的问题是:找到 John Smith 当前正在借阅的所有图书的图书 ID、书名和到期日期。

【问题讨论】:

标签: sql sqlite


【解决方案1】:

试试看:


SELECT book.bookID, title, due_date 
FROM Book 
INNER JOIN CurrentLoan ON Book.bookID= CurrentLoan.bookID 
inner join Member on Member.memberID = CurrentLoan.memberID
WHERE Member.lastname='Smith' AND Member.firstname= 'John';

【讨论】:

  • 我还有一个问题 查找过去或现在从未借过书的会员的会员 ID、姓氏和名字。你能帮我吗
  • select member.* from Member left join CurrentLoan on CurrentLoan.memberID = Member.memberid left join history on history.memberID = Member.memberid where History.memberID is null and CurrentLoan.memberID is null跨度>
  • 我认为是来自会员。*
  • 用mamber_替换所有成员
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
  • 2017-01-18
  • 2011-01-06
相关资源
最近更新 更多