Rumah > Topik > excel > Ringkaskan penggunaan 'jadual' dalam pertanyaan Excel SQL

Ringkaskan penggunaan 'jadual' dalam pertanyaan Excel SQL

WBOY
Lepaskan: 2022-04-06 17:36:32
ke hadapan
3382 orang telah melayarinya

Artikel ini membawa anda pengetahuan yang berkaitan tentang excel, yang terutamanya memperkenalkan penggunaan jadual dalam pertanyaan SQL, termasuk jadual serantau, jadual buku kerja silang, dll. , harap ia membantu semua orang.

Ringkaskan penggunaan 'jadual' dalam pertanyaan Excel SQL

Cadangan pembelajaran berkaitan: tutorial excel

Hari ini kita akan bercakap tentang jadual Excel dalam pernyataan SQL.

1. Jadual kawasan

Terdapat banyak perbezaan antara lembaran kerja Excel dan jadual data pangkalan data Perkara yang paling ketara ialah jadual data pangkalan data boleh difahami sebagai terdiri daripada baris dan lajur Lembaran kerja Excel terdiri daripada sel satu demi satu, dan sel ini mempunyai kaedah ungkapan alamat yang unik, iaitu, A1 atau R1C1 Mereka juga boleh membentuk julat sel dengan data bersambung, seperti A2:H8.

Maka persoalannya ialah, jika kita hanya perlu mengira sebahagian daripada lembaran kerja Excel, bagaimana kita harus menyatakannya dalam SQL?

Masalah seperti ini sangat biasa.

Sebagai contoh, baris tajuk Excel ramai orang tidak berada di baris pertama jadual, tetapi di baris kedua...

Seperti yang ditunjukkan dalam rajah di bawah

Ringkaskan penggunaan jadual dalam pertanyaan Excel SQL

Pada masa ini, kami ingin mengira julat sel lajur A2:F, supaya lebih mudah untuk kami menggunakan nama medan untuk memproses data, berbanding keseluruhan lembaran kerja Excel...

Untuk contoh lain, a Terdapat dua atau lebih "meja" di dalam dan di luar meja... Apakah maksud ayat ini?

Lihat gambar di bawah

Ringkaskan penggunaan jadual dalam pertanyaan Excel SQL

Dalam jadual yang ditunjukkan dalam gambar, terdapat kedua-dua "meja guru" dan "meja pelajar"; hanya mahu SQL merujuk dan mengira data jadual guru A2:D8...

... SQL dalam Excel sebenarnya menyokong penggunaan julat sel lembaran kerja sebagai "jadual".

Untuk masalah yang ditunjukkan dalam gambar di atas, SQL boleh ditulis sebagai:

SELECT 姓名,学科 FROM [数据表$A2:D8]
Salin selepas log masuk

Hasil pertanyaan adalah seperti berikut:

Ringkaskan penggunaan jadual dalam pertanyaan Excel SQL

Dan kes pertama, kita tahu bahawa data bermula dalam sel A2, tetapi kita tidak tahu sel mana dalam lajur F ia berakhir. SQL boleh ditulis sebagai:

SELECT 姓名,爱好 FROM [学生表$A2:F]
Salin selepas log masuk

Selain itu , jika kita memerlukan rujukan SQL untuk mengira data keseluruhan lajur D:G jadual , SQL boleh ditulis sebagai:

SELECT * FROM [学生表$D:G]
Salin selepas log masuk

Untuk meringkaskan cara di atas untuk menyatakan kawasan lembaran kerja Excel, iaitu, nama lembaran kerja, tanda dolar $, alamat sel dalam keadaan rujukan relatif, dan akhirnya dibungkus dalam kurungan segi empat sama .

Hanya ungu.

Petua untuk bahagian ini:

[Jadual pelajar $A2:F], kami mengatakan bahawa pernyataan ini boleh merujuk kepada julat sel dari lajur A2 hingga lajur F di mana data terakhir wujud, tetapi Ini mempunyai prasyarat yang terhad, iaitu, ia bukan keadaan yang bersambung sendiri. Yang dipanggil self-join merujuk kepada buku kerja yang SQL harus digunakan untuk memautkan dirinya sendiri. Dalam keadaan memaut sendiri, ungkapan maksimum A2:F ialah A2:F65536 baris jika baris rujukan yang diperlukan pada masa ini melebihi 65536 baris, sila gunakan mod keseluruhan jadual.

2. Jadual buku kerja silang

Masalah yang terkenal ialah fungsi Excel sangat letih apabila memproses data buku kerja silang, kecuali untuk beberapa fungsi rujukan carian (seperti VLOOKUP dll. ), kebanyakan fungsi perlu membuka buku kerja yang berkaitan sebelum ia boleh dikira dan digunakan.

Ya, fungsi VLOOKUP tidak perlu membuka buku kerja yang berkaitan dan boleh digunakan merentas buku kerja Selain itu, selepas formula VLOOKUP ditulis, walaupun anda memadamkan buku kerja yang dirujuk, ia tidak akan menghalangnya. . Pengiraan, ini kerana ia telah mencache data yang berkaitan dalam buku kerja di mana formula terletak, tetapi mod VLOOKUP tidak menyokong fungsi bersarang yang kompleks... Petik jari anda, jika anda berminat, kami akan berbual secara berasingan satu hari lagi. .

