前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >sql技术汇总

sql技术汇总

作者头像
时代疯
修改2021-07-20 14:34:04
1.2K0
修改2021-07-20 14:34:04
举报

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、向创建的测试表插入一千万条数据,用存储过程。

示例

4、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)

5、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默认取得分组的第一行。从而得到每组的最值。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档