数据库—10(表数据操作的SQL语句,高级使用)

一、将查询结果插入其他表中


若将personinfo 表中 人员最基本信息(名字、年龄、性别,身份证号)  统计结果  插入进 一个表中
语法格式:

insert into 表1(字段名) select SQL语句

即将select SQL 语句执行的结果插入 表1.字段名 下

创建基本信息表basicPersonInfo

create table basicPersonInfo(id int unsigned primary key auto_increment not null,name varchar(20),age tinyint unsigned default 0,gender enum('男','女'), personId varchar(18),proabb varchar(20));

mysql> desc basicPersonInfo;
+----------+---------------------+------+-----+---------+----------------+
| Field    | Type                | Null | Key | Default | Extra          |
+----------+---------------------+------+-----+---------+----------------+
| id       | int(10) unsigned    | NO   | PRI | NULL    | auto_increment |
| name     | varchar(20)         | YES  |     | NULL    |                |
| age      | tinyint(3) unsigned | YES  |     | 0       |                |
| gender   | enum('男','女')     | YES  |     | NULL    |                |
| personId | varchar(18)         | YES  |     | NULL    |                |
| proabb   | varchar(20)         | YES  |     | NULL    |                |
+----------+---------------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

将personinfo 表中所有 省份简写为 '川'的 人员基本信息插入至表basicPersonInfo中

mysql> insert into basicPersonInfo(name,age,gender,personId,proabb) select name,age,gender,personId,proabb from personinfo where proabb = '川';

mysql> select * from basicPersonInfo;
+----+-----------+------+--------+--------------------+--------+
| id | name      | age  | gender | personId           | proabb |
+----+-----------+------+--------+--------------------+--------+
|  1 | xiaozhang |   20 | 男     | 510131198605136412 | 川     |
|  2 | xiaozhang |   20 | 男     | 510131198605136413 | 川     |
|  3 | xiaowang  |   22 | 男     | 510131198605136414 | 川     |
|  4 | xiaowang  |   30 | 男     | 510131198605136415 | 川     |
+----+-----------+------+--------+--------------------+--------+
4 rows in set (0.00 sec)

二、使用连接更新表中某个字段数据

现在将personinfo 表中 省简称字段‘proabb’ 换成 province 表中 proabb 字段相对应的ID。

首先通过连表查询-内查询  去查看 personinfo 表中 proabb 等于 province 表中 proabb 字段 

mysql> select * from personinfo as per inner join province as pro  on  per.proabb = pro.proabb;
+----+-----------+------+--------+--------+--------+--------------+--------------------+--------+----+--------+--------+
| id | name      | age  | gender | height | city   | addr         | personId           | proabb | id | name   | proabb |
+----+-----------+------+--------+--------+--------+--------------+--------------------+--------+----+--------+--------+
|  1 | xiaozhang |   20 | 男     | 172.00 | 成都   | 成都高新     | 510131198605136412 | 川     |  3 | 四川   | 川     |
|  2 | xiaozhang |   20 | 男     | 172.00 | 成都   | 成都高新     | 510131198605136413 | 川     |  3 | 四川   | 川     |
|  3 | xiaowang  |   22 | 男     | 172.00 | 成都   | 成都高新     | 510131198605136414 | 川     |  3 | 四川   | 川     |
|  4 | xiaowang  |   30 | 男     | 170.00 | 成都   | 成都高新     | 510131198605136415 | 川     |  3 | 四川   | 川     |
|  5 | xiaozhao  |   25 | 女     | 165.00 | 重庆   | 重庆高新     | 510131198605136416 | 渝     |  4 | 重庆   | 渝     |
|  6 | xiaozhao  |   26 | 女     | 165.00 | 重庆   | 重庆高新     | 510131198605136417 | 渝     |  4 | 重庆   | 渝     |
+----+-----------+------+--------+--------+--------+--------------+--------------------+--------+----+--------+--------+
6 rows in set (0.00 sec)

将 上面语句 from 后面的语句看成一张 虚表.

#看成虚表
personinfo as per inner join province as pro  on  per.proabb = pro.proabb

然后将此虚表 per.proabb 字段 替换成 pro.id

mysql>insert into province(name,proabb) values('贵州','贵'),('云南','云');

mysql>update personinfo as per inner join province as pro  on  per.proabb = pro.proabb set per.proabb = pro.id;


mysql> select * from personinfo;
+----+-----------+------+--------+--------+--------+--------------+--------------------+--------+
| id | name      | age  | gender | height | city   | addr         | personId           | proabb |
+----+-----------+------+--------+--------+--------+--------------+--------------------+--------+
|  1 | xiaozhang |   20 | 男     | 172.00 | 成都   | 成都高新     | 510131198605136412 | 3      |
|  2 | xiaozhang |   20 | 男     | 172.00 | 成都   | 成都高新     | 510131198605136413 | 3      |
|  3 | xiaowang  |   22 | 男     | 172.00 | 成都   | 成都高新     | 510131198605136414 | 3      |
|  4 | xiaowang  |   30 | 男     | 170.00 | 成都   | 成都高新     | 510131198605136415 | 3      |
|  5 | xiaozhao  |   25 | 女     | 165.00 | 重庆   | 重庆高新     | 510131198605136416 | 4      |
|  6 | xiaozhao  |   26 | 女     | 165.00 | 重庆   | 重庆高新     | 510131198605136417 | 4      |
|  7 | xiaoxu    |   28 | 男     | 155.00 | 贵阳   | 贵阳南城     | 510131199204105870 | 5      |
|  9 | xiaozhou  |   29 | 女     | 160.00 | 桂林   | 桂林北城     | 510131199204105815 | 6      |
+----+-----------+------+--------+--------+--------+--------------+--------------------+--------+
8 rows in set (0.00 sec)

 

三、创建表并给某个字段添加数据

语法格式:
           create table ..  select 列名 .. 表示创建表并插入数据

比如建立一个表,表里面只有 省 简写

​​​​​​​create table proabbPrefix(id int unsigned primary key auto_increment not null,proabb varchar(20) ) select proabb  from personinfo group by proabb;

mysql> select * from proabbPrefix;
+----+--------+
| id | proabb |
+----+--------+
|  1 | 云     |
|  2 | 川     |
|  3 | 渝     |
|  4 | 贵     |
+----+--------+
4 rows in set (0.00 sec)

注意 如果 proabbPrefix proabb字段名 和personinfo  proabb 字段名不一样的话,必须将 select proabb as  proabbPrefix的字段名
​​​​​​​

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来数据库使用类的实例中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 达式语言: SQLAlchemy 提供了一个丰富的 SQL 达式语言,允许开发者以 Python 达式的方式编复杂的 SQL 查询。 达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值