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
운영게시판
최근게시물
MySQL Q&A 31232 게시물 읽기
No. 31232
쿼리문 in, not in 질문 있습니다 ㅠㅠ SQL 이제 시작한 사람입니다.
작성자
MySQL 초보
작성일
2019-04-25 10:10
조회수
947

mysql> select * from goods;

+----------+------------+----------------+------------+-----------+---------------+

| goods_id | goods_name | goods_classify | sell_price | buy_price | register_date |

+----------+------------+----------------+------------+-----------+---------------+

| 0001 | 티셔츠 | 의류 | 1000 | 500 | 2009-09-20 |

| 0002 | 펀칭기 | 사무용품 | 500 | 320 | 2009-09-11 |

| 0003 | 와이셔츠 | 의류 | 4000 | 2800 | NULL |

| 0004 | 식칼 | 주방용품 | 3000 | 2800 | 2009-09-20 |

| 0005 | 압력솥 | 주방용품 | 6800 | 5000 | 2009-01-15 |

| 0006 | 포크 | 주방용품 | 500 | NULL | 2009-09-20 |

| 0007 | 도마 | 주방용품 | 880 | 790 | 2008-04-28 |

| 0008 | 볼펜 | 사무용품 | 100 | NULL | 2009-11-11 |

+----------+------------+----------------+------------+-----------+---------------+

 

mysql> select * from storegoods;

+----------+------------+----------+-----+

| store_id | store_name | goods_id | num |

+----------+------------+----------+-----+

| 000A | 서울 | 0001 | 30 |

| 000A | 서울 | 0002 | 50 |

| 000A | 서울 | 0003 | 15 |

| 000B | 대전 | 0002 | 30 |

| 000B | 대전 | 0003 | 120 |

| 000B | 대전 | 0004 | 20 |

| 000B | 대전 | 0006 | 10 |

| 000B | 대전 | 0007 | 40 |

| 000C | 부산 | 0003 | 20 |

| 000C | 부산 | 0004 | 50 |

| 000C | 부산 | 0006 | 90 |

| 000C | 부산 | 0007 | 70 |

| 000D | 대구 | 0001 | 100 |

+----------+------------+----------+-----+

 

 

위에 처럼 2개의 테이블이 있습니다.

 

 

 

그런데 아래의 결과 문에서 고작 'in'과 '='만 바꿔줬을 뿐 인데,

왜 결과가 다르게 나오는지 모르겠습니다 ㅠㅠ

 

저는 아래처럼 해석했습니다.

 

첫 번째의 경우

store_name이 서울일 경우의 goods_id를 가져오와서 그 goods_id에 해당하지 않는 것을 goods 테이블에서 출력

 

두 번째의 경우

store_name이 서울이 아닌 경우의 goods_id를 가져와서 그 goods_id에 해당하는 것을 goods 테이블에서 출력

 

 

mysql> select goods_name, sell_price from goods

-> where goods_id not in

-> (select goods_id from storegoods where

-> store_name = '서울');

+------------+------------+

| goods_name | sell_price |

+------------+------------+

| 식칼 | 3000 |

| 압력솥 | 6800 |

| 포크 | 500 |

| 도마 | 880 |

| 볼펜 | 100 |

+------------+------------+

 

 

mysql> select goods_name, sell_price from goods

-> where goods_id in

-> (select goods_id from storegoods where

-> store_name != '서울');

+------------+------------+

| goods_name | sell_price |

+------------+------------+

| 티셔츠 | 1000 |

| 펀칭기 | 500 |

| 와이셔츠 | 4000 |

| 식칼 | 3000 |

| 포크 | 500 |

| 도마 | 880 |

+------------+------------+

이 글에 대한 댓글이 총 4건 있습니다.

 goods_id 로 비교해서 그렇게 나올 수 밖에 없겠네요.

지역별로 구분한다면 store_id 로 비교해야 맞지 않을까요?

정상규(pajama)님이 2019-04-25 11:11에 작성한 댓글입니다.

무슨 뜻인지 잘 모르겠습니다ㅠㅠ

 

어차피 결국은 store_name이 서울인 것이랑 

 

store_id가 '000A'인 것은 똑같은 고유한 값인데

 

달라지는건가요??

 

그리고 goods 테이블에서는 store_id가 없어서 goods_id로만 비교하는 수밖에 없지않나요?!

 

제가 잘 몰라서 질문해봅니다 ㅠ 

글쓴이님이 2019-04-25 11:29에 작성한 댓글입니다. Edit

올려주신 글을 제가 제대로 읽지 않고 동문서답을 했네요. 죄송합니다.

먼저 1. (select goods_id from storegoods where store_name ='서울') 결과 세트는 '0001', '0002', '0003' 이고

2. (select goods_id from storegoods where store_name != '서울) 결과는 '0001', '0002', '0003', '0004', '0006', '0007' 입니다.

 

따라서 최종적으로 goods 테이블의

goods_id not in 1번 세트는 '0004', '0005', '0006', '0007', '0008' 이 되고,

goods_id in 2번 세트는 '0001', '0002', '0003', '0004', '0006', '0007' 이 됩니다.

정상규(pajama)님이 2019-04-25 12:48에 작성한 댓글입니다.
이 댓글은 2019-04-25 12:51에 마지막으로 수정되었습니다.

 아아 이해했습니다..

 

서울의 goods_id인 0001, 0002, 0003인 것이

 

다른 지역들에도 퍼져있기 때문이군요..

 

감사합니다!

글쓴이님이 2019-04-25 12:53에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
31235파워빌더 파워스크립트문좀 자문 구합니다. [2]
이예성
2019-05-07
1087
31234쿼리좀 만들어 주세요~ [7]
이기자
2019-04-30
1193
31233윈도우10에 mysql 서버를 설치했는데 외부접속이 안되네요 [1]
테스트중
2019-04-28
1011
31232쿼리문 in, not in 질문 있습니다 ㅠㅠ SQL 이제 시작한 사람입니다. [4]
MySQL 초보
2019-04-25
947
31231클라우드 서비스 환경에서의 DB 구성방안 질문
개초보
2019-04-24
961
31230mysql 원단위 버림에 대해 문의 드립니다. [1]
최기철
2019-04-19
987
31229쿼리좀 도와주세요. [1]
초봉임둥
2019-04-11
917
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2019 DSN, All rights reserved.
작업시간: 0.091초, 이곳 서비스는
	PostgreSQL v11.5로 자료를 관리합니다