【MySQL】联合查询

发布于:2025-05-09 ⋅ 阅读:(11) ⋅ 点赞:(0)

 

个人主页♡喜欢做梦

欢迎  👍点赞  ➕关注  ❤️收藏  💬评论


目录

一、什么是联合查询

1.概念

2.语法要求 

3.示例

  4.为什么要使用联合查询

内连接

1.概念

2.语法

3.步骤:

外连接

1.概念

2.分类:

左外连接

1.定义:

2.语法 :

3.示例: 

 右外连接

1.概念

 2.语法

 3.示例

全外连接

概念 

自连接

1.概念

2.示例: 

子查询

1.概念

2.分类:

1.单行子查询

概念

语法 

示例

注意事项

 2.多行子查询

语法:

3.多列子查询

概念:

示例: 

4.多行子查询和多列子查询的区别 

 合并查询

 1.概念:

根据表构建表

复制表结构

语法

示例: 

复制表信息 

语法

示例


一、什么是联合查询

1.概念

联合查询是一种将多个select语句的结果合并成一个结果集。允许垂直合并来自不同查询的数据,前提是这些查询具有相同数量的列且对应列的数据类型兼容。

2.语法要求 

  •  列数一致:参与联合查询的每个select语句,其选择列表中的表达式数量必须相同。
  • 数据类型兼容:对应位置的列数据类型要相同或者可自动转为相同类型。

3.示例

学生表和班级表

-- 创建学生表
mysql> create table students(
    -> id bigint auto_increment primary key,
    -> name varchar(20),
    -> class_id bigint);
Query OK, 0 rows affected (0.08 sec)

-- 创建班级表
mysql> create table class(
    -> class_id bigint auto_increment primary key,
    -> class_name varchar(20));
Query OK, 0 rows affected (0.08 sec)

-- 添加学生信息
mysql> insert into students(name,class_id) values
    -> ('小丽',1),('莉莉',1),('王刚',3),('张亮',2);
Query OK, 4 rows affected (0.08 sec)
Records: 4  Duplicates: 0  Warnings: 0

-- 查询学生表中的信息
mysql> select * from students;
+----+--------+----------+
| id | name   | class_id |
+----+--------+----------+
|  1 | 小丽   |        1 |
|  2 | 莉莉   |        1 |
|  3 | 王刚   |        3 |
|  4 | 张亮   |        2 |
+----+--------+----------+
4 rows in set (0.00 sec)

-- 添加课程
mysql> insert into class(class_name) values ('篮球'),('羽毛球'),('排球');
Query OK, 3 rows affected (0.12 sec)
Records: 3  Duplicates: 0  Warnings: 0

-- 查询课程表中的课程
mysql> select * from class;
+----------+------------+
| class_id | class_name |
+----------+------------+
|        1 | 篮球       |
|        2 | 羽毛球     |
|        3 | 排球       |
+----------+------------+
3 rows in set (0.00 sec)

  4.为什么要使用联合查询

可以将多个表或者不同查询结果集聚集到一起。

示例:

-- 查询学生表和班级表中的结果
mysql> select * from students,class;
+----+--------+----------+----------+------------+
| id | name   | class_id | class_id | class_name |
+----+--------+----------+----------+------------+
|  1 | 小丽   |        1 |        1 | 篮球       |
|  1 | 小丽   |        1 |        2 | 羽毛球     |
|  1 | 小丽   |        1 |        3 | 排球       |
|  2 | 莉莉   |        1 |        1 | 篮球       |
|  2 | 莉莉   |        1 |        2 | 羽毛球     |
|  2 | 莉莉   |        1 |        3 | 排球       |
|  3 | 王刚   |        3 |        1 | 篮球       |
|  3 | 王刚   |        3 |        2 | 羽毛球     |
|  3 | 王刚   |        3 |        3 | 排球       |
|  4 | 张亮   |        2 |        1 | 篮球       |
|  4 | 张亮   |        2 |        2 | 羽毛球     |
|  4 | 张亮   |        2 |        3 | 排球       |
+----+--------+----------+----------+------------+
12 rows in set (0.00 sec)

内连接

1.概念

定义:在关系型数据库中用于组合或多个表中记录的操作,他会返回满足连接条件的记录。只有当两个表中的相关值匹配时,对应的记录才会被包含在结果集中。

2.语法

-- 写法1
select 字段1,字段2... from 表1[别名1],表2 [别名2] where 连接条件 and 其他条件;

