레이블이 SQL인 게시물을 표시합니다. 모든 게시물 표시
레이블이 SQL인 게시물을 표시합니다. 모든 게시물 표시

2010년 10월 1일 금요일

MySQL에서 제어함수 (Control Flow Functions)

출처 : http://wizard.ncafe.net/wt/2368

MySQL에서 제어함수들에 대해서 설명한다. (Control Flow Functions)


1. CASE
 1.1 CASE value WHEN [compare_value] THEN result ... [ELSE result] END
   - value가 compare_value 이면 result 아니면 ELSE 의 result ...

 1.2 CASE WHEN [condition] THEN result ... [ELSE result] END
   - condition 이 true 면 result 아니면 ELSE 의 result

2. IF
  2.1 IF (condition, result1, result2)
    - condition 이 true 면 result1 아니면 result2
    - MySQL 5.0 메뉴얼에 IF(0.1,1,0) 의 값이 0 이라고 나와 있는데 난 1이 나온다.
      1이 나오는게 맞는거 같은데.

3. IFNULL
  3.1 IFNULL(expr1, expr2)
    - expr1이 널이면 expr2

4. NULLIF
  4.1 NULLIF(expr1, expr2)
    - expr1=expr2 이면 NULL


2010년 9월 30일 목요일

[MySQL] 두개(여러개) 테이블 데이터 합치기

출처 : http://dddd87.untoc.com/tc/13

잊어먹을라~ ㅠㅠ;;

  1. INSERT Ignore INTO A SELECT * FROM B;

    테이블 A 와 B 가 같은 schema 일 때, 테이블 B의 데이터를 A 의 데이터에 넣는
    쿼리문이다.  A 와 B 의 중복 데이터를 제거하고 A와 다른 데이터만 추가하게 된다.

    예를 들어
      테이블 A 가

      id    name    age
    --------------------------
      1     kim         20
      2     lee         22
      3     kim         23

     이고
     
      테이블 B 가

      id    name    age
    --------------------------
      1     kim         20
      2     lee         22
      3     lee         24
      4     park       20

    일때 INSERT Ignore INTO A SELECT * FROM B; 쿼리 문을 실행 하게 되면 테이블 A는 아래와 같이 된다.
     
      id    name    age
    --------------------------
      1     kim         20
      2     lee         22
      3     kim         23
      4     lee         24
      5     park       20

  2. SELECT * FROM A UNION SELECT * FROM B

    1번과 같은 역할이지만 A테이블로 insert 하는것이 아니라
    테이블 A, B 를 중복된 데이터 제거하고 테이블이 union 되여 화면에 출력된다.
    이때도 테이블 A, B 는 같은 schema

2009년 10월 17일 토요일

MS SQL 2008 Enterprise 설치방법 & 순서

