SqlServer 폼 조회 문제 및 해결 방법

Q1:표 Student Scores 는 다음 과 같 습 니 다.각 과목 이 80 점 이상 인 학생 의 이름 을 SQL 구문 으로 조회 합 니 다.

Q2:표 DEMODELTE 는 다음 과 같이 자동 번호 가 다른 것 을 제외 하고 모두 같은 학생 의 불필요 한 정 보 를 삭제 합 니 다.

Q3:Team 표 는 다음 과 같 습 니 다.갑 을 병 정 은 4 개 팀 입 니 다.현재 4 개의 공 으로 경 기 를 진행 하고 있 습 니 다.하나의 sql 문 구 를 사용 하여 가능 한 모든 경기 조합 을 표시 합 니 다.

Q4:Microsoft SQL Server 엔진 에서 의 논리 적 처리 순 서 를 고려 하 십시오.

USE TSQLFundamentals2008

SELECT empid,YEAR(orderdate) AS orderyear,COUNT(*) numorders
FROM Sales.Orders
WHERE custid=71
GROUP BY empid,YEAR(orderdate)
HAVING COUNT(*)>1
ORDER BY empid,orderyear
이 글 은 일반 조회 과정 에서 다 루 는 처리 논리 자 구 를 분석 하 는데 주로 FROM,WHERE,GROUP BY,HAVING,SELECT,ORDER BY,TOP,OVER 등 자 구 를 포함한다.
2 SELECT 문장의 요소
2.1 일반적인 검색 자구 와 논리 처리 순서
데이터 시트 를 검색 할 때 검색 문 구 는 일반적으로 FROM,WHERE,GROUP BY,HAVING,SELECT,ORDER BY,TOP,OVER 등 자 구 를 포함 하 므 로 다음 과 같은 사례 의 논리 적 처리 순 서 를 고려 하 십시오.

USE TSQLFundamentals2008

SELECT empid,YEAR(orderdate) AS orderyear,COUNT(*) numorders
FROM Sales.Orders
WHERE custid=71
GROUP BY empid,YEAR(orderdate)
HAVING COUNT(*)>1
ORDER BY empid,orderyear
위의 코드 와 같이 SQL 에서 논리 적 처리 순 서 는 다음 과 같 습 니 다.

USE TSQLFundamentals2008

FROM Sales.Orders
WHERE custid=71
GROUP BY empid,YEAR(orderdate)
HAVING COUNT(*)>1
SELECT empid,YEAR(orderdate) AS orderyear,COUNT(*) numorders
ORDER BY empid,orderyear
논리 처리 순 서 는 다음 과 같이 요약 할 수 있다.

