数据库使用过程中涉及到的一些内容

数据库 专栏收录该内容
1 篇文章 0 订阅

数据库使用过程中涉及到的一些内容

一、to_date时间函数的使用方法如下:
to_date函数为Oracle数据库特有的函数,不可再MySQL和SQL server中使用。
时间带时分秒:to_date(‘2019-07-31 21:21:21’,‘yyyy/MM/dd HH24:Mi:ss’)
时间不带时分秒:to_date(‘2019-07-31’,‘yyyy-mm-dd’)
二、case when的使用
第一种
case when sex=‘0’ then ‘男’ else ‘女’ end;
意思是当sex为0时,得到‘男’的字符串,否则就是得到‘女’字符串,when后面的条件可以跟多条,用and连接。
第二种
case gender when ‘1’ then ‘男’ when ‘0’ then ‘女’ else ‘其他’ end
意思是当查出来的结果gender字段为1时,用‘男’代替,为‘0’时用‘女’代替。否则就用‘其他’。
三、exists和not exists的使用以及与in和not in的区别
in的使用:
select * from A where id in(select id from B);
exists的使用:
select * from A where exists(select id from B where B.id=A.id);
exists只是根据子查询是否有值,为true就返回结果。
in和exists并不是exists更好,根据两张表的数据量,两张表的数据差不多时,则两者效率差不多,可能用in的效率更好,亲测。B表数据大的用exists更好,A表数据大的用in更好。
not exists和not in 如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;
而not extsts 的子查询依然能用到表上的索引。尽量不要使用not in(它是根据子查询的结果返回值),而尽量使用not exists(它是主表关联子查询中的表,关联查询)。使用not in时如果子查询中返回的任意一条记录含有空值,则查询将不返回任何记录。如果子查询字段有非空限制,这时可以使用not in。

MySQL使用可能出现的问题

不支持同表查询和删除修改,列如:
update A_table set name=‘12345’ where id in(select id from A_table)
为了解决这个问题,我们可以用一个中间表的概念,列如:
update A_table set name=‘12345’ where id in (select a.id from (select id from A_table) as a);
但是这种方法ORACLE不支持,所以最好使用exists和not exists来解决不通用问题。

数据库的优化

使用连接来代替子查询
连接包含全连接和左右外连接
使用UNION来代替手动创建的临时表
数据库中的表越小,在它上面执行的查询也就越快,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设的尽可能小,

  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值