우선 join 에는 크게 세가지로 나눌 수 있다.

교차 조인 (Cross Join)
내부 조인 (Inner Join)
외부조인 (Outter Join)

위 세가지로 나눌 수 있는데 외부 조인에 왼쪽(Left Outter Join), 오른쪽(Rightt Outter Join), 전체(All 교차 조인 (Cross Join) 세가지를 추가해서 5가지로 분류하기도 한다.

또한 join 은 테이블끼리, 뷰끼리도 조인이 가능하지만 테이블과 조인과도 조인이 가능하다.


교차 조인 (Cross Join)
교차 조인 (Cross Join) 은 말 그대로 두 개의 테이블을 그냥 붙였다는 개념이다. 아무런 조건이나 제한 사항 없이 양쪽은 있는 그대로 연결만 했다는 개념으로 생각을 하면 되겠다.
합집합(Union) 이라는 개념으로 생각해도 큰 무리가 없다.

select  *  from tbl_a CROSS JOIN tbl_b ;
select  *  from tbl_a , tbl_b ;




내부 조인 (Inner Join)
내부조인 (Inneer Join) 은 단순히 연결만 한 개념이 아니라 결과값이 일치하는 것만 join을 한 것이다. 교집합(intersection) 의 개념과도 비슷한데 기준이 되는 테이블과 일치하는 값만 join 하여 return 한다고 생각을 하면 된다.

select  *  from tbl_name INNER JOIN tbl_b  ON id = no ;
select  *  from tbl_name , tbl_b  where tbl_name.id = tbl_b.no ;


외부 조인 (Outter Join)
내부조인 한 결과에 덧붙여 일치하지 않는 데이터도 가져올 수 있다. 외부조인에는 왼쪽,오른쪽, 전체 외부조인의 3가지로 구분이 된다.

왼쪽 외부 조인 (Left  Join)
왼쪽 테이블을 기준으로 외부 조인 한다. 오른쪽 테이블에 인치하는 값이 없어도 왼쪽 테이블의 데이터는 모두 가져 온다. 이때 오른쪽에 없는 데이터는 null 로 대치 된다.
외부조인은 여집합(Complement) 의 개념이다.

select  *  from tbl_name LEFT JOIN tbl_b  ON id = no ;

오른쪽 외부 조인 (Rigth  Join)
오른쪽 테이블을 기준으로 외부 조인 한다. 왼ㅉㄱ쪽 테이블에 인치하는 값이 없어도 오른쪽 테이블의 데이터는 모두 가져 온다. 이때 왼쪽에 없는 데이터는 null 로 대치 된다.
외부조인은 여집합(Complement) 의 개념이다.

select  *  from tbl_name LEFT JOIN tbl_b  ON id = no ;


전체 외부 조인 (Full  Join)
오른쪽 외부조인과 왼쪽 외부조인을 합친 개념이다. 왼쪽/오른쪽 테이블의 값이 일치하든 일치 하지 않든 모두 가져오는 조인이다. 다만 Cross join 과 다른 점은 Full join 은 빈 값을  null 로 리턴한다는 것이고 Crosss join 은 양쪽 테이블을 그냥 단순히 연결시켜 준다는 점이다.

select  *  from tbl_name FULL JOIN tbl_b  ON id = no ;

Posted by designerjune grieda
TAG Join, MySQL

SSH 로 utf-8 로 엔코딩 된 서버의 mysql 데이터를 보면 한글이 완전히 깨지는 문제가 있었다
아침에 검색해 보니 putty 를 사용하면 해결이 된다고 해서
설치후 translation 에서 utf - 8 로 세팅을 해주니 바로 해결

출처 :네이버 지식인 관련 글
http://kin.naver.com/detail/detail.php?d1id=1&dir_id=10202&eid=eLtRzhCWx+5XIfkYM/WsVJp9n2DIc7gK&qb=cHV0dHk=&pid=fb1WUloi5T0ssu9GYwZsss--307513&sid=SG1tXhFabUgAAC94tfc

Posted by designerjune grieda

프로그래밍을 하면서 가장 많이 접하게 되는 구문

만약에 ~~ 라면
그리고 다른 만약에
그리고 만약의 경우를 제외하고..

인데 이를 프로그래밍 적으로 표현하면

if ~~ 라면
else if ~~ 라면
else ~~이면

이 세가지 이다. 경우의 수를 만들고 그 경우의 수 이외의 예외규정을 만드는 것인데 날코딩을 하던 php 나 jsp, asp (물론 내 시원찮은 알고리즘 구성 실력으로 하게 되는 날코딩이 대부분이엇지만)
에 비하면 Ruby 는 경우의 수를 만드는게 상당히 간단하다.

if ~~ 첫번째 경우
elsif ~~ 첫번째 경우가 아닌 다른 경우의 수
else 경우의 수가 아닌.. 이도 저도 아닌 나머지를 모두 포함하는 경우

이런식으로 구성을 하는데 처음에 프로그래밍을 하다보니 else 구문에 아무것도 지정하지 않은 경우 예)
if @use_condition == ''
        @use_condition = "(uses.name like '" + "%#{params[:use_etc]}%" + "'"
 end

