rownum과 같은 mssql 방법


안녕하세요.
고코더 입니다.



시퀀스가 없는 테이블을 조회한 후에 해당 컬럼에 대한 순차적인 정보를 가져와야 할 경우 사용할 수 있는 방법입니다. 오라클에서는 rownum이 간단하게 해결 가능하지만 MSSQL은 약간의 방법이 필요 합니다.

 1. 해당 테이블의 select로 조회 한 결과 
1
2
3
4
5
6
7
8
9
SELECT
  ROW_NUMBER() OVER(ORDER BY GoCoder desC) AS SEQ
       ,[GoCoder]
       ,[Blog]
       ,[Homepage]
       ,[Go]
       ,[gocoder_net]
       ,[gocoder.tistory.com]
FROM [db_gocoder].[dbo].[Go]
cs

 2. 고유 번호가 없는 테이블입니다. (결과 창 맨앞에 있는 순번은 결과창 순번입니다. 데이터가 아닙니다.)



 3. ROW_NUMBER()를 사용하여 해당 테이블 앞에 고유 순번을 매길려고 합니다.
아래 쿼리를 실행해주세요. 

1
2
3
4
5
6
7
8
9
SELECT
  ROW_NUMBER() OVER(ORDER BY GoCoder desC) AS SEQ
       ,[GoCoder]
       ,[Blog]
       ,[Homepage]
       ,[Go]
       ,[gocoder_net]
       ,[gocoder.tistory.com]
FROM [db_gocoder].[dbo].[Go]
cs

 4. 원래 데이터 앞에 SEQ라는 순차적인 순번이 생겼습니다. 개발하기 편리하게 되었습니다. 


 5. 이 방법의 유의점은 정렬이 필요한 컬럼을 지정해줘야 합니다. Over안에 오더바이를 꼭 넣어줘야 합니다. (오라클은 그냥 되는데 귀찮네요)

1
ROW_NUMBER() OVER(ORDER BY 정렬컬럼 desC) AS SEQ
cs



마무리


고유번호가 있어야 개발이 쉽죠 


댓글을 달아 주세요


table column을 검색해서 찾아보기


안녕하세요.
고코더 입니다.


데이터베이스에 있는 모든 테이블에서 특정 컬럼명을 검색하는 방법을 소개합니다. 
어렴풋 스키마를 외운분들은 이 쿼리를 통해 금새 필요한 테이블을 찾을 수 있습니다. 
저도 자주 사용하는 방법입니다.

 1. 아래 SQL을 실행해보세요. 저는 임시로 만든 테이블에 GoCoder 라는 이름으로
해당 컬러명을 검색 합니다.

1
2
3
4
5
6
7
SELECT     
       t.NAME      AS table_name,
       c.NAME      AS column_name
FROM       sys.tables  AS t
INNER JOIN sys.columns AS c
ON         t.object_id = c.object_id
WHERE      c.NAME LIKE '%GoCoder%'
cs



 2. 결과는 이렇게 테이블 네임과 함께 컬럼명이 노출 됩니다. 이렇게
컬럼을 통해 테이블을 찾아낼 수 있어서 편리합니다.


 3. SQL을 분석한 분은 아시겠지만 만약에 where 만 없이 실행한다면 
1
2
3
4
5
6
SELECT     
       t.NAME      AS table_name,
       c.NAME      AS column_name
FROM       sys.tables  AS t
INNER JOIN sys.columns AS c
ON         t.object_id = c.object_id
cs


 4. 이렇게 모든 테이블을 조회 하는 쿼리로 사용이 가능합니다. 




마무리

눈으로 찾지 마세요. 손가락에 양보하세요.


댓글을 달아 주세요


DUAL 테이블에 대해 알아보자


안녕하세요.
고코더 입니다.


지난 시간에 DUAL을 이용해 테이블 없을시에 select 를 작성하는 방법을 알아봤는데요

-> Oracle에서 from(테이블) 없이 select 질의 / Dual


 1. 이 DUAL에 대해 궁금해 하는 분이 계셔서 추가로 글을 남깁니다. 오라클을 설치하면 기본 테이블이 주어집니다. 대표적인게 DEPT 인데요. DUAL은 테이블 리스트에 포함되어 있지 않습니다. 

 2. 그 이유는 바로 이 테이블은 SYS 소유이기 때문입니다. SYSTEM에서 기본으로 만들어놓은 테이블이지만
모든 사용자에게 권한을 주어서 내가 만든 테이블 처럼 조회가 가능합니다.

 3. 해당 dual 테이블을 조회 해보면 DUMMY 라는 컬럼에 X라는 단순한 데이터만 담겨 있습니다. 나는 임시테이블이라고 밝히고 있네요. 컬럼 구조도 VARCHAR2(1)입니다. 최소한의 자원으로 만들어진 임시 테이블입니다.



사용법 사례


이전 시간에 select 만으로 데이터를 조회하고 싶을때 dual을 이용한거 처럼특별한 from에 담을 게 없을때 사용하는 용도 입니다.

 4. 만약에 내장 함수를 출력하고 싶을때도 사용합니다.

1
2
SELECT SYSDATE FROM DUAL;
SELECT SYSTIMESTAMP FROM DUAL
cs


 5. 계산식을 출력해보고 싶을때도 사용이 가능합니다. (계산기 쓰면 되죠)

1
SELECT (10+10)/2 FROM DUAL;
cs


 6. 저는 강의를 주로 하니 테이블만들기전에 임시 데이터를 만들때도 사용합니다.

