Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pertanyaan Dasar MySQL

Anda dapat mencoba pertanyaan dihttp://sqlfiddle.com/#!9/839d2/1

Kueri 1

Daftar semua planet yang memiliki kapten. Ini menunjukkan id_planet, planet_name, total kapten di masing-masing planet tersebut serta jumlah pertempuran (jika ada) yang terjadi di sana.

SELECT DISTINCT aa.id_planet, aa.planet_name, _aa.captains_count, _bb.battles_count
FROM planet AS aa
INNER JOIN soldier AS bb
ON aa.id_planet = bb.planet_id
INNER JOIN (
    SELECT planet_id, COUNT(*) AS captains_count
    FROM soldier
    WHERE rank = 'captain'
    GROUP BY planet_id
) AS _aa
ON aa.id_planet = _aa.planet_id
LEFT JOIN (
    SELECT id_planet_battle, COUNT(*) AS battles_count
    FROM battle
    GROUP BY id_planet_battle
) AS _bb
ON aa.id_planet = _bb.id_planet_battle
WHERE bb.rank = 'captain';

Anda dapat memperoleh hasil yang sama menggunakan ini:

SELECT DISTINCT aa.id_planet, aa.planet_name,
(
    SELECT COUNT(*)
    FROM soldier AS _aa
    WHERE _aa.rank = 'captain' AND aa.id_planet = _aa.planet_id
    GROUP BY _aa.planet_id
) AS captains_count,
(
    SELECT COUNT(*)
    FROM battle AS _bb
    WHERE aa.id_planet = _bb.id_planet_battle
    GROUP BY _bb.id_planet_battle 
) AS battles_count
FROM planet AS aa
INNER JOIN soldier AS bb
ON aa.id_planet = bb.planet_id
WHERE bb.rank = 'captain';

Kueri 3

SELECT aa.name, aa.rank, bb.planet_name AS planet_from, (
    SELECT COUNT(*) 
    FROM soldier AS _aa 
    WHERE _aa.planet_id = aa.planet_id
) AS number_of_soldiers, 
(
    SELECT COUNT(*)
    FROM battle AS _bb
    WHERE _bb.id_planet_battle = aa.planet_id
) AS number_of_battles
FROM soldier AS aa
INNER JOIN planet AS bb
ON aa.planet_id = bb.id_planet;

Di sini, saya tidak menggunakan Gabung untuk menghitung number_of_soldiers dan number_of_battles seperti yang saya lakukan di Query 1.1 karena itu akan menjadi subquery yang berkorelasi dan karena itu tidak dapat memiliki akses di kueri luar (https://dev.mysql.com/doc/refman/5.5/en/from-clause -subqueries.html ).

Kueri salah:

SELECT DISTINCT aa.id_planet, aa.planet_name, _aa.captains_count, _bb.battles_count
FROM planet AS aa
INNER JOIN soldier AS bb
ON aa.id_planet = bb.planet_id
INNER JOIN (
    SELECT COUNT(*) AS captains_count
    FROM soldier AS _aa
    WHERE _aa.rank = 'captain' AND aa.id_planet = _aa.planet_id
    GROUP BY _aa.planet_id
) AS _aa
ON aa.id_planet = _aa.planet_id
LEFT JOIN (
    SELECT COUNT(*) AS battles_count
    FROM battle AS _bb
    WHERE aa.id_planet = _bb.id_planet_battle
    GROUP BY _bb.id_planet_battle 
) AS _bb
ON aa.id_planet = _bb.id_planet_battle
WHERE bb.rank = 'captain';

Jadi query di atas salah dan menghasilkan error:Unknown column 'aa.id_planet' di 'where clause'.

Untuk pertanyaan kedua yang Anda minta, saya harap orang lain dapat mencobanya.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP sisipan massal foreach

  2. MYSQL:Bagaimana saya bisa menemukan 'tanggal Senin lalu' (Masalah kinerja)

  3. Periksa kesalahan kueri codeigniter alih-alih menunjukkannya kepada pengguna

  4. PDOException "tidak dapat menemukan driver"

  5. Bagaimana cara memeriksa keberadaan data dua kolom di dua tabel yang berbeda? MySQL