mysql+sql+子查询语句_SQL子查询

子查询或内部查询或嵌套查询在另一个SQL查询的查询和嵌入式WHERE子句中。

子查询用于返回将被用于在主查询作为条件的数据,以进一步限制要检索的数据。

子查询可以在SELECT,INSERT,UPDATE使用,而且随着运算符如DELETE语句 =, , >=, <=, IN, BETWEEN 等.

这里有一些规则,子查询必须遵循:

子查询必须被圆括号括起来。

子查询只能在有一列的SELECT子句中,除非多个列中的子查询,以比较其选定列主查询。

ORDER BY不能在子查询中使用,主查询可以使用ORDER BY。GROUP BY可以用来在子查询中如ORDER BY执行相同的功能。

返回多于一个行子查询只能用于具有多个值运算符,如IN操作。

SELECT列表中不能包含到值计算到任何引用 BLOB, ARRAY, CLOB, 或NCLOB.

子查询不能立即封闭在一组函数。

BETWEEN 操作符不能与子查询使用;然而,操作符BETWEEN可以在子查询中使用。

子查询SELECT语句:

子查询最频繁使用的SELECT语句。其基本语法如下:

SELECT column_name[,column_name]FROM table1[,table2]WHERE column_name OPERATOR(SELECT column_name[,column_name]FROM table1[,table2][WHERE])

例子:

考虑CUSTOMERS表具有以下记录:

+----+----------+-----+-----------+----------+|ID|NAME|AGE|ADDRESS|SALARY|+----+----------+-----+-----------+----------+|1|Ramesh|35|Ahmedabad|2000.00||2|Khilan|25|Delhi|1500.00||3|kaushik|23|Kota|2000.00||4|Chaitali|25|Mumbai|6500.00||5|Hardik|27|Bhopal|8500.00||6|Komal|22|MP|4500.00||7|Muffy|24|Indore|10000.00|+----+----------+-----+-----------+----------+

现在,让我们检查下使用子查询SELECT语句:

SQL>SELECT*FROM CUSTOMERS

WHERE ID IN(SELECT ID

FROM CUSTOMERS

WHERE SALARY>4500);

这将产生以下结果:

+----+----------+-----+---------+----------+|ID|NAME|AGE|ADDRESS|SALARY|+----+----------+-----+---------+----------+|4|Chaitali|25|Mumbai|6500.00||5|Hardik|27|Bhopal|8500.00||7|Muffy|24|Indore|10000.00|+----+----------+-----+---------+----------+

子查询的INSERT语句:

子查询,也可以使用INSERT语句。INSERT语句使用从子查询返回的数据插入到另一个表中。在子查询中的所选择的数据可以与任何类型的字符,日期或数字函数进行修改。

其基本语法如下:

INSERT INTO table_name[(column1[,column2])]SELECT[*|column1[,column2]FROM table1[,table2][WHERE VALUE OPERATOR]

示例:

考虑CUSTOMERS_BKP表的结构相似于CUSTOMERS表。考虑CUSTOMERS_BKP表的结构相似于CUSTOMERS表。

SQL>INSERT INTO CUSTOMERS_BKP

SELECT*FROM CUSTOMERS

WHERE ID IN(SELECT ID

FROM CUSTOMERS);

子查询的UPDATE语句:

子查询可以与UPDATE语句一起使用。单个或多个表中的列可以使用带有UPDATE语句子查询时被更新。

其基本语法如下:

UPDATE table

SET column_name=new_value[WHERE OPERATOR[VALUE](SELECT COLUMN_NAME

FROM TABLE_NAME)[WHERE)]

示例:

假设,我们的CUSTOMERS_BKP表是CUSTOMERS表的备份。

下面的例子是在CUSTOMERS表更新0.25倍薪水,其年龄大于或等于27所有的客户:

SQL>UPDATE CUSTOMERS

SET SALARY=SALARY*0.25WHERE AGE IN(SELECT AGE FROM CUSTOMERS_BKP

WHERE AGE>=27);

这将影响到两行,最后CUSTOMERS表将有以下记录:

+----+----------+-----+-----------+----------+|ID|NAME|AGE|ADDRESS|SALARY|+----+----------+-----+-----------+----------+|1|Ramesh|35|Ahmedabad|125.00||2|Khilan|25|Delhi|1500.00||3|kaushik|23|Kota|2000.00||4|Chaitali|25|Mumbai|6500.00||5|Hardik|27|Bhopal|2125.00||6|Komal|22|MP|4500.00||7|Muffy|24|Indore|10000.00|+----+----------+-----+-----------+----------+

子查询的DELETE语句:

子查询可配合使用像上述的任何其他语句DELETE语句。

其基本语法如下:

DELETE FROM TABLE_NAME[WHERE OPERATOR[VALUE](SELECT COLUMN_NAME

FROM TABLE_NAME)[WHERE)]

示例:

假设,我们的CUSTOMERS_BKP表是CUSTOMERS表的备份。

下面的示例将删除CUSTOMERS表记录其年龄大于或等于27所有的客户:

SQL>DELETE FROM CUSTOMERS

WHERE AGE IN(SELECT AGE FROM CUSTOMERS_BKP

WHERE AGE>27);

这将影响到两行,最后CUSTOMERS表将有以下记录:

+----+----------+-----+---------+----------+|ID|NAME|AGE|ADDRESS|SALARY|+----+----------+-----+---------+----------+|2|Khilan|25|Delhi|1500.00||3|kaushik|23|Kota|2000.00||4|Chaitali|25|Mumbai|6500.00||6|Komal|22|MP|4500.00||7|Muffy|24|Indore|10000.00|+----+----------+-----+---------+----------+

¥ 我要打赏

纠错/补充

收藏

上一篇:

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值