중화사전망 - 서예자전 - Mysql 쿼리 테이블이 너무 많은 문제를 해결하는 방법
Mysql 쿼리 테이블이 너무 많은 문제를 해결하는 방법
표 1, 표 2 ... 에서 필드 이름을 선택합니다. 여기서 표 1 입니다. 필드 = 표 2. 필드 및 기타 조회 조건.
SELECT a.id, a.name, a.address, a.date, b.math, b.english, b.chinese from TB _ date
참고: 위 코드에서 두 테이블 간의 연관은 두 테이블의 id 필드 정보가 동일한 조건으로 설정되지만 실제 개발에는 사용해서는 안 되며 기본 키와 외래 키 제약 조건을 사용하는 것이 좋습니다.
둘째, 테이블의 별칭을 사용하여 여러 테이블을 쿼리합니다.
예: TB _ demo065a, TB _ demo065 _ tel b 에서 a.id, a.name, a.address, b.math, b.engle 을 선택합니다
첫 번째는 키워드로 지정됩니다. 예를 들면 다음과 같습니다
Tb_demo065 에서 a.id, a.name, a.address, b.math, b.english, b.chinese 를 a, TB _ dese 로 선택합니다
두 번째 방법은 테이블 이름 바로 뒤에 테이블의 별칭을 추가하는 것입니다.
Tb_demo065 a, tb_demo065_tel b 에서 a.id, a.name, a.address, b.math, b.english 를 선택합니다
테이블 별칭을 사용할 때 주의해야 할 몇 가지 사항이 있습니다.
(1) 별칭은 일반적으로 연결에서 테이블의 특정 열을 참조하는 데 사용되는 단축 테이블 이름입니다. 한 연결에 여러 테이블에 같은 이름의 열이 있는 경우 열 이름은 테이블 이름 또는 테이블의 별칭으로 한정되어야 합니다.
(2) 테이블의 별칭을 정의한 경우 테이블 이름을 더 이상 사용할 수 없습니다.
세 개의 결과 세트 결합
SQL 언어에서 여러 SELECT 문의 쿼리 결과는 UNION 또는 ALL 을 통해 출력될 수 있습니다. 이 두 키워드는 다음과 같이 사용됩니다.
UNION: 이 키워드를 사용하여 여러 SELECT 문의 질의 결과를 통합하고 중복 행을 삭제할 수 있습니다.
ALL: 이 키워드를 사용하여 여러 SELECT 문의 질의 결과를 병합하지만 중복 행은 삭제하지 않습니다.
UNION 또는 ALL 키워드를 사용하여 여러 테이블을 병합하는 경우 쿼리 결과의 구조가 같아야 하며 데이터 유형이 호환되어야 합니다. 또한 UNION 을 사용할 경우 두 테이블의 필드 수가 같아야 합니다. 그렇지 않으면 SQL 문에 오류가 표시됩니다.
E.x:SELECT id, name, pwd from TB _ demo067 union select uid, price, date FROM tb_demo067_tel
네 개의 간단한 중첩 쿼리
하위 질의: 하위 질의는 SELECT, INSERT, UPDATE 및 DELETE 문이나 다른 질의 문 내에 중첩된 단일 값을 반환하는 선택 질의입니다. 하위 조회는 표현식을 사용할 수 있는 모든 곳에서 사용할 수 있습니다.
SELECT id, name, sex, date from TB _ demo068where id in (select id from TB _ demo068where id =' $ _ post [to
내부 연결: 질의 결과를 WHERE 절로 사용하는 질의 조건을 내부 연결이라고 합니다.
5 개의 복잡한 중첩 쿼리
여러 테이블 간의 중첩된 쿼리는 다음과 같은 구문 형식으로 IN 의 술어를 통해 구현할 수 있습니다.
{의 test_expression[NOT]
하위 쿼리
}
매개변수 설명: test_expression 은 결과 집합의 하위 질의를 포함하는 SQL 표현식을 참조합니다.
다중 테이블 중첩 질의의 원칙: 중첩된 테이블 수에 관계없이 테이블과 테이블 간에 관계가 있어야 하며 WHERE 절을 통해 이러한 관계를 설정하여 질의를 구현합니다.
쿼리 통계에 6 가지 중첩 쿼리 적용
다중 테이블 쿼리를 구현할 때 ANY, SOME 및 ALL 술어를 동시에 사용할 수 있습니다. 이러한 술어는 정량 비교 술어라고 하며 비교 연산자와 함께 사용하여 모든 반환 값이 검색 조건을 충족하는지 여부를 확인할 수 있습니다. 일부 및 모든 술어는 검색 기준과 일치하는 반환 값이 있는지 여부에만 초점을 맞추고 있습니다. 이 두 술어는 의미가 동일하여 서로 바꿔서 사용할 수 있다. 모든 술어는 범술어라고 하며 검색 요구 사항을 충족하는 술어가 있는지 여부에만 관심이 있습니다.
Select * from TB _ demo069 _ people where uid in (select dept id from TB _ demo069 _ dept where dept name =' $ _;
Tb_demo067 에서 whereid & lt3) >; ANY 는 하위 쿼리의 값보다 큽니다.
& gt=ANY 는 하위 쿼리의 값보다 크거나 같습니다.
& lt=ANY 는 하위 쿼리의 값보다 작거나 같습니다.
=ANY 는 하위 쿼리의 값과 같습니다.
! = 임의 또는
& gtALL 은 하위 쿼리의 모든 값보다 큽니다.
& gt=ALL 은 하위 쿼리의 모든 값보다 크거나 같습니다.
& lt=ALL 은 하위 쿼리의 모든 값보다 작거나 같습니다.
=ALL 하위 쿼리의 모든 값과 같습니다.
! = 모두 또는
일곱. 하위 쿼리에서 파생된 테이블입니다
실제 프로젝트 개발 과정에서 비교적 완전한 정보 테이블에서 몇 개의 키 필드만 있는 정보 테이블을 내보내는 경우가 많습니다. 이 작업은 하위 쿼리를 통해 수행할 수 있습니다. 예를 들면 다음과 같습니다.
People.name, people.chinese, people.math, people.english FROM (SELECT name, Chinese, math,) 을 선택합니다
주의: 하위 질의는 다음 규칙을 따라야 합니다.
(1) 비교 연산자에 의해 도입된 내부 하위 질의에는 하나의 표현식이나 열 이름만 포함되어 있으며 외부 문의 WHERE 절에 명명된 열은 내부 하위 질의로 명명된 열과 호환되어야 합니다.
(2) 변경되지 않는 비교 연산자 (비교 연산자 뒤에 키워드 ANY 또는 ALL 이 없음) 에 의해 도입된 하위 쿼리에는 그룹 또는 개별 값이 미리 식별되지 않는 한 GROUP BY 또는 HAVING 절이 포함되지 않습니다.
EXISTS 에 도입된 선택 리스트는 일반적으로 * 로 구성되며 열 이름을 지정할 필요가 없습니다.
(4) 하위 쿼리는 내부적으로 결과를 처리 할 수 없습니다.
하위 조회를 표현식으로 사용합니다.
선택 (tb_demo07 1 AVG 선택 (중국어), (tb_demo07 1 AVG 선택 (영어), (TB 에서)
주의: 하위 질의를 사용할 때 목록 항목에 개별적으로 이름을 지정하는 것이 좋습니다. 이렇게 하면 mysql_fetch_array () 함수를 사용할 때 다음과 같은 목록 항목에 값을 쉽게 지정할 수 있습니다
우웬으로 선택 (tb_demo07 1 에서 AVG (중국어) 선택), (tb_demo07 1 에서 AVG (영어) 선택)
하위 조회를 사용하여 데이터 결합
Select * from TB _ demo072 _ studentwhere id = (select id from TB _ demo072 _ class where class name =' $ _ PPS
10 개 이상의 테이블에 대한 공동 쿼리
SQL 문의 UNION 은 동일한 열의 다른 테이블에 적합한 데이터 정보를 표시할 수 있습니다.
E. x:SELECT * FROM TB _ demo 074 _ 학생회 SELECT * FROM tb_demo074_fasten
참고: UNION 을 사용할 때 다음 두 가지 사항에 유의하십시오.
(1) UNION 연산자를 사용하여 결합된 문에서는 열 이름, 산술 표현식 및 합산 함수와 같은 모든 선택 목록의 표현식 수가 같아야 합니다.
(2) 각 조회 테이블에서 해당 열의 데이터 구조가 같아야 합니다.
1 1. 조합 결과를 정렬합니다.
UNION 의 연산 호환성을 위해 모든 SELECT 문에는 ORDER BY 문이 필요하지 않습니다. 단, 마지막 SELECT 문에 ORDER BY 절을 배치하여 결과의 최종 정렬 출력을 달성하는 경우는 예외입니다.
E. x:SELECT * FROM TB _ demo 074 _ 학생회 select * fromtb _ demo074 _ faste order byid
UNION 을 사용하는 조건은 비교적 까다롭기 때문에 이 문을 사용할 때 두 테이블의 항목 수와 필드 유형이 같은지 확인해야 합니다.
12 조건 공동 성명
Select * fromtb _ demo076 _ Beijing group by name having name =' 인민우편출판사' 또는 name =' 기계공업출판사' union select * fromtb
위 문은 GROUP BY grouping 문과 HAVING 문을 적용하여 조건부 통합 쿼리를 구현합니다. 그 실현의 목적은' 인민우편출판사' 와' 기계공업출판사' 가 항상 상위권에 올랐다가 다른 출판사로 출력되도록 보장하는 것이다.
13 개의 간단한 내부 연결 쿼리
Select filed list from table1[inner] join table 2 on table1.column1=;
여기서 filedlist 는 표시할 필드이고 INNER 는 테이블과 테이블 간의 연결 방식이 내부 연결 (Table 1) 임을 나타냅니다. 열 1 = 표 2. Column 1 두 테이블 간의 연결 조건을 나타내는 데 사용됩니다. 예를 들면 다음과 같습니다.
Tb_demo065 에서 내부 조인 TB _ demish 로 a.name, a.address, a.date, b.chinese, b.math, b.english 를 선택합니다
복잡한 내부 연결 쿼리
복잡한 내부 연결 쿼리는 다음과 같은 몇 가지 쿼리 조건이 있는 기본 내부 연결 쿼리를 기반으로 합니다.
SELECT a.name, a.address, a.date, b.chinese, b.math, B.english FROM tb_demo065 내부 조인으로 TB _ demo065 _ tel as b on a.id = b.id where b.id = (select id from TB _;
요약하면 테이블 간 관계를 구현하는 본질은 두 테이블 사이에 * * * 개의 동일한 데이터 항목 또는 동일한 데이터 항목이 있고, WHERE 절 또는 inner join ... on 문을 통해 두 테이블을 연결하여 질의를 구현하는 것입니다.
열다섯 번째, 외부 연결을 사용하여 다중 테이블 공동 쿼리를 달성합니다.
(1) 왼쪽 외부 연결 (LEFT OUTER JOIN) 은 테이블이 왼쪽 연결 (leftjoin) 을 통해 서로 연결되거나 LEFT JOIN 으로 축약될 수 있음을 의미합니다. 왼쪽 테이블 기반 왼쪽 연결은 왼쪽 테이블의 모든 정보를 출력하는 반면 오른쪽 테이블의 정보는 적합한 정보만 출력하고 비적격 정보는 NULL 을 반환합니다.
E.x: tb_demo065 에서 a.name, a.address, b.math, b.english 를 왼쪽 외부 연결 tb_demo065_tel 로 b on a 로 선택합니다
(2) 오른쪽 외부 연결 (RIGHT OUTER JOIN) 은 테이블이 오른쪽 연결 (RIGHT JOIN) 을 통해 서로 연결되거나 right join 으로 축약될 수 있음을 의미합니다. 오른쪽 테이블 기반 오른쪽 연결이라고 하는 오른쪽 테이블의 모든 정보를 출력하는 반면 왼쪽 테이블의 정보는 적합한 정보만 출력하고 비적격 정보는 NULL 을 반환합니다.
E.x: tb_demo065 에서 a.name, a.address, b.math, b.english 를 오른쪽 외부 연결 tb_demo065_tel 로 b on a 로 선택합니다
IN 또는 NOTIN 키워드를 사용하여 범위를 제한합니다.
E.x: select * from TB _ demo 083 where code in (select code from TB _ demo 083 where code between' $ _ post [test
IN 은 범위 내의 조회를 지정하는 데 사용할 수 있으며, 범위 밖의 조회가 필요한 경우 NOT IN 으로 대체할 수 있습니다.
에 도입된 17 개의 관련 하위 쿼리
E.x: select * from TB _ demo083 where code in (select code from TB _ demo083 where code =' $ _ post [text]
HAVING 문을 사용하여 패킷 필터링
HAVING 절은 그룹 또는 집계에 대한 검색 기준을 지정하는 데 사용됩니다. HAVING 은 일반적으로 GROUP BY 문과 함께 사용됩니다. SQL 문에 GROUP BY 절이 없는 경우 HAVING 은 WHERE 절처럼 동작합니다.
E.x:SELECT name, math from TB _ demo083 group by id having math > 95'