Ini adalah sesuatu yang sangat mengganggu saya di sekolah.
Lima tahun yang lalu, ketika saya belajar SQL, saya selalu bertanya-tanya mengapa kita pertama menentukan bidang yang kita inginkan dan kemudian dari mana kita menginginkannya.
Menurut ide saya, kita harus menulis:
From Employee e
Select e.Name
Jadi mengapa norma mengatakan yang berikut?
Select e.Name -- Eeeeek, what does e mean?
From Employee e -- Ok, now I know what e is
Butuh waktu berminggu-minggu bagi saya untuk memahami SQL, dan saya tahu bahwa banyak waktu yang dikonsumsi oleh urutan elemen yang salah.
Itu seperti menulis dalam C #:
string name = employee.Name;
var employee = this.GetEmployee();
Jadi, saya berasumsi bahwa itu memiliki alasan historis. Mengapa?
Linq
tidak dapat menggunakanSQL
sintaks standar .Jawaban:
Awalnya bahasa SQL disebut SEQUEL singkatan
dengan penekanan pada Bahasa Inggris , dengan asumsi itu mirip dengan pengejaan ke bahasa alami .
Sekarang, eja dua pernyataan ini seperti Anda mengeja kalimat bahasa Inggris:
Kedua terdengar lebih dekat dengan bahasa Inggris alami karena itu ditetapkan sebagai norma.
Alasan yang sama BTW berlaku untuk
Where
dll - pernyataan SQL sengaja dirancang untuk terdengar dekat dengan bahasa alami.sumber
Karena SELECT diperlukan dalam pernyataan pilih dan FROM tidak.
Tentu saja pernyataan sql Anda dapat diuraikan untuk mencari SELECT, DELETE, UPDATE setelah FROM, tetapi apakah ini benar-benar masalah besar?
Ingat, ini semua dilakukan sebelum Intellisense. Itu tidak rumit.
Sunting: Mungkin tidak ada alasan penerjemah sql tidak dapat dibangun untuk melakukan keduanya.
sumber
FROM myTable;
alih-alihFROM myTable SELECT *
; Ini hanya tampak seperti persyaratan karena memang sudah biasa.FROM
diperlukan. Inilah sebabnya mengapa banyak RDBMS memiliki tabel yang disebutDUAL
atau tabel dummy baris tunggal lainnyaSELECT FROM Customers COLUMNS FirstName, LastName, PhoneNumber
.Tidak tahu jawaban yang bisa saya cadangkan dengan referensi, tetapi jika saya harus berspekulasi: SQL adalah bahasa deklaratif , pernyataan bahasa tersebut menggambarkan apa yang ingin Anda lakukan sebagai lawan dari bagaimana Anda ingin melakukannya.
Dengan demikian, "SELECT X FROM Y" terdengar sebagai cara yang lebih tepat untuk menjawab "Apa yang ingin saya pilih dari basis data", yang bertentangan dengan penulisan "FROM Y SELECT X".
Selain itu, dalam SQL, SELECT / UPDATE / INSERT menentukan jenis operasi yang akan Anda lakukan dan FROM hanyalah klausa yang membantu Anda memilih dari tabel di database. Sekali lagi, apa yang Anda lakukan dengan data lebih diutamakan dari seberapa tepatnya Anda akan mencapainya.
sumber
SQL adalah bahasa permintaan terstruktur yang ditargetkan untuk penutur bahasa Inggris. SELECT, INSERT, UPDATE, dan DELETE adalah perintah penting. Dalam bahasa Inggris perintah imperatif memulai kalimat atau pernyataan. Membandingkan:
untuk
SQL mengikuti format kedua (imperatif). Juga empat perintah imperatif memiliki tiga format yang sangat berbeda. Mempertimbangkan:
atau
Jika Anda tahu tindakan yang Anda lakukan, lebih mudah untuk memilih format yang benar.
Dalam hal pilih, Anda menentukan atribut mana yang Anda inginkan, lalu menambahkan tabel yang memilikinya. Saat Anda membangun kriteria pemilihan, Anda dapat menambahkan tabel tambahan. Saat Anda menambahkan kriteria secara dinamis, biasanya dapat dilakukan di akhir bagian statis dari kueri.
sumber
UPDATE ... FROM
bukan struktur seperti bahasa Inggris, IMO. Bukannya aku punya saran yang lebih baik ...Pernyataan SQL dimulai dengan kata kerja. Itu adalah pilihan para perancang bahasa, dan banyak bahasa pemrograman bekerja seperti itu. Secara semantik, tidak jarang melihat bahasa pemrograman yang bekerja seperti ini:
Juga, dalam kasus pernyataan SELECT yang Anda berikan sebagai contoh, sintaks yang Anda usulkan akan menempatkan objek pertama dalam pernyataan. Alih-alih urutan kalimat VSO (kata kerja, objek, objek), Anda akan memiliki OVS, yang akan menjadi sangat aneh bila dibandingkan dengan bahasa alami. SVO (mis. Bahasa Inggris), VSO (mis. Bahasa Arab), dan SOV (mis. Bahasa Latin) adalah pendekatan yang lebih masuk akal dari pembicaraan manusia.
sumber
Saya pikir itu akan menyulitkan penguraian, terutama dengan subqueries, misalnya
Mem-parsing ini akan lebih rumit. Anda tidak bisa mengatakan bahwa UPDATE adalah kesalahan sintaksis sampai Anda telah mem-parsing klausa FROM, dan parser harus mengingat konteks yang cukup untuk mengetahui bahwa ia mem-parsing subquery. Saya kira pembaruan tidak diperbolehkan di subquery, tetapi jika itu (mungkin dengan klausa PENGEMBALIAN) maka Anda mungkin tidak dapat mengatakan bahwa ini tidak valid sampai Anda telah menguraikan pernyataan SELECT.
Setidaknya ini akan meningkatkan k (lookahead) untuk tata bahasa dan paling buruk membuatnya menjadi konteks yang sensitif, meskipun ini memperluas batas makalah desain kompiler saya yang agak samar-samar diingat dari universitas.
sumber
QUEL
yang dikembangkan sekitar waktu yang sama urutan klausa sintaksis adalah apa yang disarankan OP.