第一种方式:无WHERE条件的笛卡尔积方式
运算结果为一张表
表中字段:集合多表中的所有字段,字段数=(表1字段数+表2字段数)
表中记录:表1的每条记录与表2的所有记录进行匹配,记录数=(表1记录数*表2记录数)
格式:SELECT 字段名 FROM 表名列表;
注意:
· 字段名的书写格式:字段名(单表);表名.字段名(多表)
· 字段名列表中的字段所涉及的表,一定包含在表名列表中
例子:
查询list1表和list2表的数据(多种写法)
SELECT * FROM list1,list2;
SELECT list1*,list2* FROM list1,list2;
查询name字段
SELECT list1.name,list2.name FROM list1,list2;
第二种方式:有WHERE条件的普通多表查询方式
格式:SELECT 字段名列表 FROM 表名列表 WHERE 条件
前提:多表之间必须有关联
例子:
份表
id province_id province_name 1 13000 河北省 2 14000 陕西省 3 15000 四川省
市表
id province_id city_name city_id 1 13000 石家庄市 131000 2 13000 沧州市 131001 3 14000 西安市 131002 4 15000 成都市 131003
县表
id city_id country_name country_id 1 131000 正安县 132100 2 131002 蓝田县 132110 3 131003 三台县 132111 4 131003 四台县 132112
查询省市信息
SELECT provincelist.province_name,citylist.city_name FROM provincelist,citylist
WHERE provincelist.province_id=citylist.city_id; ///写明两个表的关联关系
查询省市县信息
SELECT provincelist.province_name,citylist.city_name,countrylist.country_name FROM provincelist,citylist,countrylist
WHERE provincelist.province_id=citylist.province_id AND citylist.city_id=countrylist.city_id;
单表多次复合查询案例
如下tasklist表,执行任务1需要先执行任务4,执行任务4要先执行任务2,以此类推
任务:查询每个任务的间接先行任务(如1的间接先行任务为2)
tasklist表
id task super_task country_id 1 任务1 4 132100 2 任务2 132110 3 任务3 1 132111 4 任务4 2 132112
代码:
SELECT A.id,B.super_task FROM tasklist AS A,tasklist AS B
WHERE A.super_task=B.id;