sql技术汇总

1、mysql定义字段不用null,原因:
(1)所有使用NULL值的情况,都可以通过一个有意义的值的表示,这样有利于代码的可读性和可维护性,并能从约束上增强业务数据的规范性。
(2)NULL值到非NULL的更新无法做到原地更新,更容易发生索引分裂,从而影响性能。(null -> not null性能提升很小,除非确定它带来了问题,否则不要当成优先的优化措施)
(3)NULL值在timestamp类型下容易出问题,特别是没有启用参数explicit_defaults_for_timestamp
(4)NOT IN、!= 等负向条件查询在有 NULL 值的情况下返回永远为空结果,查询容易出错
2、下面这条语句的意思,把TableA的记录逐条代入到子查询,如果子查询结果集为空,说明不存在,那么这条TableA的记录出现在最终结果集,否则被排除
Select * from TableA a where Not Exists (Select * from TableB b where a.id=b.id and a.name=b.name);
3、导出指定时间段内300笔连续交易成功的记录
在这里插入图片描述
4、向创建的测试表插入一千万条数据,用存储过程。
示例
5、Mysql 查询不连续ID:
select id from (select id from rt_issue order by id asc) t where not exists (select 1 from rt_issue where id=t.id-1)
6、select 1 from table的用法
当我们只关心数据表有多少记录行而不需要知道具体的字段值时,类似“select 1 from tblName”是一个很不错的SQL语句写法,它通常用于子查询。这样可以减少系统开销,提高运行效率,因为这样子写的SQL语句,数据库引擎就不会去检索数据表里一条条具体的记录和每条记录里一个个具体的字段值并将它们放到内存里,而是根据查询到有多少行存在就输出多少个“1”,每个“1”代表有1行记录,同时选用数字1还因为它所占用的内存空间最小,当然用数字0的效果也一样。
1)列出每个班的学生人数
常规写法
select class,count () as pax from students
group by class;
更优写法
select class,count (1) as pax from students
group by class;
2)列出每个班最年轻的学生资料
常规写法
select a.
from students a where not exists(
select b.sid from students b where b.sid=a.sid
and b.date_birth>a.date_birth);
更优写法
select a.* from students a where not exists(
select 1 from students b where b.sid=a.sid
and b.date_birth>a.date_birth);
7、count()、count(1)和count(列)的比较
列越往后,count(列)的执行效率越慢。所以列的偏移量决定性能,列越靠后,访问的开销越大。由于count(
)的算法与列偏移量无关,所以count()最比count(列)快。
count(
)对行的数目进行计算,包含NULL,只要某一行不全为null都会被统计进去。
count(column)对特定的列的值具有的行数进行计算,不包含NULL值。
count()还有一种使用方式,count(1)这个用法和count()的结果是一样的。
mysql中验证没有发现count(1)与count(
)明显区别,暂且认为是一样的效率。count(*)和count(1)无太大差别,count(field)若使用不当会带来错误或性能问题,不建议使用。
8、MySQL如何在SELECT语句中定义变量并赋值?
SELECT Name, @flag:=1 AS flag FROM test;
在上面这条语句中定义了一个变量并赋值为1,别名为flag。
8、GROUP_CONCAT可以把同一个分组的某个字段值合并在一块
9、MySql 里的IFNULL用法:IFNULL(expr1,expr2)的用法:假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1;
否则其返回值为expr2
10、Mysql中的sum(if())的用法
11、mysql在整数减去null得到是null。这是一个细节问题,要注意,可以使用使用ifnull,来处理null。
注意:
1) 在设计表的时候,如果发现这列是需要运算的列,建议设置默认值,比如0;
2) 在整形列的运算的时候,不管是加,减,乘,除等。都需要使用ifnull,对列进行处理。否则报表数据就会错。
12、select * from comment group by user_id;
这条语句只会返回每个分组的第一条数据
13、分组top1的简单方法:先倒排序,再分组即可。
14、可以利用mysql实现一种独特的排序。首先先按某个字段进行order by,然后把有顺序的表进行分组,这样每组的成员都是有顺序的,而mysql默认取得分组的第一行。从而得到每组的最值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值