MySQL——普通的多表查询


第一种方式:无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;

你可能感兴趣的:(MySQL——普通的多表查询)