SQL日志统计
select distinct diary.userid , a.name, sum(case when diary>=1 then 1 else 0 end) as '写日志' from diary inner join a on a.id=diary.userid group by diary.userid,a.id,a.name 说明:当你的diary大于1时,也设为1,如果没有写,那么为0 ,这样用sum进行汇总也就求出了结果。 ID 姓名 日志数 1 zzl 2 2 zql 2 3 zzd 1 4 gy 4
SQL语句优化技巧(5)
项目完成了,现在进入了维护阶段,一切都很平静。。。 突然有一天,老板来了个需求,要求用户有一个新的功能,即会员可以为好友推荐,进行本网站,当推荐的人真的来本网站注册后,并进行了邮件确认后,同时要给那个会员一些好处,比如,送它积分。 这个需要无疑要牵动用户表,这可如何是好,是在原表基础上改,还是。。。 首先如如果在原表上改,牵动太大,所以就想到了面向对象的“开闭原则”,在不改变原表的同时,添加一个附加表,即和原表有相同的主键,并且是一对一的关系(有时,...
SQL语句优化技巧(4)
数据库实训:适当数据库冗余 在上一篇文章中,告诉了大家数据库的三大范式,最基础的莫过于数据表中不能有冗余了,但今天主要说的已经“冗余”,而且,有时候冗余并非都是坏事! 如,以下是一个大家伙,用户表user_info,它里面有用户的地址ID,如cityid,可能还有用户扩展表的信息,用户积分表的信息等等,这些信息至少需要三个表关联才能得到我们所需要的信息,而实际情况往往比这个还要复杂的多。 这时,一种数据冗余的思想产生了,它相当于是用空间来换时间,即数据库在磁盘上占用的空间多了,但查询的性能提高了...
SQL语句优化技巧(2)
1、应用程序中,保证在实现功能的基础上,尽量减少对数据库的访问次数;通过 搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻网络负担;能够分 开的操作尽量分开处理,提高每次的响应速度;在数据窗口使用SQL时,尽量把使 用的索引放在选择的首列;算法的结构尽量简单;在查询时,不要过多地使用通配 符如SELECT * FROM T1语句,要用到几列就选择几列如:SELECT COL1,COL2 FROM T1;在可能的情况下尽量限制尽量结果集行数如:SELECT TOP 300 COL1,COL2,COL3 FROM T1,因为某些情况下用户是不需要那么多的...
oracle添加或删除一列
alert table 表名 add column 列名 alter table 表名 drop column 列名 eg: alter table TPointManage add AddPointsReason number(8) alter table textattrdetail drop column AddPointsReason 需要注意的一点,如果要修改的表,不是当前的用户的表,那么就需要添加上用户的名称。以及有修改此表的权限。
Oracle自定义函数
函数用于返回特定数据。执行时得找一个变量接收函数的返回值; 语法如下: create or replace function function_name ( argu1 [mode1] datatype1, argu2 [mode2] datatype2, ........ ) return datatype is begin end; 执行 var v1 varchar2(100) exec :v1:=function_name 不带任何参数 create or replace function get_user return varchar2 is Result varchar2(50); begin select username into Resu...
Oracle递归查询
有的情况下,我们需要用递归的方法整理数据,这才程序中很容易做到,但是在数据库中,用SQL语句怎么实现?下面我以最典型的树形结构来说明下如何在Oracle使用递归查询。 start with connect by 层次查询(Hierarchical Queries) 从顶级向下级查询 Select a.areaid,a.name,a.parentid,a.levelcode From prnbsn_area a Start With a.areaid = 3 Connect By Prior a.areaid=a.parentid 该查询会查出所有的重庆子级区域 从下向上查询 Select a.areaid,a.name,a.parentid,a.levelcode From prnbsn_area a Sta...
ORACLE存储过程PROCEDURE(介绍,输入,输出参数,使用,维护)
内容:存储过程PROCEDURE(介绍,输入,输出参数,使用,维护) 存储过程 - 执行一个任务,该任务包括了一系列的PL SQL语句,存储在数据库中,成为数据库一个对象。 - 效率比较高的,但你创建一个存储过程它会进行一个判断编译的。 =================================== 创建一个简单的存储过程 SQL> CREATE OR REPLACE PROCEDURE xs_proc 2 IS 3 BEGIN 4 NULL; 5 END; 6 / Procedure created. 如何执行: SQL> EXECUTE xs_proc; PL/SQL procedure successfully completed. 或者执行 SQL> BEGIN 2 xs_pro...
改变oracle表空间数据文件的位置
SQL> conn sys@henry as sysdba 请输入口令: 已连接到空闲例程。 SQL> --需要在open模式下进行 SQL> startup open ORACLE 例程已经启动。 Total System Global Area 135340020 bytes Fixed Size 454644 bytes Variable Size 109051904 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes 数据库装载完毕。 数据库已经打开。 SQL> --用例中要将文件由'D:/ORACLE/ORADATA/MARS_BASE_DATA03.DBF'改为'D:/ORACLE/OR ADAT...
数据库设计命名规范参考
总则:不管你用什么命名方法,所有的命名规则一定要统一,不要一会儿中文拼音一会儿英文等等。 1、采用英文单词或英文短语(包括缩写)作为名称,不能使用无意义的字符或汉语拼音。 2、每个数据库对象表,视图,字段,存储过程,不要用任何数据库的关键词作为名称。凡是能写注释的地方,应该写上注释,以便查看。 3、名称应该清晰明了,能够准确表达事物的含义,最好可读,遵循“见名知意”的原则。 4、对长度也要有限制,最好不要超过30个字符,在PD设置生成时,部分数据库对象会自动截取到30位。 5、所有名称的...