Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.

SQL 쿼리 정리

이 글은 지극히 개인적인 용도이다.

쿼리는 보기 시작한지도 얼마 안되었고 DB도 여러가지 볼때마다 헷갈리고 써도 쓸때만 찾았다가 또 잊어먹고 하다보니 좀 헛된 검색과 낭비를 좀 막아보고자 모은다.... 아직 초기라 틀린 부분도 많고 좀 목적이 계속된 정리작업이 필요할 것을 염두에 두고 있는 포스팅이기 때문에 다른 사람들이 참고하기엔 무리가 있다고 본다.
(틀린 점도 꽤 있을것도 같기 때문에..)

원래는 SLQ 표준안인 ANSI 쿼리문을 기준으로 모아보려고 했는데 막상 하려니까 ANSI쿼리 정보를 많이 구할수 없어서 일단 작성하고 더 정리해 나가기로 했다.

오라클 / MS SQL

DESC 테이블명; 테의블 정의 보기

SELECT

SELECT * FROM 테이블명 WHERE 필드='조건' AND 필드2='조건2'
SELECT 필드1, 필드2, 필드3 FROM 테이블명
SELECT * FROM TAB; 존재하는 모든 테이블 보기
SELECT DISTINCT 필드1 FROM 테이블명; 중복제거하기
SELECT 필드1 FROM 테이블 WHERE 필드2 BETWEEN 00 AND 00; //00부터 00사이에서
SELECT 필드1 FROM 테이블 WHERE 필드2 IN (00, 00); //00과 00중에서
SELECT 필드1 FROM 테이블 WHERE 필드2 LIKE '%단어%';
SELECT 필드1 FROM 테이블 WHERE 필드2 IS NULL; or NoT IS NULL



UPDATE

UPDATE 테이블명 SET 필드='값', 필드2='값', 필드3='값' WHERE 필드 LIKE '조건'

INSERT

INSERT INTO 테이블명(필드1, 필드2) VALUES ('값', '값' );

비교연산자 : >, >=, <, <=, =, <>(not equal)

DROP TABLE 테이블명;

CREATE TABLE 테이블명 (
      필드명 타입 조건,
      id varchar2(15) primary key,
      pass varchar(15) not null,
      no number(5)
)


시퀀스 생성 : CREATE SEQUENCE 시퀀스이름
                   increment by 1
                   start with 1
                   nomaxvalue
                   nocycle
                   nocache;

외래키 생성 : ALTER TABLE 테이블명 ADD ( FOREIGN KEY (필드) REFERENCES 테이블명2);

칼럼 수정 : ALTER TABLE 테이블명 MODIFY (필드 타입);

컬럼 추가 : ALTER TABLE 테이블명 ADD ( 필드이름 필드타입 );

칼럼 리네임 : ALTER TABLE 테이블명 RENAME COLUMN 컬럼이름 TO 새이름;

Null값 처리하기 : SELECT isNULL(필드, '0') FROM 테이블

방금 인서트한 자동증가값 ID 가져오기 : SELECT @@IDENTITY (현재 세션에서만 사용가능)
현재 테이블의 가장큰 큰큰값 가져오기 : SELECT IDENT_CURRENT('테이블명')
수행된 SQL문에 의해 영향받은 행의 수 : SELECT @@ROWCOUNT

날짜 계산하기 : SELECT * FROM 테이블명 WHERE DATEADD(DAY, CONVERT(INT, 컬럼명), 날짜컬럼) > getdate()

테이블 정보보기 : EXEC sp_help 테이블
컬럼 정보보기 : EXEC sp_columns 테이블

앨리어스 사용 : SELECT 필드 AS A FROM 테이블 (별칭에 특수문자 있으면 [] 사용]

주석 : -- or /* */

변수의 선언 : DECLARE @변수명 자료형, @변수명 자료형
변수 할당 : SET @변수명 = 값
변수값 가져오기 : SELECT @변수명

일부분만 가져오기 : SELETC TOP 5 컬럼 FROM 테이블

범위정하기 SELECT 컬럼 FROM 테이블 WHERE 컬럼 BETWEEN 10 AND 20
                SELECT 컬럼 FROM 테이블 WHERE 컬럼 IN ('aaa', 'bbb', 'ccc')