설명:
a.일반적인 프로 그래 밍 언어,예 를 들 어 c+,자바,c\#등 프로그램 은'위 에서 아래로'의 순서에 따라 한 걸음 한 걸음 실 행 됩 니 다.그러나 SQL 에서 SELECT 문구 가 있 는 위 치 는 처음에 있 었 지만 가장 먼저 실 행 된 것 이 아 닙 니 다.
b.논리 처리 순서의 모든 단계 가 되 돌아 오 는 결과 집합 은 이 단계 문장의 다음 단계 에 이 어 실 행 될 결과 집합 입 니 다.
c.FROM 은 데이터 원본(또는 데이터 시트)을 가 져 옵 니 다.WHERE 는 FROM 을 바탕 으로 조건 을 걸 러 냅 니 다.GROUP BY 는 WHERE 를 바탕 으로 최소 한 열 로 집합 을 나 눕 니 다.HAVING 은 GROUP BY 를 바탕 으로 이미 조 를 나 눈 집합 을 걸 러 냅 니 다.SELECT 문 구 는 HAVING 을 바탕 으로 검색 하고 ORDER BY 는 SELECT 를 바탕 으로 일정한 조건 에 따라 순 위 를 매 깁 니 다.
2.2 부분 조회 자구 설명
2.2.1 에서 자구
a.데이터베이스 구조 로 한정 코드 에 있 는 대상 이름 을 사용 하면 데이터베이스 구조 로 한정 하지 않 아 도 Sql Server 는 암시 적 으로 해석 하고 대가 가 더욱 높 습 니 다.처음에 대상 이름 이 같 고 구조 제한 이 없 으 면 잘못된 의미 가 생 길 수 있 습 니 다.
b.FROM*성능 비 FROM conumname 성능 이 낮 음;
c.FROM 에서 조회 한 결과 집합 순 서 는 무 작위 입 니 다.
2.2.2 WHERE 자구
a.FROM 단계 에서 돌아 오 는 줄 필터 하기;
b.WHERE 술어 나 논리 표현 식;
c.WHERE 자 구 는 검색 성능 에 중요 한 영향 을 미 칩 니 다.필터 표현 식 을 바탕 으로 Sql Server 는 요청 한 데 이 터 를 어떤 색인 으로 접근 하 는 지 계산 합 니 다.
d.전체 표를 스 캔 하고 가능 한 모든 줄 을 되 돌려 줍 니 다.클 라 이언 트 에서 걸 러 내 면 비용 이 비교적 많 습 니 다.예 를 들 어 대량의 네트워크 전송 트 래 픽 이 발생 할 경우.
e.T-SQL 은 3 치 술어 논리(true,false,unknown)를 사용 합 니 다.
2.2.3 자구 에 의 한 그룹
a.GROUP BY 단 계 는 이전 단계 의 논리 적 조회 처 리 를 되 돌려 주 는 줄 을'그룹'으로 조합 합 니 다.각 그룹 은 GROUP BY 자구 에서 지정 한 요소 에 의 해 결 정 됩 니 다.
b.검색 어 에 그룹 이 포함 되 어 있 으 면 GROUP BY 단계 이후 모든 단계(HAVING,SELECT,ORDER BY 포함)의 작업 대상 은 그룹 이지 단독 줄 이 아 닙 니 다.각 그룹 은 최종 적 으로 조회 결과 가 집 중 된 줄 로 표시 합 니 다.
c.GROUP BY 단계 이후 처 리 된 자구 에서 지정 한 모든 표현 식 은 각 그룹 에 하나의 스칼라(단일 값)만 되 돌려 줄 것 을 보증 합 니 다.GROUP BY 목록 의 요 소 를 기반 으로 한 표현 식 은 이 요 구 를 충족 시 킵 니 다.정의 에 따라 각 그룹 에서 GROUP BY 요 소 는 한 번 만 나타 나 기 때 문 입 니 다.
d.취 합 함 수 는 각 그룹 에 하나의 값 만 되 돌려 주기 때문에 하나의 요소 가 GROUP BY 목록 에 나타 나 지 않 으 면 취 합 함수(COUNT,SUM,AVG,MIN,MAX)로 만 입력 할 수 있 습 니 다.(메모:GROUP BY 자구 가 있 으 면 취 합 함 수 는 모든 그룹 이 아 닌 구체 적 인 각 그룹 만 작 동 합 니 다).
e.모든 취 합 함 수 는 NULL 을 무시 하지만 COUNT(*)는 제외 합 니 다.
f.취 합 함수 에서 inct 를 사용 하여 비 중복 수 를 처리 할 수 있 습 니 다.예 를 들 어 count(distinct vary);
2.2.4 HAVING 자구
a.HAVING 자 구 는 그룹 에 걸 러 낼 서술 어 나 논리 표현 식 을 지정 하 는 데 사 용 됩 니 다.이것 은 WHERE 단계 에서 단독 줄 을 걸 러 내 는 것 과 대응 합 니 다.
b.HAVING 자 구 는 줄 을 묶 어서 처리 하기 때문에 HAVING COUNT(*)>1 과 같은 취 합 함 수 를 논리 적 표현 식 에서 참조 할 수 있 습 니 다.HAVING 단계 필 터 는 여러 줄 을 포함 하 는 그룹 만 유지 한 다 는 뜻 입 니 다.
2.2.5 SELECT 자구
a.SELECT 자 구 는 검색 결과 에 집중 적 으로 포 함 될 속성(열)을 지정 하 는 데 사 용 됩 니 다.
b.SELECT 자구 반환 열의 이름 형식:
검색 중인 표 의 각 열 세 가지 방식 으로 별명 을 직접 정의 합 니 다.AS 를 추천 합 니 다.<표현 식>AS<별명>;<별명>=<표현 식>(별명 등호 식);<표현 식><별명>(표현 식 빈 칸 별명)이름 없 는 열
c.관계 모델 에서 모든 조작 과 관 계 는 관계 대수 와 관계(집합)의 결 과 를 바탕 으로 하지만 SQL 에 서 는 상황 이 약간 다 릅 니 다.SELECT 조회 로 인해 진정한 집합(즉,유일한 줄 로 구 성 된 무질서 집합)으로 돌아 갈 수 없습니다.우선,SQL 은 표를 구하 지 말고 집합 조건 에 부합 해 야 합 니 다.SQL 표 는 키 가 없 을 수도 있 고 줄 이 유일 하지 않 을 수도 있 습 니 다.이런 상황 에서 표 는 집합 이 아니 라 다 중 집합(multiset)이나 가방(bag)입 니 다.그러나 조회 중인 표 가 메 인 키 를 가지 고 있 더 라 도 집합 조건 에 부합 되 며,이 표 에 대한 SELECT 조 회 는 중복 되 는 결 과 를 포함 할 수 있 습 니 다.SELECT 조회 의 출력 을 설명 할 때 결과 집합 을 자주 사용 합 니 다.그러나 결과 집합 은 반드시 수학 적 의미 에서 의 집합 조건 을 엄 격 히 만족 시 켜 야 하 는 것 은 아 닙 니 다.
d.DISTINCT 는 줄 의 유일 성 을 확보 하고 중복 되 는 줄 을 삭제 합 니 다.
e.SELECT*형식 으로 모든 열 을 조회 하지 않 고 가능 한 한 열거 합 니 다.
2.2.6 ORDER BY
a.SQL 을 이해 하 는 가장 중요 한 것 은 표 가 질서 가 없다 는 것 을 알 아야 한 다 는 것 이다.표 는 하나의 집합(중복 항목 이 있 으 면 다 중 집합)을 대표 하기 위해 서 이 고 집합 은 무질서 하기 때문이다.이 는 검색 표 에 ORDER BY 자 구 를 지정 하지 않 으 면 검색 은 결과 표를 되 돌려 줄 수 있 지만 SQL Server 는 결과 장의 줄 을 자 유 롭 게 순서대로 정렬 할 수 있다 는 뜻 이다.
b.ORDRTB BY 에서 ASC 는 오름차 순 을 나타 내 고 DESC 는 내림차 순 을 나타 내 며 기본 적 인 상황 은 오름차 순 입 니 다.
c.ORDER BY 자구 가 있 는 조 회 는 ANSI 를 커서(cursor)라 고 부 르 는 결 과 를 생 성 합 니 다.SQL 의 일부 언어 요소 와 연산 은 조회 한 표 결과 만 처리 할 것 으로 예상 되 며,표 표현 식 과 집합 연산 등 커서 를 처리 할 수 없습니다.
3 문제
Q1:KEY

