SQL中的JOIN与UNION

版权声明:原创博文,转载请注明出处~ https://blog.csdn.net/She_lock/article/details/81874250

建表

建表 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 复制表

猜你喜欢

转载自blog.csdn.net/She_lock/article/details/81874250