Menyarangkan pertanyaan dalam pertanyaan lain atau dalam ungkapan menggunakan subpertanyaan

Penting: Artikel ini diterjemahkan oleh mesin, lihatlah notis penafian. Sila dapatkan versi Bahasa Inggeris artikel ini di sini sebagai rujukan anda

Kadangkala anda mungkin ingin menggunakan hasil pertanyaan sebagai medan dalam pertanyaan lain atau sebagai kriteria untuk medan pertanyaan. Contohnya, katakan anda ingin melihat selang antara pesanan bagi setiap produk anda. Untuk mencipta pertanyaan yang menunjukkan selang ini, anda perlu membandingkan setiap tarikh pesanan dengan tarikh pesanan lain untuk produk tersebut. Membandingkan tarikh pesanan ini juga memerlukan pertanyaan. Anda boleh menyarangkan pertanyaan ini dalam pertanyaan utama anda menggunakan subpertanyaan.

Anda boleh menulis subpertanyaan dalam ungkapan atau dalam penyata Bahasa Pertanyaan Berstruktur (SQL) dalam Pandangan SQL.

Nota: Artikel ini tidak digunakan untuk aplikasi Access – jenis baru pangkalan data anda mereka bentuk dengan capaian dan Terbitkan dalam talian. Lihat mencipta aplikasi Access untuk maklumat lanjut.

Dalam artikel ini

Menggunakan hasil pertanyaan sebagai medan dalam pertanyaan lain

Menggunakan subpertanyaan sebagai kriteria untuk medan pertanyaan

Kata kunci SQL biasa yang anda boleh gunakan dengan subpertanyaan

Menggunakan hasil pertanyaan sebagai medan dalam pertanyaan lain

Anda boleh menggunakan subpertanyaan sebagai alias medan. Menggunakan subpertanyaan sebagai alias medan apabila anda ingin menggunakan hasil subpertanyaan sebagai medan dalam pertanyaan utama anda.

Nota: Subpertanyaan yang anda gunakan sebagai alias medan tidak boleh mengembalikan lebih daripada satu medan.

Anda boleh menggunakan alias medan subpertanyaan untuk memaparkan nilai yang bergantung pada nilai lain dalam baris semasa yang tidak mungkin terjadi tanpa menggunakan subpertanyaan.

Contohnya, mari kita kembali ke contoh yang anda ingin melihat selang antara pesanan bagi setiap produk anda. Untuk menentukan selang ini, anda perlu membandingkan setiap tarikh pesanan dengan tarikh pesanan lain untuk produk tersebut. Anda boleh mencipta pertanyaan yang menunjukkan maklumat ini menggunakan templat pangkalan data Northwind.

Menunjukkan kepada saya cara menyediakan Northwind

  1. Pada tab Fail, klik Baru.

  2. Bawah Templat Tersedia, klik Templat Sampel.

  3. Klik Northwind, kemudian klik Cipta.

  4. Ikut arah di halaman Northwind Traders (pada tab objek Skrin Permulaan) untuk membuka pangkalan data, kemudian tutup tetingkap Dialog Log Masuk.

  1. Pada tab Cipta dalam kumpulan Pertanyaan, klik Reka Bentuk Pertanyaan.

  2. Dalam kotak dialog Tunjukkan Jadual, klik tab Pertanyaan, kemudian dwiklik Pesanan Produk.

  3. Tutup kotak dialog Tunjukkan Jadual.

  4. Dwiklik medan ID Produk dan medan Tarikh Pesanan untuk menambahkannya pada grid reka bentuk pertanyaan.

  5. Dalam baris Isih lajur ID Produk grid, pilih Menaik.

  6. Dalam baris Isih bagi lajur Tarikh Pesanan grid, pilih Menurun.

  7. Dalam lajur ketiga grid, klik kanan baris Medan, kemudian klik Zum pada menu pintas.

  8. Dalam kotak dialog Zum, taip atau tampalkan ungkapan berikut:

    Prior Date: (SELECT MAX([Order Date]) 
    FROM [Product Orders] AS [Old Orders]
    WHERE [Old Orders].[Order Date] < [Product Orders].[Order Date]
    AND [Old Orders].[Product ID] = [Product Orders].[Product ID])