-- 写法2
select 字段1,字段2... from 表1[别名1] [inner] join 表2 [别名2] on 连接条件 where 其他条件;

 示例:查找学生表和班级表中,班级编号相对应的学生姓名与学生课程

-- 写法1
mysql> select students.name,class.class_name from students,class where students.class_id = class.class_id;
+--------+------------+
| name   | class_name |
+--------+------------+
| 小丽   | 篮球       |
| 莉莉   | 篮球       |
| 王刚   | 排球       |
| 张亮   | 羽毛球     |
+--------+------------+
4 rows in set (0.00 sec)

-- 写法2
mysql> select students.name,class.class_name from students join class on students.class_id=class.class_id;
+--------+------------+
| name   | class_name |
+--------+------------+
| 小丽   | 篮球       |
| 莉莉   | 篮球       |
| 王刚   | 排球       |
| 张亮   | 羽毛球     |
+--------+------------+
4 rows in set (0.00 sec)

3.步骤:

  1. 确定要查询的表有哪些,取表的笛卡尔积;
  2. 根据表与表的主外键联系,确定过滤条件;
  3. 确定结果集过滤条件;
  4. 精减查询字段。
-- 取学生表和班级表可能出现的所有结果(笛卡尔积)
mysql> select * from students,class;
+----+--------+----------+----------+------------+
| id | name   | class_id | class_id | class_name |
+----+--------+----------+----------+------------+
|  1 | 小丽   |        1 |        1 | 篮球       |
|  1 | 小丽   |        1 |        2 | 羽毛球     |
|  1 | 小丽   |        1 |        3 | 排球       |
|  2 | 莉莉   |        1 |        1 | 篮球       |
|  2 | 莉莉   |        1 |        2 | 羽毛球     |
|  2 | 莉莉   |        1 |        3 | 排球       |
|  3 | 王刚   |        3 |        1 | 篮球       |
|  3 | 王刚   |        3 |        2 | 羽毛球     |
|  3 | 王刚   |        3 |        3 | 排球       |
|  4 | 张亮   |        2 |        1 | 篮球       |
|  4 | 张亮   |        2 |        2 | 羽毛球     |
|  4 | 张亮   |        2 |        3 | 排球       |
+----+--------+----------+----------+------------+
12 rows in set (0.00 sec)

-- 确定过滤条件
mysql> select * from students,class where students.class_id = class.class_id;
+----+--------+----------+----------+------------+
| id | name   | class_id | class_id | class_name |
+----+--------+----------+----------+------------+
|  1 | 小丽   |        1 |        1 | 篮球       |
|  2 | 莉莉   |        1 |        1 | 篮球       |
|  3 | 王刚   |        3 |        3 | 排球       |
|  4 | 张亮   |        2 |        2 | 羽毛球     |
+----+--------+----------+----------+------------+
4 rows in set (0.00 sec)

-- 精减字段
mysql> select students.name,class.class_name from students,class where students.class_id = class.class_id;
+--------+------------+
| name   | class_name |
+--------+------------+
| 小丽   | 篮球       |
| 莉莉   | 篮球       |
| 王刚   | 排球       |
| 张亮   | 羽毛球     |
+--------+------------+
4 rows in set (0.00 sec)

外连接

1.概念

外连接: 是关系型数据库中用于组合两个或者多个表中记录的操作,他在连接表时至少会保留一个表中的所有行,即使另一个表中没有匹配的行。

外连接分为左外连接,右外连接和全外连接。MySQL不支持全外连接。这里就不写全外连接了。

2.分类:

左外连接

1.定义:

左外连接:返回左表中的所有记录和右表中匹配的记录。如果右表中没有匹配的记录,则结果集中对应字段会显示为null;

2.语法 :

select 字段1,字段2 from 表1 [别名1] left join 表2 [别名2] on 连接条件;

3.示例: 

-- 插入学生信息,在班级表中没有的编号
mysql> insert into students values(5,'五五',5);
Query OK, 1 row affected (0.06 sec)

mysql> select * from students;
+----+--------+----------+
| id | name   | class_id |
+----+--------+----------+
|  1 | 小丽   |        1 |
|  2 | 莉莉   |        1 |
|  3 | 王刚   |        3 |
|  4 | 张亮   |        2 |
|  5 | 五五   |        5 |
+----+--------+----------+
5 rows in set (0.00 sec)