출처 : 내안의 디지털 세상 ( http://prolite.tistory.com/6 )

원문에서 이미지를 따왔으며 몇글자만 수정해서 올려드림을 알려드립니다.



Microsoft SQL Server 2008 설치

설치 파일이나 DVD 시디가 없으신경우..
아래 마이크로소프트 홈페이지에서 평가판을 다운로드 받으시기 바랍니다.
http://sqlserver.dlservice.microsoft.com/download/0/C/D/0CDFF659-622D-459D-A24B-41DE64C89D9A/SQLFULL_KOR.iso?lcid=1042

자 이제 설치시디를 넣으시거나 데몬이나 시디스페이스로 엽니다.

처음 실행시 cmd 창이 않닫히는경우 그냥 닫아주시면 됩니다.

좌측메뉴의 설치 -> 우측메뉴에서 첫번째 "새 SQL Server 독립 실행형 설치 또는 기존 설치에 기능추가"
설치 가능여부 검사
상태가 모두 성공임 -> 설치 가능
제품키 입력
제품키가 없을경우 "무료버전 지정"  -> 평가버전으로 선택
약관 동의 체크
다음 클릭!!
기능 설치준비
규칙 검사 진행 - 설치시 문제가 발생되는지를 검사하는것이죠 ^^
아래처럼 방화벽에만 경고가 뜨는데 문제없이 설치됩니다~ 다음!!
저는 모두선택 클릭했지요~ 모두선택 다음!!
여기서는 "기본 인스턴스" 선택후 다음으로~~
디스크 공간 확인
모든 SQL Server 서비스에 동일한 계정 사용 클릭!!
계정 선택 화면
두번째 계정 "NT AUTHORITY\SYSTEM" 으로 선택합니다.
데이터정렬 방법 기본값으로 두고 다음
혼합모드 체크!! -> 암호설정
현재 사용자 추가를 통해 SQL 관리자를 선택합니다
현재 사용자 추가 :: SQL SERVER 관리자 계정을 추가해주는것입니다
지금까지의 모든 설정을 토대로 설치가 시작됩니다.
p.s - 무지하게 오래걸립니다 ㅡㅡ;;
30분후의 모습이지요~ 아직두 ㅎㅎ;;
설치완료!!
SQL 실행하기 저놈을 눌러주셈~~ ^^
데이터베이스 엔진
서버 이름 -> 왠만하면 IP주소로 지정하라는군요 ^^
아까 지정하신 암호로 로그인하시면 됩니다

설치 끝~~~~ 이제 공부만하면 되겠지요?? ㅎㅎㅎ

2009년 10월 16일 금요일

MySQL 관리툴 : webyog 프로그램과 HeidiSQL 프로그램

출처 : 문샘의 정보보호 ( http://www.munsam.kr/208 )

데이타베이스를 구축하기 위해 DBMS를 설치해 합니다.
DBMS 프로그램은 여러가지가 있습니다.

MySQL : 무료 배포, 윈도우 및 리눅스 환경에서 사용 가능
MSSQL : 유료, MS에서 제작된 프로그램, 윈도우 환경에서 사용가능
오라클 : 유료, DBMS의 대표적인 프로그램, 가장 안정성이 좋다고 함.

일반인이나 간단한 홈피, 웹서버 구축시에는 MySQL를 많이 사용합니다.
특히 APMsetup 프로그램 내장된 DBMS 입니다.

MySQL 설치하고, 작동한후
MySQL 에 접근하가 위해서는 셀(도스환경)에서 접속해야 합니다.
도스환경이라 사용하기 어렵습니다.
SQL문을 따로 알아야 합니다.
DB 생성, Table 생성, 레코드 삽입, 수정, 삭제 등

이것을 GUI 환경(비주얼하게 보여주는 프로그램)으로 만들어 주는 것이 어려가지 있습니다.
가장 대표적인 것은 phpmyadmin 이라는 것입니다.
웹서버 구축시 해당 프로그램을 다운 복사하고, 환경설정을 해 주어야 합니다.

apmsetup 프로그램에서는 내장되어 있습니다.

phpmyadmin 이 설치가 안되어 있거나 설치가 어렵다면 아래의 프로그램을 설치하세요.
아래의 두개의 프로그램을 소개합니다.
URL 를 클릭해서 해당되는 파일을 다운 받아 일반 프로그램처럼 설치하면 됩니다.

      (30일 사용 쉐어웨어 프로그램)

   phpmyadmin 과 MSSQL 의 모양을 합한 것처럼 보임
   무료 프로그램

2009년 10월 14일 수요일

MS-SQL 쿼리문 정리

테이블 생성


create table sawon

        (

                sa_no int not null,

                sa_irum nvarchar(10),

                dept_no int not null,

                jik nvarchar(10) default '사원',

                pay int,

                ibsail datetime default getdate(),       /* getdate() 오늘날짜 */

                sa_sex varchar(4),

                mgr int

        )

-------------------------------------------------------------------

데이터 추가


insert into tb_member values

 ('wonbin','123456','원빈',810000,1000000,'wonbin@naver.com','135-902','서울시 강남구 압구정','010-333-444',getdate(),1)

-------------------------------------------------------------------

데이터 업데이트


update com_man set m_name='장동권', m_h='영화' where m_name='가'


update com_man set m_h=null where num=4   /* num=4를 null로 바꾼다 */


update com_man set m_h='작업' where (m_h is null) or (m_h='')


update com_man set m_name='원빈' , c_id=3, m_h=null where num=6

-------------------------------------------------------------------

조건 검색 정렬


select sa_irum as '이름',pay as '급여',floor(pay*0.7) as '보너스', floor((pay*12)+(pay*0.7)*6 ) as '연봉' from sawon


--오늘 날짜에 3년을 더하라

select dateadd(year, 3, getdate()) as '3년후'


-- TB_member  에서 이름과 나이를 출력

select s_name as '이름',datediff(year,'19'+left(zumin1,2),getdate()) as '나이' from tb_member


-- 입사일로 부터 30년을 더한값을 정년일로 하여 정년일 출력

select dateadd(year, 30, ibsail) as '정년일' from sawon


select id as '코드번호' from tb_com where com_name='삼성전자'

select com_name from tb_com where id <= 4 order by com_name desc   /* 내림차순 */


select com_name, tel, id from tb_com where com_name like '한%'


select tel from tb_com where tel like ('%1111') or (tel is null)


select * from sawon where jik=(select jik from sawon where sa_irum='최진실')


select * from sawon where pay > (select avg(pay) from sawon)


select dept_no as '부서', sa_irum as '이름' from sawon where dept_no=(select dept_no from sawon where sa_irum='최진실') order by dept_no, sa_irum


select * from sawon where pay=(select max(pay) from sawon where jik='과장') and jik='과장'


select count(distinct p_id) as '상품 수' from tb_order -- 상품 갯수 확인(중복 제거 distinct)


select sum(su) as '판매된 상품수' from tb_order -- 상품수


select jik as '직책', avg(pay) as  '직책별 급여 평균' , count(jik) as '직책별 사원 수' , sum(pay) as '직책별 급여 합' from sawon where jik<> '사장' group by jik having count(jik) > 4


select p_id as '주문량 10개 이상 상품' , sum(su) as '수량' from tb_order group by p_id having sum(su) >= 10


select count(ibsail) as '사원수' ,  year(ibsail) as '입사년도' from sawon group by year(ibsail)


select dept_no as '부서번호',sum(pay) as '급여총합' from sawon where dept_no<30 group by dept_no select dept_no as '부서번호',sum(pay) as '급여총합' from sawon group by dept_no having dept_no<30


select tb_order.p_id as '제품번호', p_name as '제품명',go_no as '고객번호',sa_irum as '사원이름', dept_name as '부서명'  from tb_order, products, sawon, dept  where (tb_order.p_id=products.p_id) and (tb_order.go_no=sawon.sa_no) and (sawon.dept_no=dept.dept_no)


select p_name as '제품명' , p_price as '금액', sa_irum as '주문자' , go_no as '고객번호' from products, tb_order, sawon  where (products.p_id=tb_order.p_id) and (sawon.sa_no=tb_order.go_no) and (p_price > 100000)

-------------------------------------------------------------------

데이터 삭제


delete tb_member where cur is null

-------------------------------------------------------------------

프로시져

create proc a_dd @add nvarchar(50)  as

select * from ziptable where  addr like '%'+@add+'%'


a_dd '청파동2가'

-----------------------

create proc input @input int, @input2 nvarchar(20), @input3 nvarchar(50), @input4 nvarchar(30)  as

 insert into tb_com values(@input,@input2,@input3,@input4)


input 7,'인텔','미국','001'

-----------------------

create proc p_hpsu

 @hp nvarchar(20)  as

select @hp as '통신번호',count(*) as '회원수' from tb_member where hp like @hp+'%'


p_hpsu '010'


-------------------------------------------------------------------


begin tran -- 복구 시작 위치를 지정


rollback tran -- 복구

2009년 10월 13일 화요일

MySQL Query(쿼리)문

출처 : 퇴근5분전 ( http://blog.naearu.com/2982704 )



AUTO_INCREMENT 리셋하기
ALTER TABLE `테이블명` PACK_KEYS=0 CHECKSUM=0 DELAY_KEY_WRITE=0 AUTO_INCREMENT=1

데이터베이스 또는 테이블 보기
SHOW DATABASES;
SHOW TABLES;


데이터베이스 생성하기
CREATE DATABASE 데이터베이스명;


테이블 생성하기
CREATE TABLE 테이블명 (컬럼명1, 컬럼명2, 컬럼명3, ..., 컬럼명N);


데이터베이스 사용
USE 데이터베이스명;


데이터베이스 삭제하기
DROP DATABASE 데이터베이스명;


테이블 삭제하기
DROP TABLE 테이블명;


테이블에 새로운 컬럼 추가하기
ALTER TABLE 테이블명 ADD 컬럼명 자료형;


데이블의 특정 컬럼을 변경하기
ALTER TABLE 테이블명 CHANGE 변경전명 변경후명 자료형;


테이블에 특정 컬럼을 삭제하기
ALTER TABLE 테이블명 DROP 컬럼명;


테이블에 데이터 추가하기
INSERT INTO 테이블명 (컬럼1, 컬럼2, ..., 컬럼N) VALUES (데이터1, 데이터2, ..., 데이터N);


테이블 구조 살펴보기
DESCRIBE 테이블명;


원하는 항목 표시하기 ->
SELECT * FROM 테이블이름;
SELECT 컬럼1, 컬럼2, ...컬럼N FROM 테이블이름;


조건하에 항목 표시하기
SELECT id, name, email FROM memo WHERE sex = 'M' AND math > '70';


순서대로 표시하기
// 오름차순
SELECT name, phone FROM memo ORDER BY 컬럼명 ASC;
// 내림차순
SELECT name, phone FROM memo ORDER BY 컬럼명 DESC;


원하는 갯수만큼 가져오기
// 위에서 4개만 가져온다.
SELECT * FROM memo LIMIT 4;
// 3번부터 4개를 가져온다.
SELECT * FROM memo LIMIT 2, 4;


데이터 개수 알아내기

SELECT COUNT(*) FROM data;

특정조건에 해당되는 데이터 갯수 구하기.

SELECT COUNT(*) FROM data WHERE sex = 'F';


검색을 통해 데이터 가져오기

SELECT * FROM student WHERE name LIKE '인민%';


자료 업데이트 하기

UPDATE 테이블명 SET 컬럼 = 값, ... WHERE 조건문


자료 삭제하기

DELETE FROM 테이블명 WHERE 조건문;






*count
mysql> SELECT COUNT(*) FROM table_name;
해당 테이블의 전체 리스트 개수를 표시해준다.

count의 조건을 걸때는 뒤에 WHERE 조건; 을 해주면 된다.
ex) SELECT COUNT(*) FROM table_name WHERE sex='남';


* DISTINCT
mysql> SELECT DISTINCT address FROM table_name;
해당 테이블의 address값을 출력하되, 중복 되는 내용은 피한다.

응용>> SELECT COUNT(DISTINCT address) FROM table_name;


* GROUP BY
mysql> SELECT sex, COUNT(*) FROM table_name GROUP BY sex;
성별에 따라 그룹으로 묶어서 출력조건에 맞춰서 출력한다.

응용>> SELECT MONTH(birth) AS '월', MONTHNAME(birth) AS '월이름',
           COUNT(*) AS '개수'
           FROM table_name GROUP BY '월이름' ORDER BY '월';

변형>> SELECT MONTH(birth) AS '월', MONTHNAME(birth) AS '월이름',
           COUNT(*) AS '개수'
           FROM table_name GROUP BY 2 ORDER BY 1;
 -> 출력되는 순서를 번호로 매겨 사용할 수 있다.


* LIMIT
mysql> SELECT address FROM table_name GROUP BY 1 DESC LIMIT 3;
해당 테이블의 주소를 출력하되 최대 3개만 출력한다.


* MIN, MAX, SUM, AVG
mysql> SELECT MIN(marks) FROM table_name;
해당 테이블의 점수(marks)의 최소값을 구한다.
MAX = 최대값
SUM = 합한값
AVG = 평균값

MySQL Query(쿼리)문 모음

출처 : 하로기님의 블로그 ( http://harogipro.tistory.com/57 )


1. show databases; 는 데이터베이스들을 보여준다.
     create database 데이터베이스명 ; 은 데이터베이스를 생성한다.
     그러나 실제 mysql 관리자(서버관리자)가 아닌 이상 이 명령어를 사용할 수가 없다.
     호스팅업체에서 대개는 자신의 계정아이디와 동일한 DB하나만 서비스해주기 때문에
     직접 이 명령어를 사용하진 못한다.

사용자 삽입 이미지
2. use 데이터베이스 : 사용할 데이터 베이스를 선택한다. 실제 호스팅인 경우 바로
    바로 데이터베이스 안으로 접속되는 경우가 많다.
    show tables ;  테이블의 목록 출력
     - DB는 테이블 형태로 데이터가 저장된다.
사용자 삽입 이미지

테이블 생성
   create table 테이블 명 ( 컬럼명 데이터형식 널값여부 기타옵션);
  auto_increment 는 자동으로 번호를 증가시켜준다.
  primary key 는 고유값 설정으로 똑같은 값은 절대 받지 않는다는 뜻.

  *** mysql 각종 데이터형들
 tinyint 부호 있는 정수 -128 ~ 127
부호 없는 정수 0 ~255
1 Byte

SMALLINT 부호 있는 정수 -32768 ~ 32767
부호 없는 정수 0 ~65535
2 Byte

MEDIUMINT 부호 있는 정수 -8388608 ~ 8388607
부호 없는 정수 0 ~16777215
3 Byte

INT 또는 INTEGER 부호 있는 정수 -2147483648 ~ 2147483647
부호 없는 정수 0 ~4294967295
4 Byte

BIGINT 부호 있는 정수 -9223372036854775808 ~ 9223372036854775807
부호 없는 정수 0 ~18446744073709551615
8 Byte

FLOAT 단일 정밀도를 가진 부동 소수점
-3.402823466E+38 ~3.402823466E+38

DOUBLE 2 배 정밀도를 가진 부동 소수점
-1.79769313486231517E+308 ~ 1.79769313486231517E+308

DATE 날짜를 표현하는 유형
1000-01-01 ~ 9999-12-31

DATETIME 날짜와 시간을 표현하는 유형
1000-01-01 00:00:00 ~ 9999-12-31 23:59:59

TIMESTAMP 1970-01-01 00:00:00 부터 2037년 까지 표현
4 Byte

TIME 시간을 표현하는 유형
-839:59:59 ~ 838:59:59

YEAR 년도를 표현하는 유형
1901 년 ~ 2155년

CHAR(M) 고정길이 문자열을 표현하는 유형
M = 1 ~255

VARCHAR(M) 가변길이 문자열을 표현하는 유형
M = 1 ~ 255

TINYBLOB
TINYTEXT 255개의 문자를 저장
BLOB : BINARY LARGE OBJECT의 약자

BLOB
TEXT 63535개의 문자를 저장

MEDIUMBLOB
MEDIUMTEXT 16777215개의 문자를 저장

LONGBLOB
LONGTEXT 4294967295(4Giga)개의 문자를 저장


 3. desc 테이블 명 ; 테이블의 각 컬럼 형식 보기

사용자 삽입 이미지


4. 데이터 입력하기
사용자 삽입 이미지

5.한꺼번에 데이터 입력하기

사용자 삽입 이미지

6. no 필드에 값을 입력하지 않아도 자동적으로 증가하는 것을 볼 수 있다.

사용자 삽입 이미지

7. 원하는 필드만 선택할때...

사용자 삽입 이미지

8. 조건으로 검색하기

사용자 삽입 이미지


9. 내림차순 정렬하기

사용자 삽입 이미지

10.오름차순정렬

사용자 삽입 이미지

11. 조건절과 정렬 함께 사용하기

사용자 삽입 이미지

12.데이터 수정하기(조건절이 없으면 전부 바뀐다.)

사용자 삽입 이미지

13. 데이터 삭제(조건이 없으면 전부 삭제된다)

사용자 삽입 이미지

14. 컬럼(필드) 추가해보기

사용자 삽입 이미지

15. 컬럼 삭제해보기

사용자 삽입 이미지

16. 컬럼 수정해보기

사용자 삽입 이미지


17. 테이블 삭제해보기

사용자 삽입 이미지

18. 합계 연습을 위해 임시 테이블 만들었음

사용자 삽입 이미지

19. 필드의 최대, 최소, 평균, 합계구해보기
    as 임시필드명 해주면 임시로 필드명이 생성된다.

사용자 삽입 이미지

20. 필드의 총 개수 구해보기

사용자 삽입 이미지

21. 한꺼번에 최대값과 합산값, 평균구하기.
     between 으로 범위값 내에 있는 필드 구하기
    in 으로 지정한 필드만 뽑아내기

사용자 삽입 이미지

22. not in 은 그것을 제외한 필드를 구한다.
     %는 like 와 함께 쓰이며 '%강%'은 강을 기준으로 강을 포함한 앞뒤문자검색을 해준다.

사용자 삽입 이미지

23. a 이후에 문자열 검색
     b 이전에 문자열 검색

사용자 삽입 이미지

24. limit는 레코드 처음부터 2개만 뽑아온다. 범위와 함께 쓰일 수도 있다.

사용자 삽입 이미지

25. limit 시작레코드번호, 뽑아올 레코드 갯수

사용자 삽입 이미지

26. 컬럼명 바꾸기(컬럼명을 바꿀땐 데이터도 같이 바꿔줘야 한다.)
     테이블 명 바꾸기....(아래참고)


사용자 삽입 이미지

27. 날짜형 데이터넣기
     now() 함수는 날짜를 가지고 있는 내장합수인데 선언한 데이터형에 따라 들어가는 값이
     아래처럼 다르게 들어간다.

사용자 삽입 이미지