现在做两个版本的系统,一个用的数据库是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. Easyui columns列图片移位问题!!!

    InitGrid: function () { $("#list").datagrid({ toolbar: '#tb', url: BanZhengXiaoLuSearch.Aj ...

  2. MYsql 数据库密码忘记(Window)

    之前想在自己的机器上搭建一个数据库,但是又怕占用内存太大,因此特地从网上下载了一个绿色版,免安装版本的,开始用着 还可以,后来重启机器发现悲催了,数据库用不了了, 决心好好整整Mysql 我的是 版本 ...

  3. mac包管理器Homebrew安装命令

    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

  4. tp框架之AJAX

    实现一个AJAX添加并显示数据的例子 控制器 <?php namespace Home\Controller; use Think\Controller; class AjaxControlle ...

  5. 12.Java中Comparable接口,Readable接口和Iterable接口

    1.Comparable接口 说明:可比较(可排序的) 例子:按照MyClass的y属性进行生序排序 class MyClass implements Comparable<MyClass> ...

  6. Oracle连接与会话

    连接(connection):连接是从客户端到oracle数据库实例的一条物理路径. 会话(session):会话是数据库实例中存在的一个逻辑实体. case1:一个连接可以有多个会话 SQL> ...

  7. oracle is not in the sudoers file. This incident will be reported.

    准备把OS的root禁用了,所以其他用户要执行使用root执行的操作时,需要使用sudo. 在没有配置sudo的时候,执行sudo会出现类似以下的报错: [oracle@test ~]$ sudo / ...

  8. Unity IOS Build的Graphics API最好是固定Opengl ES 2.0

    不要选择Automatic也不要选择Metal,因为这个选项可能会导致app在Iphone6上出现crash. 一个类似的crash堆栈: http://stackoverflow.com/quest ...

  9. MIT 6.828 JOS学习笔记13 Exercise 1.10

    Lab 1 Exercise 10 为了能够更好的了解在x86上的C程序调用过程的细节,我们首先找到在obj/kern/kern.asm中test_backtrace子程序的地址, 设置断点,并且探讨 ...

  10. Java EE之servlet处理表单提交的请求

    1.在源包下新建一个Servlet页,取名为LoginServlet: package weinidingServlet;                            //该Servlet所 ...