...Ahem, kembali ke SQL~~

...Pernyataan SQL yang kami kongsikan sebelum ini semuanya digunakan untuk memproses jadual buku kerja semasa jika data yang perlu kami proses terletak dalam buku kerja lain, bagaimana untuk menyatakan SQL?

Sebagai contoh, dapatkan semua data "Jadual Gred" dalam "Jadual Pelajar. Jangan biarkan saya mengagumi anda.

Jika kaedah OLE DB (rujuk Bab 1 siri tutorial ini untuk kaedah ini), pernyataan SQL adalah seperti berikut

SELECT * FROM [D:\EH小学\学生表.xlsx].[成绩表$]
Salin selepas log masuk

Rentetan jadual yang ditentukan selepas FROM terdiri daripada dua bahagian, yang pertama Di dalam kurungan segi empat sama ialah nama buku kerja penuh dengan akhiran laluan penyimpanan buku kerja yang ditentukan.

Jika anda menggunakan pernyataan SQL melalui VBA ADO...

Amaran di hadapan rak buku: Kasut kanak-kanak dengan asas VBA yang lemah, sila langkau kandungan berikut...

Berbanding dengan kaedah OLE DB, kaedah VBA ADO jauh lebih fleksibel Ia boleh menggunakan ADO untuk terus mencipta dan membuka pautan ke buku kerja yang ditentukan, jadi pernyataan SQL tidak perlu menyatakan nama lengkap buku kerja, dsb. .

Rujukan kod adalah seperti berikut

Sub ADO_SQL()
'适用于除2003版以外的高版本Excel
Dim cnn As Object, rst As Object
Dim strPath As String, strCnn As String, strSQL As String
Dim i As Long
Set cnn = CreateObject("adodb.connection")
strPath = "D:\EH小学\学生表.xlsx" '指定工作簿
strCnn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & strPath
cnn.Open strCnn '创建并打开到指定工作簿的链接
strSQL = "SELECT * FROM [成绩表$]" 'strSQL语句,查询成绩表的所有数据
Set rst = cnn.Execute(strSQL) '执行strSQL
Cells.ClearContents
For i = 0 To rst.Fields.Count - 1
Cells(1, i + 1) = rst.Fields(i).Name
Next
Range("a2").CopyFromRecordset rst
cnn.Close
Set cnn = Nothing
End Su
Salin selepas log masuk

Baris ke-7 kod di atas secara langsung menentukan nama lengkap buku kerja yang perlu disambungkan dan tidak memerlukan pemprosesan khas dalam pernyataan SQL.

但更多的情况是,ADO创建的链接是一个工作簿,需要获取的数据在另一个或多个工作簿,例如两个工作簿之间的数据查询统计。此时通常使用的代码如下

Sub ADO_SQL2()
'适用于除2003版以外的高版本Excel
Dim cnn As Object, rst As Object
Dim strPath As String, strCnn As String, strSQL As String
Dim i As Long
Set cnn = CreateObject("adodb.connection")
strPath = ThisWorkbook.FullName '代码所在工作簿的完整名称
strCnn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & strPath
cnn.Open strCnn '创建到代码所在工作簿的链接
strSQL = "SELECT * FROM [Excel 12.0;DATABASE=D:\EH小学\学生表.xlsm].[成绩表$]"
Set rst = cnn.Execute(strSQL) '执行SQL
Cells.ClearContents
For i = 0 To rst.Fields.Count - 1
Cells(1, i + 1) = rst.Fields(i).Name
Next
Range("a2").CopyFromRecordset rst
cnn.Close
Set cnn = Nothing
End Sub
Salin selepas log masuk

代码中第7行创建了当前工作簿的链接,SQL语句中又指定了另外一个工作簿的链接。SQL语句如下

SELECT * FROM [Excel 12.0;DATABASE=D:\EH小学\学生表.xlsx].[成绩表$]
Salin selepas log masuk

FROM指定表的字符串有两部分组成。第一个中括号中,Excel 12.0是目标工作簿的版本号,第2章时我们讲过,Excel 12.0适用于除了2003以外的所有Excel版本。DATABASE指定的是数据源工作簿的路径和名称。第2个中括号内是工作表名。两个中括号之间使用英文点号相连。

看起来似乎VBA+ADO方法的SQL语句比OLE DB法更复杂?确实如此,不过前者的功能也更强大。比如,它可以通过VBA对象的属性、方法,循环和判断语句等,有条件的筛选工作簿和工作表……相比之下,OLE DB中的SQL语句就是纯手工常量模式了。当然,更重要的是,前者不但可以查数据,还可以增改删数据,后者却只限于查。

相关学习推荐:excel教程

Atas ialah kandungan terperinci Ringkaskan penggunaan 'jadual' dalam pertanyaan Excel SQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:excelhome.net
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan