发布网友 发布时间:2022-04-22 00:57
共1个回答
热心网友 时间:2023-11-06 13:07
CREATE TABLE `chx` ( `id` VARCHAR(20) NOT NULL, `name` VARCHAR(50) DEFAULT NULL, `name2` CHAR(4) DEFAULT NULL, `name3` VARCHAR(4) DEFAULT NULL, `score` INT(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8 CREATE TABLE `test` ( `id` int(11) DEFAULT NULL, `age` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1.Mysql支持的连接查询方式列举如下: a:内连接 inner join也是默认的连接方式 根据比较方式不同分为如下三种: 等值连接:使用等号来作为连接条件 自然连接:natural join,通过在两张表里寻找列名和数据类型都相同的字段(长度不管),然后再根据这些相同的字段进行连接(内连接)。并返回所有符合条件 的结果。 不等值连接:就是在连接条件中使用除等号以外的其他比较运算符,例如:on c.id between s.XXX and s.XXX; 注意:可以使用using关键字简化连接: 使用条件:1.查询必须是等值连接 2.等值连接中的列必须具有相同的名称和数据类型。 b:外连接 outer join 外连接可以分为以下三类: 左外连接(left outer join 或left join):检索结果为满足连接条件的数据行+左表中不满足连接条件的数据行,然后再根据过滤条件过滤即为查询结果(先连接后 过滤)注意:此处过滤条件很容易犯错,一般要以左表的条件进行过滤,不然容易犯错。例如: SELECT c.*,t.* FROM chx c LEFT JOIN test t ON c.id = t.id WHERE c.`id`= 1和 SELECT c.*,t.* FROM chx c LEFT JOIN test t ON c.id = t.id WHERE t.`id`= 1 的结果不一样, 因为当副表t没有等于1的记录而主表c有的话第一条语句是由结果的,而第二条是没有结果的。见下图: 右外连接(right outer join 或right join):与左外连接相反。 全外连接(full outer join 或full join):注意:mysql不支持全外连接:除了显示满足连接条件的行外,还显示join两侧表中所有满足检索条件的行。