지식메모/MySQL



A B 두 테이블이 있다고 가정하자

A와 B는 id라는 컬럼을 공유하며 가지고 있다.


A는 B를 포함하고 있다.  여기서 A 테이블의 id 에서 B테이블의 id를 제외한 결과를 가져오고 싶다면


select A테이블의 컬럼명 from A테이블 where id not in (select B테이블의 컬럼명 from B테이블);


select id from A where id not in (select id from B);



를 하면 된다.


쉽게? 설명하자면 빨간색 공과 파란색 공이 섞여있는 상자에서 파란색 공을 빼고 싶으면


select 공 from 빨강 where 공 not in (select 공 from 파랑);





데이터가 시간 내에 얼마나 들어왔나 보고 싶을때 시간 검색, 기간 검색이 가능하다



 select * from music 

where

 (type='song' or type='album')

 and 

created_date > DATE_ADD(now(), INTERVAL -1 hour);



music 테이블에서 type이 song 또는 album 인 데이터가 지난 1시간 동안 얼마나 들어왔는지 검색


-1~ -24 까지 하면 최근 한 시간 부터 24시간까지 검색이 가능


이런 식으로 끝에

-1 hour  최근 한 시간

-1 day 최근 하루

-1 month 최근 한달




 select * from music

 where 

created_date between '2013-10-10' and '2013-10-14';


10일부터 14일까지 검색




  1. 2013.10.17 12:00

    비밀댓글입니다

    • yonoo88 2013.10.17 14:28 신고

      daum.net 말고 hanmail.net인가요?

      아니면 다른 메일을 알려주세요

mysql join 문 사용하기

2013.08.07 15:32

하도 헷갈려서 정리


select 결과로 출력될 테이블 설정 from 기준 테이블명 join 조인할 테이블명 on 조인할 조건 where 검색조건 order by 1 desc limit 10;


나눠서 보면

select 결과로 출력될 테이블 설정 

from 기준 테이블명 

join 조인할 테이블명 on 조인할 조건 

where 검색조건 order by 1 desc limit 10;





예를 들면


 select item.create_day, user.id, item.item_name item.amount from item join user on user.id=item.vid where item.create_day>='2013-08-07' and item.create_day <'2013-08-08' order by 1 desc limit 10;



이러한 쿼리문을 풀어 써보면



select item.create_day, user.id, item.item_name item.amount from item 

 select item의 create_day, item_name, amount 칼럼과 user테이블의 id 칼럼을 보여줄건데 from 기준은 item 테이블



join user on user.id=item.vid

join 조인할 테이블은 user on 조인의 조건은 user 테이블의 id 칼럼과 item 테이블의 vid칼럼이 같은 것만 뽑아내고 

(item 테이블의 vid 칼럼은 user 테이블의 id를 참조하고 있는 상태)


where item.create_day>='2013-08-07' and item.create_day <'2013-08-08' 

where 검색 조건은  item 테이블의 create_day 칼럼(생성날짜)에서 2013년 8월 7일부터 8월 8일 전까지만 뽑아낸다.


order by 1 desc limit 10;

order by (정렬) 1 (첫번째 칼럼으로) desc (내림차순) limit (제한) 10(열 개만) ;


이런 뜻으로 select 다음에 처음으로 온 칼럼이 item.create_day이므로 이걸 기준으로 내림차순으로 하되 열개만 출력하도록 한다.






참고한 블로그 글 

http://khmirage.tistory.com/71


http://mansoo.tistory.com/entry/MySQL-%EC%BA%90%EB%A6%AD%ED%84%B0-%EC%85%8B-%EB%B3%80%EA%B2%BD



[client]

default-character-set=utf8


[mysqld]

character-set-client-handshake=FALSE

init_connect="SET collation_connection = utf8_general_ci"

init_connect="SET NAMES utf8"

default-character-set=utf8 //근데 나는 이 부분을 넣었을때 재시작이 실패했는데 빼니까 되었다. 뭐지..

character-set-server=utf8

collation-server=utf8_general_ci


[mysqldump]

default-character-set=utf8


[mysql]

default-character-set=utf8





테이블 구성보기

desc 테이블명;


테이블 내용 다 지우기

delete from 테이블명;


테이블 칼럼 추가

alter table 테이블명 add 칼럼명 varchar(11) not null default '0';


테이블 칼럼 삭제

alter table 테이블명 drop 칼럼명;


칼럼명과 타입 수정하기

alter table 테이블명 change 원래칼럼명 바꿀칼럼명 varchar(11);


칼럼 타입수정하기

alter table 테이블명 modify 칼럼명 varchar(20);


테이블명 수정

alter table 테이블명 rename 바꿀테이블명;




테이블 데이터 추가하기

insert into 테이블명 values ('칼럼1','칼럼2', ...);


테이블 안에 모든 내용보기

select * from 테이블명;


테이블 데이터 검색

select [찾을 필드명] from [찾을 테이블 이름] where [검색조건];


데이터 변경하기

update 테이블명 set 칼럼명='바꿀내용' where 타겟칼럼명 = '타겟칼럼데이터' ;



자꾸 써야 안 까먹는데 자꾸 안 쓴다.


맨날 참고하는 링크글 

http://www.tipssoft.com/bulletin/board.php?bo_table=FAQ&wr_id=493


http://opencode.kr/55





기존 테이블스키마를 테이블 명만 바꿔서 새로 생성하고 싶을때

show create table 기존테이블명;

해주면 쫙 나온다. 그대로 긁어다가 테이블 명만 수정하고 생성~


team table 스키마를 보여준 모습






+ Recent posts

티스토리 툴바