Mysql 在SQL中缩写与不缩写
我第一次参加SQL课程,在使用Mysql 在SQL中缩写与不缩写,mysql,sql,sql-server,select,Mysql,Sql,Sql Server,Select,我第一次参加SQL课程,在使用leebooks.SQL文件编写查询时遇到问题。我遇到了一个解决方案,但我很好奇,因为我找到的解决方案将所有表和列都缩写了。当我试图按照我的教授的偏好重写没有缩写的查询时,我得到一个错误,即表不存在。我认为我重写的正确,带缩写的查询很好。如果需要,我不知道在哪里上传SQL文件?以下是查询: 使用缩写: SELECT b.Title, bo.OrderDate,bo.OrderID FROM BOOKS b LEFT OUTER JOIN ORDER_ITEMS oi
leebooks.SQL
文件编写查询时遇到问题。我遇到了一个解决方案,但我很好奇,因为我找到的解决方案将所有表和列都缩写了。当我试图按照我的教授的偏好重写没有缩写的查询时,我得到一个错误,即表不存在。我认为我重写的正确,带缩写的查询很好。如果需要,我不知道在哪里上传SQL文件?以下是查询:
使用缩写:
SELECT b.Title, bo.OrderDate,bo.OrderID
FROM BOOKS b
LEFT OUTER JOIN ORDER_ITEMS oi
ON b.BookID = oi.BookID
LEFT OUTER JOIN BOOK_ORDER bo
ON oi.OrderID = bo.OrderID
ORDER BY oi.BOOKID DESC;
无缩写:
SELECT BOOKS.Title, BOOK_ORDER.OrderDate, BOOK_ORDER.OrderID
FROM BOOKS
LEFT OUTER JOIN ORDER_ITEMS.OrderID
ON BOOKS.BookID = ORDER_ITEMS.BookID
LEFT OUTER JOIN BOOK_ORDER
ON ORDER_ITEMS.OrderID = BOOK_ORDER.OrderID
ORDER BY ORDER_ITEMS.BookID DESC;
我不明白为什么第二个不起作用,而第一个,如果他们基本上是一样的东西。我缺少什么?联接应该在表上执行,而不是在列上执行。您的子句
左外部联接顺序\u项。OrderID
应为左外部联接顺序\u项
。不带表别名的完整查询:
SELECT BOOKS.Title, BOOK_ORDER.OrderDate, BOOK_ORDER.OrderID
FROM BOOKS
LEFT OUTER JOIN ORDER_ITEMS ON BOOKS.BookID = ORDER_ITEMS.BookID
LEFT OUTER JOIN BOOK_ORDER ON ORDER_ITEMS.OrderID = BOOK_ORDER.OrderID
ORDER BY ORDER_ITEMS.BookID DESC;
“别名”,无论是
'table'作为tableAlias
还是column(table.column
作为columnAlias
)都是文本替换
SELECT `books`.title,
`book_order`.orderdate,
`book_order`.orderid
FROM `books`
LEFT OUTER JOIN `order_items`
ON `books`.bookid = `order_items`.bookid
LEFT OUTER JOIN `book_order`
ON `order_items`.orderid = `book_order`.orderid
ORDER BY `order_items`.bookid DESC;
将表名(ORDER\u ITEMS
)替换为列名(ORDER\u ITEMS.OrderID
)。i、 eJOIN ORDER\u ITEMS.OrderID
代替:JOINORDER\u ITEMS
你有什么,用“别名”和我添加了“AS”关键字,试图让它清楚
SELECT `b`.title,
`bo`.orderdate,
`bo`.orderid
FROM books AS `b`
LEFT OUTER JOIN order_items AS `oi`
ON `b`.bookid = `oi`.bookid
LEFT OUTER JOIN book_order AS `bo`
ON `oi`.orderid = `bo`.orderid
ORDER BY `oi`.bookid DESC;
这是有效的SQL。我使用了“AS”和backtick来突出显示“alias”
表别名列表:
=>b
书籍
=>oi
订购商品
=>bo
图书订单
表别名
替换为表名
。在这里,我在表名周围使用反勾号来表示替换
SELECT `books`.title,
`book_order`.orderdate,
`book_order`.orderid
FROM `books`
LEFT OUTER JOIN `order_items`
ON `books`.bookid = `order_items`.bookid
LEFT OUTER JOIN `book_order`
ON `order_items`.orderid = `book_order`.orderid
ORDER BY `order_items`.bookid DESC;
它是表名或列名的文本替换 你有“LEFT OUTER JOIN ORDER\u ITEMS.OrderID”你应该有“LEFT OUTER JOIN ORDER\u ITEMS”哇,真不敢相信我居然没看到。我猜我的眼睛不习惯这么长时间都是这样开始的。非常感谢。非常感谢。我不确定是否有特定的规则来进行缩写,这是有道理的。谢谢因此,对于这一个:选择BC.FirstName | |',“| | BC.LastName作为“客户名称”,BO.OrderID来自BOOK_Customer BC NATURAL JOIN BOOK_ORDER BO,其中BO.ShipDate不是CustomerID ASC的空订单;如果没有缩写,则选择BOOK_CUSTOMER.FirstName | | |',“| | BOOK_CUSTOMER.LastName”作为“客户名称”,BOOK_CUSTOMER中的BOOK_ORDER.OrderID自然加入BOOK_ORDER,其中BOOK_ORDER.ShipDate不是客户ID ASC的空订单;同样值得一提的是,一旦设置了别名,就不能再使用“Table.Column”,需要使用“alias.Column”。或者只要没有歧义,[专栏]在这两种情况下都有效。我想,这确实有效。谢谢你的帮助。