建表
建表 tb_clazz
并插入数据:
CREATE TABLE `tb_clazz` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '班级id',
`grade` varchar(64) DEFAULT NULL COMMENT '班级名称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4;
INSERT INTO `tb_clazz` (`id`, `grade`) VALUES (1, '一年级');
INSERT INTO `tb_clazz` (`id`, `grade`) VALUES (2, '二年级');
INSERT INTO `tb_clazz` (`id`, `grade`) VALUES (3, '三年级');
INSERT INTO `tb_clazz` (`id`, `grade`) VALUES (4, '四年级');
INSERT INTO `tb_clazz` (`id`, `grade`) VALUES (5, '五年级');
INSERT INTO `tb_clazz` (`id`, `grade`) VALUES (6, '六年级');
建表 tb_student
并插入数据:
CREATE TABLE `tb_student` (
`id` int(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '学生id',
`name` varchar(128) NOT NULL COMMENT '姓名',
`id_clazz` int(11) NOT NULL COMMENT '班级id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4;
INSERT INTO `tb_student` (`id`, `name`, `id_clazz`) VALUES (1, '张三', 1);
INSERT INTO `tb_student` (`id`, `name`, `id_clazz`) VALUES (2, '李四', 2);
INSERT INTO `tb_student` (`id`, `name`, `id_clazz`) VALUES (3, '叶凡', 3);
INSERT INTO `tb_student` (`id`, `name`, `id_clazz`) VALUES (4, 'salary', 4);
INSERT INTO `tb_student` (`id`, `name`, `id_clazz`) VALUES (5, 'john', 3);
INSERT INTO `tb_student` (`id`, `name`, `id_clazz`) VALUES (6, 'cat', 7);
sql语句
1、join
left join
: (左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 。
SELECT * FROM tb_student s LEFT JOIN tb_clazz c ON s.id_clazz = c.id;
right join
: (右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录。
SELECT * FROM tb_student s RIGHT JOIN tb_clazz c ON s.id_clazz = c.id;
inner join
:(等值连接) 只返回两个表中联结字段相等的行,简写为 join
。
SELECT * FROM tb_student s JOIN tb_clazz c ON s.id_clazz = c.id;
-- SELECT * FROM tb_student s INNER JOIN tb_clazz c ON s.id_clazz = c.id;
2、UNION
UNION
操作符用于合并两个或多个SELECT
语句的结果集。
值得注意的是,UNION
内部的 SELECT
语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT
语句中的列的顺序必须相同。
例1: 默认地,UNION 操作符选取不同的值,剔除掉重复的值
SELECT id FROM tb_clazz
UNION
SELECT id FROM tb_student ;
如果允许重复的值,请使用 UNION ALL
。
SELECT id FROM tb_clazz
UNION ALL
SELECT id FROM tb_student ;
例2:UNION
结果集中的列名总是等于UNION
中第一个SELECT
语句中的列名。
SELECT id ,grade FROM tb_clazz
UNION
SELECT id , `name` FROM tb_student ;
SELECT id , `name` FROM tb_student
UNION
SELECT id ,grade FROM tb_clazz ;
insert 插入多条数据
例:向tb_student
表中 插入tb_clazz
表 id = 1的全部数据
INSERT INTO tb_student(NAME,id_clazz) SELECT grade,id FROM tb_clazz WHERE id = 1;
需要注意的是,插入的字段和被插入的字段数据类型要类似,字段数相等。
复制表
可以参考 MySQL 复制表