[MY-SQL] 날짜함수

|

- DAYOFWEEK(date) : 해당 날짜의 요일을 숫자로 반환한다. 일요일은 1, 토요일은 7 이다.
- 예 : select DAYOFWEEK('1998-02-03');

- WEEKDAY(date) : 해당 날짜에 대한 요일을 반환한다. 월요일은 0, 일요일은 6 이다.
- 예 : select WEEKDAY('1997-10-04 22:23:00');

- DAYOFYEAR(date) : 해당 날짜의 1월 1일부터의 날수를 반환한다. 결과값은 1에서 366 까지이다.
- 예 : select DAYOFYEAR('1998-02-03');

- YEAR(date) : 해당 날짜의 년을 반환한다.
- 예 : select YEAR('98-02-03');

- MONTH(date) : 해당 날짜의 월을 반환한다.
- 예 : select MONTH('1998-02-03');

- DAYOFMONTH(date) : 해당 날짜의 일을 반환한다. 결과값은 1 에서 31 까지이다.
- 예 : select DAYOFMONTH('1998-02-03');

- HOUR(time) : 해당날짜의 시간을 반환한다. 결과값은 0 에서 23 이다.
- 예 : select HOUR('10:05:03');

- MINUTE(time) : 해당날짜의 분을 반환한다. 결과값은 0 에서 59 이다.
- 예 : select MINUTE('98-02-03 10:05:03');

- SECOND(time) : 해당날짜의 초를 반환한다. 결과값은 0 에서 59 이다.
- 예 : select SECOND('10:05:03');

- DAYNAME(date) : 해당 날짜의 요일 이름을 반환한다. 일요일은 'Sunday' 이다.
- 예 : select DAYNAME("1998-02-05");

- MONTHNAME(date) : 해당 날짜의 월 이름을 반환한다. 2월은 'February' 이다.
- 예 : select MONTHNAME("1998-02-05");

- QUARTER(date) : 해당 날짜의 분기를 반환한다. 결과값은 1 에서 4 이다.

- WEEK(date,first) : 1월 1일부터 해당날가지의 주 수를 반환한다. 주의 시작을 일요일부터 할경우는 두번째 인자를 0, 월요일부터 시작할 경우는 1 을 넣는다. 결과값은 1 에서 52 이다.
- 예 : select WEEK('1998-02-20',1);

- PERIOD_ADD(P,N) : P (형식은 YYMM 또는 YYYYMM 이어야 한다.) 에 N 만큼의 달 수를 더한값을 반환한다. 주의할것은 두번째 인자는 숫자라는 것이다.
- 예 : select PERIOD_ADD(9801,2);

- PERIOD_DIFF(P1,P2) : 두개의 인자 사이의 달 수를 반환한다. 두개의 인자 모두 형식은 YYMM 또는 YYYYMM 이어야 한다.

- DATE_ADD(date,INTERVAL expr type) : 날짜를 더한 날짜를 반환한다.
- DATE_SUB(date,INTERVAL expr type) : 날짜를 뺀 날짜를 반환한다.
- ADDDATE(date,INTERVAL expr type) : DATE_ADD(date,INTERVAL expr type) 와 동일하다.
- SUBDATE(date,INTERVAL expr type) : DATE_SUB(date,INTERVAL expr type) 와 동일하다.
- EXTRACT(type FROM date) : 날짜에서 해당 부분을 추출한다.
- 예 : SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL 1 SECOND);
SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL 1 DAY);
SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL "1:1" MINUTE_SECOND);
SELECT DATE_SUB("1998-01-01 00:00:00", INTERVAL "1 1:1:1" DAY_SECOND);
SELECT DATE_ADD("1998-01-01 00:00:00", INTERVAL "-1 10" DAY_HOUR);
SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);
SELECT EXTRACT(YEAR FROM "1999-07-02");
SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03");
SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03");
- 참고 : type 에 사용되는 키워드는 SECOND, MINUTE, HOUR, DAY, MONTH, YEAR, MINUTE_SECOND, HOUR_MINUTE, DAY_HOUR, YEAR_MONTH, HOUR_SECOND, DAY_MINUTE, DAY_SECOND 이다.
- 주의 : 계산한 달의 날수가 작을 경우는 해당달의 마지막 날을 반환한다. 예를 들어 select DATE_ADD('1998-01-30', Interval 1 month); 의 경우 1998-02-28 을 반환한다.

