데이터 베이스 MySQL 튜토리얼 멋진 이해---MySQL 다중 테이블 쿼리

멋진 이해---MySQL 다중 테이블 쿼리

May 06, 2020 am 10:59 AM
mysql

멋진 이해---MySQL 다중 테이블 쿼리

1. 다중 테이블 쿼리에 SELECT 절을 사용하세요

SELECT 필드 이름 FROM 테이블 1, 테이블 2... WHERE 테이블 1. 필드 = 테이블 2. 필드 및 기타 쿼리 조건<code>SELECT 字段名 FROM 表1,表2 … WHERE 表1.字段 = 表2.字段 AND 其它查询条件

SELECT a.id,a.name,a.address,a.date,b.math,b.english,b.chinese FROM tb_demo065_tel AS b,tb_demo065 AS a WHERE a.id=b.id
로그인 후 복사

注:在上面的的代码中,以两张表的id字段信息相同作为条件建立两表关联,但在实际开发中不应该这样使用,最好用主外键约束来实现

二、使用表的别名进行多表查询
如:

SELECT a.id,a.name,a.address,b.math,b.english,b.chinese FROM tb_demo065  a,tb_demo065_tel  b WHERE a.id=b.id AND b.id=&#39;$_POST[textid]&#39;
로그인 후 복사

SQL语言中,可以通过两种方式为表指定别名
第一种是通过关键字AS指定,如

SELECT a.id,a.name,a.address,b.math,b.english,b.chinese FROM tb_demo065 AS a,tb_demo065_tel AS b WHERE a.id=b.id
로그인 후 복사

第二种是在表名后直接加表的别名实现

SELECT a.id,a.name,a.address,b.math,b.english,b.chinese FROM tb_demo065  a,tb_demo065_tel  b WHERE a.id=b.id
로그인 후 복사

使用表的别名应注意几下几点
(1)别名通常是一个缩短了的表名,用于在连接中引用表中的特定列,如果连接中的多个表中有相同的名称列存在,必须用表名或表的别名限定列名
(2)如果定义了表的别名就不能再使用表名

三、合并多个结果集
SQL语言中,可以通过UNION 或 ALL将多个SELECT语句的查询结果合并输出,这两个关键字的使用说明如下:
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查询,返回单个值且嵌套在SELECT、INSERT、UPDATE和DELETE语句或其它查询语句中,任何可以使用表达式的地方都可以使用子查询.

