반응형

MySQL 셀프 조인.

MySQL 2017. 12. 8. 12:10
반응형

셀프 조인이란?

결합에는 자기 자신 즉, 같은 이름의 테이블을 결합하는 방법이 있습니다. 이를 셀프 조인이라 합니다. 같은 이름의 테이블을 결합하는 것이기 때문에 실행하면 같은 컬럼 이름이 2개씩 표시됩니다. 이렇게 되면 컬럼을 구별하기가 어렵기 때문에, 셀프 조인을 할 때에는 반드시 별명을 사용합니다.

명령은 다음과 같습니다.

select 컬럼명 from 테이블명 as 별명1 join 테이블명 as 별명2;

 

select * from table_member;

 

select * from table_member as A

join table_member as B

셀프 조인한 결과를 보면 모든 경우의 수를 표시한 것과 같다.

 

순위 정하기

테이블에 같은 테이블을 결합하는 이유는 무엇일까요? 셀프 조인을 한 결과에는 적어도 모든 경우의 조합이 존재합니다. 따라서 얻고자 하는 조합이 그 결과 안에 존재한다면, 그 다음에는 조건을 설정해서 필요한 것만 선택하면 됩니다.

셀프 조인을 이용해서 Table_member name, age, 순위를 표시해 보겠습니다.

순위를 구하는 방법은 셀프 조인 했을 때 값을 보면 오른쪽이 같은 값으로 구성된 5개의 레코드 중에서 오른쪽 age 이상인 왼쪽 age의 개수가 순위가 됩니다.

즉 셀프 조인을 하고 나서 왼쪽의 age가 오른쪽의 age 이상인 레코드의 수를 number의 그룹별로 개수를 조사하면 됩니다. 개수는 count(*)로 계산합니다.

 

 

select A.name, A.age, count(*) from table_member as A

join table_member as B

where A.age <= B.age

group by A.number;

 

 

 

반응형

'MySQL' 카테고리의 다른 글

MySQL 뷰 이용하기.  (0) 2017.12.13
MySQL SELECT한 레코드에서 또 SELECT하기 – 하위 질의  (0) 2017.12.11
MySQL 외부 JOIN 사용하기.  (0) 2017.12.07
MySQL 내부 JOIN ON 사용하기.  (0) 2017.12.06
MySQL UNION 사용하기.  (0) 2017.12.05
Posted by 컴스터
,
반응형

MySQL 외부 JOIN 사용하기.

 

내부 조인은 키가 일치하는 레코드만 추출하지만 외부 조인은 일치하지 않더라도 한쪽 테이블에 있는 모든 레코드를 표시합니다.

외부 조인은 결합하는 레코드 중 어느 쪽의 레코드를 모두 표시할 것인가에 따라 LEFT JOINRIGHT JOIN 으로 나타냅니다.

 

LEFT JOIN 사용하기.

Left join은 왼쪽 테이블에 있는 레코드를 모두 포함해서 표시합니다.

명령문은 다음과 같습니다.

select 컬럼명 from 테이블명

left join 결합할 테이블명

on 테이블명.컬럼명 = 결합할 테이블명.컬럼명;

 

select * from table_sales;

select * from table_member;

 

select A.number, B.name from table_sales as A

left join table_member as B

using(number);

 

 

number 컬럼의 A7 table_sales에 있지만 table_member에는 없습니다. Left join으로 table_sales 의 모든 레코드를 표시하고 있음을 알 수 있습니다. 하지만 A1 table_member에는 있지만 table_sales에는 없으므로 left join으로 했을 때는 나타나지 않은걸 확인할 수 있습니다.

 

RIGHT JOIN 사용하기.

right join 오른쪽 테이블에 있는 레코드를 모두 포함해서 표시합니다.

명령문은 다음과 같습니다.

select 컬럼명 from 테이블명

right join 결합할 테이블명

on 테이블명.컬럼명 = 결합할 테이블명.컬럼명;

 

select A.number, B.name from table_sales as A

right join table_member as B

on A.number = B.number;

 

Right join 한 결과를 보면 기준이 되는 table_member A1 강백호 레코드는 표시되지만 table_sales 테이블에는 A1 레코드가 없으므로 null로 표시 됨을 확인 할 수 있습니다.

 

OUTER 명시하기.

left join left outer join이라고 기술할 수 있습니다. 마찬가지로 right join right outer join이라고 기술할 수도 있습니다.

반응형
Posted by 컴스터
,
반응형

MySQL 내부 JOIN ON 사용하기.

 

여러 개의 테이블을 특정 키로 연결하는 것이 조인입니다.

