Схема базы данных библиотеки SQL - PullRequest
1 голос
/ 01 октября 2019

Вопрос, который у меня возникает, - найти идентификатор книги, название и срок оплаты всех книг, которые в настоящее время проверяются Джоном Смитом.

Это схема:

  • Книга (bookID (PK), ISBN, название, автор, год публикации, категория)
  • Member (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 

Woolf ', 2018, «non-fiction»);

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, может кто-нибудь помочь мне, чтобы он выводил только значения Джона Смита:

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';

Вопрос, который мне нуженОтвет таков: найдите идентификатор, название и срок оплаты всех книг, которые в настоящее время проверяются Джоном Смитом.

1 Ответ

2 голосов
/ 01 октября 2019

попробуйте:


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';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...