為什么要使用子查詢
在MySQL軟件中雖然可以通過連接?xùn)嗽儗?shí)現(xiàn)多表查詢數(shù)據(jù)記錄,但是卻不建議使用。這是因?yàn)檫B接?xùn)嗽兊男阅芎懿?。因此出現(xiàn)了連接?xùn)嗽兊奶娲咦訓(xùn)嗽儭T诰唧w開發(fā)應(yīng)用中,MySQL軟件推薦使用子查詢來實(shí)現(xiàn)多表査詢數(shù)據(jù)記錄。
對于新手,直接會執(zhí)行如下SQL語句進(jìn)行査詢:
SELECT * FROM t_dept t,t_employee L WHERE t.deptno=L.deptno;
上述SQL語句在執(zhí)行過程中,首先會對兩個表進(jìn)行笛卡兒積操作,然后再選取符合匹配條件的數(shù)據(jù)記錄。進(jìn)行笛卡兒積操作時,會生成兩個數(shù)表數(shù)據(jù)記錄數(shù)的乘積條數(shù)據(jù)記錄,如果這兩張表的數(shù)據(jù)記錄比較大,則在進(jìn)行笛卡兒積操作時就會造成死機(jī)。
一.單行單列子查詢
先創(chuàng)建一張表
+--------+-----------+-------+------+------+-------------+-------+-----------+----------+
| 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 |
+-----------+------+-------------+---------+