SQL多表操作、插入、更新、删除(mysql)

1. 多表操作

(1)伪集合并

纵向叠加记录:

select column1 from table1
union all
select column2 from table2

这里请注意

  1. column1column2应有相同的数据类型。当然它们可以相同。
  2. union all关键字并不去除重复值,如果需要去除,你可以使用union替代它。
  3. 为什么说伪集合呢,因为你并没有去除重复值(没有保证从table1 select出来的是不重复,也没有保证table2,更没有保证并之后的结果是不重复的)。

(2)伪集合交

mysql并没有提供显式的集合交操作,要实现它,你需要等值连接

select t1.column1, t1.column2 from t1, t2
    where t1.column1 = t2.column1 and t1.column2 = t2.column2

(3)伪集合差

mysql也没有提供显式的集合差操作,要实现它,你需要子查询

select column from t1
    where column not in (select column from t2)

当使用not in时,一定要注意null值的处理。

(4)组合相关行

横向增加字段,即我们常说的联表查询:

select t1.column1, t2.column2 from t1, t2
    where t1.column1 = t2.column1

这种方案被称为等值连接,也可以使用join操作。
注意:如果上面sql没有where子句,结果是两张表的笛卡尔积。

(5)外连接

select t1.column1, t2.column2 from t1 
    [left|right|full] [outer] join t2 on t1.column1 = t2.column1

outer可以省略。

(6)多表连接和聚集

  • 多表连接和聚集混合操作时,一定要小心:如果连接产生了重复值,那么你使用聚集函数(比如sum)计算很可能会出错。可以在聚集函数内部指定distinct。当然你也可以在多表连接时就进行去重。:

    select column1, sum(distinct column2) from (多表连接子查询) x
        group by column1
  • 多表连接和聚集函数混合操作时,也需要小心:如果连接的数据不全,那么使用聚集函数计算出的值也会出错。此时应当使用外连接。

2. 插入

(1)单行插入

insert into table (column1, column2)
    values (value1, value2)

列声明可以省略,然而你必须按照预定义的列顺序插入所有列。

(2)多行插入

insert into table (column1, column2)
    values (value1, value2),
        (value1, value2)

(3)插入默认值

insert into table (column1, column2)
    values (default, default)

或者

insert into table values (default)

默认值可以在创建表时被指定。

如果一些列有默认值,一些列没有默认值,那当你为没有默认值的列插入值时,有默认值的列会使用默认值。

(4)子查询插入

insert into t2 (column1, column2)
    select column1, column2 from t1 where ...

3. 更新

(1)简单更新

update table
    set column1=column1*0.1
        where ...

这里将符合条件的column1的值缩小10倍。

(2)用其它表中的值更新

4. 删除

delete from table where ...
  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值