现在做两个版本的系统,一个用的数据库是Access,另一个就是Oracle了。每个数据库支持的的查询SQL语句都有所区别,这里主要针对Access和Oracle做
记录。

首先贴出遇到问题最多的一条语句(现在可以通过运行),同时查询三个表:PUB_LOG(主),PUB_LOGTYPE(副),PUB_USER(副),提示的错误有:字段不允许、列

名无效,缺失左括号。
      Access:=>"select m.ID AS ID,t.FULLNAME as LOGTYPE,m.INFO as INFO,m.[TIME] AS LOGTIME,
                        IIF(m.result=1,'成功','失败') AS RESULT,
                        u.FULLNAME AS USERNAME,u.LOGINNAME AS LOGINNAME,
                        m.DESCRIPTIONSTR AS DESCRIPTIONSTR,m.HOSTINFO AS HOSTINFO
                        FROM (([select * from PUB_LOG]. as m
                        LEFT JOIN PUB_LOGTYPE t on t.ID=m.TYPEKEY)
                        LEFT JOIN PUB_USER u on u.ID=m.USERID)
                       {0}
                       order by m.ID DESC ",
                       strWhere.Trim() == "" ? "" : string.Format(" where {0} ", strWhere));

Oracle:=>select m.ID AS ID,t.FULLNAME as LOGTYPE,m.INFO as INFO,m.TIME AS LOGTIME
                       DECODE(m.result,1,'成功','失败') AS RESULT,
                       u.FULLNAME AS USERNAME,u.LOGINNAME AS LOGINNAME,
                       m.DESCRIPTIONSTR AS DESCRIPTIONSTR,m.HOSTINFO AS HOSTINFO,
                       FROM ((PUB_LOG m
                       LEFT JOIN PUB_LOGTYPE t on t.ID=m.TYPEKEY)
                       LEFT JOIN PUB_USER u on u.ID=m.USERID)
                       {0}
                       order by m.ID DESC ",
                       strWhere.Trim() == "" ? "" : string.Format(" where {0} ", strWhere));

一、当列名是关键字时,access需要将该列名用[]括起来,oracle中用“”(oracle查询时不需要),如上面语句中的TIME是关键字。

二、access赋值用@,oracle用:

Access:=> strSql.Append("select ID,TYPEKEY,INFO,RESULT,[TIME],USERID,DESCRIPTIONSTR,HOSTINFO from PUB_LOG ");

strSql.Append(" where ID=@ID");
OleDbParameter[] parameters =
{
new OleDbParameter("@ID", OleDbType.Integer, 4)
};
parameters[0].Value = ID;(此处ID为有值变量)

Oracle:=> strSql.Append("select ID,TYPEKEY,INFO,RESULT,TIME,USERID,DESCRIPTIONSTR,HOSTINFO from PUB_LOG ");

strSql.Append(" where ID=:ID");
OracleParameter [] parameters =
{
new OracleParameter( ":ID", OracleType .Number , 4)
};
parameters[0].Value = ID;
ds = DbHelperOra .Query(strSql.ToString(), parameters);

三、Access支持IIF函数,但Oracle将此函数更改成了更灵活的DECODE函数,运用这两个函数可以对查询结果赋值、分类。表达式如下(可参照在上面语句中的运行):

IIF(表达式,'为真时的值','为假时得值')

DECODE(值,case1,'值1',case2,'值2'...,casen,'值n','所有其他情况')

eg1:表中性别列XB女生记为0,男生为1,但显示时需正常显示,用DECODE表示为
select decode(XB,0,'女','男')from 表
eg2:DECODE在排序中的应用,表table_subject,有subject_name列。要求按照:语、数、外的顺序进行排序
select * from table_subject order by decode(subject_name, '语文', 1, '数学', 2, '外语',3)

而在SQL Server 中对应的语句为
case 判断对象 when 判断条件 then 条件为真的场合返回的结果
eg:case Column1
when '1' then '男'
when '2' then '女'
else '其他'

四、inner join、left join、right join和full join (列如现有表A和B,A为主查询表,B为连接表)

inner join:内连接,查询结果为指定字段的值在A和B中同时存在的行结合成的新表
left join:左连接,查询结果为所有A中的项和与之匹配的B项的结合,若B中不存在匹配项则保留空格
right join:右连接 查询所有A表中与B匹配的项,返回结果为两表的结合
full join:全连接 查询A表和B表中的所有项全部例出,没有匹配项的保留空格,一对多时列出多列。