- TO_DAYS(date) : 0 년 부터의 날짜수를 반환한다. 이 함수는 1582 이전 날에 대해서는 계산하지 않는다.
- 예 : select TO_DAYS(950501);

- FROM_DAYS(N) : 해당 숫자만큼의 날짜를 반환한다. 이 함수는 1582 이전 날에 대해서는 계산하지 않는다.
- 예 : select FROM_DAYS(729669);

- DATE_FORMAT(date,format) : 날짜를 해당 형식의 문자열로 변환하여 반환한다.
- 예 : select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
select DATE_FORMAT('1997-10-04 22:23:00', '%D %y %a %d %m %b %j');
select DATE_FORMAT('1997-10-04 22:23:00', '%H %k %I %r %T %S %w');
- 참고 : 형식은 다음과 같다. %M (달 이름), %W (요일 이름), %Y (YYYY 형식의 년도), %y (YY 형식의 년도), %a (요일 이름의 약자), %d (DD 형식의 날짜), %e (D 형식의 날짜), %m (MM 형식의 날짜), %c (M 형식의 날짜), %H (HH 형식의 시간, 24시간 형식), %k (H 형식의 시간, 24시간 형식), %h (HH 형식의 시간, 12시간 형식), %i (MM 형식의 분), %p (AM 또는 PM)

- TIME_FORMAT(time,format) : DATE_FORMAT(date,format) 과 같은 방식으로 사용할수 있으나 날 이상의 것에 대해서는 NULL 이나 0 을 반환한다.

- CURDATE() : 현재날짜를 반환한다. 숫자와 연산을 할경우 숫자로 변환된다. 형식은 'YYYY-MM-DD' 또는 YYYYMMDD 이다.
- 예 : select CURDATE();
select CURDATE() + 0;

- CURTIME() : 현재시간을 반환한다. 숫자와 연산을 할경우 숫자로 변환된다. 형식은 'HH:MM:SS' 또는 HHMMSS 이다.
- 예 : select CURTIME();
select CURTIME() + 0;

- SYSDATE() : 현재날짜시간을 반환한다. 숫자와 연산을 할경우 숫자로 변환된다. 형식은 'YYYY-MM-DD HH:MM:SS' 또는 YYYYMMDDHHMMSS 이다.
- 예 : select NOW();
select NOW() + 0;

- NOW() : SYSDATE() 와 동일하다.

- UNIX_TIMESTAMP() : '1970-01-01 00:00:00' 부터의 초를 반환한다. 인자가 주어질 경우는 해당 날짜에 대한 유닉스 시간을 반환한다.
- 예 : select UNIX_TIMESTAMP();
select UNIX_TIMESTAMP('1997-10-04 22:23:00');

- FROM_UNIXTIME(unix_timestamp) : 유닉스시간에서 날짜 형식으로 변환한다.
- 예 : select FROM_UNIXTIME(875996580);

- FROM_UNIXTIME(unix_timestamp,format) : 유닉스시간을 날짜형식으로 변환하고 DATE_FORMAT(date,format) 에서 설명한 포맷으로 변환하여 반환한다.
- 예 : select FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y %D %M %h:%i:%s %x');

- TIME_TO_SEC(time) : 해당 시간의 0:0:0 에서부터의 초를 반환한다.
- 예 : select TIME_TO_SEC('22:23:00');

- SEC_TO_TIME(seconds) : 초를 시간으로 바꾼다.
- 예 : select SEC_TO_TIME(2378);




MYSQL] 날짜함수를 이용한 데이터 가져오기 (date_add, date_sub)

date_add와 date_sub의 종류는

