MySQL查询语句中的不存在关键字NOT IN(mysql 不存在 in)
MySQL查询语句中的“不存在”关键字——NOT IN
MySQL是一种常用的关系数据库管理系统,使用SQL语言进行操作。在MySQL中,查询语句是使用最常见的语句之一,经常需要使用关键字来筛选和排除数据。其中,NOT IN关键字是一种常用的筛选方式,用于查找不存在另一个数据表中的数据。本文将介绍NOT IN关键字的用法和操作实例。
NOT IN关键字用法
NOT IN 关键字用于筛选不属于另一个数据表中的数据。具体而言,NOT IN关键字将从查询结果中排除出所有在另一个数据表中存在的数据。其基本语法如下:
SELECT column_name(s)
FROM table_nameWHERE column_name NOT IN (value1, value2, ...);
其中,column_name(s)代表列名,用于指定需要返回的数据列;table_name则代表数据表名称;column_name是用于筛选的列名;value1, value2, …则代表需要排除的数据值。通过这样的语法,可以使用NOT IN关键字进行排除查询。
例如,考虑订单管理系统,需要查询未发货的订单。这可以通过使用NOT IN关键字来实现,即在主订单中查询出已发货的子订单号,然后将其从主订单号查询结果中排除,即可获得未发货的主订单号。
SELECT order_number
FROM ordersWHERE order_number NOT IN (
SELECT order_number FROM shipments);
在这里,使用了子查询的方式,查询出已发货的订单号。然后,NOT IN关键字将筛选掉这些订单号,保留未发货订单号,得到所需的查询结果。
NOT IN的实例
下面我们来看一个具体的查询实例,以更具体地理解NOT IN关键字的用法。在此,我们考虑一个图书销售系统,包含以下两个数据表:
books表:包含所有的书籍信息,包括编号(id)、书名(name)、作者(author)和价格(price)等属性。
sales表:包含每本书的销售信息,包括售出时间(sale_time)、售价(price)、销售数量(quantity)和书籍编号(book_id)等属性。
现在,我们需要查询出在2019年1月1日至1月31日之间售出的书籍,并且这些书籍在2018年1月1日至12月31日之间没有销售过。
使用NOT IN关键字,可以很容易地实现这个查询任务。我们可以先查询出在2018年1月1日至12月31日之间有销售记录的所有书籍编号,然后在2019年1月1日至31日的销售记录中排除掉这些书籍编号,即可得到所有符合条件的记录。
SELECT id, name, author, price, sale_time, quantity, price*quantity AS total_sale
FROM salesJOIN books ON sales.book_id = books.id
WHERE sale_time BETWEEN '2019-01-01' AND '2019-01-31'AND