-- 左外连接:表1中的数据完全显示,即使表2没有相匹配的数据
mysql> select s.id,s.name,c.class_name from students s left join class c on s.class_id=c.class_id;
+----+--------+------------+
| id | name   | class_name |
+----+--------+------------+
|  1 | 小丽   | 篮球       |
|  2 | 莉莉   | 篮球       |
|  3 | 王刚   | 排球       |
|  4 | 张亮   | 羽毛球     |
|  5 | 五五   | NULL       |
+----+--------+------------+
5 rows in set (0.00 sec)

-- 内连接:只显示表1和表2中相匹配的
mysql> select students.name,class.class_name from students join class on students.class_id=class.class_id;
+--------+------------+
| name   | class_name |
+--------+------------+
| 小丽   | 篮球       |
| 莉莉   | 篮球       |
| 王刚   | 排球       |
| 张亮   | 羽毛球     |
+--------+------------+
4 rows in set (0.00 sec)

 右外连接

1.概念

右外连接:与左外连接相反,返回右表中的所有记录和左表匹配的记录。如果左表中没有匹配的记录,这结果集中对应字段会显示为null;

 2.语法

select 字段1,字段2 from 表1 [别名1] right join 表2 [别名2] on 连接条件

 3.示例

mysql> insert into class(class_id,class_name) values(4,'乒乓球');
Query OK, 1 row affected (0.04 sec)

mysql> select* from class;
+----------+------------+
| class_id | class_name |
+----------+------------+
|        1 | 篮球       |
|        2 | 羽毛球     |
|        3 | 排球       |
|        4 | 乒乓球     |
+----------+------------+
4 rows in set (0.00 sec)

mysql> select s.id,s.name,c.class_name from students s right join class c on s.class_id=c.class_id;
+------+--------+------------+
| id   | name   | class_name |
+------+--------+------------+
|    1 | 小丽   | 篮球       |
|    2 | 莉莉   | 篮球       |
|    3 | 王刚   | 排球       |
|    4 | 张亮   | 羽毛球     |
| NULL | NULL   | 乒乓球     |
+------+--------+------------+
5 rows in set (0.00 sec)

-- 内连接:只显示表1和表2中相匹配的
mysql> select students.name,class.class_name from students join class on students.class_id=class.class_id;
+--------+------------+
| name   | class_name |
+--------+------------+
| 小丽   | 篮球       |
| 莉莉   | 篮球       |
| 王刚   | 排球       |
| 张亮   | 羽毛球     |
+--------+------------+
4 rows in set (0.00 sec)

全外连接

概念 

全外连接:结果左外连接和右外连接的特点,返回左右表中的所有记录。如果某一边表中没有匹配的记录,这结果集中对应字段会显示为null。

有的mysql不支持,这里我就不多写啦。 


自连接

1.概念

自连接:表与自身进行连接的操作。在查询的时候可以使用where条件对结果进行过滤,或者进行行与行之间的比较。做表连接的时候为表其不同的别名。

2.示例: 

-- 创建学生成绩表
mysql> create table student_score(
    -> id bigint,
    -> english decimal(5,2),
    -> chinese decimal(5,2),
    -> math decimal(5,2));
Query OK, 0 rows affected (0.07 sec)

-- 插入信息
mysql> insert into student_score values(1,78,85,96),(3,96,84,66),(2,87,77,99);
Query OK, 3 rows affected (0.03 sec)
Records: 3  Duplicates: 0  Warnings: 0

-- 查询表结果
mysql> select * from student_score;
+------+---------+---------+-------+
| id   | english | chinese | math  |
+------+---------+---------+-------+
|    1 |   78.00 |   85.00 | 96.00 |
|    3 |   96.00 |   84.00 | 66.00 |
|    2 |   87.00 |   77.00 | 99.00 |
+------+---------+---------+-------+
3 rows in set (0.00 sec)