A 테이블과 B 테이블이 있다면 A 테이블 컬럼과 B테이블 컬럼이 같은 것이 있을 때 같은 컬럼을 키로 하여 조인하는 방법입니다.

 

JOIN ON 명령어는 다음과 같이 사용합니다.

Select 컬럼명 from 테이블명 join 결합할 테이블명 on 테이블명.컬럼명 = 결합할 테이블명.컬럼명;

 

select * from table_sales;

select * from table_member;

 

select * from table_sales

join table_member

on table_sales.number = table_member.number;

 

 

일치하는 레코드만 가져오는 결합을 내부 조인이라고 합니다.

내부 조인을 명시적으로 표시하려면 joininner join으로 명령문을 사용합니다.

내부 조인과 달리, 한쪽 테이블에 일치하지 않는 레코드가 있어도 모두 표시하는 것을 외부조인이라고 합니다.

 

컬럼을 선택해서 표시하기.

앞에서는 모든 컬럼을 표시했습니다. 이번에는 표시할 레코드를 선택해서 표시하는데 테이블을 결합할 때는 어느 테이블이 컬럼인지 알 수 없기 때문에 구체적으로 밝혀주는데 테이블명.컬럼명 이렇게 어느 테이블이 컬럼인지 밝혀 주어야 합니다.

 

select table_sales.number, table_member.name, table_sales.sales

from table_sales

join table_member

on table_sales.number = table_member.number;

 

테이블 이름에 별명 사용하기.

테이블 이름에 별명을 사용할 때는 as 명령을 사용합니다.

 

테이블명 as 별명;

 

위에 컬럼을 선택해서 표시하기에 컬럼을 선택할 때 테이블 이름이 들어가서 좀 복잡하다고 생각이 들 겁니다. 이때는 간단히 테이블명에 별명을 붙여서 사용할 수 있습니다.

 

Select A.number, B.name, A.sales

         from table_sales as A

         join table_member as B

         on A.number = B.number;

USING을 사용해서 ON 부분 대체하기.

Join on 부분에 컬럼명이 반드시 같아야 할 필요는 없습니다. 키가 될 값만 같으면 컬럼명은 달라도 상관없습니다.

만약 컬럼명이 같을 때는 USING(컬럼명)을 이용하면 간단히 기술할 수 있습니다.

 

select A.number, B.name, A.sales

         from table_sales as A

         join table_member as B

         using(number);

 

JOIN 테이블에 WHERE 조건 설정하기.

 

Join 명령문에 조건을 설정할 때는 맨 마지막에 where를 사용하여 조건을 설정하면 됩니다.

다만 주의 해야 할 것은 조건을 설정할 때는 컬럼이 어느 테이블에 속한 컬럼인지 밝혀 주어야 합니다. 테이블명.컬럼명 이렇게 설정해 주어야 합니다.

table_sales 테이블과 table_member 테이블을 결합하고 table_sales 테이블의 sales컬럼이 50이상인 레코드를 number, name, sales를 표시해 보겠습니다.

 

select A.number, B.name, A.sales

         from table_sales as A

         join table_member as B

         using (number)

where A.sales >= 50;

 

 

여러 테이블에서 데이터 추출하기.

Join할 테이블의 수에는 제한이 없습니다.

select ~ join ~ on ~ 에 계속해서 join ~ on ~ 을 추가해서 결합합니다.

 

여러 개의 테이블을 이용해서 내부 조인하기 명령어.

select 컬럼명 from 테이블명

join 테이블명 on 조인할 조건

join 테이블명 on 조인할 조건

join 테이블명 on 조인할 조건

….

select A.number, A.sales, B.name, C.city

from table_sales as A

join table_member as B

using(number)

join table_city as C

using(number);

 

반응형

'MySQL' 카테고리의 다른 글

MySQL 셀프 조인.  (2) 2017.12.08
MySQL 외부 JOIN 사용하기.  (0) 2017.12.07
MySQL UNION 사용하기.  (0) 2017.12.05
MySQL 조건에 일치하는 레코드 삭제하기.  (0) 2017.12.02
MySQL 조건에 일치하는 레코드 복사하기.  (0) 2017.11.29
Posted by 컴스터
,

MySQL UNION 사용하기.

MySQL 2017. 12. 5. 12:44
반응형

MySQL UNION 사용하기.

여러 테이블에서 추출한 데이터를 단순하게 하나의 결과로 표시할 때에는 union을 사용합니다.

다음과 같이 명령문을 사용합니다.

Select 컬럼명 from 테이블명 union select 컬럼명 from 테이블명;

 

select * from table_member;

select * from table_otherMember;

select * from table_member union select * from table_otherMember;

 

조건을 설정해서 여러 개의 추출 결과를 하나로 표시하기.

