Rumah pangkalan data tutorial mysql MySQL中表子查询与关联子查询的基础学习教程_MySQL

MySQL中表子查询与关联子查询的基础学习教程_MySQL

May 27, 2016 pm 01:46 PM
mysql Tutorial

MySQL 表子查询
表子查询是指子查询返回的结果集是 N 行 N 列的一个表数据。
MySQL 表子查询实例
下面是用于例子的两张原始数据表:
article 表:

2015121895547250.png (640×131)

blog 表:

2015121895608029.png (642×104)

SQL 如下:

SELECT * FROM article WHERE (title,content,uid) IN (SELECT title,content,uid FROM blog)
Salin selepas log masuk

查询返回结果如下所示:

20151218100320512.png (642×84)

该 SQL 的意义在于查找 article 表中指定的字段同时也存在于 blog 表中的所有的行(注意 = 比较操作符换成了 IN),实际上等同于下面的条件语句:

SELECT * FROM article,blog 
WHERE (article.title=blog.title AND article.content=blog.content AND article.uid=blog.uid)
Salin selepas log masuk

实际上,后面的语句是经过 MySQL 优化的而效率更高,或者也可以使用 MySQL JOIN 表连接来实现。在此使用该例子只是为了便于描述表子查询的用法。

MySQL 关联子查询
关联子查询是指一个包含对表的引用的子查询,该表也显示在外部查询中。通俗一点来讲,就是子查询引用到了主查询的数据数据。
以一个实际的例子来理解关联子查询:
article 文章表:

20151218100140774.png (643×127)

user 用户表:

2015121895813868.png (649×104)

我们要查出 article 表中的数据,但要求 article 中的某个或某些字段与 user 表字段有逻辑关系(本例为 uid 相等)。SQL 语句如下:

SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE article.uid = user.uid)
Salin selepas log masuk

返回查询结果如下:

2015121895947027.png (642×106)

将该例 SQL 与如下语句比较更能看出关联子查询与普通子查询的区别:

SELECT * FROM article WHERE uid IN(SELECT uid FROM user)
Salin selepas log masuk

在本实例中,虽然两个 SQL 执行后的返回结果都一样,但它们的实现过程是完全不一样的。后者(普通子查询)实际被执行为:

SELECT * FROM article WHERE uid IN(1,2,3)
Salin selepas log masuk

但在关联子查询中,是无法单独执行子查询语句的。其实际流程大致为:

  • 先做外部主查询;
  • 将主查询的值传入子查询并执行;
  • 子查询再将查询结果返回主查询,主查询根据返回结果完成最终的查询。

这个执行流程类似于 EXISTS 子查询,实际上某些情况下 MySQL 就是将关联子查询重写为 EXISTS 子查询来执行的。

MySQL 关联子查询效率
很明显,一般情况下关联子查询的效率是比较低下的,实际上本例中的关联子查询例子也仅是为了演示关联子查询的原理及用法。如果可以的话,关联子查询尽量使用 JOIN 或其他查询来代替。如本例中,使用 INNER JOIN 来替换的 SQL 为:

SELECT article.* FROM article INNER JOIN user ON article.uid = user.uid
Salin selepas log masuk

注意:此处只是为了演示用 INNER JOIN 替换关联子查询的样例,并非表名这种处理是最优处理。

Kenyataan Laman Web ini
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

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

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk mengoptimumkan prestasi pertanyaan MySQL dalam PHP? Bagaimana untuk mengoptimumkan prestasi pertanyaan MySQL dalam PHP? Jun 03, 2024 pm 08:11 PM

Prestasi pertanyaan MySQL boleh dioptimumkan dengan membina indeks yang mengurangkan masa carian daripada kerumitan linear kepada kerumitan logaritma. Gunakan PreparedStatements untuk menghalang suntikan SQL dan meningkatkan prestasi pertanyaan. Hadkan hasil pertanyaan dan kurangkan jumlah data yang diproses oleh pelayan. Optimumkan pertanyaan penyertaan, termasuk menggunakan jenis gabungan yang sesuai, membuat indeks dan mempertimbangkan untuk menggunakan subkueri. Menganalisis pertanyaan untuk mengenal pasti kesesakan; gunakan caching untuk mengurangkan beban pangkalan data;

Bagaimana untuk menggunakan sandaran dan pemulihan MySQL dalam PHP? Bagaimana untuk menggunakan sandaran dan pemulihan MySQL dalam PHP? Jun 03, 2024 pm 12:19 PM

Membuat sandaran dan memulihkan pangkalan data MySQL dalam PHP boleh dicapai dengan mengikuti langkah berikut: Sandarkan pangkalan data: Gunakan arahan mysqldump untuk membuang pangkalan data ke dalam fail SQL. Pulihkan pangkalan data: Gunakan arahan mysql untuk memulihkan pangkalan data daripada fail SQL.

Bagaimana untuk memasukkan data ke dalam jadual MySQL menggunakan PHP? Bagaimana untuk memasukkan data ke dalam jadual MySQL menggunakan PHP? Jun 02, 2024 pm 02:26 PM

Bagaimana untuk memasukkan data ke dalam jadual MySQL? Sambung ke pangkalan data: Gunakan mysqli untuk mewujudkan sambungan ke pangkalan data. Sediakan pertanyaan SQL: Tulis pernyataan INSERT untuk menentukan lajur dan nilai yang akan dimasukkan. Laksanakan pertanyaan: Gunakan kaedah query() untuk melaksanakan pertanyaan sisipan Jika berjaya, mesej pengesahan akan dikeluarkan.

Pada musim panas, anda mesti cuba menembak pelangi Pada musim panas, anda mesti cuba menembak pelangi Jul 21, 2024 pm 05:16 PM

Selepas hujan pada musim panas, anda sering dapat melihat pemandangan cuaca istimewa yang indah dan ajaib - pelangi. Ini juga merupakan pemandangan jarang yang boleh ditemui dalam fotografi, dan ia sangat fotogenik. Terdapat beberapa syarat untuk pelangi muncul: pertama, terdapat titisan air yang mencukupi di udara, dan kedua, matahari bersinar pada sudut yang lebih rendah. Oleh itu, adalah paling mudah untuk melihat pelangi pada sebelah petang selepas hujan reda. Walau bagaimanapun, pembentukan pelangi sangat dipengaruhi oleh cuaca, cahaya dan keadaan lain, jadi ia biasanya hanya bertahan untuk jangka masa yang singkat, dan masa tontonan dan penangkapan terbaik adalah lebih pendek. Jadi apabila anda menemui pelangi, bagaimanakah anda boleh merakamnya dengan betul dan mengambil gambar dengan kualiti? 1. Cari pelangi Selain keadaan yang dinyatakan di atas, pelangi biasanya muncul mengikut arah cahaya matahari, iaitu jika matahari bersinar dari barat ke timur, pelangi lebih cenderung muncul di timur.

Bagaimana untuk membetulkan ralat mysql_native_password tidak dimuatkan pada MySQL 8.4 Bagaimana untuk membetulkan ralat mysql_native_password tidak dimuatkan pada MySQL 8.4 Dec 09, 2024 am 11:42 AM

Salah satu perubahan utama yang diperkenalkan dalam MySQL 8.4 (keluaran LTS terkini pada 2024) ialah pemalam "Kata Laluan Asli MySQL" tidak lagi didayakan secara lalai. Selanjutnya, MySQL 9.0 mengalih keluar pemalam ini sepenuhnya. Perubahan ini mempengaruhi PHP dan apl lain

Bagaimana untuk menggunakan prosedur tersimpan MySQL dalam PHP? Bagaimana untuk menggunakan prosedur tersimpan MySQL dalam PHP? Jun 02, 2024 pm 02:13 PM

Untuk menggunakan prosedur tersimpan MySQL dalam PHP: Gunakan PDO atau sambungan MySQLi untuk menyambung ke pangkalan data MySQL. Sediakan penyata untuk memanggil prosedur tersimpan. Laksanakan prosedur tersimpan. Proses set keputusan (jika prosedur tersimpan mengembalikan hasil). Tutup sambungan pangkalan data.

Bagaimana untuk membuat jadual MySQL menggunakan PHP? Bagaimana untuk membuat jadual MySQL menggunakan PHP? Jun 04, 2024 pm 01:57 PM

Mencipta jadual MySQL menggunakan PHP memerlukan langkah berikut: Sambung ke pangkalan data. Buat pangkalan data jika ia tidak wujud. Pilih pangkalan data. Buat jadual. Laksanakan pertanyaan. Tutup sambungan.

Bagaimana untuk mendapatkan semula rantaian mata wang maya yang salah? Tutorial tentang mendapatkan semula rantaian pemindahan mata wang maya yang salah Bagaimana untuk mendapatkan semula rantaian mata wang maya yang salah? Tutorial tentang mendapatkan semula rantaian pemindahan mata wang maya yang salah Jul 16, 2024 pm 09:02 PM

Peluasan pasaran maya tidak dapat dipisahkan daripada peredaran mata wang maya, dan secara semula jadi ia juga tidak dapat dipisahkan daripada isu pemindahan mata wang maya. Ralat pemindahan biasa ialah ralat salinan alamat, dan ralat lain ialah ralat pemilihan rantai. Pemindahan mata wang maya ke rantaian yang salah masih menjadi masalah yang sukar, tetapi disebabkan oleh operasi pemindahan yang tidak mahir, orang baru sering memindahkan rantaian yang salah Jadi bagaimana untuk memulihkan rantaian mata wang maya yang salah? Pautan yang salah boleh diambil melalui platform pihak ketiga, tetapi ia mungkin tidak berjaya. Seterusnya, editor akan memberitahu anda secara terperinci untuk membantu anda menjaga aset maya anda dengan lebih baik. Bagaimana untuk mendapatkan semula rantaian mata wang maya yang salah? Proses mendapatkan semula mata wang maya yang dipindahkan ke rantaian yang salah mungkin rumit dan mencabar, tetapi dengan mengesahkan butiran pemindahan, menghubungi bursa atau pembekal dompet, mengimport kunci peribadi ke dompet yang serasi dan menggunakan alat jambatan rantai silang

See all articles