second - 초를 추가 합니다 (interval 1 second)
minute - 분을 추가 합니다. (interval 1 minute)
hour - 시간을 추가 합니다.(interval 1 hour)
day - 일을 추가 합니다.(interval 1 day)
month - 달을 추가 합니다.(interval 1 month)
year - 년을 추가 합니다.(interval 1 year)
minute_second - 분과 초를 추가 합니다.(interval "1:1" minnute_second)
hour_minute - 시간과 분을 추가 합니다.(interval "1:1" hour_minute)
year_month - 년과 월을 추가 합니다.(interval "1-1" year_month)
hour_second - 시간과 분,초를 추가 합니다(interval "1:1:1" hour_second)
day_minute - 일과 시간, 분을 추가 합니다.(interval "1 1:1" day_minute)
day_second - 일과 시간, 분, 초를 추가 합니다.(interval "1 1:1:1" day_second)

차를 구하고 싶으면

Select date_add("날짜", interval "-1 -1:-1:-1" day_second) <<이렇게 하시면 날짜에서 하루 한시간 1분 1초를 뺀 시간이 나옵니다.

Select date_sub("날짜", interval "1 1:1:1" day_second) <<이렇게 하면 위 내용과 동일한 결과


select count(*) as tatalCnt From `goods` where writeday > date_add(now(), interval -1 day);
상품등록일자가 현재시간으로부터 1일전 사이에 있는 데이터의 갯수를 가져옴

date_add(now(), interval -1 day)
현재시간함수 now(), -1 day 1일전, -1 month 한달전 이런식으로 데이터를 가져올 수 있게된다.

출처 : http://dumbung.com/

트랙백0 And 댓글0

[MY-SQL] 3개의 테이블 조인(join)하기

|

1. 먼저 두개의 테이블을 조인
select 과목.이름,
과목.교수번호,
교수.이름,
교수.학과번호
from 과목, 교수
where 과목.교수번호 = 교수.번호

2. 조인된 테이블에 다른 테이블을 추가. 이때 외래키를 조건절에서 잘 조인해줘야한다.
select 과목.이름,
과목.교수번호,
교수.이름,
교수.학과번호,
학과.번호,
학과.이름
from 과목,교수,학과
where 과목.교수번호 = 교수.번호 and
교수.학과번호 = 학과.번호

3.필요속성만 출력
select 과목.이름,
--과목.교수번호,
교수.이름,
--교수.학과번호,
--학과.번호,
학과.이름
from 과목.교수번호 = 교수.번호 and
교수.학과번호 = 학과.번호

항상 생각해야 할 것은 두개의 테이블에서 존재하는 공통속성이다.
즉 수퍼키를 이용해서 조인이 이루어지게 된다는 것이다. 3개든 4개든 이 공식을 잘 성립하면
원하는 속성을 묶어서 출력할 수가 있다.

출처 : http://rajent.tistory.com

Select * From A left JOIN B
ON A.name = B.name
left JOIN C
ON A.name = C.name

트랙백0 And 댓글0

[MY_SQL] where절과 having절의 차이

|

SQL구문을 처음 공부하던 당시, where절과 having절의 차이를 잘 몰랐는데요.

왜냐하면 두 구절이 비슷한 성격의 '조건절'이었기 때문이었죠. 그렇다면 where절과 having절이 어떤 차이가 있는지 살펴보겠습니다.

1. WHERE

select * from 테이블명 where 조건절

위와 같은 방법으로 where 조건절을 사용합니다.

항상 from뒤에 위치하고 조건에는 다양한 비교연산자들이 사용되어 구체적인 조건을 줄 수 있습니다.

2. HAVING

select * from 테이블명 group by 필드명 having 조건절

위와 같은 방법으로 having 조건절을 사용합니다.

항상 group by뒤에 위치하고 where 조건절과 마찬가지로 조건에는 다양한 비교연산자들이 사용되어 구체적인 조건을 줄 수 있습니다.

3. 차이점

where은 기본적인 조건절로서 우선적으로 모든 필드를 조건에 둘 수 있습니다. 하지만 having은 group by 된 이후 특정한 필드로 그룹화 되어진 새로운 테이블에 조건을 줄 수 있습니다.

