各位大大们,最近在学数据库,然后就自己找了点资料,在xp下装了11G。然后再命令行下去实践上课的一些sql命令。现在发现,当我要显示一个表的数据的时候,比如select a,b for A看下A表里面的情况,但是dos里面显示如下
   a
     aa
1
     bb
2
     cc
3
   b
就是1,2,3是a列的值,aa,bb,cc是b列的值,对是对的,就是现实错位了,单行显示没有问题,一旦select *或者是选择了两行以上,就有这种错位了求帮助还有就是一个命令的困惑
update visite set nb_oeuvres=(select count(id_ouvres) from etape where etape.id_visite=visite.id_visite); 和
update visite set nb_oeuvres=(select count(id_oeuvre) from etape group by id_visite having visite.id_visite = etape.id_visite);这两条语句为什么执行起来会有区别,解释下,visite里面有id_visite,theme,nb_ouvres(数量)etape(步骤)表里面有id_ouvres,id_visite然后就是,其实visite里面的nb_ouvres列式多余的,应为我可以从etape里面算出来,对应一个visite有多少个ouvres(作品)要参观。所以,我就是用上面的语句去更新visite里面的nb_ouvres的值。但是第一条语句是对的完全显示,没有在etape出现的id_visite对应的nb_ouvres是0。第二条语句别的都对,除了哪些没有作品要参观的id_visite没有显示出0,是空的我没有理解为什么会出现这样的不同
最后一点是概念上的为什么这里我count(*)和count(id_oeuvre)结果是一样的为什么用了group by以后就不能用where了谢谢,麻烦大家了,不甚感激