--  1
select distinct studentName 
from StudentScores
where studentName not in 
(
select distinct studentName 
from StudentScores 
where courseGrades<=80
)

--  2
select studentName 
from StudentScores 
group by studentName 
having min(courseGrades)>80
Q2:KEY

 DELETE DEMO_DELTE
 WHERE ID 
 NOT IN(
 SELECT min(ID) 
 FROM DEMO_DELTE_2 
GROUP BY xuehao,XM,kcbh,kcmc,fs)
Q3:KEY

SELECT team1.TeamName,team2.TeamName
 FROM Team team1,Team team2
 WHERE team1.TeamName<team2.TeamName
Q4:KEY
제2 장 분석 참조.
참고 문헌
【01】Microsoft SqlServer 2008 기술 내막:T-SQL 언어 기초
[02]Microsoft SqlServer 2008 기술 내막:T-SQL 조회
[03]프로그래머 의 SQL 고전
PS:코드 를 공유 해 드 리 겠 습 니 다.

sqlserver            

//      select name from sysobjects where xtype='u'
select * from sys.tables//              
SELECT a.name, b.rows
FROM sysobjects AS a INNER JOIN sysindexes AS b ON a.id = b.id
WHERE (a.type = 'u') AND (b.indid IN (0, 1))
ORDER BY a.name,b.rows DESC
//             \  
select
object_name(id) tablename,
8*reserved/1024 reserved,
rtrim(8*dpages)+'kb' used,
8*(reserved-dpages)/1024 unused,
8*dpages/1024-rows/1024*minlen/1024 free,
rows
--,*
from sysindexes
where indid=1
order by tablename,reserved desc
총결산
위 에서 말 한 것 은 편집장 이 여러분 에 게 소개 한 SqlServer 폼 조회 문제 와 해결 방법 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.편집장 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!

좋은 웹페이지 즐겨찾기