SELECT id,name,sex,date FROM tb_demo068 WHERE id in(SELECT id FROM tb_demo068 WHERE id=&#39;$_POST[test]&#39;)
로그인 후 복사

内连接:把查询结果作为WHERE子句的查询条件即称为内连接

五、复杂的嵌套查询
多表之间的嵌套查询可以通过谓词IN实现,语法格式如下:
test_expression[NOT] IN{<br/> subquery<br/>}

SELECT * FROM tb_demo069_people WHERE uid IN(SELECT deptID FROM tb_demo069_dept WHERE deptName=&#39;$_POST[select]&#39;)
SELECT a.id,a.name FROM tb_demo067 AS a WHERE id<3)
로그인 후 복사

참고: 위 코드에서는 두 테이블의 동일한 id 필드 정보를 기반으로 두 테이블 간의 연결이 설정되지만 실제 개발에서는 사용하지 않는 것이 좋습니다. 그리고 이를 달성하기 위한 외래 키 제약 조건

2. 다중 테이블 쿼리에 테이블의 별칭을 사용하세요.

예:

SELECT people.name,people.chinese,people.math,people.english FROM (SELECT name,chinese,math,english FROM tb_demo071) AS people
로그인 후 복사
SQL 언어에서는 두 가지 방법으로 테이블의 별칭을 지정할 수 있습니다.

첫 번째

SELECT (SELECT AVG(chinese)FROM tb_demo071),(SELECT AVG(english)FROM tb_demo071),(SELECT AVG(math)FROM tb_demo071) FROM tb_demo071
로그인 후 복사

와 같이 키워드 AS를 통해 지정하는 방법입니다. 두 번째 방법은 테이블 이름 바로 뒤에 테이블의 별칭을 추가하는 것입니다.

SELECT (SELECT AVG(chinese) FROM tb_demo071) AS yuwen ,(SELECT AVG(english) FROM tb_demo071) AS yingyu,(SELECT AVG(math) FROM tb_demo071) AS shuxue FROM tb_demo071
로그인 후 복사

테이블의 별칭 사용 시 몇 가지 주의할 점이 있습니다.
(1) 별칭은 일반적으로 연결에서 테이블을 참조하는 데 사용되는 축약된 테이블 이름입니다. 특정 열의 경우 연결의 여러 테이블에 동일한 이름을 가진 열이 있는 경우 열 이름은 테이블로 정규화되어야 합니다. 이름 또는 테이블 별칭
(2) 테이블 별칭이 정의되면 더 이상 테이블 이름을 사용할 수 없습니다

3개, 여러 결과 세트 병합

SQL 언어에서는 여러 SELECT 문의 쿼리 결과를 결합하여 출력할 수 있습니다. UNION 또는 ALL을 통해 이 두 키워드의 사용 지침은 다음과 같습니다. UNION: 이 키워드를 사용하면 여러 개의 SELECT 문을 결합하여 출력하며, ALL: 이 키워드는 삭제할 수 있습니다. 여러 SELECT 문의 쿼리 결과를 결합하는 데 사용되지만 중복된 행은 삭제되지 않습니다. UNION 또는 ALL 키워드를 사용하면 여러 테이블의 출력을 결합할 때 쿼리 결과의 구조와 데이터 유형이 동일해야 합니다. 또한 UNION을 사용할 때 두 테이블의 필드 수가 동일해야 합니다. 그렇지 않으면 SQL 문에 오류가 발생합니다.

SELECT * FROM tb_demo072_student WHERE id=(SELECT id FROM tb_demo072_class WHERE className = &#39;$_POST[text]&#39;)
로그인 후 복사

4. 단순 중첩 쿼리

하위 쿼리: 하위 쿼리는 단일 값을 반환하는 SELECT 쿼리로 SELECT, INSERT, UPDATE 및 DELETE 문이나 기타 쿼리 문에 중첩됩니다.

e.x:SELECT * FROM tb_demo074_student UNION SELECT * FROM tb_demo074_fasten
로그인 후 복사
로그인 후 복사

내부 조인: 쿼리 결과를 WHERE 절의 쿼리 조건으로 사용하는 것을 내부 조인이라고 합니다

5. 복잡한 중첩 쿼리

여러 테이블 간의 중첩 쿼리 술어 IN을 통해 구현할 수 있습니다. . 구문 형식은 다음과 같습니다.

test_expression[NOT] IN{<br/> subquery</p>}

매개변수 설명: test_expression은 SQL 표현식을 참조하며 하위 쿼리에는 특정 결과 집합의 하위 쿼리가 포함됩니다.Multiple table 임베딩 중첩 쿼리의 원칙: 중첩된 테이블 수에 관계없이 테이블 간에는 일종의 상관 관계가 있어야 합니다. 이 상관 관계는 쿼리를 구현하기 위해 WHERE 절을 통해 설정됩니다.

6. 쿼리 통계에서 중첩 쿼리의 적용

다중 테이블 쿼리를 구현할 때 ANY, SOME, ALL 조건자를 동시에 사용할 수 있습니다. 이러한 조건자를 정량적 비교 조건자라고 하며 비교 연산자와 함께 사용하여 모든 반환 값이 충족되는지 확인할 수 있습니다. 검색 조건 SOME 및 ANY 조건자는 정량적으로 존재하며 검색 조건을 충족하는 반환 값이 있는지 여부에만 중점을 둡니다. 두 조건자는 동일한 의미를 가지며 상호 교환적으로 사용될 수 있습니다. 그리고 검색 요구 사항을 충족하는 조건자가 있는지 여부에만 관심이 있습니다.

e.x:SELECT * FROM tb_demo074_student UNION SELECT * FROM tb_demo074_fasten ORDER BY id
로그인 후 복사
로그인 후 복사

>ANY 하위 쿼리의 특정 값보다 큼 🎜>=ANY 하위 쿼리의 특정 값보다 크거나 같음 🎜< ;=ANY 하위 쿼리의 특정 값보다 작거나 같음 🎜=ANY 하위 쿼리의 특정 값과 같음 🎜!= ANY 또는 <>ANY가 하위 쿼리의 값과 같지 않음 🎜>ALL이 더 큼 하위 쿼리의 모든 값보다 🎜>=ALL은 하위 쿼리의 모든 값보다 크거나 같습니다. 🎜<=ALL은 하위 쿼리보다 작거나 같습니다. 모든 값 ​​🎜=ALL은 모두와 같습니다. 하위 쿼리 🎜!=ALL 또는 <>ALL의 값이 하위 쿼리 🎜🎜🎜🎜🎜의 모든 값과 같지 않습니다. 7. 실제 프로젝트에서 하위 쿼리를 파생 테이블로 사용 🎜🎜 개발 프로세스에서는 비교적 완전한 정보가 포함된 테이블에서 몇 가지 주요 필드만 포함하는 정보 테이블을 파생하는 데 자주 사용됩니다. 이 목표는 🎜🎜
SELECT * FROM tb_demo076_BEIJING GROUP BY name HAVING name=&#39;人民邮电出版社&#39; OR name=&#39;机械工业出版社&#39; UNION SELECT * FROM tb_demo076_BEIJING GROUP BY name HAVING name <>&#39;人民邮电出版社&#39; AND name <>&#39;机械工业再版社&#39; ORDER BY id
로그인 후 복사
로그인 후 복사
🎜와 같은 하위 쿼리를 통해 달성할 수 있습니다. 참고: 하위 쿼리는 다음 규칙을 따라야 합니다.🎜 (1) 비교 연산자에 의해 도입된 내부 하위 쿼리에는 표현식 또는 열 이름이 하나만 포함되며 외부 문의 WHERE 절에 명명된 열은 내부 하위 쿼리에 의해 명명된 열과 호환되어야 합니다🎜( 2) 다음에 의해 도입된 하위 쿼리 변경할 수 없는 비교 연산자(비교 연산자 뒤에 ANY 또는 ALL 키워드가 오지 않음)는 그룹 또는 개별 값이 미리 결정되지 않는 한 GROUP BY 또는 HAVING 절을 포함하지 않습니다. 🎜(3) 일반적으로 EXISTS에서 도입된 SELECT 목록을 사용합니다. *로 구성되며 열 이름을 지정할 필요가 없습니다. (4) 하위 쿼리는 내부적으로 결과를 처리할 수 없습니다. 여덟, 하위 쿼리를 표현식으로 사용합니다. 🎜🎜
SELECT filedlist FROM table1 [INNER] JOIN table2 ON table1.column1 = table2.column1
로그인 후 복사
로그인 후 복사
🎜🎜와 같은 mysql_fetch_array() 함수를 사용할 때 사용자가 테이블 항목에 값을 할당하기가 더 쉽습니다. 9. 하위 쿼리를 사용하여 데이터 연결 🎜🎜🎜
SELECT a.name,a.address,a.date,b.chinese,b.math,b.english FROM tb_demo065 AS a INNER JOIN tb_demo065_tel AS b on a.id=b.id
로그인 후 복사
로그인 후 복사
🎜🎜 10. 다중 테이블 통합 쿼리🎜🎜 SQL 문에서 UNION을 사용하면 동일한 열의 여러 테이블에 한정된 데이터 정보를 표시할 수 있습니다. 🎜🎜
e.x:SELECT * FROM tb_demo074_student UNION SELECT * FROM tb_demo074_fasten
로그인 후 복사
로그인 후 복사

注:使用UNION时应注意以下两点:
(1)在使用UNION运算符组合的语句中,所有选择列表的表达式数目必须相同,如列名、算术表达式及聚合函数等
(2)在每个查询表中,对应列的数据结构必须一样。

十一、对联合后的结果进行排序
为了UNION的运算兼容,要求所有SELECT语句都不能有ORDER BY语句,但有一种情况例外,那就是在最后一个SELECT语句中放置ORDER BY 子句实现结果的最终排序输出。

e.x:SELECT * FROM tb_demo074_student UNION SELECT * FROM tb_demo074_fasten ORDER BY id
로그인 후 복사
로그인 후 복사

使用UNION条件上相对比较苛刻,所以使用此语句时一定要注意两个表项数目和字段类型是否相同

十二、条件联合语句

SELECT * FROM tb_demo076_BEIJING GROUP BY name HAVING name=&#39;人民邮电出版社&#39; OR name=&#39;机械工业出版社&#39; UNION SELECT * FROM tb_demo076_BEIJING GROUP BY name HAVING name <>&#39;人民邮电出版社&#39; AND name <>&#39;机械工业再版社&#39; ORDER BY id
로그인 후 복사
로그인 후 복사

上面语句应用了GROUP BY分组语句和HAVING语句实现条件联合查询。其实现目的是先保证将'人民邮电出版社'和'机械工业出版社'始终位于名单最前列,然后再输出其它的出版社

十三、简单内连接查询

SELECT filedlist FROM table1 [INNER] JOIN table2 ON table1.column1 = table2.column1
로그인 후 복사
로그인 후 복사

其中,filedlist是要显示的字段,INNER表示表之间的连接方式为内连接,table1.column1=table2.column1用于指明两表间的连接条件,如:

SELECT a.name,a.address,a.date,b.chinese,b.math,b.english FROM tb_demo065 AS a INNER JOIN tb_demo065_tel AS b on a.id=b.id
로그인 후 복사
로그인 후 복사

十四、复杂内连接查询
复杂的内连接查询是在基本的内连接查询的基础上再附加一些查询条件,如:

SELECT a.name,a.address,a.date,b.chinese,b.math,b.english FROM tb_demo065 AS a INNER JOIN tb_demo065_tel AS b on a.id=b.id WHERE b.id=(SELECT id FROM  tb_demo065 WHERE tb_demo065.name=&#39;$_POST[text]&#39;)
로그인 후 복사

总之,实现表与表之间的关联的本质是两表之间存在共同的数据项或者相同的数据项,通过WHERE 子句或内连接INNER JOIN … ON 语句将两表连接起来,实现查询

十五、使用外连接实现多表联合查询
(1)LEFT OUTER JOIN表示表之间通过左连接方式相互连接,也可简写成LEFT JOIN,它是以左侧的表为基准故称左连接,左侧表中所有信息将被全部输出,而右侧表信息则只会输出符合条件的信息,对不符合条件的信息则返回NULL

e.x:SELECT a.name,a.address,b.math,b.english FROM tb_demo065 AS A LEFT OUTER JOIN tb_demo065_tel AS b ON a.id=b.id
로그인 후 복사

(2)RIGHT OUTER JOIN表示表之间通过右连接方式相互连接,也可简写成RIGHT JOIN,它是以右侧的表为基准故称右连接,右侧表中所有信息将被全部输出,而左侧表信息则只会输出符合条件的信息,对不符合条件的信息则返回NULL

E.X:SELECT a.name,a.address,b.math,b.english FROM tb_demo065 AS A RIGHT OUTER JOIN tb_demo065_tel AS b ON a.id=b.id
로그인 후 복사

十六、利用IN或NOTIN关键字限定范围

e.x:SELECT * FROM tb_demo083 WHERE code IN(SELECT code FROM tb_demo083 WHERE code BETWEEN &#39;$_POST[text1]&#39; AND &#39;$_POST[text2]&#39;)
로그인 후 복사

利用IN可指定在范围内查询,若要求在某范围外查询可以用NOT IN代替它

十七、由IN引入的关联子查询

e.x:SELECT * FROM tb_demo083 WHERE code IN(SELECT code FROM tb_demo083 WHERE code = &#39;$_POST[text]&#39;)
로그인 후 복사

十八、利用HAVING语句过滤分组数据
HAVING子句用于指定组或聚合的搜索条件,HAVING通常与GROUP BY 语句一起使用,如果SQL语句中不含GROUP BY子句,则HAVING的行为与WHERE子句一样.

e.x:SELECT name,math FROM tb_demo083 GROUP BY id HAVING math > &#39;95&#39;
로그인 후 복사

推荐学习:mysql教程

위 내용은 멋진 이해---MySQL 다중 테이블 쿼리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

MySQL의 역할 : 웹 응용 프로그램의 데이터베이스 MySQL의 역할 : 웹 응용 프로그램의 데이터베이스 Apr 17, 2025 am 12:23 AM

웹 응용 프로그램에서 MySQL의 주요 역할은 데이터를 저장하고 관리하는 것입니다. 1. MySQL은 사용자 정보, 제품 카탈로그, 트랜잭션 레코드 및 기타 데이터를 효율적으로 처리합니다. 2. SQL 쿼리를 통해 개발자는 데이터베이스에서 정보를 추출하여 동적 컨텐츠를 생성 할 수 있습니다. 3.mysql은 클라이언트-서버 모델을 기반으로 작동하여 허용 가능한 쿼리 속도를 보장합니다.

LARAVEL 소개 예 LARAVEL 소개 예 Apr 18, 2025 pm 12:45 PM

Laravel은 웹 응용 프로그램을 쉽게 구축하기위한 PHP 프레임 워크입니다. 설치 : Composer를 사용하여 전 세계적으로 Laravel CLI를 설치하고 프로젝트 디렉토리에서 응용 프로그램을 작성하는 등 다양한 기능을 제공합니다. 라우팅 : Routes/Web.php에서 URL과 핸들러 간의 관계를 정의하십시오. 보기 : 리소스/뷰에서보기를 작성하여 응용 프로그램의 인터페이스를 렌더링합니다. 데이터베이스 통합 : MySQL과 같은 데이터베이스와 상자 외 통합을 제공하고 마이그레이션을 사용하여 테이블을 작성하고 수정합니다. 모델 및 컨트롤러 : 모델은 데이터베이스 엔티티를 나타내고 컨트롤러는 HTTP 요청을 처리합니다.

MySQL 및 Phpmyadmin : 핵심 기능 및 기능 MySQL 및 Phpmyadmin : 핵심 기능 및 기능 Apr 22, 2025 am 12:12 AM

MySQL 및 Phpmyadmin은 강력한 데이터베이스 관리 도구입니다. 1) MySQL은 데이터베이스 및 테이블을 작성하고 DML 및 SQL 쿼리를 실행하는 데 사용됩니다. 2) PHPMYADMIN은 데이터베이스 관리, 테이블 구조 관리, 데이터 운영 및 사용자 권한 관리에 직관적 인 인터페이스를 제공합니다.

데이터베이스 연결 문제 해결 : Minii/DB 라이브러리 사용 실질적인 사례 데이터베이스 연결 문제 해결 : Minii/DB 라이브러리 사용 실질적인 사례 Apr 18, 2025 am 07:09 AM

작은 응용 프로그램을 개발할 때 까다로운 문제가 발생했습니다. 가벼운 데이터베이스 운영 라이브러리를 신속하게 통합해야합니다. 여러 라이브러리를 시도한 후에는 기능이 너무 많거나 호환되지 않는다는 것을 알았습니다. 결국, 나는 내 문제를 완벽하게 해결하는 YII2를 기반으로 단순화 된 버전 인 Minii/DB를 발견했습니다.

MySQL 대 기타 프로그래밍 언어 : 비교 MySQL 대 기타 프로그래밍 언어 : 비교 Apr 19, 2025 am 12:22 AM

다른 프로그래밍 언어와 비교할 때 MySQL은 주로 데이터를 저장하고 관리하는 데 사용되는 반면 Python, Java 및 C와 같은 다른 언어는 논리적 처리 및 응용 프로그램 개발에 사용됩니다. MySQL은 데이터 관리 요구에 적합한 고성능, 확장 성 및 크로스 플랫폼 지원으로 유명하며 다른 언어는 데이터 분석, 엔터프라이즈 애플리케이션 및 시스템 프로그래밍과 같은 해당 분야에서 이점이 있습니다.

Laravel 프레임 워크 설치 방법 Laravel 프레임 워크 설치 방법 Apr 18, 2025 pm 12:54 PM

기사 요약 :이 기사는 Laravel 프레임 워크를 쉽게 설치하는 방법에 대한 독자들을 안내하기위한 자세한 단계별 지침을 제공합니다. Laravel은 웹 애플리케이션의 개발 프로세스를 가속화하는 강력한 PHP 프레임 워크입니다. 이 자습서는 시스템 요구 사항에서 데이터베이스 구성 및 라우팅 설정에 이르기까지 설치 프로세스를 다룹니다. 이러한 단계를 수행함으로써 독자들은 라벨 프로젝트를위한 탄탄한 토대를 빠르고 효율적으로 놓을 수 있습니다.

초보자를위한 MySQL : 데이터베이스 관리를 시작합니다 초보자를위한 MySQL : 데이터베이스 관리를 시작합니다 Apr 18, 2025 am 12:10 AM

MySQL의 기본 작업에는 데이터베이스, 테이블 작성 및 SQL을 사용하여 데이터에서 CRUD 작업을 수행하는 것이 포함됩니다. 1. 데이터베이스 생성 : createAbasemy_first_db; 2. 테이블 만들기 : CreateTableBooks (idintauto_incrementprimarykey, titlevarchar (100) notnull, authorvarchar (100) notnull, published_yearint); 3. 데이터 삽입 : InsertIntobooks (Title, Author, Published_year) VA

MySQL 모드 해결 문제 : theliamysqlmodeschecker 모듈 사용 경험 MySQL 모드 해결 문제 : theliamysqlmodeschecker 모듈 사용 경험 Apr 18, 2025 am 08:42 AM

Thelia를 사용하여 전자 상거래 웹 사이트를 개발할 때 까다로운 문제가 발생했습니다. MySQL 모드가 제대로 설정되지 않아 일부 기능이 제대로 작동하지 않습니다. 약간의 탐색 후, 나는 theliamysqlmodeschecker라는 모듈을 발견했습니다.이 모듈은 Thelia가 요구하는 MySQL 패턴을 자동으로 수정하여 내 문제를 완전히 해결할 수 있습니다.

See all articles