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

Pernyataan kueri SQL

SELECT sid, 'Math' as subject, math as mark
FROM your_table
UNION ALL
SELECT sid, 'English' as subject, english as mark
FROM your_table
UNION ALL
SELECT sid, 'French' as subject, french as mark
FROM your_table

Tetapi akar penyebab masalah Anda adalah desain database yang salah. Subjek tersebut tidak boleh berupa kolom sejak awal dan harus disimpan dalam tabel seperti output yang Anda inginkan.

Sunting

Jadi apa fungsinya?

SELECT sid, 'Math' as subject, math as mark
FROM your_table

Mengembalikan sid kolom, kolom "virtual" dengan nilai hardcode 'Math' yang diberi nama subject . Karena Anda belum menyimpan nilai 'Math' di suatu tempat, ini harus di-hardcode. Kemudian akhirnya juga memilih kolom math menggunakan nama mark alih-alih. Perhatikan perbedaan antara math dan 'Math' - satu adalah kolom yang lain string literal karena tanda kutip tunggal.

Ini dilakukan untuk ketiga mata pelajaran (jika Anda memiliki empat mata pelajaran, Anda memerlukan empat bagian dalam UNION)

UNION ALL menggabungkan ketiga SELECT menjadi satu kueri tunggal. solusi andr (yang telah diturunkan oleh seseorang yang tidak memahaminya) membuatnya lebih jelas dengan secara eksplisit memasukkannya ke dalam tabel turunan (atau tampilan sebaris).

Jalankan setiap SELECT sendiri untuk melihat apa yang dilakukan masing-masing bagian.

Bagian as mark disebut "alias kolom" dan juga dapat digunakan untuk mengambil kolom dengan nama yang sama dari tabel yang berbeda dalam gabungan dan masih memiliki nama unik dalam kumpulan hasil.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Streaming file biner dari MySQL untuk diunduh dengan PHP

  2. MySQL Update Incremented (Tidak Auto-Incremented) Nilai Kolom

  3. ROW_NUMBER() di MySQL

  4. Apakah mungkin memiliki kolom MySQL yang berisi banyak nilai sebagai kunci asing?

  5. Perbedaan antara SET autocommit=1 dan MULAI TRANSAKSI di mysql (Apakah saya melewatkan sesuatu?)