11、多表查询

1、语法

SELECT ... FROM <表1> <表2>

 

2、举例

例如,同时从students表和classes表的“乘积”,即查询数据,可以这么写:

SELECT * FROM students, classes;

结果如下,有很多:

id

class_id

name

gender

score

id

name

1

1

小明

M

90

1

一班

1

1

小明

M

90

2

二班

1

1

小明

M

90

3

三班

1

1

小明

M

90

4

四班

2

1

小红

F

95

1

一班

2

1

小红

F

95

2

二班

2

1

小红

F

95

3

三班

2

1

小红

F

95

4

四班

3

1

小军

M

88

1

一班

3

1

小军

M

88

2

二班

3

1

小军

M

88

3

三班

3

1

小军

M

88

4

四班

4

1

小米

F

73

1

一班

4

1

小米

F

73

2

二班

4

1

小米

F

73

3

三班

4

1

小米

F

73

4

四班

5

2

小白

F

81

1

一班

5

2

小白

F

81

2

二班

5

2

小白

F

81

3

三班

5

2

小白

F

81

4

四班

6

2

小兵

M

55

1

一班

6

2

小兵

M

55

2

二班

6

2

小兵

M

55

3

三班

6

2

小兵

M

55

4

四班

7

2

小林

M

85

1

一班

7

2

小林

M

85

2

二班

7

2

小林

M

85

3

三班

7

2

小林

M

85

4

四班

8

3

小新

F

91

1

一班

8

3

小新

F

91

2

二班

8

3

小新

F

91

3

三班

8

3

小新

F

91

4

四班

9

3

小王

M

89

1

一班

9

3

小王

M

89

2

二班

9

3

小王

M

89

3

三班

9

3

小王

M

89

4

四班

10

3

小丽

F

88

1

一班

10

3

小丽

F

88

2

二班

10

3

小丽

F

88

3

三班

10

3

小丽

F

88

4

四班

这种多表查询又称笛卡尔查询,使用笛卡尔查询时要非常小心,由于结果集是目标表的行数乘积,对两个各自有100行记录的表进行笛卡尔查询将返回1万条记录,对两个各自有1万行记录的表进行笛卡尔查询将返回1亿条记录。

你可能还注意到了,上述查询的结果集有两列id和两列name,两列id是因为其中一列是students表的id,而另一列是classes表的id,但是在结果集中,不好区分。两列name同理

要解决这个问题,我们仍然可以利用投影查询的“设置列的别名”来给两个表各自的id和name列起别名:

SELECT students.id sid, students.name, students.gender, students.score, classes.id cid, classes.name cname FROM students, classes;

用表名.列名这种方式列举两个表的所有列实在是很麻烦,所以SQL还允许给表设置一个别名,让我们在投影查询中引用起来稍微简洁一点:

SELECT s.id sid, s.name, s.gender, s.score, c.id cid, c.name cname FROM students s, classes c;

多表查询也是可以添加WHERE条件的:

SELECT s.id sid, s.name, s.gender, s.score, c.id cid, c.name cname 
FROM students s, classes c 
WHERE s.gender = 'M' AND c.id = 1;

结果:

sid

name

gender

score

cid

cname

1

小明

M

90

1

一班

3

小军

M

88

1

一班

6

小兵

M

55

1

一班

7

小林

M

85

1

一班

9

小王

M

89

1

一班

 

3、小结

  • 使用多表查询可以获取M x N行记录;
  • 多表查询的结果集可能非常巨大,要小心使用;
  • 多表查询后面依然可以接WHERE条件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值