예를 들어

1)mysql> select name, count(*) as cnt from where name='홍길동' 테이블 group by name;
2)mysql> select name, count(*) as cnt from 테이블 group by name;

1)의 경우는 where 조건절에 맞는 정보를 우선적으로 들고와서 group by로 그룹화 하고

2)의 경우는 group by로 그룹화 한 상태에서 having 조건절에 맞는 정보를 들고옵니다. 이때 having 조건절에 이용할 컬럼은 select 뒤에 반드시 명시 되어져야 합니다.

* 글로 설명하려니 어렵지만, 막상 테스트 해보면 금방 알 수 있습니다.

출처 : http://www.cyworld.com/springlog

트랙백0 And 댓글0

[MY-SQL] join

|

SQL에서 조인(JOIN)은 여러 테이블을 어떠한 조건에 의해 하나의 테이블 정보처럼 불러들일 때 사용됩니다.

그리고 조인(JOIN)은 각 테이블의 연결 고리같은 일치하는 필드값이 있어야만 사용이 가능합니다.
아래의 예를 들어 설명하겠습니다.

예)

학적 테이블(Select * from 학적;)


 학번 이름  학과  학년 
 071048 홍길동   101  3
 061000 권율   102  1
 051001 강감찬  103  2

학과 테이블(Select * from 학과;)
 학과코드 학과 담당교수 
101  컴퓨터 공학  고길동 
102  전자통신  안철수 
103  컴퓨터프로그래밍  김제동

학적 테이블과 학과 테이블이 있습니다.
2개의 테이블을 조인(JOIN)을 이용하여, 학적 테이블의 학번, 이름, 학과 학년과 학과 테이블의 학과, 담당교수를
두 테이블의 연결고리인 학과코드의 정보를 가지고, 하나의 테이블로 불러들여서 쉽게 정보를 확인 할 수 있도록 해줍니다.

학적 + 학과 테이블을 조인(JOIN) 후
 학번 이름  학과  담당교수  학년 
 071048 홍길동  101  고길동 
 061000  권율  102  안철수  1
 051001 강감찬  102  김제동  2

조인(JOIN)의 종류

1. INNER JOIN
두개의 테이블을 비교해서 같은 데이터만 불러들이는 교집합입니다.

예를 들어
A테이블에 1, 2, 3, 4, 5의 정보가 있고
B테이블은 1, 2, 5 정보가 있습니다.

두개의 테이블을 INNER JOIN을 하면 1, 2, 5의 정보만 불러들여집니다.

2. OUTER JOIN
OUTER JOIN은 비교 기준에 따라 LEFT JOIN과 RIGHT JOIN으로 나뉩니다.

LEFT OUTER JOIN방법은 왼쪽 테이블을 기준으로 두개의 테이블을 비교하여,
왼쪽의 데이터가 오른쪽 테이블에 없으면 NULL로 표시됩니다.

예)
A테이블 [a] [b]
             1     a
             2     b
             3     c

B테이블 [a] [c]
             2     b
             3     e

LEFT OUTER JOIN
 a
 1  a  null
 2  b  d
 3  c  e

위의 그림을 보면 LEFT OUTER JOIN은 왼쪽 테이블을 우선으로 하기 때문에, 왼쪽 테이블인 A 테이블을 기준으로
A테이블에 없는 정보는 B테이블을 이용해 채우고, 값이 다른 정보는 왼쪽 테이블인 A테이블의 값을 우선으로 하게 된다.
만약, A 테이블에도 없고, B 테이블에도 없다면 null 값으로 남기게 된다.

반대로 RIGHT OUTER JOIN방법은 오른쪽 테이블을 기준으로 두개의 테이블을 비교하여, 테이블을 불러온다.


예)
A테이블 [a] [b]
             1     a
             2     b
             3     c

B테이블 [a] [c]
             2     b
             3     e

RIGHT OUTER JOIN
 a
 2  b  b
 3  c  e

