使用子查询
SQL允许创建子查询(subquery),即嵌套在其他查询中的查询。信息存储在两个表或多个表中。
利用子查询进行过滤
为了演示子查询,新建一个表,并在这个新表中插入一些数据。新建表如下:
CREATE TABLE ICBC(
-- 主键
id INT PRIMARY KEY AUTO_INCREMENT,
-- 客户名称
kehu_name VARCHAR(200),
-- 业务类型
leixing VARCHAR(100),
-- 业务金额
money DOUBLE,
-- 创建日期
createtime DATE
);
插入数据
INSERT INTO ICBC(id,kehu_name,leixing,money,createtime) VALUES (1,'张三','买火车票',500,'2016-05-02');
INSERT INTO ICBC(id,kehu_name,leixing,money,createtime) VALUES (2,'李四','网购',4999,'2016-07-18');
INSERT INTO ICBC(id,kehu_name,leixing,money,createtime) VALUES (3,'王五','充话费',100,'2016-07-21');
INSERT INTO ICBC(id,kehu_name,leixing,money,createtime) VALUES (4,'赵六','股票收入',8000,'2016-10-28');
INSERT INTO ICBC(id,kehu_name,leixing,money,createtime) VALUES (5,'赵六','股票收入',5000,'2016-10-28');
INSERT INTO ICBC(id,kehu_name,leixing,money,createtime) VALUES (6,'赵六','吃饭支出',1000,'2016-10-29');
INSERT INTO ICBC(id,kehu_name,leixing,money,createtime) VALUES (7,'张三','转账',2000,'2016-10-31');
SELECT * FROM ICBC;-- 列出该表所有信息
使用子查询,因为数据限制,所以下面的操作其实实际意义不大,不过为了演示子查询,使用下面语句:
SELECT zhanghu,flname,money FROM gjp_zhangwu WHERE createtime IN (
SELECT createtime FROM ICBC WHERE kehu_name = '赵六') AND zhanghu = '工商银行';
结果如下:
注意:作为子查询的SELECT语句只能查询单个列,企图检索多个列将返回错误,在实际中使用时由于性能的限制,不能嵌套太多的子查询。
网友评论