MySQL 外键和查询

标签 mysql sql

当我需要来自多个不同表的信息时,我试图了解查询数据的细节。

现在我有下表。

CREATE TABLE `orders` (
  `orderNumber` int(11) NOT NULL,
  `orderDate` date NOT NULL,
  `requiredDate` date NOT NULL,
  `shippedDate` date DEFAULT NULL,
  `status` varchar(15) NOT NULL,
  `comments` text,
  `customerNumber` int(11) NOT NULL,
  PRIMARY KEY (`orderNumber`),
  KEY `customerNumber` (`customerNumber`),
  CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`customerNumber`) REFERENCES `customers` (`customerNumber`)
)

CREATE TABLE `orderdetails` (
  `orderNumber` int(11) NOT NULL,
  `productCode` varchar(15) NOT NULL,
  `quantityOrdered` int(11) NOT NULL,
  `priceEach` double NOT NULL,
  `orderLineNumber` smallint(6) NOT NULL,
  PRIMARY KEY (`orderNumber`,`productCode`),
  KEY `productCode` (`productCode`),
  CONSTRAINT `orderdetails_ibfk_2` FOREIGN KEY (`productCode`) REFERENCES `products` (`productCode`),
  CONSTRAINT `orderdetails_ibfk_1` FOREIGN KEY (`orderNumber`) REFERENCES `orders` (`orderNumber`)
)

CREATE TABLE `products` (
  `productCode` varchar(15) NOT NULL,
  `productName` varchar(70) NOT NULL,
  `productLine` varchar(50) NOT NULL,
  `productScale` varchar(10) NOT NULL,
  `productVendor` varchar(50) NOT NULL,
  `productDescription` text NOT NULL,
  `quantityInStock` smallint(6) NOT NULL,
  `buyPrice` double NOT NULL,
  `MSRP` double NOT NULL,
  PRIMARY KEY (`productCode`),
  KEY `productLine` (`productLine`),
  CONSTRAINT `products_ibfk_1` FOREIGN KEY (`productLine`) REFERENCES `productlines` (`productLine`)
)
CREATE TABLE `customers` (
  `customerNumber` int(11) NOT NULL,
  `customerName` varchar(50) NOT NULL,
  `contactLastName` varchar(50) NOT NULL,
  `contactFirstName` varchar(50) NOT NULL,
  `phone` varchar(50) NOT NULL,
  `addressLine1` varchar(50) NOT NULL,
  `addressLine2` varchar(50) DEFAULT NULL,
  `city` varchar(50) NOT NULL,
  `state` varchar(50) DEFAULT NULL,
  `postalCode` varchar(15) DEFAULT NULL,
  `country` varchar(50) NOT NULL,
  `salesRepEmployeeNumber` int(11) DEFAULT NULL,
  `creditLimit` double DEFAULT NULL,
  PRIMARY KEY (`customerNumber`),
  KEY `salesRepEmployeeNumber` (`salesRepEmployeeNumber`),
  CONSTRAINT `customers_ibfk_1` FOREIGN KEY (`salesRepEmployeeNumber`) REFERENCES `employees` (`employeeNumber`)
)

我想要弄清楚的是如何编写一个查询来查找在两个特定日期之间订购的产品的名称。

我一直在查看文档和示例,但我似乎无法理解它。感谢您的帮助。

最佳答案

您需要使用 JOIN 关键字来连接查询的表:

/* Get product names ordered between two dates */
select distinct p.productName
from orders o
inner join orderdetails od on od.orderNumber = o.orderNumber
inner join products p on p.productCode = oi.productCode
where o.orderDate >= @startDate AND o.orderDate < @endDate

关于MySQL 外键和查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29136135/

相关文章:

mysql - 使用或不使用 LIKE 检索完全匹配的记录的 SQL 查询

php - mysql中多次查询没有输出

mysql - SQL - 减少时间请求

SQL Server 'FETCH FIRST 1 ROWS ONLY' 无效使用

mysql - Group By 子句不显示相同的行值?

mysql - 格式化数据以用于 JSON 和 D3.js

mysql - 在mysql中的PLSQL触发器中声明变量

php - 代码点火器错误: Trying to get property of non-object when querying a database

sql - 如何在 SQL 中排序,忽略文章 ('the"、 "a'、 "an"等)

java - 在 SQL 数据库中存储 android 复选框状态