Table_sales 테이블에서 sales 컬럼 값이 100이상인 number 컬럼과 table_member 에서 age 컬럼 값이 40이상인 number 컬럼을 union 해 보겠습니다.

select * from table_sales;

select * from table_member;

 

select number from table_sales where sales >= 100

union

select number from table_member where age >= 40;

 

MySQL UNION ALL 사용하기.

위의 결과에서 A4 table_sales 테이블에서 두 번 검색이 됬는데 union한 후 한 번만 표시 되었습니다. 중복된 값은 생략이 되었습니다.

그러나 중복된 값도 모두 표시 하고 싶을 때는 union all 명령으로 나타냅니다.

 

select number from table_sales where sales >= 100

union all

select number from table_member where age >= 40;

 

반응형
Posted by 컴스터
,
반응형

MySQL 모든 레코드 삭제하기.

테이블 구조는 그대로 유지하면서 모든 레코드를 삭제할 때는 다음 명령어를 사용합니다.

 

delete from 테이블명;

 

table_09에 있는 모든 레코드를 삭제해 보겠습니다.

 

select * from table_09;

delete from table_09;

select * from table_09;

 

테이블 자체를 삭제할 때는 다음 명령어를 사용합니다.

drop table 테이블명;

table_09를 완전히 삭제해 보겠습니다.

 

show tables;

drop table table_09;

 

 

MySQL 특정 레코드 삭제하기.

특정 레코드를 삭제하기 위해서는 where 를 사용해서 조건을 설정하면 됩니다.

명령어는 다음과 같습니다.

 

delete from 테이블명 where 조건;

 

age 40이하인 레코드를 삭제해 보겠습니다.

 

select * from table_09;

delete from table_09 where age <= 40;

select * from table_09;

 

MySQL 정렬 후 삭제하기.

정렬에 사용하는 order by 명령어를 사용하여 레코드를 정렬한 후 삭제해 보겠습니다.

 

age 컬럼을 올림차순으로 정렬한 후 2개만 삭제 해 보겠습니다.

 

select * from table_09 order by age asc;

delete from table_09 order by age asc limit 2;

select * from table_09 order by age asc

반응형
Posted by 컴스터
,
반응형

이미지 편집 프로그램 포토스케이프

 

포토스케이프는 간단히 이미지를 편집할 수 있는 프로그램입니다.

블로그 운영하시는 분들이나 가볍게 이미지를 편집하려는 분들에게 유용한 프로그램입니다.

 

우선 아래 사이트로 이동해서 무료 다운로드를 클릭합니다..

http://software.naver.com/software/summary.nhn?softwareId=MFS_116439

 

설치 전 사용범위와 지원하는 OS를 반드시 확인해 주세요. 메시지 창이 나오면 확인 후 다운로드를 클릭합니다.

 

 

또 팝업창이 뜨는데 다운로드를 클릭합니다.

 

 

 

다음은 저장 팝업창에 저장 버튼을 클릭합니다.

 

저장이 완료 되면 실행 버튼을 클릭합니다.

 

 

포토스케이프 설치창이 나오면 설치 버튼을 클릭합니다.

 

 

다음 창에서 구글드라이브 추천 창이 나오는데 그대로 다음 버튼을 클릭합니다.

 

 

다음은 설치 진행창이 나옵니다.

 

 

설치가 완료 되면 마침 버튼을 클릭합니다.

 

 

다음은 포토스케이프 실행 모습니다.

 

이제 간단한 이미지 편집이나 블로그 타이틀 배경이미지를 포토스케이프로 만들어 보세요.

저의 블로그 타이틀 이미지도 포토스케이프로 만들었습니다. ^^

반응형
Posted by 컴스터
,
반응형

메모리 공간 분류(스택 영역, 힙 영역, 데이터 영역, 코드 영역).

 

프로그램을 실행하면 OS는 실행에 필요한 메모리 공간을 할당합니다. 할당되는 메모리 공간은 크게 스택 영역, 힙 영역, 데이터 영역, 코드 영역으로 구분됩니다.

스택(Stack) 영역은 지역변수, 파라미터, 리턴 값 등이 저장되는 영역입니다. LIFO(Last In First Out) 방식의 스택으로 메모리 공간을 관리합니다.

 

(Heap) 영역은 동적으로 할당된 데이터가 저장되는 영역입니다. 데이터 영역과 스택 영역은 컴파일러가 미리 할당할 공간의 크기를 예측할 수 있지만 힙 영역은 동적으로 할당되는 특성으로 인해 공간의 크기를 예측할 수 없습니다. 힙 영역에 저장된 데이터는 직접 해제하지 않을 경우 프로그램이 종료될 때까지 유지 됩니다.

 

