常用、特殊SQL整理

最近一直在操作数据库,发现上次总结的那篇博客不见了,今天又整理了一下
INSERT

INSERT INTO 表名称 VALUES (值1, 值2,....)
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
INSERT INTO Persons VALUES ('a', 'b', 'c', 'd')
INSERT INTO Persons (a, b) VALUES ('c', 'd')
INSERT INTO Store_Information (Store_Name, Sales, Txn_Date)
SELECT store_name, Sales, Txn_Date
FROM Sales_Information
WHERE Year (Txn_Date) = 1998;

UPDATE

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson' 
UPDATE table1 alias
SET (column_name,column_name ) = (
SELECT (column_name, column_name)
FROM table2
WHERE column_name = alias.column_name)
WHERE column_name = VALUE

DELETE

DELETE 语句用于删除表中的行。
DELETE FROM 表名称 WHERE 列名称 = 值
可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:
DELETE FROM table_name 或者 DELETE * FROM table_name

DISTINCT

select count(distinct name) from A; --去除重复的列

ORDER BY

1、使用GROUP BY 子句 时,SELECT 列表中的非汇总列必须为GROUP BY 列表中的项。
2、分组时,所有的NULL值分为一组。
3GROUP BY 列表中一般不允许出现复杂的表达试、显示标题以及SELECT列表中的位置标号。
以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber):
SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber

HAVING

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value

*注意HAVING后的条件不能用别名COUNT>3 必须使用COUNT(*) >3,否则报:列名 ‘COUNT’ 无效。
having 子句中的每一个元素并不一定要出现在select列表中

group by子句是对统计的结果进行分组统计,而having子句用于限制分组显示结果
select id as id,count(age) count from cip_temps group by id having count(age)=2;  

ORACLE SQL语句学习

分组函数

Max:该函数用于取得列或表达式的最大值,适用于任何数据类型。  
Min:该函数用于取得列或表达式的最小值,适用于任何数据类型。  
Avg:该函数用于取得列或表达式的平均值,适用于数字类型。  
Sum:该函数用于取得列或表达式的总和,  适用于数字类型。  
Count:该函数用于取的行数总和。  

注意:
1、当使用分组函数时,分组函数只能出现在选择列表、order by和having子句中,而不能出现在where、group by子句中。
2、当使用分组函数时,除了函数count(*)外,其他分组函数都会忽略NULL行。
3、当执行select语句时,如果选择列表同时包括列、表达式和分组函数,那么这些列、表达式必须出现在group by子句中。
4、当使用分组函数时,在分组函数中可以指定all和distinct选项,其中all是默认选项,该选项表示统计所有行数据(包括重复行),distinc可以统计不同行数据。

  • 取得某列最小值、最大值、平均值、总和和总计行数
select max(id) as max_id,min(id) as min_id,avg(id) as avg_id,sum(id) as sum_id,count(*) as count from cip_temps;  
  • 去除重复值
select count(distinct id) from cip_temps;  

case表达式

case when 条件 then 返回值1 when 条件2 then 返回值2 else 返回值3 end  

Oracle常用统计函数

  • 数字函数
    (1)、mod(m,n)该函数用于返回取得两个数字相除后的余数,如果数字为0,则返回结果为m。
    (2)、round(n,[m]该函数用于取得四舍五入运算,如果省略m,则四舍五入至整数位;如果m是负数,则四舍五入到小数点前m位;如果m是正数,则四舍五入到小数点后m位。
    (3)、trunc(n,[m])该函数用于截取数字,如果省略m,则将数字n的小数部门截取;如果m为正数,则将数字n截取至小数点后的第m位,如果m为负数,则将数字n截取小数点的前m为。
    示例如下:
select mod(10,4) from dual;  
select round(101234.567,-4) from dual;  
select round(101.234567,4) from dual;  
select trunc(101234.457,2) from dual;  
select trunc(101234.457,-2) from dual; 
  • 日期函数
select round(sysdate,'yyyy') from dual;  
select round(sysdate,'mm') from dual;  
select round(sysdate,'dd') from dual;  
select trunc(sysdate,'yyyy') from dual;  
select trunc(sysdate,'mm') from dual;  
select trunc(sysdate,'dd') from dual;  
select to_date('2009-3-1','yyyy-mm-dd') from dual;  
select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual;  
select to_number('10.123') from dual;  

DECODE
decode(expr,search1,result1[,search2,result2,…],default)该函数用于返回匹配于特定表达式结果,如果search1匹配与expr,则返回结果result1,如果search2匹配expr,则返回结果result2,以此类推,如果没有任何匹配关系,则返回默认default。

select name,decode(age,'bb21',id*10,'bb22',id*20,1000) as decodee from cip_temps;  
select name,case when (  
             (age='bb21' and address='cc21')   
             or (age='bb22' and address='cc22')   
             or (age='bb23' and address='cc23')   
           ) then 1 else 0 end as cases from cip_temps
补充一下oracle数据库的 函数用法:
nvl(1,2) 1不为空就是1 为空就是2
decode(m.medicaltype, '7', 1, 0) 相当于if else 
if(m.medicaltype== '7') 
    return 1;
else 
    return 0;

补充2

decode(t.total,'',0,t.total),
这里面decode的地方用nvl更好,在这个点上确实都能满足我们用的,
decode是相当于等于casewhen的判 断,nvl是非空数据默认值的设置
nvl(t.total,0,t.total);

补充3

decode(a.punishunittype,'1',a.punishunitname,'0','')
相当于if else ,
如果a.punishunittype==1,则令a.punishunittype=1,
如果a.punishunittype==0,则令a.punishunittype=0

补充4

update t_jsqy_medicalperson s set s.idcardtype = '01' 
where s.hospitalname = '南京市仙林鼓楼医院' and s.idcardtype = '1' and s.sourcetype = 'excel导入' and s.idcard <> '321322199005270060';
--<>是除去'321322199005270060'的意思

补充5

select count(1)  from t_jsqy_medicalperson a where to_char(a.updateddate,'yyyy-MM-dd') >= '2016-08-01' ;
这个是oracle里面的一个日期类型timestamp(6)的格式转换查询

补充6

select  SUBSTR(idcard , 0, 17) from S 截取身份证前十七位,
oracle数据库中substr 截取从0开始,后面17是表示的位数,17位。

参考博客:
http://blog.csdn.net/icanlove/article/details/38849595

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值