CREATE TABLE tbl1 (num1 INT NOT NULL);CREATE TABLE tbl2 (num2 INT NOT NULL);INSERT INTO tbl1 VALUES(1),(5),(13),(27);INSERT INTO tbl2 VALUES(6),(14),(11),(20);
返回tbl2的所有num2列,将tbl1中的num值与之进行比较,只要大于num2的任意一值,即为符合条件的结果。
SELECT num1 FROM tbl1 WHERE num1 > SOME(SELECT num2 FROM tbl2);
SELECT num1 FROM tbl1 WHERE num1 > ANY (SELECT num2 FROM tbl2);
SELECT num1 FROM tbl1 WHERE num1 > ALL (SELECT num2 FROM tbl2);
新建一个orderitems表
CREATE TABLE orderitems(o_num INT NOT NULL,o_item INT NOT NULL,f_id CHAR(10) NOT NULL,quantity INT NOT NULL,item_price DECIMAL(8,2) NOT NULL,PRIMARY KEY(o_num,o_item));
填入数据
INSERT INTO orderitems(o_num,o_item,f_id,quantity,item_price)VALUES(3001,1,'a1',10,5.2),(3001,2,'b2',3,7.6),(3001,3,'bs1',5,11.2),(3001,4,'bs2',15,9.2),(3002,1,'b3',2,20.0),(3003,1,'c0',100,10),(3004,1,'o2',50,2.50),(3005,1,'c0',5,10),(3005,2,'b1',10,8.99),(3005,3,'a2',10,2.2),(3005,4,'m1',5,14.99);
#在orderitem表中查询f_id为c0 的订单号,并根据订单号查询具有订单号的客户c_id,SQL语句如下:
SELECT c_id FROM ordersWHERE o_num IN(SELECT o_num FROM orderitems WHERE f_id = 'c0');
SELECT c_id FROM ordersWHERE o_num NOT IN(SELECT o_num FROM orderitems WHERE f_id = 'c0');
(也可以解决这个问题,但有空值,但子查询更容易阅读和编写)
SELECT c_id FROM orderitems left JOIN ordersON orders.o_num = orderitems.o_num AND orderitems.f_id = 'c0';
在 orderitems 表中查询 f_id 为 c0 的订单号的所有信息,并根据订单号查询具有订单号的客户的所有信息,SQL语句如下:
SELECT * FROM orders ord ,(SELECT * FROM orderitems AS o WHERE f_id='c0') ite WHERE ord.o_num=ite.o_num ;
*注意:子查询结果为多列,一定在FROM后做为表,且一定要取别名,否则无法访问这张表中的字段。
#在suppliers表中查询s_city等于‘tianjin’的供应商s_id,然后在fruits表中,查询所有非该供应商供应的水果种类名称。
SELECT s_id,f_name FROM fruits fWHERE f.s_id !=(SELECT s1.s_id FROM suppliers AS s1 WHERE s1.s_city = 'tianjin');
EXISTS关键字后是任意一个子查询:
若至少返回一行,则结果为True,此时外层将进行查询。
若没有返回任何行,则返回的结果为false,此时外层语句将不进行查询。NOT EXISTS 和 EXISTS 的使用方法相同,返回的结果相反。查询suppliers中是否存在s_id 的供应商,若存在,则查询fruits表中所有记录:
SELECT * FROM fruits WHERE EXISTS (SELECT s.s_id FROM suppliers AS s WHERE s.s_id = 107);
返回结果:
EXISTS也可以和条件表达式一起使用:
例:查询suppliers中是否存在s_id 的供应商,若存在,则查询fruits表中f_price>10.20的记录:
SELECT * FROM fruits WHERE f_price >10.20 AND EXISTS (SELECT s.s_id FROM suppliers AS s WHERE s.s_id = 107);
到此这篇关于mysql子查询(单行子查询,多行子查询,多列子查询)的文章就介绍到这了,更多相关MySQL子查询 内容请搜索一聚教程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持一聚教程网!
火柴人忍者3v3M0D版内置功能菜单 v5.5
下载重生细胞腾讯版 安卓版v3.5.2-bilibili-UO
下载拳皇命运体验服 最新免费版v2.31.000
下载地牢杀手无限生命版 内置修改器最新版v0.707.12
下载天天爱烹饪 安卓版1.1.1
天天爱烹饪是由润谦科技游戏厂商出品的美食烹饪餐厅模拟经营休闲
我的世界RLCraft任务汉化版 安卓版v2.9.1
我的世界RLCraft任务汉化版是一个非常有趣的整合包,游戏
光与夜之恋内测版 最新版v1.8.0803
光与夜之恋是一款女性向恋爱养成游戏,精美的画面,丰富的剧情故
光与夜之恋台服 安卓版v1.8.0803
光与夜之恋是一款高品质恋爱互动式养成游戏,超一线画师及豪华编
俄罗斯乡村模拟器3D 手机版v1.8.2
俄罗斯乡村模拟器(Russian Village Simul