五、as 表示起别名(小新手啊),利用它可以解决名字过长的不便,可以方便的将数据在DataGridView中显示,运程使用DB中的Table时还可以隐藏DB的

      信息,更加安全。

Oracle查询和问题简记的更多相关文章

  1. Oracle 查询出来的数据取第一条

    Oracle 查询出来的数据取第一条 --------------------------------------------------------------------------- 转载自:h ...

  2. 45 个非常有用的 Oracle 查询语句

    ​ 这里我们介绍的是 40+ 个非常有用的 Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询.这些是所有 Oracle 开发者都必备的技能,所以快 ...

  3. oracle 查询最近执行过的 SQL语句(转载)

    oracle 查询最近执行过的 SQL语句 (2014-06-09 18:02:43) 转载▼   分类: Database oracle 查询最近执行过的 SQL语句 select sql_text ...

  4. 【转】oracle查询用户表,函数,储存过程,

    ◆Oracle查询用户表空间:select * from user_all_tables ◆Oracle查询所有函数和储存过程:select * from user_source ◆Oracle查询所 ...

  5. ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法

    ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法 语法 第一种: 通过使用Oracle语句块  --指定文档所有部门都能查看 declare cursor TABLE_DEPT and ...

  6. Oracle 查询今天、昨日、本周、本月和本季度的所有记录

    Oracle 查询今日.昨日.本周.本月和本季度的所有记录 字段类型为date 今日 select * from 表名 where to_char(字段名,'dd')=to_char(sysdate, ...

  7. oracle查询单表占用空间的大小

    oracle查询单表占用空间的大小 SELECT segment_name AS TABLENAME, BYTES B, BYTES KB, BYTES MB FROM user_segments w ...

  8. ORACLE查询当前资产状态,和另一个数据库联查,(查询重复数据中第一条),子查询作为字段查询

    背景:ORACLE查询当前资产状态,包含资产信息(表1),资产维修状态(表2),资产报废状态(表3) 如下: 资产信息:

  9. Oracle查询表里的重复数据方法:

    一.背景 一张person表,有id和name的两个字段,id是唯一的不允许重复,id相同则认为是重复的记录. 二.解决 select id from group by id having count ...

随机推荐

  1. javaSE基础07

    javaSE基础07 一.static静态修饰符 用了static修饰的变量就会变成共享的属性,只会初始化一次,在内存中只存在一个,并且每个对象都可以访问,存放在方法区(数据共享区) 1.1 stat ...

  2. 使用getParts()上传多个文件

    <!DOCTYPE html> <html> <head> <title></title> <meta http-equiv=&quo ...

  3. 8. UIViewController

    1. UIViewController 的认识 UIViewController在iOS开发中占据很重要的位置,iOS的整个UI开发的核心思想也是MVC的架构,从UIViewController的命名 ...

  4. Tern Sercer Tineout

  5. webservices接口 file &quot;/axis2-web/listsingleservice.jsp&quot; not found 问题解决

    搞了半天 ,原来是services.xml  配置的某个或者某些service 在代码中不存才.扫描的时候找不到对应的service代码所以就会报错

  6. AE+C# 版本更新问题 命名空间“ESRI”中不存在类型或命名空间名称“Arcgis”(是缺少程序集引用吗?)

    解决办法: 1 引用 将下图中解决方案->引用中带感叹号的已用移除,然后添加新的.因为不同版本用的.dll不同,因此需要删除,然后重新加载. 如果是系统库文件, 直接在.NET下头添加,如果是自 ...

  7. Linux学习内容

    Linux学习要点(转载自红联) 一.学习Linux的基本要求1. 掌握至少50个以上的常用命令. 2. 熟悉Gnome/KDE等X-windows桌面环境操作 . 3. 掌握.tgz..rpm等软件 ...

  8. CozyRSS开发记录12-MVVM,绑定RSS源和数据

    CozyRSS开发记录12-MVVM,绑定RSS源和数据 1.引入MvvmLight MVVM最近貌似在前端那块也挺火的.据说,WPF的程序如果不用MVVM,那跟MFC和winform的,也没啥区别. ...

  9. 转:Delphi的类与继承(VB与delphi比较)

    既然已经做出了com程序用delphi来开发的决定,那当然就要对delphi进行一些深入的了解.有人说delphi是一个用控件堆砌起来的工具,和vb没什么两样:也有人说dephi实际上是面向过程的,他 ...

  10. Myeclipse运行报错:an out of memory error has occurred的解决方法

    不知道怎么了,重装的myeclipse2013,里边就放了一个项目,启动myeclipse就报 an out of memory error has occurred....... 一点yes就退出 ...