패턴매칭 : SELECT 컬럼 FROM 테이블 WHERE 컬럼 LIKE '%제목%"
               _ : 어떤것이든 한 문자
               % : 없거나 아무 글자오거나
               [] : []안에 있는 글자들 - [b-f]
               [^] : ^다름에 있는 글자를 제외한 다른 것

중복제거 : SELECT DISTINCT 컬럼 FROM 테이블

GROUP BY : SELECT 컬럼1, sum(컬럼2) FROM 테이블 WHERE 조건 GROUP BY 컬럼1 HAVING sum(컬럼2) >= 30
(계산함수가 반드시 있어야 한다, GROUP BY ALL을 사용하면 WHERE제외된것 도 포함)

이너조인 : SELECT 컬럼 FROM 테이블 INNER JOIN 테이블 ON 컬럼=컬럼
아웃터조인 : SELECT 컬럼 FROM 테이블 LEFT OUTER JOIN 테이블 ON 컬럼=컬럼
                  (어느한쪽의 데이터를 모두 가져온다.)

IN : SELECT 컬럼 FROM 테이블 WHERE 컬럼2 IN ( SELECT 컬럼2 FROM 테이블 )
     (IN안의 하위질의는 DISTINCT가 붙은 것으로 동작)
EXISTS : SELECT 컬럼1 FROM 테이블  WHERE EXISTS ( SELECT * FROM 테이블 WHERE 조건 )
              (EXISTS는 하위쿼리가 어떤 결과라도 돌려지면 참)

임시테이블 만들기 : SELECT INTO SELECT * INTO 새테이블명 FROM 테이블 (다른세션에서도 가능, DROP해야 삭제됨)
                            SELECT INTO SELECT * INTO #새테이블명 FROM 테이블 (해당세션에서만 가능, 세션끊어지면 삭제됨)
                            SELECT INTO SELECT * INTO ##새테이블명 FROM 테이블 (다른세션에서도 가능, 세션끊어지면 삭제됨)

UNION : SELECT 컬럼1, 컬럼2 FROM 테이블
            UNION
            SELECT 컬럼1, 컬럼2 FROM 테이블

            (UNION은 컬럼의 자료형과 순서가 맞아야 한다. 중복데이터는 제거되며 UNION ALL을 하면 중복데이터도 가져온다.)

컬럼 추가 : ALTER TABLE 테이블명 ADD 새컬럼 VARCHAR(10) NULL
컬럼 변경 : ALTER TABLE 테이블명 ALTER COLUMN 컬럼 VARCHAR(10) NULL
컬럼 삭제 : ALTER TABLE 테이블병 DROP COLUMN 컬럼

삭제 : DELETE FROM 테이블명 WHERE 조건

업데이트 : UPDATE 테이블 SET 컬럼 = 값 WHRER 조건

트랜잭션 : BEGIN TRAN
               ROLLBACK
               COMMIT




덧) SELECT에 왠만하면 * 는 사용하지 않는다.

덧) WHERE절에서 연산자의 왼쪽은 가동하지 않는다. 컬럼을 가공하면 색인을 사용할 수 없다.
        WHERE 컬럼 * 3 < 10 말고 WHERE 컬럼 < 10 / 3 을 사용하자

2007/07/14 01:40 2007/07/14 01:40

Visual Studio에서 만든 웹사이트 배포하기

Visual Studio 2005를 기준으로 설명한다.(왜냐하면 내가 2005를 쓰기 때문에.. 이전버전은 잘 모른다. 2005도 잘 모르지만... ㅡ..ㅡ)

VS 2005는 기본적으로 aspx등의 페이지를 만든 후에 Ctrl + F5를 눌러서 빌드를 시키면 Web Developer Web Server라는게 뜨면서 가상으로 웹서버를 구성해 주기 때문에 IIS를 설치하지 않아도 페이지를 빌드해 볼 수 있다.

다른 설정을 하지 않았을 경우 [내문서]안에 [Visual Studio 2005]라는 폴더 안에 프로젝트폴더속에 프로젝트 파일이 생기면 웹페이지들은 [WebSites]폴더안에 생성되서 가상웹서버가 이녀석을 실행시켜 주는 것인데 실제 웹페이지는 가상이 아닌 실서버에서 돌리기 위한 것이므로 개발후에는 배포를 해주어야 한다.