Ungkapan ini ialah subpertanyaan. Bagi setiap baris, subpertanyaan memilih tarikh pesanan terkini yang kurang terkini daripada tarikh pesanan yang telah dikaitkan dengan baris. Perhatikan cara anda menggunakan kata kunci AS untuk mencipta alias jadual agar anda dapat membandingkan nilai dalam subpertanyaan dengan nilai dalam baris semasa bagi pertanyaan utama.

  1. Dalam lajur keempat grid, dalam baris Medan, taipkan ungkapan berikut:

    Interval: [Order Date]-[Prior Date]

Ungkapan ini menghitung selang antara setiap tarikh pesanan dan tarikh pesanan sebelumnya bagi produk tersebut menggunakan nilai untuk tarikh sebelumnya yang kita takrifkan menggunakan subpertanyaan.

  1. Pada tab Reka Bentuk dalam kumpulan Hasil, klik Jalankan.

    1. Pertanyaan berjalan dan memaparkan senarai nama produk, tarikh pesanan, tarikh pesanan sebelumnya dan selang antara tarikh pesanan. Hasilnya mula-mula diisih mengikut ID Produk (dalam tertib menaik), kemudian mengikut Tarikh Pesanan (dalam tertib menurun).

    2. Nota: Oleh sebab ID Produk ialah medan carian, secara lalai, Access memaparkan nilai carian (dalam kes ini, nama produk) dan bukannya ID Produk yang sebenar. Walaupun ini mengubah nilai yang muncul, ia tidak mengubah tertib isihan.

  2. Tutup pangkalan data Northwind.

Halaman Atas

Menggunakan subpertanyaan sebagai kriteria untuk medan pertanyaan

Anda boleh menggunakan subpertanyaan sebagai kriteria medan. Menggunakan subpertanyaan sebagai kriteria medan apabila anda ingin gunakan hasil subpertanyaan untuk mengehadkan nilai yang memaparkan medan.

Contohnya, katakan anda ingin menyemak semula senarai pesanan yang telah diproses oleh pekerja yang bukan wakil jualan. Untuk menjanakan senarai ini, anda perlu membandingkan ID pekerja bagi setiap pesanan dengan senarai ID pekerja untuk pekerja yang bukan wakil jualan. Untuk mencipta senarai ini dan menggunakannya sebagai medan kriteria, anda akan menggunakan subpertanyaan seperti yang ditunjukkan dalam prosedur berikut:

  1. Buka pangkalan data Northwind dan dayakan kandungannya.

  2. Tutup borang log masuk.

  3. Pada tab Cipta, dalam kumpulan Lain, klik Reka Bentuk Pertanyaan.

  4. Dalam kotak dialog Tunjukkan Jadual, pada tab Jadual, dwiklik Pesanan dan Pekerja.

  5. Tutup kotak dialog Tunjukkan Jadual.

  6. Dalam jadual Pesanan, dwiklik medan ID Pekerja, medan ID Pesanan dan medan Tarikh Pesanan untuk menambahkannya ke grid reka bentuk pertanyaan. Dalam jadual Pekerja, dwiklik medan Jawatan untuk menambahkannya ke grid reka bentuk.

  7. Klik kanan baris Kriteria bagi lajur ID Pekerja, kemudian klik Zum pada menu pintas.

  8. Dalam kotak Zum, taip atau tampalkan ungkapan berikut:

    IN (SELECT [ID] FROM [Employees] 
    WHERE [Job Title]<>'Sales Representative')

    Ini ialah subpertanyaan. Ia memilih semua ID pekerja yang pekerja tersebut tidak mempunyai jawatan Wakil Jualan dan membekalkan set hasil kepada pertanyaan utama. Pertanyaan utama kemudiannya menyemak sama ada ID pekerja dari jadual Pesanan berada dalam set hasil.

  9. Pada tab Reka Bentuk, dalam kumpulan Hasil, klik Jalankan.

    Pertanyaan berjalan dan hasil pertanyaan menunjukkan senarai pesanan yang telah diproses oleh pekerja yang bukan wakil jualan.

Halaman Atas

Kata kunci SQL biasa yang anda boleh gunakan dengan subpertanyaan

Terdapat beberapa kata kunci SQL yang anda boleh gunakan dengan subpertanyaan:

