<1>先建立两个数据表结构→→→
mysql> create table school1( -> id int PRIMARY key, -> name varchar(50), -> achievement int);//建立第一个数据表 mysql> insert into school1 values -> (1,'老刘',98), -> (2,'老王',97), -> (3,'老周',96);//给第一个数据表添加数据 mysql> create table school1( -> id int PRIMARY key, -> name varchar(50), -> achievement int);//建立第二个数据表 mysql> insert into school1 values -> (1,'老刘',98), -> (2,'老王',97), -> (3,'老周',96);//给第二个数据表添加数据
两数据表如图所示→→→
<2>执行多表查询命名语句后,结果如图所示→→→
首先我们看每个字段前都加了前缀,那么为什么要加前缀呢?因为在不同的数据表中,可能存在名字相同的字段名,所以我们要在字段前面添加各自对应的表名进行区分(单表查询里面我们忽略了前缀,因为同一张表内,字段名肯定是互不相同的)。
另外我们再来看看两条SQL命令语句→→→
97 between s.achievement and c.achievement;
利用了expr1 between expr2 and expr3 运算符。意思就是选出s.achievement字段小于等于97的记录以及c.achievement字段大于等于97的记录
s.achievement in(95,98,99,97) and c.achievement in(95,96);
利用了expr1 in(expr2,expr3,expr4……)和and运算符。意思就是选出等于in括号里面出现过的值(在这里是95,98,99,97)的s.achievement字段所对应的那条记录,以及等于in括号里面出现过的值(在这里是95,96)的c.achievement字段所对应的那条记录。and是 “&&”的意思(与)。
介绍完这些后,我们来看看广义笛卡尔积是怎么定义的:假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)} 笛卡尔积就是求一个排列组合,两个集合的元素都配对一次。
接下来我们用笛卡尔积的数学思维来看我们多表查询出来的结果图→→→
仔细观察后,不就是把两个表选出来的所有记录分别组合成两个集合,然后对这两个集合进行一次笛卡尔积,最后再把结果用图的方式显示出来吗?