为什么要使用子查询
在MySQL软件中虽然可以通过连接査询实现多表查询数据记录,但是却不建议使用。这是因为连接査询的性能很差。因此出现了连接査询的替代者子査询。在具体开发应用中,MySQL软件推荐使用子查询来实现多表査询数据记录。
对于新手,直接会执行如下SQL语句进行査询:
SELECT * FROM t_dept t,t_employee L WHERE t.deptno=L.deptno;
上述SQL语句在执行过程中,首先会对两个表进行笛卡儿积操作,然后再选取符合匹配条件的数据记录。进行笛卡儿积操作时,会生成两个数表数据记录数的乘积条数据记录,如果这两张表的数据记录比较大,则在进行笛卡儿积操作时就会造成死机。
一.单行单列子查询
先创建一张表
+--------+-----------+-------+------+------+-------------+-------+-----------+----------+
| stu_id | stu_name | grade | sex | age | phone | email | number_id | salary |
+--------+-----------+-------+------+------+-------------+-------+-----------+----------+
| 1 | san | 1 | 男 | 12 | 17673043785 | | 32 | 1000.00 |
| 2 | san2 | 1 | 男 | 13 | 17673043787 | | 22 | 2000.00 |
| 3 | 唐太宗 | 1 | 女 | 13 | 17673044786 | | 21 | 3000.00 |
| 4 | 李飞刀 | 1 | 男 | 12 | 17673044786 | | NULL | 3500.00 |
| 5 | 李微 | 1 | 男 | 12 | 17673043786 | | NULL | 3500.00 |
| 6 | 李微 | 3 | 男 | 16 | 176883333 | 222 | 67 | 20000.00 |
| 7 | 刘备 | 5 | 女 | 20 | 11111111 | 444 | 87 | 5000.00 |
+--------+-----------+-------+------+------+-------------+-------+-----------+----------+
select stu_name,sex,phone,salary from student where( phone,salary) in (select phone,salary from student where phone ='17673044786' and salary > 1000);
显示如下:
+-----------+------+-------------+---------+
| stu_name | sex | phone | salary |
+-----------+------+-------------+---------+
| 唐太宗 | 女 | 17673044786 | 3000.00 |
| 李飞刀 | 男 | 17673044786 | 3500.00 |
+-----------+------+-------------+---------+