转载请注明出处:http://blog.csdn.net/pearyangyang/article/details/41115491
这几天学习公司系统的数据流向。主要涉及到几个表的数据。
可是表中的数据有上百万条,所以假设出现sql语句没有带条件的。会导致查询卡死,甚至出现内存溢出的情况。
公司用到的数据库是sqlserver。所下面列的sql语句主要是针对sqlserver数据库的,其它数据库大同小异。
1、当我要熟悉数据库表结构的时候。我须要运行一个语句。这条语句可以查看数据库的非常多信息,如列名。字段名。字段大小,字段类型等等.......
select * from information_schema.columns where table_name=‘表名‘
2.、当然假设你想创建数据库表的创建情况的话能够运行以下的调用存储过程的语句:
exec sp_help ‘表名‘
3、当我想了解数据库主,外键的时候,我通过以下的语句:
查询主键:EXEC sp_pkeys @table_name=‘表名‘
查询外键:
select 主键列名=(selectname from syscolumns where colid=b.rkey AND id = b.rkeyid) ,外键表名称=object_name(b.fkeyid),外键列名=(select name from syscolumns wherecolid=b.fkey AND id = b.fkeyid) from sysobjectsa join sysforeignkeys b on a.id = b.constid join sysobjects c on a.parent_obj =c.id where a.xtype = 'f' AND c.xtype='U' and object_name(b.rkeyid)='表名'
4、查找数据库前面的数据(能够分析数据库表的设计和字段的详细情况)使用TOPkeyword。 因为数据量太大,所以想分析数据的话我们能够提取数据前50或100条数据来查找,详细用法select top100 * from 表名,当查找一个字段在相相应的表中有多少种的时候,能够使用group by来查找。
select 属性 from 表名 group by 属性
ps:*号能够替换为数据库的列名来查找。后面也能够加上查询条件等等。
5、当我们有时候须要推断一个字段是否为空的时候我们须要用到is null 推断或isnull()函数。在查找或删除的时候常用到。这两者我眼下还没有找到在性能方面有什么大的区别,可是两者之间的用途还是不一样的,我认为is null 更加简洁,比方select * from 表名 where name is null,而isnull()函数则更加灵活。以下将举几个样例:当我们有一个用户表,假设用户最開始没有填写自己的昵称,我们查找的时候能够给它默认一个昵称nickename。能够通过以下的sql语句来实现。
假使用户的昵称为空。我们就能够通过select name,isnull(nickname,‘csdn01用户‘) from csdninfo 。默认就是csdn01用户。
6、在delete之前最好select一次。 , 近期公司出了一件大事,库存表warebalance被一不小心删除完了,30多W条数据一下子就没有了? 我不知道数据库有没有rollback,即使rollback以后数据之间实时在操作有没有导致数据库中数据产生错误? 原因就是在删除语句的时候本来想删除warebalancebak备份表。可是因为误操作。导致删除了warebalance,所以我们在删除之间最好查询一次,假设查询一次的话就可能不会导致上述错误。
lenkeyword(依据长度查找)
select * from t_stu where len(sno) = 14 (查找学生学号为14位的学生信息)
7、当查看公司字段的时候,非常多字段都使用了子查询,连接查询。所以还不会这些的能够查查相关的资料(弄懂inner/left/right join之间的差别)
8、比如一个表中字段有同样的,你想从这些同样的数据中查询当中一个作分析,比如有一个tb_a表
我想查找表字段中name唯一的数据,所以能够用distinctkeyword来查:select distinct name from tb_a;
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGVhcnlhbmd5YW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
而假设我们再依据一些字段来查:select distinct name,num from tb_a; 我们能够看到结果:
总结:我们以后查唯一条件的时候。要依据相关条件和需求来查。得到你想要的结果~~
9、公司数据库设计的思考,因为涉及到保密关系,所以非常多细节性的东西不能描写叙述,可是我们在设计表的时候,外键之间的关联和表与表之间的关系一定要弄清楚。必要的时候能够画草图辅助构思。
其它的,等遇到了问题再逐渐总结上来吧。