-- 取笛卡尔积:自己与自己连接
mysql> select * from student_score s1,student_score s2;
+------+---------+---------+-------+------+---------+---------+-------+
| id   | english | chinese | math  | id   | english | chinese | math  |
+------+---------+---------+-------+------+---------+---------+-------+
|    1 |   78.00 |   85.00 | 96.00 |    1 |   78.00 |   85.00 | 96.00 |
|    3 |   96.00 |   84.00 | 66.00 |    1 |   78.00 |   85.00 | 96.00 |
|    2 |   87.00 |   77.00 | 99.00 |    1 |   78.00 |   85.00 | 96.00 |
|    1 |   78.00 |   85.00 | 96.00 |    3 |   96.00 |   84.00 | 66.00 |
|    3 |   96.00 |   84.00 | 66.00 |    3 |   96.00 |   84.00 | 66.00 |
|    2 |   87.00 |   77.00 | 99.00 |    3 |   96.00 |   84.00 | 66.00 |
|    1 |   78.00 |   85.00 | 96.00 |    2 |   87.00 |   77.00 | 99.00 |
|    3 |   96.00 |   84.00 | 66.00 |    2 |   87.00 |   77.00 | 99.00 |
|    2 |   87.00 |   77.00 | 99.00 |    2 |   87.00 |   77.00 | 99.00 |
+------+---------+---------+-------+------+---------+---------+-------+
9 rows in set (0.00 sec)

-- id要相同
mysql> select * from student_score s1,student_score s2 where s1.id=s2.id;
+------+---------+---------+-------+------+---------+---------+-------+
| id   | english | chinese | math  | id   | english | chinese | math  |
+------+---------+---------+-------+------+---------+---------+-------+
|    1 |   78.00 |   85.00 | 96.00 |    1 |   78.00 |   85.00 | 96.00 |
|    3 |   96.00 |   84.00 | 66.00 |    3 |   96.00 |   84.00 | 66.00 |
|    2 |   87.00 |   77.00 | 99.00 |    2 |   87.00 |   77.00 | 99.00 |
+------+---------+---------+-------+------+---------+---------+-------+
3 rows in set (0.00 sec)

-- 确认过滤条件:英语成绩大于语文成绩的信息
mysql> select * from student_score s1,student_score s2 where s1.id=s2.id and s1.english>s2.chinese;
+------+---------+---------+-------+------+---------+---------+-------+
| id   | english | chinese | math  | id   | english | chinese | math  |
+------+---------+---------+-------+------+---------+---------+-------+
|    3 |   96.00 |   84.00 | 66.00 |    3 |   96.00 |   84.00 | 66.00 |
|    2 |   87.00 |   77.00 | 99.00 |    2 |   87.00 |   77.00 | 99.00 |
+------+---------+---------+-------+------+---------+---------+-------+
2 rows in set (0.00 sec)

子查询

1.概念

子查询:子查询是一个select语句的结果当做别一个select语句的条件,也叫做嵌套查询。 外部的查询叫做主查询,内部的查询叫做子查询。

2.分类:

1.单行子查询

概念

单行子查询:嵌套的查询只返回一行数据。

语法 

select * from 表名 where 列1 =(select 列1 from 表名 where 条件);

示例

-- 查询英语成绩为78的学生id
mysql> select id from student_score where english=78;
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

-- 查询学生成绩表中英语成绩为78的学生id的所有信息
-- 子查询:select id from student_score where english=78,表示从student_score中找出英语成绩等于78的学生的id
-- 主查询:select * from  student_score where id=(子查询结果)表示查询student_score表中所有列,筛选条件是id值等于子查询返回的值
mysql> select * from  student_score where id=(select id from student_score where english=78);
+------+---------+---------+-------+
| id   | english | chinese | math  |
+------+---------+---------+-------+
|    1 |   78.00 |   85.00 | 96.00 |
+------+---------+---------+-------+
1 row in set (0.01 sec)

注意事项

  • 数据类型要匹配:子查询中返回的数据类型要与主查询返回结果一致,否则可能为空或者报错;
-- 返回的是student_score中英语成绩为子查询id值的记录,数据不匹配,返回为空
mysql> select * from  student_score where english=(select id from student_score where english=78);
Empty set (0.00 sec)
  •  子查询结果具有唯一性:要确保子查询返回的结果唯一;
-- 查询英语成绩为78的信息
-- 有两条结果
mysql> select english from student_score where english=78;
+---------+
| english |
+---------+
|   78.00 |
|   78.00 |
+---------+
2 rows in set (0.00 sec)

-- 再一次进行子查询
-- 发生报错:子查询结果不唯一
mysql>  select * from  student_score where english=(select english from student_score where english=78);
ERROR 1242 (21000): Subquery returns more than 1 row

在单行查询中子查询只能的结果具有唯一性,如果我们想要多个子查询结果应该怎么办?我们这里有多行子查询结果可以解决该问题。 

 2.多行子查询

1.概念:

多列子查询 :嵌套的查询返回多行数据。

语法:

select * from 表名 where 列1 [not] in(select 列1 from 表名 where 条件);
  • 与单行子查询的差别:把=改成in 
-- 查询英语成绩为78的学生id值的所有列
mysql> select * from student_score where id in(select id from student_score where english=78 );
+------+---------+---------+-------+
| id   | english | chinese | math  |
+------+---------+---------+-------+
|    1 |   78.00 |   85.00 | 96.00 |
|    7 |   78.00 |   88.00 | 54.00 |
+------+---------+---------+-------+
2 rows in set (0.00 sec)

-- 查询英语成绩不是78的学生id值的所有列:加上not
mysql> select * from student_score where id not in(select id from student_score where english=78 );
+------+---------+---------+-------+
| id   | english | chinese | math  |
+------+---------+---------+-------+
|    3 |   96.00 |   84.00 | 66.00 |
|    2 |   87.00 |   77.00 | 99.00 |
+------+---------+---------+-------+
2 rows in set (0.01 sec)

3.多列子查询

概念:

多列子查询:返回多列的数据,外层嵌套与嵌套的内层循环要匹配。

示例: 

-- 查询学生成绩表信息:
mysql> select* from student_score;
+------+---------+---------+-------+
| id   | english | chinese | math  |
+------+---------+---------+-------+
|    1 |   78.00 |   85.00 | 96.00 |
|    3 |   96.00 |   84.00 | 66.00 |
|    2 |   87.00 |   77.00 | 99.00 |
|    7 |   78.00 |   88.00 | 54.00 |
|    5 |   96.00 |   84.00 | 66.00 |
+------+---------+---------+-------+
5 rows in set (0.01 sec)

-- 在创建一个成绩表
mysql> create table scores(
    -> id bigint auto_increment primary key,
    -> english decimal(5,2),
    -> chinese decimal(5,2),
    -> math decimal(5,2));
Query OK, 0 rows affected (0.13 sec)

-- 插入信息
mysql> insert into scores values(55,45,66),(77,53,84),(78,88,54);
ERROR 1136 (21S01): Column count doesn't match value count at row 1
mysql>  insert into scores(english,chinese,math) values(55,45,66),(77,53,84),(78,88,54);
Query OK, 3 rows affected (0.04 sec)
Records: 3  Duplicates: 0  Warnings: 0

-- 查询新的成绩表信息
mysql> select* from scores;
+----+---------+---------+-------+
| id | english | chinese | math  |
+----+---------+---------+-------+
|  1 |   55.00 |   45.00 | 66.00 |
|  2 |   77.00 |   53.00 | 84.00 |
|  3 |   78.00 |   88.00 | 54.00 |
+----+---------+---------+-------+
3 rows in set (0.00 sec)

-- 查询学生成绩表中与新成绩表相匹配的数据
mysql> select * from student_score where (english,math) in (select english,math from scores);
+------+---------+---------+-------+
| id   | english | chinese | math  |
+------+---------+---------+-------+
|    7 |   78.00 |   88.00 | 54.00 |
+------+---------+---------+-------+
1 row in set (0.00 sec)

4.多行子查询和多列子查询的区别 

区别 多行子查询 多列子查询
功能 重点在于返回多行数据,通常用于处理单列的多个值 重点在于返回多列数据,通常用于主查询中多列值的组合比较
数据匹配 基于单列的多个值进行的 基于多列的组合进行的
使用场景 用于一组值的筛选 依据多个列的条件进行筛选

 合并查询

 1.概念:

合并查询:合并多个查询(select)结果到一个结果集中,可以使用集合操作符union,union all。

使用union或者union all合并结果 

  • union:取两个结果的并集,如果出现查询结果相同的结果,会自动去重;
  • union all: 取两个结果的并集,如果出现查询结果相同的结果,不会自动去重;

示例: 

-- 查看学生成绩表结果
mysql> select * from student_score;
+------+---------+---------+-------+
| id   | english | chinese | math  |
+------+---------+---------+-------+
|    1 |   78.00 |   85.00 | 96.00 |
|    3 |   96.00 |   84.00 | 66.00 |
|    2 |   87.00 |   77.00 | 99.00 |
|    7 |   78.00 |   88.00 | 54.00 |
|    5 |   96.00 |   84.00 | 66.00 |
+------+---------+---------+-------+
5 rows in set (0.00 sec)