Nota: Senarai ini tidak menyeluruh. Anda boleh menggunakan sebarang kata kunci SQL yang sah dalam subpertanyaan, tidak termasuk kata kunci takrifan data.

  • ALL    Gunakan ALL dalam klausa WHERE untuk mendapatkan semula baris yang memenuhi syarat apabila dibandingkan dengan setiap baris oleh subpertanyaan.

    Contohnya, katakan anda sedang menganalisis data pelajar di sebuah kolej. Para penuntut mesti mengekalkan sejumlah minimum GPA yang berbeza daripada satu pengkhususan ke pengkhususan lain. Subjek utama dan minimum GPA mereka disimpan dalam jadual bernama Pengkhususan dan maklumat penuntut berkaitan disimpan dalam jadual dipanggil Rekod_Pelajar.

    Untuk melihat senarai pengkhususan (dan minimum GPA mereka) yang mana setiap penuntut dengan subjek utama tersebut melebihi minimum GPA, anda boleh menggunakan pertanyaan berikut:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • ANY    Gunakan ANY dalam klausa WHERE untuk mendapatkan semula baris yang memenuhi syarat apabila dibandingkan dengan sekurang-kurangnya salah satu baris yang dikembalikan oleh subpertanyaan.

    Contohnya, katakan anda sedang menganalisis data pelajar di sebuah kolej. Para penuntut mesti mengekalkan sejumlah minimum GPA yang berbeza daripada satu pengkhususan ke pengkhususan lain. Subjek utama dan minimum GPA mereka disimpan dalam jadual bernama Pengkhususan dan maklumat penuntut berkaitan disimpan dalam jadual dipanggil Rekod_Pelajar.

    Untuk melihat senarai subjek utama (dan minimum GPA mereka) yang mana-mana pelajar dengan subjek utama tersebut tidak memenuhi minimum GPA, anda boleh menggunakan pertanyaan berikut:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] > ANY
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);

    Nota: Anda boleh juga menggunakan kata kunci SOME untuk tujuan yang sama; kata kunci SOME bersinonim dengan ANY.

  • EXISTS    Gunakan EXISTS dalam klausa WHERE untuk menunjukkan bahawa subpertanyaan perlu mengembalikan sekurang-kurangnya satu baris. Anda boleh juga mendahului EXISTS dengan NOT untuk menandakan bahawa subpertanyaan tidak perlu mengembalikan sebarang baris.

    Contohnya, pertanyaan berikut mengembalikan senarai produk yang dijumpai dalam sekurang-kurangnya satu pesanan sedia ada:

    SELECT *
    FROM [Products]
    WHERE EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);

    Menggunakan NOT EXISTS, pertanyaan mengembalikan senarai produk yang tidak dijumpai dalam sekurang-kurangnya satu pesanan sedia ada:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • IN    Gunakan IN dalam klausa WHERE untuk mengesahkan bahawa nilai dalam baris semasa pertanyaan utama adalah sebahagian daripada set yang dikembalikan subpertanyaan. Anda boleh juga mendahului IN dengan NOT untuk mengesahkan bahawa nilai dalam baris semasa pertanyaan utama bukan sebahagian daripada set yang dikembalikan subpertanyaan.

    Contohnya, pertanyaan berikut mengembalikan senarai pesanan (dengan tarikh pesanan) yang telah diproses oleh pekerja yang bukan wakil jualan:

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]<>'Sales Representative');

    Menggunakan NOT IN, anda boleh menulis pertanyaan yang sama dengan cara ini:

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] NOT IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]='Sales Representative');

Halaman Atas

Nota: Notis Penafian Penterjemahan Mesin: Artikel ini telah diterjemah oleh sistem komputer tanpa campur tangan manusia. Microsoft menawarkan penterjemahan mesin ini untuk membantu pengguna-pengguna yang tidak bertutur dalam Bahasa Inggeris supaya dapat menikmati kandungan mengenai produk, perkhidmatan dan teknologi Microsoft. Artikel ini mungkin mengandungi ralat perbendaharaan kata, sintaks atau tatabahasa kerana ia diterjemahkan oleh mesin.

Kembangkan kemahiran anda
Jelajahi latihan
Dapatkan ciri baru terlebih dahulu
Sertai Office Insiders

Adakah maklumat ini membantu?

Terima kasih atas maklum balas anda!

Terima kasih atas maklum balas anda! Nampaknya ia mungkin akan membantu untuk menyambungkan anda kepada salah seorang daripada ejen sokongan Office kami.

×