VS 2005에서 배포를 하려면 2가지 방법이 있다. (물론 IIS는 설치되었다는 것을 가정하에 한다.)

  • 웹 사이트 게시
  • 웹 사이트 복사

이렇게 2가지가 있다. 어느것을 선택해도 배포를 할 수 있지만 약간 둘의 차이점은 존재한다. 일단 배포하는 법을 보자...


웹사이트 게시

사용자 삽입 이미지

웹사이트 게시는 솔루션 탐색기에서 해당프로젝트의 마우스 우클릭을 하면 [웹사이트 게시]메뉴가 있다.
사용자 삽입 이미지

대상 위치에서 원하는 위치를 골라주면 된다. 오른쪽에 찾아보기를 하는 버튼을 누르면

사용자 삽입 이미지
보는 바와같이 웹서버의 루트디렉토리로 사용할 디렉토리를 파일시스템에서 직접 찾아가도 되고 IIS에서 해당 웹서버를 선택해 주어도 된다. 어느쪽을 해도 큰 차이는 없는 것 같다.(현 지식으로는.. ㅡ..ㅡ) 게시는 그 폴더에 있는 모든 파일을 지우고 게시한 파일들을 생성한다.

설정을 해주면 웹사이트게시를 하면 해당위치로 출력이 된다. 이 때 웹사이트 게시는 미리컴파일(Precompilation)을 해주기 때문에 동적컴파일 시간을 줄요 초기 응답시간을 줄일 수 있다.

※ 게시할 때 "미리 컴파일된 이 웹사이트를 업데이트를 할 수 있도록 허용"에 체크를 해주도록 하자. 그래야 수정해서 다시 게시할 수 있다. 체크가 없을 경우 aspx파일등으로 출력되지 않고 모두 dll파일로 컴파일 되어서 게시가 된다.




웹사이트 복사

사용자 삽입 이미지

웹사이트 복사는 중간쯤에 위치하고 있다.

사용자 삽입 이미지

웹사이트 복사는 게시에 비해서 좀 다른 기능들을 제공하고 있다. 기본적으로는 상위 연결에서 해당 IIS서버를 선택해서 연결하면 좌측에 현재 프로젝트의 파일들이 보이고 오른쪽엔 연결한 서버의 파일이 보이는데 내보내기를 하면 게시와 거의 동일하다.

선택적으로 파일을 복사할 수 있으며 역으로 다시 가져올 수도 있으면 동기화버튼을 통해서 바뀐 파일들만 동기화 하는 것도 가능하다.




게시 혹은 복사가 끝나면 웹서버에 파일들이 위치하기 때문에 웹브라우져에서 해당 웹서버 주소로 접근해서 파일을 볼 수가 있다. 브라우저를 일일이 띄우는게 귀찮다면 프로젝트의 서버를 설정해 주면 된다.

사용자 삽입 이미지

솔루션 탐색기의 프로젝트에서 프로젝트의 속성페이지에 들어간다.

사용자 삽입 이미지

속성에서 [시작옵션]에 들어가면 중간에 서버설정에 대한 부분이 있다. 기본 웹서버가 Visual Studio에서 제공하는 가상 웹서버이다.  사용자 지정 서버를 선택해서 URL에 IIS로 사용하는 웹서버의 주소를 적어주면 된다.

이렇게 설정해 줄 경우 VS 2005에서 Ctrl + F5를 눌러서 빌드를 하면 전처럼 가상서버가 뜨지 않고 빌드 후 지정서버의 URL로 브라우져가 뜨게 된다. (물론 이건 빌드만 하는 거기 때문에 변경내용을 적용하려면 그전에 게시든 복사든 배포를 해주어야 한다.)



※ 빌드서버를 웹사이트로 지정했을 때 웹사이트 게시도 IIS로 웹서버를 선택해 주면 게시를 할 수 없다고 나타난다. 둘다 같은 곳으로 지정해서 사용하려면 웹사이트 게시는 파일시스템에서 해당 폴더를 선택해 주면 게시와 빌더를 동시에 사용할 수 있다.
2007/07/09 15:57 2007/07/09 15:57