=================Oracle==================
1.创建表
Create table [tableName](id int,name varchar2(64));
2.删除表
drop table [tableName];
3.修改表
alert table [tableName] add newColumn varchar2(64);
comment on table [tableName] is '表的描述';
comment on column [tableName.column] is '列的描述';
4.查询表
select * from [tableName];
5.特殊函数(Oracle):
NVL(Expr1,Expr2)如果Expr1为NULL,返回Expr2的值,否则返回Expr1的值
NVL2(Expr1,Expr2,Expr3)如果Expr1为NULL,返回Expr2的值,否则返回Expr3的值
NULLIF(Expr1,Expr2)如果Expr1和Expr2的值相等,返回NULL,否则返回Expr1的值
6.在SQLSERVER中我们可以这样写:
select ISNULL(sum(data),0) ...
7.数据库中的rowId:rowid是数据库的一个伪列,建立表的时候数据库会自动为每个表建立ROWID列
用来唯一标识一行记录。 rowid是存储每条记录的实际物理地址,对记录的访问是基于ROWID。
每条记录的物理地址, 对数据库中记录行的作快检索方式就是使用rowid来进行查找。
8.存入数据库的密码不要存明文,存密码的Hashcode值,当用户登录时,用密码的hashcode值比较, 用"==";
9.如何查看一条SQL语句是否用到索引?
答:跟踪查看SQL语句的"执行计划",例如:mysql数据库可以这样跟踪,"explain sql语句";
oracle数据库有很多种方法可以跟踪执行计划
10.删除表里面的重复数据,保留其中的一条:
DELETE FROM test WHERE id NOT IN(SELECT maxId FROM(SELECT MAX(id) AS maxId FROM test GROUP BY CODE)AS b) ;
DELETE FROM test WHERE CODE = 'aaa' AND id NOT IN (SELECT maxid FROM (SELECT MAX(id) AS maxid FROM test WHERE CODE = 'aaa') AS b);11.SQL行转列的处理方法: 有时候某个功能有多项指标,我们需要纵向展示,比如成绩
SELECT s.lotInfoId AS lotNo,
MAX(s.packingQty) AS packingQty,
MAX(s.checkedQty) AS checkedQty,
MAX(s.actualQty) AS actualQty,
MAX(s.preRequisitionQty) AS preRequisitionQty,
MAX(s.memo) AS memo,
MAX(CASE st.qualityAssuranceContent WHEN '10' THEN IFNULL(st.qualityAssuranceResult,0) ELSE 0 END ) AS 'item001',
MAX(CASE st.qualityAssuranceContent WHEN '20' THEN IFNULL(st.qualityAssuranceResult,0) ELSE 0 END ) AS 'item002',
MAX(CASE st.qualityAssuranceContent WHEN '30' THEN IFNULL(st.qualityAssuranceResult,0) ELSE 0 END ) AS 'item003'
FROM PU_LotQualityAssuranceLog st
LEFT JOIN BD_LotInfo s ON st.lotNo = s.lotInfoId
where st.receiptId = #{receiptId}
GROUP BY s.lotInfoId