子查询:单行子查询,多行子查询,多列子查询 |
您所在的位置:网站首页 › sql语句子查询大于号要空格吗 › 子查询:单行子查询,多行子查询,多列子查询 |
#子查询 子查询使用规则: 子查询放在圆括号中子查询放在比较条件右边(非强制)子查询中不需要ORDER BY 子句在单行子查询中使用单行运算符,在多行子查询中用多行运算符。单行运算符:子查询结果只有一个:< > = = != 多行子查询:子查询结果是单列多行:in , any,all 多列子查询:子查询为多列,一定要在FROM后作为表,且一定要取别名,否则无法访问这张表中的字段。 #创建初始表 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);#ANY SOME 关键字的子查询 #返回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);#ALL 关键字 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);带 IN 关键字 的子查询 #在orderitem表中查询f_id为c0 的订单号,并根据订单号查询具有订单号的客户c_id,SQL语句如下: SELECT c_id FROM orders WHERE o_num IN (SELECT o_num FROM orderitems WHERE f_id = 'c0');NOT IN SELECT c_id FROM orders WHERE o_num NOT IN (SELECT o_num FROM orderitems WHERE 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 ;
带比较运算符的子查询 #在suppliers表中查询s_city等于‘tianjin’的供应商s_id,然后在fruits表中,查询所有非该供应商供应的水果种类名称。 SELECT s_id,f_name FROM fruits f WHERE f.s_id != (SELECT s1.s_id FROM suppliers AS s1 WHERE s1.s_city = 'tianjin');带EXISTS 关键字的子查询 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);返回结果: 例:查询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); |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |