cari
Rumahpangkalan datatutorial mysqlMySQL的子查询中FROM和EXISTS子句的使用教程_MySQL

FROM 子查询
FROM 子句中的子查询
MySQL FROM 子查询是指 FROM 的子句作为子查询语句,主查询再到子查询结果中获取需要的数据。FROM 子查询语法如下:

SELECT ... FROM (subquery) AS name ...

子查询会生成一个临时表,由于 FROM 子句中的每个表必须有一个名称,因此 AS name 是必须的。FROM 子查询也称为衍生数据表子查询。
FROM 子查询实例
table1:

s1 s2
1  5
2  12
3  20

FROM 子查询 SQL 如下:
SELECT s1,s2 FROM (SELECT s1, s2*2 AS s2 FROM table1) AS temp WHERE s1 > 1
查询返回结果如下所示:

s1 s2
2 24
3 40

提示
MySQL FROM 子句中的子查询可以返回标量、列、行或表,但不能为有关联的子查询。

MySQL 子查询 EXISTS 和 NOT EXISTS
MySQL EXISTS 和 NOT EXISTS 子查询
MySQL EXISTS 和 NOT EXISTS 子查询语法如下:

SELECT ... FROM table WHERE EXISTS (subquery)

该语法可以理解为:将主查询的数据,放到子查询中做条件验证,根据验证结果(TRUE 或 FALSE)来决定主查询的数据结果是否得以保留。
MySQL EXISTS 子查询实例
下面以实际的例子来理解 EXISTS 子查询。下面是原始的数据表:
article 文章表:

2015121795225188.png (641×126)

user 用户表:

2015121795243080.png (643×104)

我们要查出 article 表中的数据,但要求 uid 必须在 user 表中存在。SQL 语句如下:

SELECT * FROM article WHERE EXISTS (SELECT * FROM user WHERE article.uid = user.uid)

返回查询结果如下:

2015121795301254.png (645×107)

从语句执行结果可以看出,article 表中第 4 条记录没有被保留,原因就是该条记录的数据在子查询中返回的结果是 FALSE 。
当上面的 SQL 使用 NOT EXISTS 时,查询的结果就是 article 表中 uid 不存在于 user 表中的数据记录。
提示
EXISTS (subquery) 只返回 TRUE 或 FALSE,因此子查询中的 SELECT * 也可以是 SELECT 1 或其他,官方说法是实际执行时会忽略 SELECT 清单,因此没有区别。
EXISTS 子查询的实际执行过程可能经过了优化而不是我们理解上的逐条对比,如果担忧效率问题,可进行实际检验以确定是否有效率问题。
EXISTS 子查询往往也可以用条件表达式、其他子查询或者 JOIN 来替代,何种最优需要具体问题具体分析。

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Bagaimanakah MySQL mengendalikan kesesuaian berbanding dengan RDBMS yang lain?Bagaimanakah MySQL mengendalikan kesesuaian berbanding dengan RDBMS yang lain?Apr 29, 2025 am 12:44 AM

Mysqlhandlesconcurencingusedixofrow-levelandTable-levellocking,, terutamanya terutamanya yang utama

Bagaimanakah MySQL mengendalikan urus niaga berbanding dengan pangkalan data hubungan lain?Bagaimanakah MySQL mengendalikan urus niaga berbanding dengan pangkalan data hubungan lain?Apr 29, 2025 am 12:37 AM

Mysqlhandlestransactionsefectivelytelytheinnodbengine, supportingAcidPropertiessimilartartgresqlandoracle.1) mysqlusesRepeatableReadastasthedefaultisolationlevel, whoScanbeadjustedtoreadcommitted

Apakah jenis data yang terdapat di MySQL?Apakah jenis data yang terdapat di MySQL?Apr 29, 2025 am 12:28 AM

Jenis data MySQL dibahagikan kepada jenis berangka, tarikh dan masa, rentetan, binari dan spatial. Memilih jenis yang betul dapat mengoptimumkan prestasi pangkalan data dan penyimpanan data.

Apakah beberapa amalan terbaik untuk menulis pertanyaan SQL yang cekap di MySQL?Apakah beberapa amalan terbaik untuk menulis pertanyaan SQL yang cekap di MySQL?Apr 29, 2025 am 12:24 AM

Amalan terbaik termasuk: 1) Memahami struktur data dan kaedah pemprosesan MySQL, 2) pengindeksan yang sesuai, 3) Elakkan pilih*, 4) Menggunakan jenis gabungan yang sesuai, 5) Gunakan subqueries dengan berhati -hati, 6) menganalisis pertanyaan dengan menjelaskan, 7) Pertimbangkan kesan pertanyaan pada sumber pelayan, 8) mengekalkan pangkalan data secara berkala. Amalan -amalan ini boleh membuat pertanyaan MySQL bukan sahaja cepat, tetapi juga kebolehpercayaan, skalabilitas dan kecekapan sumber.

Bagaimanakah MySQL berbeza dari PostgreSQL?Bagaimanakah MySQL berbeza dari PostgreSQL?Apr 29, 2025 am 12:23 AM

MySQLisbetterforspeedandsimplicity,suitableforwebapplications;PostgreSQLexcelsincomplexdatascenarioswithrobustfeatures.MySQLisidealforquickprojectsandread-heavytasks,whilePostgreSQLispreferredforapplicationsrequiringstrictdataintegrityandadvancedSQLf

Bagaimanakah MySQL mengendalikan replikasi data?Bagaimanakah MySQL mengendalikan replikasi data?Apr 28, 2025 am 12:25 AM

MySQL memproses replikasi data melalui tiga mod: replikasi asynchronous, semi-sinkron dan kumpulan. 1) Prestasi replikasi tak segerak tinggi tetapi data mungkin hilang. 2) Replikasi semi-sinkron meningkatkan keselamatan data tetapi meningkatkan latensi. 3) Replikasi kumpulan menyokong replikasi multi-tuan dan failover, sesuai untuk keperluan ketersediaan yang tinggi.

Bagaimanakah anda boleh menggunakan pernyataan Jelaskan untuk menganalisis prestasi pertanyaan?Bagaimanakah anda boleh menggunakan pernyataan Jelaskan untuk menganalisis prestasi pertanyaan?Apr 28, 2025 am 12:24 AM

Kenyataan Jelaskan boleh digunakan untuk menganalisis dan meningkatkan prestasi pertanyaan SQL. 1. Jalankan pernyataan Jelaskan untuk melihat pelan pertanyaan. 2. Menganalisis hasil output, perhatikan jenis akses, penggunaan indeks dan sertai pesanan. 3. Membuat atau menyesuaikan indeks berdasarkan hasil analisis, mengoptimumkan operasi gabungan, dan elakkan pengimbasan jadual penuh untuk meningkatkan kecekapan pertanyaan.

Bagaimana anda membuat sandaran dan memulihkan pangkalan data MySQL?Bagaimana anda membuat sandaran dan memulihkan pangkalan data MySQL?Apr 28, 2025 am 12:23 AM

Menggunakan mysqldump untuk sandaran logik dan mysqlenterpriseBackup untuk sandaran panas adalah cara yang berkesan untuk membuat sandaran pangkalan data MySQL. 1. Gunakan mysqldump untuk menyokong pangkalan data: mysqldump-usoot-pmydatabase> mydatabase_backup.sql. 2. Gunakan mysqlenterpriseBackup untuk sandaran panas: mysqlbackup-user = root-password = password-backup-dir =/to/to/backupbackup. Semasa pulih, gunakan kehidupan yang sepadan

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)