이런식으로 구성을 하면 에러가 나기 십상이었다. 예외가 거의 대부분 있으나 예외가 없는 경우가 있을 수도 있는데 그런 경우에는 그냥 else 없이 한줄로 표현하면 된다.

@use_condition = "(uses.name like '" + "%#{params[:use_etc]}%" + "'"
 if @use_condition == ''

위에건 좀 그런 경우고 가장 심플한 거라면

<% render :action => 'search_result_none' if  @articles.size == 0 %>

이런 모양일 거다.. 해석을 하면  @articles 에 값이 없으면 (nil 이 아니다)  render :action => 'search_result_none' 해라. 그런데 없으면 말고."
이런뜻 이다. 이렇게 하면 else 를 교묘히(?) 숨길 수 잇는 듯 하다.
그리고 없는 경우에 대한 예외규정은 그냥 없음 말고란 뜻 정도이다.

나도 Ruby 초보여서 여기저기 헤메면서 때로는 에이~~ 설마 이렇게 되겠어.. 하다가 뜻밖에 되는 경우가 많다. 이번것도 그런경우..

약간 더 보탠다면 unless 라는 게 있는데 이게 if not~~ 이라는 뜻이다.

render :action => 'search_result_none' unless  @articles.size == 0
이것도 해석하자면 @articles 에 값이 하나라도 있으면 render :action => 'search_result_none' 라는 뜻으로 해석할 수 있겠다...

Ruby 농담처럼 얘기하는데 TOEFL 중간은 가야 제대로 활용할 수 있는 언어인게냐??
그런게야??






Posted by designerjune grieda
javascript:history.go(-2)
Posted by designerjune grieda

Mysql 이  /usr/local/mysql 에 설치되었다는 가정하에 설명 합니다.

■ Mysql 데몬 start 하기
# /usr/local/mysql/bin/mysqld_safe &
또는  # /usr/local/mysql/share/mysql/mysql.server start

■ Mysql 데몬 stop 하기
# /usr/local/mysql/bin/mysqladmin -uroot shutdown
또는   # /usr/local/mysql/share/mysql/mysql.server stop

■ Mysql 접속 방법

형식 : mysql -u 사용자 -p 사용DB
예제)
  # /usr/local/mysql/bin/mysql -u root -p mysql
  Enter password:      -> 초기 세팅후 비밀번호가 지정되지 않은경우는 엔터
또는 # /usr/local/mysql/bin/mysql mysql -p
         Enter password:

■ mysql의 root암호설정법
  mysql> update user SET Password=password('비밀번호') where user='root';

■ 일반계정의 비밀번호 변경시
  mysql> update user set password=password('새비밀번호') where user='계정명';

■ DB 생성명령
  mysql> create database DB명
 

■ DB 사용자 계정 생성 방법