RIGHT OUTER JOIN은 오른쪽 테이블을 참조하기 때문에
위와 같은 정보가 나타나게 됩니다.

JOIN의 사용방법

우선 조인(JOIN)에서 사용할 테이블 생성부터 하겠습니다.

mysql> create table a(a char(2), b char(2) );
mysql> desc a;

a테이블을 생성하고 desc a;로 필드 형식을 확인합니다.

mysql> create table b(a char(2), c char(2) );
mysql> desc b;

b테이블을 생성하고 desc b;로 필드 형식을 확인합니다.

두개의 테이블에 내용도 넣어보겠습니다.

mysql> insert into a values(1, 'a');
mysql> insert into a values(2, 'b');
mysql> insert into a values(3, 'c');

myslq> select * from a;

insert문을 입력해 내용을 저장한 후 select문을 이용 확인합니다.

b테이블도 역시 내용을 넣어보겠습니다.

mysql> insert into b values(2, 'b');
mysql> insert into b values(3, 'e');

myslq> select * from b;

insert문을 입력해 내용을 저장한 후 select문을 이용 확인합니다.

1. INNER JOIN
INNER JOIN의 형식은 다음과 같습니다.

select [테이블명].[필드명], [테이블명].[필드명], ... from [테이블명] inner join [테이블명]where[조건절];

JOIN에서는 필드명 앞에 위의 형식과 같이 테이블명으로 별칭을 붙이게 됩니다. 이유는 여러개의 테이블을 이용하기
때문에, 필드명이 같은 부분은 테이블명으로 별칭 구분하기 위해서입니다.
조건절 역시 테이블명으로 별칭을 사용합니다.

a테이블과 b테이블을 이용하여, inner join을 해 보겠습니다.

mysql> select a.a, a.b, b.c from a inner join b where a.a=b.a;

앞장에서 말 했듯이 INNER JOIN은 테이블간의 교집합입니다. 즉, 두 테이블간에 같은 값만을 불러와 출력합니다.

예) A 테이블 [a][b]      B 테이블[a][c]
                    1   a                     2    b
                    2   b                     3    e
                    3   c

조건을 a테이블의 a값과 b테이블의 a값이 같은 정보를 출력하려고 합니다.
그럼으로, a테이블의 a값과 b테이블의 a값이 같은 정보는 필드명 a에서 2, 3이 됨으로,
아래의 표와 같은 출력값이 나타나게 됩니다.

 a
 2  b
 3  c

2. LEFT OUTER JOIN

LEFT OUTER JOIN의 형식은 다음과 같습니다.

select [테이블명].[필드명], [테이블명].[필드명], ... from [테이블명] LEFT OUTER JOIN [테이블명] on [조건절];

mysql> select a.a, a.b, b.c from a left outer join b on a.a=b.a;

예) A 테이블 [a][b]      B 테이블[a][c]
                    1   a                   nul l null      <== 실제로는 없는 공간입니다.
                    2   b                     2     b               이해를 돕기 위해 임의로 null값으로 표현한 겂입니다.
                    3   c                     3     e

A테이블과 B테이블의 정보를 하나의 정보로 불러오기 위해
a, b, c의 필드명을 입력했고, 조건을 A테이블과 B테이블의 연결고리인 A테이블의 a와
B 테이블의 a로 조건을 걸었습니다.

앞장에서 말 했듯이 LEFT OUTER JOIN은 왼쪽 테이블을 우선으로 불러들이고,
그 다음 b 테이블과 비교해서 같은 값은 그대로 적용하고, 서로 다른 값은 A테이블의
정보를 적용합니다. 양쪽 다 정보가 없을 땐 NULL로 표시하게 됩니다.
즉 위의 예를 보면 A테이블의 c에 대한 정보값이 없음으로, null로 표현이 됩니다.

 a  b  c
 1  a  NULL
 2  b  b
 3  c  e

3. RIGHT OUTER JOIN

RIGHT OUTER JOIN의 형식은 다음과 같습니다.

select [테이블명].[필드명], [테이블명].[필드명], ... from [테이블명] RIGHT OUTER JOIN [테이블명] on [조건절];

