db기본2. select / insert/ delete/ update 및 날짜 및 등등의 함수

===========================================
insert
===========================================
형식1. INSERT INTO 테이블이름 (컬럼명,,,,) VALUES (데이타,..);
형식2. INSERT INTO 테이블이름
           SET 컬럼명 = 데이타 ,
       컬럼명 = 데이타
형식3. INSERT INTO 테이블이름 (컬럼명,,,)
       SELECT .......
  ---------------------------------------------------
  INSERT INTO RESULT (변수....)
  VALUES
  (데이타.......),
  (데이타.......),
  (데이타.......),
  (데이타.......);
  INSERT INTO result
     set year = 2, class = 1, no =2,,,,

insert into temp (year, class ,no, name, sum, average )
   select year, class , no, name ,
(korean + english + math + society + science ),
((korean + english + math + society + science ) / 5) from result;

select [distinct]
    표현식
from 테이블명
where 검색조건
group by 컬럼명
order by 컬럼명 asc | desc
limit 지나칠줄수, 보여줄 줄수
===========================
where 조건
    =
  >
  <
  >=
  <=
  <>
  like (% , _)
  and
  or
    between min and max
  is null  =>null 이면 1을 아니면 0을 반환
=========================================
select 나 where절에서 지원되는 함수
=========================================
null을 포함한 표현식은 언제나 null값을 반환한다
비교연산자 : 결과는 1, 0 , null
            문자열은 자동으로 숫자형으로 변환되고 숫자형은 필요시 문자형으로 변환한다
            규칙 : 1. 하나 또는 두개의 인자 모두 null일시 =>null반환
          2. 모두 string => string
      3. 모두 정수 => 정수
      4. 하나는 timestamp , datetime일시 timestamp로 변환하여 비교 한다


=====================================================
수학 관련 함수
====================================================
abs () :절대값
sign(x) :부호값
mod(234,10) : 234 % 10의 나머지값
floor(x) :x를 넘지 않는 가장 큰 정수  // fix와 동일
        floor(-2.13) => -2
ceiling(x) : x보다 작지 않은 가장 작은 정수
        ceiling(1.23) ==> 2
  ceiling(-1.23) ==> -1
round(x) :x를 반올림한 정수값
round(x,d) : 소수이하 d번째에서 반올림하라
pow(x,y) : x의 Y승
sqrt(x)
pi()
degrees(x) 라디안값을 호도값으로 변환
radians(x) 호도값 라디안값으로 변환
least(인자들,,,,,)   ///인자들중 가장 작은값 반환
greatest(인자들,,,,,) ///인자들중 가장 큰값을 반환


====================================================
문자열 함수
====================================================
■ ascii('문자열') : 문자열의 가장왼쪽의 문자값 출력 빈문자=0 null =null 출력
■ bin(n)         : 10진수값을 이진수로 출력 bin(null) =>null
■ oct(n)         : 8진수
■ hex(n)        : 16진수
■ concat(x,y,z,,,,) : 인자는 2개이상 하나가 null 이면 null출력
                 concat('aa', null) ==> null
     concat ('aa','bb','cc') ==> aabbcc
■ length(문자열) : 문자열의 길이
■ left(문자열, 길이)
■ right(문자열, 길이)
■ substring(문자열,시작위치, 길이)
■ ltrim(str) : 왼쪽공백제거
■ rtrim(str) : 오른쪽 공백제거
■ replace(문자열, 이것을, 이것으로)
■ lcase(str) / lower(str) 소문자로 변경
■ ucase(str) / upper(str) 대문자로 변경

====================================================
날짜 및 시간 관련 함수
====================================================
■ to_days(now())   : 날짜를 숫자로 계산
■ dayofweek(now()) : 날짜의 요일을 정수 인덱스로 반환 1=일, 2=월,3=화,,,,,
   select dayofweek('2004-09-10');