-- 查看学生成绩表中英语成绩为78的信息
mysql> select * from student_score where english =78;
+------+---------+---------+-------+
| id   | english | chinese | math  |
+------+---------+---------+-------+
|    1 |   78.00 |   85.00 | 96.00 |
|    7 |   78.00 |   88.00 | 54.00 |
+------+---------+---------+-------+
2 rows in set (0.00 sec)

--查看学生成绩表中id为2的信息
mysql> select * from student_score where id =2;
+------+---------+---------+-------+
| id   | english | chinese | math  |
+------+---------+---------+-------+
|    2 |   87.00 |   77.00 | 99.00 |
+------+---------+---------+-------+
1 row in set (0.00 sec)

-- union的使用
-- 查看学生成绩表中英语成绩为78的信息和id为2的信息
mysql> select * from student_score where english =78 union select * from student_score where id =2;
+------+---------+---------+-------+
| id   | english | chinese | math  |
+------+---------+---------+-------+
|    1 |   78.00 |   85.00 | 96.00 |
|    7 |   78.00 |   88.00 | 54.00 |
|    2 |   87.00 |   77.00 | 99.00 |
+------+---------+---------+-------+
3 rows in set (0.00 sec)
-- 有三条结果

-- --查看学生成绩表中id为1的信息
mysql>  select * from student_score where id =1;
+------+---------+---------+-------+
| id   | english | chinese | math  |
+------+---------+---------+-------+
|    1 |   78.00 |   85.00 | 96.00 |
+------+---------+---------+-------+
1 row in set (0.00 sec)

-- 查看学生成绩表中英语成绩为78的信息和id为1的信息
mysql> select * from student_score where english =78 union select * from student_score where id =1;
+------+---------+---------+-------+
| id   | english | chinese | math  |
+------+---------+---------+-------+
|    1 |   78.00 |   85.00 | 96.00 |
|    7 |   78.00 |   88.00 | 54.00 |
+------+---------+---------+-------+
2 rows in set (0.00 sec)
-- 只有两条结果
-- 原因:union具有去重效果

-- union all:不具有去重的效果
mysql> select * from student_score where english =78 union all select * from student_score where id =1;
+------+---------+---------+-------+
| id   | english | chinese | math  |
+------+---------+---------+-------+
|    1 |   78.00 |   85.00 | 96.00 |
|    7 |   78.00 |   88.00 | 54.00 |
|    1 |   78.00 |   85.00 | 96.00 |
+------+---------+---------+-------+
3 rows in set (0.00 sec)

根据表构建表

复制表结构

语法

create table 目标表名 like 源表名;

示例: 

-- 查看班级表结构
mysql> desc class;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| class_id   | bigint(20)  | NO   | PRI | NULL    | auto_increment |
| class_name | varchar(20) | YES  |     | NULL    |                |
+------------+-------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)

-- 根据班级表构建一个新的表
mysql> create table  new_class like class;
Query OK, 0 rows affected (0.06 sec)

-- 查看新的班级表结构
mysql> desc new_class;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| class_id   | bigint(20)  | NO   | PRI | NULL    | auto_increment |
| class_name | varchar(20) | YES  |     | NULL    |                |
+------------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

复制表信息 

语法

insert into 目标表名 select * from 源表名;

这个我就是我在上一篇文章里面新增插入查询结果的,如果想看更详细一点的语法,可以去看看嘞,这里就简单写一下啦。 

示例

-- 查看班级信息
mysql> select * from class;
+----------+------------+
| class_id | class_name |
+----------+------------+
|        1 | 篮球       |
|        2 | 羽毛球     |
|        3 | 排球       |
|        4 | 乒乓球     |
+----------+------------+
4 rows in set (0.00 sec)

-- 复制班级表中的信息到新的班级表中
mysql> insert into new_class select * from class;
Query OK, 4 rows affected (0.02 sec)
Records: 4  Duplicates: 0  Warnings: 0

-- 查看新的班级表信息:与旧班级表一直
mysql> select * from new_class;
+----------+------------+
| class_id | class_name |
+----------+------------+
|        1 | 篮球       |
|        2 | 羽毛球     |
|        3 | 排球       |
|        4 | 乒乓球     |
+----------+------------+
4 rows in set (0.00 sec)

各关键词的执行向后顺序:from>on>join>where>group by>with>having>select>distinct>order by>limit

 

 


网站公告

今日签到

点亮在社区的每一天
去签到