mysql> select a.a, a.b, b.c from a right outer join b on a.a=b.a;

예) A 테이블 [a][b]      B 테이블[a][c]
                    1   a                     2     b  
                    2   b                     3     e    
                    3   c                    
RIGHT OUTER JOIN은 오른쪽 테이블을 우선으로 불러들이고, A테이블과 비교하여, 같은 값은 그대로 넘어오고,
다른 값은 오른쪽 테이블을 우선으로 불러들이게 됩니다. A테이블의 1, a를 불러들이지 않는 이유는
B 테이블에서는 1, a의 정보가 없어서 서로 비교를 하지 않기 때문입니다.

 a  b  c
 2  b  b
 3  c  e



OUTER JOIN은 정확한 정보가 있는 테이블을 우선으로해서 비교 출력하기 때문에, LEFT와 RIGHT같은
방향성이 있는 것입니다.

조인(JOIN) 활용

member 테이블 정보
 id passwd  sex  age  hg  address 
abc1   m  20 101  경북 경산시 백천동 
 abc2  2  m  22  101  대구광역시 동구
 abc3  3  w  24  102  부산광역시 북구
 abc4  4  w  30  104  경북 영천시 시림동

테이블 생성

create table member ( id varchar(20) not null, passwd varchar(16) not null, sex char(1), age varchar(3), hg char(3) not null, address varchar(100) );

정보 입력

insert into memver values( 'abc1', 1, 'm', 20, 101, '경북 경산시 백천동' );
insert into memver values( 'abc2', 2, 'm', 22, 101, '대구광역시 동구' );
insert into memver values( 'abc3', 3, 'w', 24, 102, '부산광역시 북구' );
insert into memver values( 'abc4', 4, 'w', 30, 104, '경북 영천시 시림동' );

subinfo 테이블 정보

 subnum subname  profname 
101  컴퓨터공학과  우용태 
 102  디자인학과  문현정
 103  전자공학과  김영지
 104  간호사학과  이슬기

테이블 생성

create table subinfo ( subnum char(3), subname varchar(20), profname varchar(8) );

정보 입력

insert into subinfo values( 101, '컴퓨터공학과', '우용태' );
insert into subinfo values( 102, '디자인학과', '문현정' );
insert into subinfo values( 103, '전자공학과', '김영지' );
insert into subinfo values( 104, '간호사학과', '이슬기' );


문제 1) member 테이블과 subinfo 테이블을 이용하여 id, passwd, sex, age, address, subname, profname 정보를
출력하시오.

member 테이블과 subinfo 테이블을 LEFT OUTER JOIN을 이용한 출력정보

 id passwd  sex   age  address  subname  
 abc1  1  m  20  경...  컴퓨터... 우용태 
 abc2  2  m  22  대구...  컴퓨터...  우용태
 abc3  3  w  24  부산...  디지인학과  문현정
 abc4  4  w  30  경북...  간호사학과  이슬기

조인(JOIN) 명령문

select member.id, member.passwd, member.sex, member.age, member.address, subinfo.subname, subinfo.profname
from member left outer join subinfo on member.hg = subinfo.subnum;

문제 2) member테이블과 subinfo 테이블을 이용하여, 컴퓨터 공학과 학생의 id, 성별, 나이, 학과이름, 담당교수정보를
출력하시오.

 id sex   age subname  profname 
 abc1  m  20  컴퓨터공학과  우용태
 abc2  m  22   컴퓨터공학과  우용태 

조인(JOIN) 명령문

select member.id, member.sex, member.age, subinfo.subname, subinfo.profname from member inner join subinfo on
member.hg = subinfo.subnum where subinfo.subname = '컴퓨터공학과';

출처 : http://kch1183.blog.me

내부조인(INNER JOIN)과 외부조인(OUTER JOIN)

JOIN이란? 둘 이상의 테이블을 특정한 조건으로 연결하여 원하는 데이터를 출력하기 위한 방법이라고 할 수 있습니다.(SELF JOIN이라고 해서 하나의 테이블에 별칭을 주어 각각 구분하여 JOIN하는 방법도 있습니다.)

