各位大大们,最近在学数据库,然后就自己找了点资料,在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了谢谢,麻烦大家了,不甚感激
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了谢谢,麻烦大家了,不甚感激
这个是因为你 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
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
用命令行适合启动关闭,然后恢复吧。
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前面
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
请问这是什么原因
刚入手这个不怎么会调试能否指导一下,或者推荐有没有教程,我去网上搜过,但是效果不是很理想所以就在命令行里面敲代码
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
请问这是什么原因
再试试
进入数据库后
SQL> set linesize 300
那就用 set linesize + col colname format axx 配合使用
set linesize 300 pagesize 100 ;
然后你再运行看看