SQL连接查询到库

SQL连接查询到库,sql,Sql,我有这些桌子 CREATE TABLE Book ( ISBN字符(05)不为空, BKName VARCHAR(20)不为空, 作者VARCHAR(20)不为空, 价格数字(02)不为空, 约束书主键(ISBN) ); 创建表位置 ( LoID字符(05)不为空, CityName VARCHAR(15)不为空, 斯托克字符(05)不为空, 约束位置\u PK主键(LoID) ); 创建表客户 ( CuID字符(05)不为空, CusName VARCHAR(20)不为空, 注册日期不为

我有这些桌子

CREATE TABLE Book
(
ISBN字符(05)不为空,
BKName VARCHAR(20)不为空,
作者VARCHAR(20)不为空,
价格数字(02)不为空,
约束书主键(ISBN)
);
创建表位置
( 
LoID字符(05)不为空,
CityName VARCHAR(15)不为空,
斯托克字符(05)不为空,
约束位置\u PK主键(LoID)
);
创建表客户
(  
CuID字符(05)不为空,
CusName VARCHAR(20)不为空,
注册日期不为空,
性别VARCHAR(06)不为空,
TeleNum字符(12)不为空,
地址VARCHAR(30)不为空,
约束客户主键(CuID)
);
创建表格书籍副本
(  
CopyID字符(05)不为空,
ISBN字符(05)不为空,
LoID字符(05)不为空,
约束pk_BookCopy主键(CopyID),
约束fk_BookCopy_ISBN_fk外键(ISBN)参考书(ISBN),
约束fk\U BookCopy\U LoID\U fk外键(LoID)引用位置(LoID)
); 
创建表记录
(
BrrDate日期不为空,
返回日期不为空,
BrFee编号(05)不为空,
Cus_Review NUMERIC(02)不为空,
CopyID字符(05)不为空,
CuID字符(05)不为空,
约束pk_记录主键(CopyID、CuID),
约束fk\U借阅记录\U CopyID\U fk外键(CopyID)引用BookCopy(CopyID),
约束fk_记录_CuID_fk外键(CuID)引用客户(CuID));
这是一项任务:“编写并测试一个查询,列出每个客户的客户ID和姓名以及他们在过去200天内租用的书籍。包括这些租用的开始日期、结束日期和地点名称。所有客户详细信息(ID和姓名)应该包括在输出中,无论他们是否实际借过任何书籍。”

我写了一个查询,列出每个客户的客户ID和姓名,以及他们在过去200天内借来的书籍。包括这些雇佣的开始日期、结束日期和地点名称。这是对它的查询

选择
brookrecord.CuID、Customer.CusName、Book.ISBN、Book.BkName、,
BorrowRecord.BrrDate、BorrowRecord.RetDate、Location.CityName
从…起
书
左连接
BookCopy ON Book.ISBN=BookCopy.ISBN
左连接
BookCopy.CopyID上的借款记录=借款记录.CopyID
左连接
借款记录上的客户.CuID=客户.CuID
左连接
Location.LoID上的位置=BookCopy.LoID
哪里
browRecord.BrrDate>=sysdate-200;

但我还需要获得输出中应该包含的所有客户详细信息(ID和姓名),无论他们是否实际借过任何书籍。如何操作?

如果您想独立查看所有客户,无论他们是否已借书,请务必根据customers表执行第一个左联接。在脚本中,从Book开始,然后加入到BorrowRecord,只有这样,客户才位于连接的右侧。另一点是WHERE-Condition,它排除了借书超过200天范围的客户的所有条目。这意味着将显示所有BorrowRecord记录(与以前的加入匹配),但仅显示在过去200天的BorrowRecords链接中找到的客户。 请尝试以下操作:

SELECT BorrowRecord.CuID, Customer.CusName, Book.ISBN, Book.BkName, 
BorrowRecord.BrrDate,BorrowRecord.RetDate, Location.CityName
FROM Customer
LEFT JOIN BorrowRecord ON BorrowRecord.CuID = Customer.CuID
LEFT JOIN BookCopy ON BorrowRecord.CopyID = BookCopy.CopyID
LEFT JOIN Book ON BookCopy.ISBN= Book.ISBN
LEFT JOIN Location ON Location.LoID = BookCopy.LoID
WHERE ISNULL(BorrowRecord.BrrDate,'') >=sysdate-200 ;

请为您使用的dbms添加标记,并添加示例数据和预期结果。首先我要感谢你的帮助。我尝试使用您的quary,但错误是“WHERE is NULL(brookrecord.BrrDate,”)>=sysdate-200”*我认为您的数据库中不允许与日期相关的isnull上的空输出。请尝试使用ISNULL(brookrecord.BrrDate,'1900-01-01')>=sysdate-200。也许你必须根据你所在国家/地区的设置调整日期的格式。谢谢你现在的成功,非常感谢