■ dayofmonth(now()) : 날짜의 월의 일수를 정수로 반환 (1~31)
■ dayofyear('2004-09-10') : 날짜의 일수를 정수로 반환 (1~365)
■ month('2004-09-10') : 날짜의 달수를 반환 1~12
■ dayname('2004-09-10') : 날짜의 요일 이름을 반환
■ monthname('2004-09-10') : 날짜의 달이름을 반환
■ quarter('2004-09-10') ; 날짜의 해단 분기 반환
■ year('2004-09-10') : 날짜의 연도 반환
■ hour('10:35;09') : 시간 24시간제로 반환
■ minute('10:35;09') : 분
■ second('10:35;09') : 초
■ date_add(datetime, interval n)   //날짜 함수에 더해라 n에 해당하는 단위만큼
   select date_add('2004-09-14 23:54;12', interval 1 second);
   select date_add('2004-09-14 23:54;12', interval 2 day);
   select date_add('2004-09-14 23:54;12', interval '1:1' minute_second);
   select date_add('2004-09-14 23:54;12', interval '11:1:1' day_second);
   select date_add('2004-09-14 23:54;12', interval '-1 10' day_hour);
■ date_sub(datetime, interval n)   //날짜 함수에 빼라 n에 해당하는 단위만큼

====================================================
오늘의 날짜 표현
====================================================
■ curdate() ===> 2004-09-15
■ curdate() +0 ====> 20040915
■ curdate() +1 ====> 20040915 // 오늘날짜 +1
■ curtime()  ==>00:00:00
■ curtim()+1 000001
■ now()  ///sysdate()  ==> 2004-09-15 00:00:00
■ now() + 0           ==> 20040915000000

====================================================
날짜 표현 format
====================================================
date_format(date, format)
년도 %Y : 4자리 연도
     %y : 2자리 연도
달   %M :달이름 ful l
     %b  : 달이름 3글자
     %m : 달숫자 01,02 ...
     %c : 달숫자 1,2,3 ...
요일 %W :요일 full
     %a  :요일 약자
일   %D  : 서수형식 1st,...
     %w  :숫자요일 0:일, 1;월.....
     %d  :달내의 날짜 00~31
     %e  : 달내의 날자 0~ 31
     %j   : 년도내의 날짜 001~365
시   %l   : 12시간제(1~12)
     %h  : 12시간제(01~12)
     %I   : 12시간제(1~12)
     %k  : 24시간제(0~23)
     %H  : 24시간제(00~23)
분   %i   : 00~59
초   %S  : 00~59
     %s  : 00~59
시간 %r   : 12시간제 (hh:mm:ss [AM|PM]
     %T  : 24시간제 (hh:mm:ss)
주   %U  : 일요일을 기준으로 한주(0~52)
     %u  :월요일을 기준으로 한주 (0~52)
     %% : 문자%
     %p  :AM | PM
--------------------------------------------------------------
select DATE_FORMAT('2004-09-15','%W %M %Y')
select DATE_FORMAT('2004-09-15','%H %i %s')
select DATE_FORMAT('2004-09-15','%D %y %a %d %m %b %i')
----------------------------------------------------------------
ex:   aa테이블에서 name을 찍되 regdate 가 오늘로 부터 30일 이내의 모든 레코드를 찍어라
     select name from aa
     where to_days(now()) - to_days(regdate) <= 30;

====================================================
숫자 표현 format
====================================================
format(숫자값 , 0) ; 천단위마다 ,
format(숫자값 , 2) ; 천단위마다, 소수이하 2자리표현

select (123456, 0)  ------> 123,456
select (12345.6, 2)  ------> 12,345.60


====================================================
group by
====================================================
group by : 전교생 성적산출시
          반별 평균을 구하고 싶다
-----------------------------------------
select [distinct]
  
count(*) : 로우수 출력
  select count(*) from test group by year
  select count(*) from test
avg(필드)
select year, avg(korean) from test group by year
min(필드) ,max(필드)
select su_name , min(koran), max(korean)
from test
group by su_name
sum(필드) 레코드셋이 없으면 null반환

limit (지나칠갯수, 나올갯수)
------------------------------------------

group by
------------------------------------------
형식1
  참조테이블1, 참조테이블2
  참조테이블1 INNER JOIN 참조테이블2
형식2
참조테이블1 LEFT [OUTER] JOIN 참조테이블2 ON 조건 표현식
참조테이블1 LEFT [OUTER] JOIN 참조테이블2 USING (컬럼목록)

SELECT a.year, b.no, a.name
FROM result as a left join student as b
USING (year, class, no)
====>>
wheer a.year = b.year
and   a.class = b.class
and   a.no   = b.no

select * from table1 a left join table2 b
    on a.field1 = b.field1
  left join table3 c
  on b.field1 = c.field1

Press ESC to close