안녕하세요. 눈팅만하다가 처음으로 올려봅니다.
mssql에 익숙하지 않은데 개발하다보니깐 몇가지 궁금한게 생겼습니다.
자바에서 mssql 커넥션을 얻어서 쿼리 사용 시 테이블명 기술하잖아요?
테이블명이 abc라고 가정하면 보통은 그냥 select * from abc 이렇게 사용 하는데
mssql에서는 간혹 dbo.abc 이렇게 사용하는 경우도있고 데이터베이스명 까지 기술해서
db명.dbo.abc 이렇게도 쓰는 것 같은데요.
이 개념좀 알려주시면 감사하겠습니다.
여러 mssql 서버에 접속해서 작업하는데 어떤 db는 그냥 테이블명만 써도 되는데 어떤데는 안되고 그러네요...
자바에서 보통 개발할 때 어떻게 하시는지도 알려주시면 좋겠습니다 (무조건 db명.dbo.abc 이렇게 풀네임쓰는지)
아니면 해당 계정(커넥션 받아올 때의 mssql 계정)의 기본 db가 지정되어있을 경우 db명을 생략할 수 있는건지요...
질문 정리하자면
1. 테이블명 기술할 때 쓰는 db명.dbo.테이블명 이 개념 설명
2. 자바에서 개발할 때 주로 사용하는 방식 (무조건 db명.dbo.abc 이렇게 풀네임쓰는지, 계정 설정마다 다르게 쓰는지)
3. db명.dbo 를 생략하고 테이블명을 기술해서 사용할 수 있는 조건
4. 한가지 더 [db명].[dbo].[테이블명] 이렇게도 쓰는데 대괄호 쓰는건 어떤 차이가 있는지
질문이 너무 많아서 죄송합니다^^
아는부분만 답변해주셔도 감사하겠습니다.
Comment 3
-
군고구마
2013.12.06 09:44
-
sams
2013.12.06 12:53
친절한 답변 감사합니다^^
-
catchv
2013.12.09 10:19
SQL Server 인스턴스에는 여러개의 DB가 존재 할 수 있습니다.
그래서 보통 커넥션 스트링을 만들때 보면 Database를 명시해야 합니다.
"jdbc:~~~:sqlserver://IP:port/DB명;"
이렇게 접속된 커넥션은 설정된 DB가 기본 DB가 됩니다.
SELECT * FROM [테이블명] = SELECT * FROM [DB명].[스키마].[테이블명]
이 커넥션에서 다른 DB를 명시적으로 접속하고자 한다면
SELECT * FROM [다른DB명].[스키마].[테이블명]
같이 쿼리를 던지시면 됩니다. 물론 권한은 있어야 합니다.
제가 아는 대로 설명하면 이렇습니다. (물론 인터넷을 참조하시면 좋습니다.)
1. 테이블명 기술할 때 쓰는 db명.dbo.테이블명 이 개념 설명
- 이것은 소유자를 뜻합니다. dbo.는 mssql의 기본적인 소유자를 뜻하며 테이블을 만들거나 프로시저를 만들때 특 정 소유 자를 지정하지 않으면 dbo.의 소유가 됩니다.
2. 자바에서 개발할 때 주로 사용하는 방식 (무조건 db명.dbo.abc 이렇게 풀네임쓰는지, 계정 설정마다 다르게 쓰는지)
- 제가 자바는 모르는데요.
mssql 에서는 보통은 dbo.를 쓰지 않아도 인식합니다. 하지만 제가 아는 바로 dbo.를 기입하면 약간의 성능 향상 에 도움이 된 다고 합니다. / dbo.라는 소유자를 명시했으니 그 dbo.가 가진 곳에서만 뒤질수 있으므로 성능이 향상 된다는 이점이 있다 고 합니다.
3. db명.dbo 를 생략하고 테이블명을 기술해서 사용할 수 있는 조건
- 이것은 같은 DB에서 테이블을 select할 경우 가능합니다. db명.dbo를 사용하는 이유는 DB명까지 명시하면 다른 디비의 테이블을 select할때도 인식하기 때문입니다. 결국 모든 테이블이 한 DB안에 있으면 DB명까지 쓰실 필요는 없습니다.
4. 한가지 더 [db명].[dbo].[테이블명] 이렇게도 쓰는데 대괄호 쓰는건 어떤 차이가 있는지
- 아마 그것은 데이터베이스에서 테이블을 선택하고 오른쪽 버튼을 클릭하고 테이블 스크립팅>CREATE>새 쿼리 편집기 창을 선택했을떄 나타는 것 일 겁니다. 그럼 자동으로 []가 붙습니다.
이는 테이블이 간혹 한글,숫자로 만드는 경우가 있는데 이 경우 테이블을 인식하지 못합니다. (직접 해보시길 ^^)
[]는 문자로 인식하도록 해주는 역활을 합니다.
만약에 그것이 아니고 정상적인 영문으로 만들 테이블이라던가 할 경우 없어도 상관 없습니다.
인터넷에서 제가 쓴 글을 참고로 한번 찾아보시는게 좋을 듯 합니다.
저도 예전에 공부한 내용을 상기 하는 정도밖에 안되서요.^^