데이터 영역에는 정적 변수와 전역 변수가 저장됩니다. 이 영역에 저장된 데이터는 프로그램이 종료 될 때까지 유지됩니다.

 

코드 영역에는 기계어로 번역된 프로그램 코드가 저장됩니다.

반응형
Posted by 컴스터
,
반응형

MySQL 조건에 일치하는 레코드 복사하기.

 

MySQL 특정 레코드만 복사하기.

 

table_01 age 컬럼의 40이상인 레코드만 복사해서 새로운 테이블 table_ageOver40 을 생성해 보겠습니다.

 

create table table_ageOver40

select * from table_01

where age >= 40 and age < 50;

 

select * from table_ageOver40;

 

기존에 존재하는 테이블에 레코드를 추가하는 경우에는 insert into를 사용합니다.

Table_01에 있는 Age 50이상인 레코드를 table_ageOver40 에 추가해 보겠습니다.

 

insert into table_ageOver40

select * from table_01 where age >= 50;

 

select * from table_ageOver40;

A6 이수만 60 레코드가 잘 추가 되었습니다.

 

 

MySQL 순서대로 정렬하여 복사하기

table_01age컬럼을 올림차순으로 정렬한 후 4번째부터 5개의 레코드를 복사하여 table_age4To8 테이블을 생성해 보겠습니다.

 

create table table_age4To8

select * from table_01 order by age asc

limit 5 offset 3;

 

select * from table_age4To8;

 

반응형
Posted by 컴스터
,
반응형

MySQL 데이터 수정하기, 컬럼 추가 하기, 컬럼 삭제하기.

 

MySQL 컬럼의 모든 데이터를 한 번에 수정하기.

 

데이터를 수정할 때는 update 명령을 사용합니다.

컬럼의 모든 데이터 수정하기는 다음과 같은 명령을 실행합니다.

 

update 테이블명 set 컬럼명 = 수정할 값;

 

특정 컬럼을 지정한 값으로 변경합니다. 이 명령을 실행하면 컬럼의 모든 데이터를 한 번에 변경할 수 있습니다.

 

우선 기존 table_01 memo 컬럼을 추가 해 보겠습니다.

 

alter table table_01 add memo varchar(100);

select * from table_01;

 

memo 컬럼이 생성되었으면 메모에 메모 없음을 추가 해서 확인해 보겠습니다.

 

update table_01 set memo = ‘메모 없음’;

select * from table_01;

 

MySQL 조건에 일치하는 레코드만 수정하기.

 

모든 컬럼을 수정할 일은 많지 않고 조건에 일치하는 레코드를 수정하는 경우가 많습니다.

조건을 설정할 때는 where 명령어에 조건을 지정합니다.

 

update 테이블명 set 컬럼명 = 수정할 값 where 조건;

 

age 컬럼의 45이상인 레코드에 중년 이라고 수정해 보겠습니다.

 

update table_01 set memo = ‘중년’ where age >= 45;

select * from table_01;

 

원빈 레코드에 number age 를 수정해 보도록 하겠습니다.

 

update table_01 set number = ‘A4’, age = 41 where name = ‘원빈’;

Select * from table_01;

 

age 가 제일 어린 사람을 memo에 막내라고 수정해 보겠습니다.

 

update table_01 set memo = ‘막내’ order by age asc limit 1;

select * from table_01;

 

MySQL 특정 컬럼 삭제하기.

 

위에 추가 했던 memo 컬럼만 삭제 해 보겠습니다.

 

alter table table_01 drop memo;

Select * from table_01;

memo 컬럼이 잘 삭제 되었습니다.

 

반응형
Posted by 컴스터
,
반응형

파이어폭스 마우스 제스쳐 사용하기.

 

예전에도 파이어폭스용 제스쳐를 포스팅한 적이 있는데 파이어폭스가 업데이트 되면서 예전에 사용하던게 호환성이 안되어서 새로운 마우스 제스쳐를 포스팅합니다.

 

파이어폭스 프로그램에서 맨 오른쪽 메뉴 열기 버튼을 클릭하여 팝업메뉴에서 부가 기능을 클릭합니다.

 

확장기능을 클릭하고 검색창에 mouse gesture 로 검색합니다.

 

검색 리스트 중에서 Foxy Gestures 설치하기를 클릭합니다.

 

설치하기를 클릭하면 추가할지 취소할지 묻는 팝업창이 나오는데 추가 버튼을 클릭합니다.

 

 

추가 완료 되면 다음 팝업창이 나오는데 확인 버튼을 클릭합니다.

 

이제 오른쪽 마우스 버튼을 클릭하여 좌우로 해보면 잘 작동 됩니다.

반응형
Posted by 컴스터
,


반응형