◊ mysql 3.xx 에서 생성방법
  mysql> insert into user values('localhost','계정명',password('비밀번 호'),'N',
        'N','N','N','N','N','N','N','N','N','N','N','N','N');

  mysql> insert into db values('localhost','DB명','계정명','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

  mysql> FLUSH PRIVILEGES;     (새로 만든 디비를 MYSQL에 적용하기 위하여 reload함)

◊ mysql 4.0.xx 에서 생성방법
  mysql> insert into db values ('localhost','DB명','DB계정명','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y');

mysql> insert into user (host, user, password) values ('localhost','DB계정명',password('비밀번호'));
또는 아래와 같이도 생성가능함
  mysql> INSERT INTO user VALUES ('localhost','DB계정명',password('비밀번호'),
'N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','','','',0,0,0);

  mysql> FLUSH PRIVILEGES;

◊ mysql 4.1.xx 에서 생성방법
  mysql> insert into user (host, user, password) values ('localhost','DB계정명',password('비밀번호'));

  mysql> INSERT INTO db(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv)
VALUES('localhost','DB명','DB계정명','Y','Y','Y','Y','Y','Y');

  mysql> FLUSH PRIVILEGES;

● GRANT 로 생성하는 방법
  mysql> GRANT ALL PRIVILEGES ON DB명.* TO DB계정명@localhost IDENTIFIED BY '비밀번호' WITH GRANT OPTION;
=> localhost에서 'DB계정명' 이라는 사용자를 등록시

  mysql> GRANT ALL PRIVILEGES ON DB명.* TO DB계정명@'%' IDENTIFIED BY '비밀번호' WITH GRANT OPTION;
=> localhost 아닌 원격에서 접속시 호스트 부분을 % 로 해준다.


■ 계정,DB 생성 확인
  mysql> select * from user;


■ 기타 mysql에서 자주 사용되는 명령들

▷ DB삭제시
  mysql> drop database DB명

▷ DB 계정 삭제시
  mysql> delete from user where user='DBuser';  => (DBuser 라는 user 레코드를 삭제시)
  mysql> delete from db where user='DB';  => (DB 라는 db 레코드를 삭제시)
  mysql> FLUSH PRIVILEGES;

▷ DB선택시
  mysql> use DB명;

▷ DB 및 테이블 list보기
  mysql> show databases;
  mysql> show tables;

▷ mysql상의 테이블 정보 보기
  mysql> show tables from mysql;

▷ DB table의 칼럼정보 보기
  mysql> show columns from db;

▷ 테이블구조
  mysql> describe 테이블명;

▷ 인덱스 보기
  mysql> show index from 테이블명;

▷ 버전체크
  mysql> select version();

▷ MySQL의 상태 보기
  mysql> show status;

▷ MySQL 환경변수보기
  mysql> show variables;


◆ mysql 백업 하기
  # /usr/local/mysql/bin/mysqldump {-h 호스트} -u 사용자 -p DB명 > 백업파일명.sql

◆ mysql 복구 하기
  # /usr/local/mysql/bin/mysql {-h 호스트} -u 사용자 -p DB명 < 백업파일명.sql

  => {-h 호스트}는 원격접속시나 호스트명이 별도로 분류되어 있는경우에 사용
 

◆ Mysql root 비밀번호를 분실한 경우 조치방법

1. 실행중인 msyql 종료
  # killall mysqld  또는 killall -9 mysqld
  # ps -ef | grep mysqld  (mysql 데몬 없음을 확인)

2. grant-table 미사용모드로 mysql시작
  (mysql 3.x 사용시)
  # /usr/local/mysql/bin/safe_mysqld  --skip-grant-tables &
  (mysql 4.x 에서 사용시)
  # /usr/local/mysql/bin/mysqld_safe  --skip-grant-tables &
  # /usr/local/mysql/bin/mysql -u root -p mysql

3. update문으로 root사용자 패스워드 설정
  mysql> update user set password=password('newpasswd') where user = 'root';
  mysql> flush privileges;

4. 실행중인 mysql 다시 종료
  # killall mysqld  또는 killall -9 mysqld
  # ps -ef | grep mysqld  (mysql 데몬 없음을 확인)

5. Mysql 데몬 다시 시작
  # /usr/local/mysql/bin/safe_mysqld &
  # ps -ef | grep mysql
  # /usr/local/mysql/bin/mysql -u root -p mysql
    Enter Password:

----------------------------------------------
출처 : http://fduser.firstdedicated.co.kr/blog/29
----------------------------------------------

Posted by designerjune grieda
TAG mysq, 코드

오늘 검색하다 보니 재미 있는 표현을 발견했다.
링크시 테두리선이 생기는 걸 "개미선" 이라고 하는 모양이다.

듣고 보니 그럴듯 한걸...

onfocus="this.blur()"

Posted by designerjune grieda
레일스 초기환경 설정에 관한
http://niceview.egloos.com/2678357
Posted by designerjune grieda

사용자가 영문자판으로 사용하고 있더라도 한글 컴퓨터에서는 바로 한글을 입력할 수 있음
(Reverse 도 성립)

영문 -> 한글
<input type="text" style="lime-mode:active" />

한글 -> 영문
<input type="text" style="lime-mode:inactive" />

Posted by designerjune grieda

onabort
이미지의 다운로드를 중지할 때 (브라우저의 중지버튼)

onactivate
개체가 활성활 될 때 발생
(태그의 기능이 작용할 때 발생하는 이벤트로 예를 들어 링크를 누를 경우 링크가 옮겨질때 발생하는 것을 감지하는 이벤트 핸들러)

onafterprint
문서가 출력되거나 혹은 출력하기 위해 출력미리보기를 한후에 발생

onafterupdate
데이터영역 개체에서 발생하는 이벤트로 데이터 소스 오브젝트내의 데이터가  업데이트 되었을 때 발생(데이터 개체부분 참조)

onbeforeactivate
개체가 활성화 상태로 되기 바로 직전에 발생 (onactivate를 참고)

onbeforecopy
선택 영역이 시스템의 클립보드로 복사되기 바로 직전에 발생

onbeforecut
선택 영역이 지워지기 바로 직전에 발생

onbeforedeactivate
모 문서에서 현재 개체에서 다른 개체로 activeElement가 바뀔때 발생
(activeElement는 개체를 지칭하는 예약어로도 쓰임)

onbeforeeditfocus
편집가능한 개체 내부에 포함된 개체가 편집활성화 된 상태가 되거나 혹은
편집가능한 개체가 제어를 위해 선택될때

onbeforepaste
시스템의 클립보드에서 문서로 붙여넣기 될때 대상 개체에서 발생

onbeforeprint
문서가 출력되거나 혹은 출력하기 위해 출력미리보기 직전에 발생

onbeforeunload
페이지가 언로드되기 직전에 발생

onbeforeupdate
데이터영역 개체에서 발생하는 이벤트로 데이터 소스 오브젝트내의 데이터가  업데이트 되기전에 발생(데이터 개체부분 참조)

onblur
개체가 포커스를 잃었을 때

onbounce
마퀴태그에서 alernate상태에서 스크롤이 양 사이드에서 바운드 될때 발생

oncellchange
데이터제공 개체에서 데이터가 변화할때 발생

onchange
개체 혹은 선택영역의 내용이 바뀔 때 발생

onclick
개체위에서 마우스의 왼쪽 버튼을 누를때 발생

oncontextmenu
클라이언트 영역에서 사용자가 마우스 오른쪽 버튼을 눌러 콘텍스트 메뉴를 열때 발생

oncontrolselect
사용자가 개체의 제어 영역을 만들때 발생

oncopy
시스템의 클립보드에 선택영역 혹은 개체를 복사할 때 소스 개체로부터 발생

oncut
시스템의 클립보드에 선택영역 혹은 개체를 잘라낼때 소스 개체로부터 발생

ondataavailable
비정기적으로 데이터를 전달하는 데이터 소스 개체로부터 데이터가 도착할 때 마다 정기적으로 발생

ondatasetchanged
데이터 소스개체의 변화에 의해 데이터가 노출된 상태로 될때 발생

ondatasetcomplete
데이터 소스 개체로부터 모든 데이터가 유용한 상태로 표시될때 발생

ondblclick
사용자가 개체에 더블클릭 할때 발생

ondeactivate
모 문서에서 현재 개체에서 다른 개체로 activeElement가 변할때 발생

ondrag
드래그 상태가 지속되는 동안 소스 객체로 부터 발생

ondragend
드래그 상태가 끝날때 소스 객체로 부터 발생

ondragenter
사용자가 개체를 드래그 하여 드롭가능 위치로 지정된 영역으로 이동할때 타겟 개체에서 발생

ondragleave
사용자가 개체를 드래그 하여 드롭가능 위치로 지정된 영역을 떠날때 타겟 개체에서 발생

ondragover
사용자가 개체를 드래그 하여 드롭가능 위치로 지정된 영역내에서 드래그할 때 계속적으로 타겟 개체에서 발생

ondragstart
선택된 개체 혹은 텍스트 영역에서 사용자가 드래그를 시작할 때 발생

ondrop
드래그앤드롭 작용에서 상태가 진행되는 동안 개체가 타겟 개체에 드롭되었을 때 타겟 개체어서 발생

onerror
개체가 로드되는 동안 발생하는 이벤트

onerrorupdate
데이터 소스 개체 내에 데이터가 없데이트 되는 동안 에러가 발생할 때 데이터 영역 개체에서 발생

onfilterchange
비주얼 필터의 상태가 바뀌거나 트랜지션이 완료되었을 때 발생

onfinish
마퀴개체의 loop가 완료되었을 때 발생

onfocus
개체가 포커스를 받았을 때 발생

onfocusin
개체에 포커스가 셋팅되기 바로 직전 개체에 대해 발생

onfocusout
포커스가 다른 개체로 이동한 후에 포커스를 가고 있는 현재 개체에서 발생

onhelp
브라우저가 활성화 되어 있는 동안 F1키를 눌렀을 때

onkeydown
사용자가 키를 눌렀을 때

onkeypress
기능키를 제외한 키를 눌렀을 때 발생

onkeyup
사용자가 키를 놓았을 때 발생

onlayoutcomplete
소스 문서로 부터 콘텐드를 가지는 객체가 미리보기나 출력을 할때 현제 LayoutRect개체를 모두 채우는 것이 끝났을 때 발생

onload
브라우저가 개체를 로드한 후에 발생

onlosecapture
개체가 마우스 캡쳐를 잃었을 때 발생

onmousedown
개체위에 마우스 버튼을 누를때 발생(좌우 어느 버튼이든)

onmouseenter
개체 안으로 마우스 포인터가 들어올때 발생

onmouseleave
개체의 경계밖으로 마우스 포인터가 이동할 때 발생

onmousemove
개체위에서 마우스가 움직일때 발생

onmouseout
개체밖으로 마우스 포인터가 빠져나갈 때 발생

onmouseover
개체위로 마우스 포인터가 들어올때 발생

onmouseup
마우스가 개체위에 있는 동안 마우스를 누른상태에서 해제될때 발생

onmousewheel
마우스 휠이 돌아갈때 발생

onmove
개체가 움직일 때 발생

onmoveend
개체가 움직임이 끝날 때 발생

onmovestart
개체가 움직이기 시작할 때 발생

onpaste
문서에 클립보드로 부터 데이터가 전송될때 타겟 개체에서 발생

onpropertychange
개체의 속성이 바뀔대 발생

onreadystatechange
개체의 상태가 변화할때 발생

onreset
폼을 사용자가 리셋할 경우 발생

onresize
개체의 크기가 바뀔때 발생

onresizeend
제어영역에서 개체의 크기가 사용자에 의해 변화가 끝날때 발생

onresizestart
제어영역에서 개체의 크기가 사용자에 의해 변화되기 시작할때 발생

onrowenter
데이터 소스내에서 현재 열이 변화되거나 개체에 새로운 유용한 데이터가 입력될때 발생

onrowexit
데이터 소스 콘트르롤이 개체내의 현재 열을  변화시킬 때 발생

onrowsdelete
레코드셋에서 열이 삭제될때 발생

onrowsinserted
현재 레코드셋에 새로운 열이 추가된후에 발생(데이터 개체에서)

onscroll
사용자가 개체내이 스크롤 바를 스크롤 할때 발생

onselect
현재 선택된 영역이 바뀔때 발생

onselectionchange
문서의 선택 영역의 상태가 바뀔때 발생

onselectstart
개체가 선택되기 시작할때 발생

onstart
마퀴개체에서 매 루프가 시작될때 발생

onstop
사용자가 stop버튼을 눌렀을 경우 혹은 페이지를 떠날때 발생

onsubmit
폼이 전송되기 바로전에 발생

onunload
개체가 언로드되기 직전에 발생

Posted by designerjune grieda
TAG 코드

<script type="text/javascript">
//<![CDATA[
 
 function check_valid() {
  var termin_begin = document.f1.date_termin_begin_year.value + (document.f1.date_termin_begin_month.value < 10 ? '0' + document.f1.date_termin_begin_month.value : document.f1.date_termin_begin_month.value) + (document.f1.date_termin_begin_day.value < 10 ? '0' + document.f1.date_termin_begin_day.value : document.f1.date_termin_begin_day.value);
  var termin_end = document.f1.date_termin_end_year.value + (document.f1.date_termin_end_month.value < 10 ? '0' + document.f1.date_termin_end_month.value : document.f1.date_termin_end_month.value) + (document.f1.date_termin_end_day.value < 10 ? '0' + document.f1.date_termin_end_day.value : document.f1.date_termin_end_day.value);
 
  if (termin_begin > termin_end) {
   alert('매각기일 시작일자가 종료일자 보다 뒷날입니다.!');
   document.f1.date_termin_begin_year.focus();
   return false;
  }
 }
//]]>
</script>
Posted by designerjune grieda
TAG 코드