2009-10-02 3 views
2

SELECT 문의 일부 열 제외

SELECT * from myTable WHERE some-condition;

의 결과에서 나는 존재하는 모든 10 개의 열 중 9 개에 관심이 있습니다. 유일한 방법은 명시 적으로 9 개의 열을 지정하는 것입니다.

내가보기 싫은 열을 어떻게 든 지정할 수는 없습니까?

+13

항상 선택 목록과 열 목록을 지정하는 것이 좋습니다. – Joe

+0

주어진 테이블에 대한 많은 정보 (열, 데이터 형식 등)를 나열하는 저장 프로 시저를 만드는 것이 좋습니다. 그러면 관리 스튜디오에서이 도구를 실행하고 열 이름을 빠르게 잘라내어 그 안에 지나칠 수 있습니다 질문. 그것들을 입력 할 필요가 없습니다. 저는 sp_help (소스 코드를 볼 수 있습니다)를 기반으로 빌드하고 몇 가지를 추가하고 필요에 맞게 서식을 변경했습니다. –

+0

열 이름을 추가하는 것이 얼마나 힘듭니다. SQL 서버에서 객체 브라우저에서 끌어서 놓기 만하면 다른 데이터베이스와 비슷한 기능을 제공합니다. – HLGEM

답변

11

유일한 9 가지 열을 모두 나열하는 것입니다.

같은 :

SELECT col1, col2, col3, col4, col5, col6, col7, col8, col9 FROM myTable 
0

아니요, (적어도 내가 알고있는 SQL 방언에는 없습니다).

SELECT *을 사용하는 대신 명시 적으로 열 이름을 지정하는 것이 좋습니다.

3

아니, 당신은 할 수 없습니다. Sybase의 선택 목록 정의 예제는 found here 일 수 있습니다. 다른 DB를 쉽게 찾을 수 있습니다.

그 이유는 표준 선택 방법 인 "*"(일명 모든 열)과 열 목록 - defined operations in relational Algebra입니다. 반면 열 제외는

입니다. Joe의 의견에서 언급했듯이 모든 열을 선택하는 경우에도 "*"와 반대되는 열 목록을 명시 적으로 지정하는 것이 좋습니다.

그 이유는 조인 된 쿼리에서 *를 사용하면 테이블 스키마 변경으로 인해 조인 된 테이블에서 동일한 이름의 필드가 도입 될 경우 쿼리가 중단 될 수 있기 때문입니다.

그러나 매우 넓고 자주 변경되는 테이블에서 조인하지 않고 선택하면 위의 규칙이 적용되지 않을 수 있습니다. "*"는 올바른 변경 관리를위한 것입니다 (쿼리는 수정 및 릴리스 할 곳이 적습니다. 새로운 열을 추가 할 때) 특히 코드에 지정된 것 대신 테이블 정의에서 열 집합을 동적으로 처리 할 수있는 유연한 DB 검색 코드가있는 경우에 유용합니다. (예 : 새로운 컬럼이 DB에 추가 될 때마다 추출기 및 로더의 100 %가 완전히 작동 함).

+0

+1 Sybase : –

+0

또한 조인에서 적어도 하나의 필드가 선택 목록에 두 번 (조인 필드) 있음을 지적합니다. 전송하는 모든 정보는 네트워크 파이프 라인의 공간을 차지하고 쿼리에 시간을 추가하므로 중복 정보를 모범 사례로 보내지 않습니다. – HLGEM

2

(이유를 생각할 수는 없지만)이 테이블의 열을 쿼리하고 where 절에서 하나의 열 이름을 제외하면이 select 문을 동적으로 만들 수 있습니다.

퍼포먼스 히트, 혼란 및 유지 보수 문제가 발생할 소지가 없습니다.

1

당신은 실제로 (눅 말했다대로 좋은 방법입니다) 명시 적으로 열을 지정해야하고, 여기에 이유 :

이의 당신이 당신의 주위에 SQL 쿼리를 몇 가지 코드/스크립트를 작성한다고 가정 해 봅시다은. 이제 코드의 여러 위치에서 50 개의 다른 선택 항목을 사용할 수 있습니다.

갑자기 당신이 작업하고있는이 새로운 기능에 대해 또 다른 열 (대칭, 청소를하고 컬럼이 쓸데없고 공간을 낭비한다는 사실을 깨닫는다는 것을 알게됩니다.

이제이 두 상황 중 하나에 있습니다

  • 당신은 명시 적으로 각각의 열을 언급 한 모든 쿼리 : 열을 추가하는 것은, 당신의 새로운 기능을 코딩과 함께 할 이전 버전과 호환 변화 .
  • 몇 가지 쿼리에 '*'연산자를 사용했습니다. 아래로 추적하여 모두 수정해야합니다. 하나 하나 잊어 버리면 그것은 당신의 무덤이 될 것입니다.

아, 그리고는 DB 실제로 모델을 조회하고 ''선택을 개발해야하기 때문에 ''선택과 쿼리를 실행하는 데 시간이 더 소요 지정 했습니까?

도덕 : 열이 잘 (실제로는 모든 것을 확인해야하는) 코드를 수동으로 확인하는 경우에만 '*'선택기를 사용하고, 코드에서는 그만한 값을 지정하면됩니다.

+0

select *를 사용하면 사용자가 데이터베이스에 추가 할 때 표시하지 않으려는 열을 표시 할 수도 있습니다. 사용자가 보고서의 레코드를 누가 마지막으로 업데이트했는지 확인 하시겠습니까? 사용자에게 복제에 사용 된 GUID를 표시 하시겠습니까? – HLGEM

+1

사실 그것은 데이터 노출에 관한 또 다른 요점입니다. 종종 'id'를 선택하지만 표시되지는 않습니다. 그래서 당신은 종종 당신이 어쨌든 검색보다 훨씬 적게 표시합니다. –

0

결국 10 개 열 중 9 개를 개별적으로 지정해야합니다. 그러나이 작업을 쉽게 도와주는 툴링 도움말이 있습니다.

SQL Server Management Studio 및 Visual Studio의 Intellisense-Add-on 인 Red-Gate의 SQL Prompt을 확인하십시오. 다른 많은 것들의 사이에

는, 당신이

SELECT * FROM MyTable 

를 입력 한 다음 다시 이동하여 "*"다음에 커서를 놓고, TAB을 눌러 할 수 있습니다 - 그 다음에 모든 열을 나열합니다 그 테이블과 당신은 그 목록을 조정할 수 있습니다 (예 : 필요하지 않은 몇 가지 제거).

절대적으로 귀중한 - 시간을 단축하고 시간을 절약 할 수 있습니다! 면허의 가격 가치가 있다고 나는 말할 것입니다.

강력 추천!

마크

+0

SSMS에 대한 추가 기능이 필요하지 않습니다. 원하는 테이블을 마우스 오른쪽 단추로 클릭하고, 표를 스크립트로> SELECT> 새 쿼리 편집기 창. 원하는대로 열을 변경하십시오. –

+0

PLSQL 개발자는 비슷한 기본 기능을 제공합니다. –

+0

@rexem : 꽤 많은 작업이 필요합니다. 그것은 효과적이지 않습니다. –

관련 문제