1
2
3
4
5
6
7
SELECT * from  (
    SELECT 'GoCoder' AS Name FROM dual
    union all
    SELECT 'Gocoder.Tistory.com' AS Blog FROM dual
    union all
    SELECT 'GoCoder.net' AS HomePage FROM dual
)
cs




DUAL이란 정리


- VARCHAR2(1)로 DUMM컬럼으로 만들어진 임시 테이블이다
- SYS소유이고 모든 사용자가 엑세스 할 수게 되어 있다
- 오라클 설치와 동시에 만들어진다.
- 이 테이블을 이용해 원하는 select 를 테이블 없이 실행 가능하다.


마무리



댓글을 달아 주세요


dual 테이블을 이용해 임의 값을 select 하세요.


안녕하세요. 
고코더 입니다. 

 1. 데이터베이스에서 select 만으로도 결과 값을 조회가 가능합니다. 저는 보통 이런 from 없는 셀렉트 쿼리는 데이터베이스 접속 테스트를 위해 사용합니다. mysql 에서 해당 sql을 질의해보면 

1
select 'gocoder.net' as gocoder;
cs



 2. mysql이나 MSSQL에서는 테이블 없이 조회 값을 만들어 낼 수 있습니다. 

 3. 하지만 오라클에서는 이러한 select만 있는 쿼리는 지원하지 않습니다.
같은 쿼리를 날릴때 오류 메세지 입니다. 
ORA-00923: FROM 키워드가 필요한 위치에 없습니다.
00923. 00000 -  "FROM keyword not found where expected"

 4. 그런 경우 from 절에 dual을 넣어주면 됩니다. dual은 오라클에서 제공하는 임시용 테스트 테이블입니다.
임시로 사용하여 원하는 임시 값을 리턴 받는 용도로 만들어놓은 테이블 입니다.

1
select 'gocoder.net' as gocoder from dual;
cs



 5. 데이터베이스내 초기 상태나 테이블이 아무것도 없는 상태에서 해당 dual 테이블을 이용하여
임의로 쿼리 조회 값을 만들어 낼 수 있습니다.



마무리


from을 생략 하지 못하게 하는게 더 도움이 될거 같네요.

댓글을 달아 주세요


MWB 파일로 데이터베이스 생성


안녕하세요.
고코더 입니다. 


MWB 파일은 모델링 파일 입니다.
MYSQL 벤치에서 모델링을 작성하고
저장하면 생기는 확장자 입니다.

이 모델링을 테이블로 import 해보겠습니다

▼ Database 에서 Foward Engineer를 선택합니다


▼ 그럼 해당 모드가 나타나고 
원하는 컨넥션을 선택하고
로그인 계정을 인증 받고 Next를 클릭 합니다. 


▼ 옵션을 선택하고 넥스트를 누릅니다.
단순한 테이믈 import 가 대부분일테니
기본 옵션을 따르시면 됩니다. 



▼ 그리고 object 옵션도 기본 옵션을 따르면 될 것입니다.
뷰, 트리거가 있다면 체크해주세요.


▼ 그럼 친절하게 SQL 이 나오고
Next를 클릭하면 mwb 에 있는 테이블이
import 가 완료 됩니다. 


▼ 이렇게 테이블이
자동으로 완성 되었습니다. 



마무리


개인 사이트 혹은
작은 기업 사이트라도
mysql 벤치 하나면 충분합니다.




댓글을 달아 주세요

  • 궁금 2019.05.13 08:38  댓글주소  수정/삭제  댓글쓰기

    필요한거 였는데 감사해여
    근데 왜 저는 디비 접근하면
    스키마 정보 검색 중 오류라고 뜹니다.
    물련 영어로 뜨고요ㅜㅜ
    문제가 뭘까요 도와주세여

    • Favicon of https://gocoder.tistory.com 고코더 2019.05.13 08:41 신고  댓글주소  수정/삭제

      모닝 코딩 중인데
      댓글 알람 듣고 바로 답장 남깁니다.
      뭔지 알거 같네요!
      제가 해당 사항에 기록해둔 노트가 있는데요. 정리해서 바로 올려 드릴게요

    • Favicon of https://gocoder.tistory.com 고코더 2019.05.13 09:04 신고  댓글주소  수정/삭제

      해당 질문
      여기에 올렸습니다^^
      참고해보세요.
      혹시 다른 문제거나
      해결 안되면 다시 답글 주세요
      https://gocoder.tistory.com/722



 database , table , column의 character set 알아보기 


안녕하세요. 고코더 입니다.

mysql 에 인코딩 캐릭터셋을 알아보는 방법을
알려드리려고 합니다.

DB입력시 인코딩에 따라 변환을 해서 입력해야 하는데
캐릭터셋이 모를 경우 

아래 쿼리를 돌려보시면 확인이 가능합니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT DEFAULT_CHARACTER_SET_NAME        
FROM INFORMATION_SCHEMA.SCHEMATA 
WHERE SCHEMA_NAME = 'DB명';
 
SELECT TABLE_COLLATION 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'DB명';
 
SELECT COLUMN_NAME, CHARACTER_SET_NAME
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = "DB명"
AND TABLE_NAME = "TABLE명"
 
cs


해당 결과 값을 본인의 DB에 실행해보시면
아래처럼 결과 값이 나옵니다.

▼ 데이터베이스 인코딩


▼ 테이블 인코딩



▼ 컬럼 인코딩




마무리

이젠 거의 UTF-8 이겠죠?


댓글을 달아 주세요