Join Oracle数据库where子句

Join Oracle数据库where子句,join,oracle11g,Join,Oracle11g,我有以下带有表的db,并且我尝试查询它们: 检索所有已签出五本以上图书的借款人的姓名、地址和已签出图书的数量。 我已经创建了查询 select name, Address from BORROWER where BOOK_LOANS.BookId >= 5; 看来我需要一个加入的表,我被困在这里,我能得到帮助吗 CREATE TABLE BOOK ( BookId CHAR(20) NOT NULL, Title VARCHAR(30) NOT NULL, Publishe

我有以下带有表的db,并且我尝试查询它们: 检索所有已签出五本以上图书的借款人的姓名、地址和已签出图书的数量。 我已经创建了查询

select name, Address
from BORROWER
where BOOK_LOANS.BookId >= 5;
看来我需要一个加入的表,我被困在这里,我能得到帮助吗

CREATE TABLE BOOK ( 
  BookId CHAR(20) NOT NULL,
  Title VARCHAR(30) NOT NULL,
  PublisherName VARCHAR(20),
  PRIMARY KEY (BookId),
  FOREIGN KEY (PublisherName) REFERENCES PUBLISHER (PublisherName) 
);

CREATE TABLE BOOK_AUTHORS ( 
  BookId CHAR(20) NOT NULL,
  AuthorName VARCHAR(30) NOT NULL,
  PRIMARY KEY (BookId, AuthorName),
  FOREIGN KEY (BookId) REFERENCES BOOK (BookId)
  ON DELETE CASCADE 
);

// PublisherName was added, as it was referenced by another 
// table but did not exist as an attribute.

CREATE TABLE PUBLISHER ( 
  PublisherName VARCHAR(20) NOT NULL,
  Address VARCHAR(40) NOT NULL,
  Phone CHAR(12),
  PRIMARY KEY (PublisherName) 
);

CREATE TABLE BOOK_COPIES ( 
  BookId CHAR(20) NOT NULL,
  BranchId INTEGER NOT NULL,
  No_Of_Copies INTEGER NOT NULL,
  PRIMARY KEY (BookId, BranchId),
  FOREIGN KEY (BookId) REFERENCES BOOK (BookId)
  ON DELETE CASCADE,
  FOREIGN KEY (BranchId) REFERENCES BRANCH (BranchId)
  ON DELETE CASCADE
);

CREATE TABLE BORROWER ( 
  CardNo INTEGER NOT NULL,
  Name VARCHAR(30) NOT NULL,
  Address VARCHAR(40) NOT NULL,
  Phone CHAR(12),
  PRIMARY KEY (CardNo) 
);

CREATE TABLE BOOK_LOANS ( 
  CardNo INTEGER NOT NULL,
  BookId CHAR(20) NOT NULL,
  BranchId INTEGER NOT NULL,
  DateOut DATE NOT NULL,
  DueDate DATE NOT NULL,
  PRIMARY KEY (CardNo, BookId, BranchId),
  FOREIGN KEY (CardNo) REFERENCES BORROWER (CardNo)
  ON DELETE CASCADE,
  FOREIGN KEY (BranchId) REFERENCES BRANCH (BranchId)
  ON DELETE CASCADE,
  FOREIGN KEY (BookId) REFERENCES BOOK (BookId)
  ON DELETE SET NULL 
);

CREATE TABLE BRANCH ( 
  BranchId INTEGER NOT NULL,
  BranchName VARCHAR(20) NOT NULL,
  Address VARCHAR(40) NOT NULL,
  PRIMARY KEY (BranchId) 
);

您确实需要一个联接,将
forrower
表与
BOOK\u LOANS
表连接起来。连接应位于共享密钥(即
CardNO
)上

要计算借阅的图书数量,请使用
count()
聚合函数,并将其与
GROUP BY
子句相结合,该子句根据
CardNo、Name、Address的唯一组合将数据划分为多个组

现在,您有了每个卡号的借书数量

最后,应用
HAVING
子句来过滤组,使其仅包括已借阅五本或更多书籍的组

SELECT b.Name, b.Address, COUNT(*) AS BookCount
FROM BORROWER b
JOIN BOOK_LOANS bl ON b.CardNo = bl.CardNo
GROUP BY b.CardNO, b.Name, b.Address
HAVING COUNT(bl.BookID) >= 5

是的,你需要加入。幸运的是,它们有很好的文档记录。你尝试过什么?你标记MySQL,但是说Oracle。你指的是哪一个?MySQL也是Oracle然而,这是您的第三个问题,其中需要一些认真的重新标记,并且没有显示出您自己尝试解决问题的努力。因此,我否决了你的问题。请先搜索并尝试自己解决问题。如果您有实际的尝试,我们将提供帮助。另外,请在你的问题上下功夫。这是你需要解决的问题。好吧,甲骨文拥有,但它的SQL与甲骨文有很大的不同。所以我仍然建议正确的标签。@GolezTrol我编辑了问题并删除了标签,以后我会更加小心。谢谢,谢谢!!!很好的解释,我现在正在寻找条款。我是按计数和顺序做的