SQL 문 기능 개선 및 최적화

공식 계정 "Liubai Lingyi"에 주목하고 이해하지 못하는 기술적인 질문이 있으면 언제든지 상담할 수 있습니다!


미친 코드 http://www.crazycoder.cn/ ĵ:http:/ http://www.crazycoder.cn/DataBase/Article69022.html

1. 쿼리 결과에 열 이름을 표시합니다.   

a. as 키워드 사용: 학생의 연령 순으로 이름 'name'을 선택 b. 직접 표현: 학생의 연령 순으로 이름 'name'을 선택   

2. 정확한 검색:   

a. 범위를 제한하기 위해 사용: ('Hunan', '4chuan')에서 모국어인 학생에서 * 선택 b. 사이...및: 20세에서 30세 사이인 학생에서 * 선택 c. "=": 선택 * from Students where name = 'Li Shan' d, like:select * from Students where name like 'Li%' (쿼리 조건에 "%"가 있으면 서론에서 부분 일치임을 나타내고 그 안에 시퀀스 정보도 있습니다. 즉, 일치 시작 부분에서 ""李"를 검색하므로 쿼리에 "李"가 있으면 모든 객체는 '%李%' 명령을 내려야 합니다. 두 번째 문자가 Li이면, '_李%' 또는 '_李' 또는 '_李_'이어야 함) e. 매칭 검사기: '[AC]%'와 같은 cno가 있는 과정에서 *를 선택합니다(지시 또는 관계는 "in(.. .)" 및 ""는 다음과 같은 범위를 나타낼 수 있습니다. select * from course where cno like '[ AC]%')   

3. 시간형 변수 처리   

a, smalldatetime: 문자열 처리 방법에 따라 직접 처리, 예: 출생 > = '1980-1-1' 및 출생 <= '1980-12-31'인 학생에서 * 선택   

4. 세트   

a, 다음과 같은 카운트 합계: 학생(총 학생 수)에서 count(*) 선택 b, avg(열) 평균: cno='B2'인 성적에서 avg(mark) 선택 c, 최대(열) 및 최대값과 최소값을 찾기 위한 min(열)   

5. 그룹화 그룹   

그룹별 총 인원 확인 등 통계에서 자주 사용 : 성별 선택, 학생 그룹에서 성별(남녀 학생 수 확인)에서 카운트(sno)   

참고: 어떤 각도에서 어떤 열을 "그룹화 기준"으로 그룹화할지   

여러 그룹핑의 경우 그룹핑 규칙만 나열하면 되는데, 예를 들어 학기별, 전공별 남녀 학생 수를 조회하는 경우 그룹핑 규칙은 다음과 같습니다.

학년(학년), 전공(mno), 성별(gender)이 있으므로 "학년별, mno, 성별" 그룹에서 성적, mno, 성별, 개수(*)를 학년별, mno, 성별별로 학생 그룹에서 선택합니다.   

일반적으로 group은 have와 함께 사용됩니다. 예를 들어, 하나 이상의 과정에서 낙제한 학생을 쿼리하려면 학생 번호(sno)로 분류합니다.

select sno,count(*) from grades where mark<60 count(*)>1인 sno로 그룹화   

6. 연합   

다음과 같은 쿼리 결과 결합: SELECT * FROM Students WHERE name like 'Zhang%'   

UNION [ALL] SELECT * FROM Students WHERE name like '이%'   

7. 다중 테이블 쿼리   

a、内连接학년에서 g.sno,s.name,c.coursename 선택 g JOIN 학생들 s _disibledevent=>  

JOIN 과정 c _disibledevent=>(별칭을 인용할 수 있음)   

b. 외부 조인

b1、左连接 코스 선택.cno,max(코스 이름),카운트(sno) 코스에서 LEFT JOIN 성적 _disibledevent=> 코스별로 그룹화.cno   

왼쪽 조인 기능: 데이터의 일부 항목이 완전히 채워지지 않은 경우에도 왼쪽 테이블의 모든 항목 표시, 왼쪽 외부 조인은 왼쪽 테이블에 있는 항목을 반환하지만 오른쪽 테이블에는 내부 조인 행이 없는 행이 없습니다.   

b2, 오른쪽 조인 및 왼쪽 조인은 b3와 유사합니다. 전체 조인 학생의 sno, 이름, 전공 선택 FULL JOIN 전공 _disibledevent=>양쪽 테이블의 모든 내용 표시   

c.자체 연결 과정에서 c1.cno, c1.coursename, c1.pno, c2.coursename 선택

c1.courses c2.where c1.pno=c2.cno는 별칭을 사용하여 문제를 해결합니다.   

d. 성에서 성+이름을 선택하는 교차 연결 CROSS JOIN 이름은 데카르트 곱을 수행하는 것과 같습니다.

8. 중첩 쿼리   

a. 키워드 IN 사용, 예를 들어 Li Shan 동포 쿼리: 출신인 학생 중에서 * 선택(이름='리샨'인 학생에게서 출신 선택) b. EXIST 키워드 사용, 예를 들어 다음 두 문장은 다음과 같습니다. 등가: sno가 있는 학생에서 * 선택(cno='B2'인 성적에서 sno 선택) 존재하는 학생에서 * 선택(grades.sno=students.sno AND cno='B2'인 성적에서 * 선택)   

9. 정렬 순서에 대해

a. 정렬 순서는 asc 오름차순과 desc 내림차순 두 가지가 있습니다. b. 정렬 순서는 쿼리 조건의 특정 항목에 따라 정렬할 수 있으며 이 항목은 다음과 같은 숫자로 나타낼 수 있습니다. sno, count(*), avg(mark)는 avg(mark) > 85인 sno에 의해 등급 그룹에서 3 순서로   

10. 기타

a. 공백이 있는 식별 이름의 경우 ""로 묶어야 합니다. b. 열에 데이터가 없는 특정 쿼리의 경우 null을 사용하여 판단할 수 있습니다. any를 사용하는 것과 중첩 쿼리에서 사용하는 것의 차이점은 all은 논리 연산 "||"에 해당하고 all은 논리 연산 "&&"에 해당한다는 것입니다. d. 부정적인 의미 쿼리를 수행할 때 트랩에 들어가도록 주의하십시오.   

'B2' 과정을 수강하지 않은 학생의 경우: 학생 중에서 학생.* 선택, 여기서 grades.sno=grades.sno AND grades.cno <> 'B2'   

위의 쿼리 방법은 정확합니다. 아래를 참조하십시오. 존재하지 않는 학생에서 * 선택(select * from grades.sno=students.sno AND cno='B2')   

11. 어려운 다중 중첩 쿼리를 해결하기 위한 아이디어:   

모든 과정을 이수한 학생의 경우: 존재하지 않는 학생 중에서 *를 선택하십시오(존재하지 않는 과정에서 *를 선택하십시오

(sno=students.sno AND cno=courses.cno인 성적에서 * 선택)

추천

출처blog.csdn.net/lghtdw1314/article/details/123636757