Oracle 数据库 where 子句
Oracle database where clause
我有以下带表的数据库,我确实尝试查询它们:
检索所有已借书超过五本书的借书人的姓名、地址和借书数量。
我已经创建了查询
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)
);
您确实需要连接 BORROWER
table 与 BOOK_LOANS
table 的连接。连接应该在共享密钥上(即 CardNO
)。
要计算借书的数量,您可以使用 COUNT()
聚合函数,并将其与 GROUP BY
子句结合使用,该子句根据 [=] 的唯一组合将数据分组16=]。
现在每个卡号都有借书数了
最后,您应用 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
我有以下带表的数据库,我确实尝试查询它们: 检索所有已借书超过五本书的借书人的姓名、地址和借书数量。 我已经创建了查询
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)
);
您确实需要连接 BORROWER
table 与 BOOK_LOANS
table 的连接。连接应该在共享密钥上(即 CardNO
)。
要计算借书的数量,您可以使用 COUNT()
聚合函数,并将其与 GROUP BY
子句结合使用,该子句根据 [=] 的唯一组合将数据分组16=]。
现在每个卡号都有借书数了
最后,您应用 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