database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 41191 게시물 읽기
No. 41191
update sql 퀴즈입니다.
작성자
김흥수(protokhs)
작성일
2016-06-30 01:19
조회수
7,933

 아시는 분들은 다들 아시겠지만 생각외로 실수하기 쉽고 경력이 오래되신 분들도 정확한 차이를 잘 모르시는 경우가 있더라구요....

그래서 한번 퀴즈로 내봅니다.

 

간단해보이지만 생각보다 실수하기 쉬운 문제입니다.
 
두개의 테이블이 다음과 같을 때 
tb_t_1 : id number primary key,con1 number, con2 number
tb_t_2 : id number primary key, subid number primary key , con number
 
다음의 두 SQL의 차이는 ?
update  tb_t_1 a
set     a.con1 = (
    select
        nvl(sum(b.con),0) + nvl(a.con2,0)
    from    tb_t_2 b
    where   a.id = b.id
    group by
        b.id
)
/
 
update  tb_t_1 a
set     a.con1 = (
    select
        nvl(sum(b.con),0) + nvl(a.con2,0)
    from    tb_t_2 b
    where   a.id = b.id
)
/
 
이 글에 대한 댓글이 총 2건 있습니다.

두 쿼리의 차이는 Group By 유무인데요...
이미 조건절에서 그룹바이 항목에 대한 단일 조건을 주고 있고
또한 그룹바이에서 해당 항목을 조회하는 것도 아니므로
Group By 구문은 불필요하게 사용된 것입니다.
없어도 되는 구문인거죠.
그런데 이게
 - 없어도 되는 구문인지?
 - 없어야만 하는 구문인지?
생각해 봐야 합니다.


조건에 맞는 결과가 있다면 두 쿼리는 같은 결과를 내지만
조건에 맞는 결과가 없는 경우엔 첫번째 쿼리는 잘못된 결과를 내게 됩니다.
Group By 가 없을때는 조건을 만족하는 자료가 없어도 결과는 나옵니다.(a.con1 = 0 + a.con2)
Group By 가 있을때는 조건을 만족하는 자료가 없으면 결과도 없습니다.(a.con1 = null)


결국 Group By 는 없어도 되는 구문이 아니라 없어야만 하는 구문인거죠.

마농(manon94)님이 2016-07-04 11:31에 작성한 댓글입니다.

 정답입니댜

김흥수(protokhs)님이 2016-07-05 12:52에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
41194실용성 있는 sql 퀴즈입니다. [5]
김흥수
2016-07-07
10539
41193작업시간그룹 기준 최초 최종 가져오기 문의 드립니다. [2]
김미림
2016-07-04
7943
41192오라클 쿼리에 버그가 있네요... [1]
김흥수
2016-07-03
7869
41191update sql 퀴즈입니다. [2]
김흥수
2016-06-30
7933
41190이 sql 의 문제 무엇일까요. 의견부탁드려요. [2]
니노
2016-06-29
7864
41189두개의 테이블 검색(도움요청) [3]
염진호
2016-06-29
8054
41188실용성이 있는 SQL 퀴즈입니다. ^^ [3]
김흥수
2016-06-24
11263
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.025초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다