解决方案 »

  1.   

    第一个问题:
    这个是因为你 a b 列的长度决定的,长度超过了dos窗口的宽度
    你可以事先设定下列的显示大小已写入 file afiedt.buf  1* create table test_table (a varchar2(200),b varchar2(200))
    SQL> /表已创建。SQL> insert into test_table values('1','aa');已创建 1 行。SQL> select * from test_table;A
    --------------------------------------------------------------------------------
    B
    --------------------------------------------------------------------------------
    1
    aa
    SQL> col a format a20; --显示为20位的字符
    SQL> col b format a20;
    SQL> select * from test_table;A                    B
    -------------------- --------------------
    1                    aa
      

  2.   

    --group by 可以和where一起用的
    SQL> select count(*) from emp where deptno=30
      2  group by comm;  COUNT(*)
    ----------
             2
             1
             1
             1
             1SQL> select comm,count(*) from emp where deptno=30
      2  group by comm having (count(*)>=2);      COMM   COUNT(*)
    ---------- ----------
                        2
      

  3.   

    借助工具吧。如plsqldev
      用命令行适合启动关闭,然后恢复吧。
      

  4.   

    1 是你设置字段的时候 字段的精度很大 超过默认的行显示长度
    col a format a10....
    set linesize 1502你两个应该都是会出现不匹配的 会出现为空
    后面还要加个 where existsupdate visite a set nb_oeuvres=(select count(id_ouvres) from etape b where a.id_visite=b.id_visite)
    where exists(select 1 from etape c where a.id_visite=c.id_visite)10g最好 merge intomerge into visite a using (select id_visite,count(id_oeuvre) cn_id from etape group by id_visite) b on(a.id_visite=b.id_visite)
    when matched then
    update set a.nb_oeuvres=b.cn_id3
    count(*)和count(id_oeuvre)结果是一样的 这问题不解释自己想4
    where 可以和group在一起用 但是的注意其位置 where 放在group前面
      

  5.   

    您好,感谢帮助,照您的方法改了下,但是貌似还是有问题我的表式这样建立的
    create table visite (
    id_visite number(8) constraint visite_pkey primary key,
    theme varchar2(255)
    );
    create table etape (
    id_oeuvre number(8) constraint etape_oeuvre_fkey references oeuvre,
    id_visite number(8) constraint etape_visite_fkey references visite,
    ordre number(8),
    constraint etape_pkey primary key (id_oeuvre, id_visite)
    );alter table visite add nb_oeuvres number(8);--给visite加了一列nb_ouvres
    insert into visite values (1,'Le hasard', 2);
    insert into visite values (2,'Le non-sens', 0);
    insert into visite values (3,'Le tour du monde', 8);insert into etape values (1,1,1);
    insert into etape values (8,1,2);
    insert into etape values (1,2,1);
    insert into etape values (2,2,2);
    insert into etape values (3,2,3);
    insert into etape values (4,2,4);
    insert into etape values (5,2,5);
    insert into etape values (6,2,6);
    insert into etape values (7,2,7);
    insert into etape values (8,2,8);--以上都是测试数据按照你的方法,我用了
    col id_visite format a20,
    col theme format a20
    col nb_ouvres format a20
    set linesize 150
    但是结果依然 显示如下
    ID_VISITE
    ----------
    THEME
    -------------------------------------------------------------------------------
    ----------------------------------------------------------------------
    NB_OEUVRES
    ----------
             1
    Le hasard
             0         2
    Le non-sens
             0 ID_VISITE
    ----------
    THEME
    -------------------------------------------------------------------------------
    ----------------------------------------------------------------------
    NB_OEUVRES
    ----------         3
    Le tour du monde
             0
    请问这是什么原因
      

  6.   

    您好,我电脑里面装了sqlplus developer但是还是不太熟悉配置,昨天还好好的,今天启动的时候就说ORA12541:tns 无监听程序
    刚入手这个不怎么会调试能否指导一下,或者推荐有没有教程,我去网上搜过,但是效果不是很理想所以就在命令行里面敲代码
      

  7.   

    您好,感谢帮助,照您的方法改了下,但是貌似还是有问题我的表式这样建立的
    create table visite (
    id_visite number(8) constraint visite_pkey primary key,
    theme varchar2(255)
    );
    create table etape (
    id_oeuvre number(8) constraint etape_oeuvre_fkey references oeuvre,
    id_visite number(8) constraint etape_visite_fkey references visite,
    ordre number(8),
    constraint etape_pkey primary key (id_oeuvre, id_visite)
    );alter table visite add nb_oeuvres number(8);--给visite加了一列nb_ouvres
    insert into visite values (1,'Le hasard', 2);
    insert into visite values (2,'Le non-sens', 0);
    insert into visite values (3,'Le tour du monde', 8);insert into etape values (1,1,1);
    insert into etape values (8,1,2);
    insert into etape values (1,2,1);
    insert into etape values (2,2,2);
    insert into etape values (3,2,3);
    insert into etape values (4,2,4);
    insert into etape values (5,2,5);
    insert into etape values (6,2,6);
    insert into etape values (7,2,7);
    insert into etape values (8,2,8);--以上都是测试数据按照你的方法,我用了
    col id_visite format a20,
    col theme format a20
    col nb_ouvres format a20
    set linesize 150
    但是结果依然 显示如下
    ID_VISITE
    ----------
    THEME
    -------------------------------------------------------------------------------
    ----------------------------------------------------------------------
    NB_OEUVRES
    ----------
      1
    Le hasard
      0  2
    Le non-sens
      0 ID_VISITE
    ----------
    THEME
    -------------------------------------------------------------------------------
    ----------------------------------------------------------------------
    NB_OEUVRES
    ----------  3
    Le tour du monde
      0
    请问这是什么原因
      

  8.   


    再试试 
    进入数据库后 
    SQL> set linesize 300
      

  9.   

    您好这个工具我也有在用就是,不太熟悉,自己是新手,用的是sysdba登陆的,然后连接上之后,table里面的表特别多,应该都是系统的表,所以一直没敢用,不知道如何创建新的角色,单独分配一个表的空间麻烦能知道下么,还有就是本来这个工具用的都好好的,今天开机的时候,再登陆的时候就提示ORA12541,tns 无监听程序请问如何解决,谢谢
      

  10.   


    那就用 set linesize + col colname format axx 配合使用 
      

  11.   

    你把行大小跟页大小设置一下,具体值自己把握更改
    set linesize 300 pagesize 100 ;
    然后你再运行看看
      

  12.   

    用pl sql dev 工具就可以了,这个可视化的界面工具使用起来很方便的!LZ可以试试