JOIN은 크게 INNER JOIN과 OUTER JOIN으로 나뉩니다.

1. 내부조인(INNER JOIN)

1)설명

일반적으로 가장 많이 사용하는 JOIN으로

둘 이상의 테이블을 연결하여 각각의 키값이 일치하는 데이터만 출력합니다.

간단하게 교집합의 의미로 생각하면 쉽습니다.

2)사용방법

SELECT 컬럼명

FROM 테이블1 INNER JOIN 테이블2 (INNER을 생략하면 Default로 INNER JOIN이 됩니다.)
ON 테이블1.키값 = 테이블2.키값 (두 테이블이 연결될 조건을 적어줍니다.)

2. 외부조인(OUTER JOIN)

1)설명

특별한 경우에 쓰이는 JOIN으로

둘 이상의 테이블을 연결하여 각각의 키값이 일치하는 데이터 뿐만 아니라, 기준이 되는 테이블의 모든 값까지 출력합니다.

그러므로 기준이 되는 테이블을 정해 주어야 합니다. (기준이 되는 테이블을 정해 준다는 것은 키값이 일치하는 데이터가 존재하지 않더라도, 기본적으로 보여질 테이블을 정해 준다는 것을 의미합니다.)

간단하게 기준테이블 집합의 의미로 생각하면 쉽습니다.

종류는 LEFT,RIGHT,FULL 이렇게 세가지 조건이 있습니다. (LEFT는 왼쪽에 있는 테이블, RIGHT는 오른쪽에 있는 테이블이 기준테이블되고 FULL은 합집합으로 양쪽의 테이블 모두 보여줍니다.)

2)사용방법

SELECT 컬럼명
FROM 테이블1 LEFT OUTER JOIN 테이블2 (LEFT,RIGHT,FULL이 있고 OUTER는 생략가능)
ON 테이블1.키값 = 테이블2.키값 (두 테이블이 연결될 조건을 적어줍니다.)

출처 : http://www.cyworld.com/springlog
트랙백0 And 댓글0

[MY-SQL] 날짜 함수( ADDDATE, DATE_ADD, CURDATE, CURTIME, NOW )

|

ADDDATE 는 DATE_ADD 의 동의어로 지정한 날짜에 EXPR 를 더한 값을 반환하는 역할을 합니다.

 SELECT ADDDATE(date, INTERVAL EXPR); 

예제 (ex #1
 # 42일를 더한 값을 반환받습니다.
 mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 42 DAY);
        -> '1998-02-02'
 mysql> SELECT ADDDATE('1998-01-02', INTERVAL 42 DAY);
        -> '1998-02-02'

예제 (ex #2
 # 1달를 더한 값을 반환받습니다.
 mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 1 MONTH);
        -> '1998-02-02'

예제 (ex #3
 # 1년을 더한 값을 반환받습니다.
 mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 1 YEAR);
        -> '1999-01-02'

CURDATE 함수

 SELECT CURDATE();

예제(ex #1
 mysql> SELECT CURDATE();
      -> 2011-09-27

예제(ex #2
 mysql> SELECT CURDATE()+0;
     -> 20110927

예제(ex #3
 mysql> SELECT CURDATE()+10;
      -> 20110937

CURTIME 함수

 SELECT CURTIME();

예제(ex #4
 mysql> SELECT CURTIME();
      -> 20:13:02

예제(ex #5
 mysql> SELECT CURTIME()+0;
      -> 201302.000000

예제(ex #6
 mysql> SELECT CURTIME()+10;
      -> 201312.000000

NOW 함수

이 함수는 년,월,일,시,분,초를 반환하는 함수입니다.

 SELECT NOW();

예제(ex #7
 mysql> SELECT NOW();
      -> 2011-09-27 10:40:34

예제(ex #8
 mysql> SELECT NOW()+0;
      -> 20110927104034.000000



출처 : http://habony.tistory.com
트랙백0 And 댓글0
prev | 1 | 2 | next