Rekod pertanyaan
Sebelum menjelaskan pertanyaan, saya telah menyediakan jadual data untuk semua orang. Jadual ini menyimpan baki bank dan maklumat asas pengguna.
Kami menentukan struktur jadual bernama wang.
Pernyataan untuk mencipta jadual adalah seperti berikut:
CREATE TABLE money ( id INT NOT NULL AUTO_INCREMENT , username VARCHAR(50) NOT NULL , balance FLOAT NOT NULL , province VARCHAR(20) NOT NULL , age TINYINT UNSIGNED NOT NULL , sex TINYINT NOT NULL , PRIMARY KEY (id(10)) ) ENGINE = InnoDB CHARACTER SET utf8;
Struktur jadual dan data dipaparkan seperti berikut:
Nota:
baki merujuk kepada baki
wilayah merujuk kepada wilayah
Pertanyaan asas
Nota: "*" ialah ungkapan biasa, yang bermaksud memadankan semua pernyataan pertanyaan di atas adalah bersamaan dengan yang berikut:
mysql> select * from money; +----+-----------+---------+-----------+-----+-----+ | id | username | balance | province | age | sex | +----+-----------+---------+-----------+-----+-----+ | 1 | 李文凯 | 120.02 | 湖北 | 29 | 1 | | 2 | 范冰冰 | 260.23 | 山东 | 40 | 0 | | 3 | 黄晓明 | 150.86 | 山东 | 40 | 1 | | 4 | 井柏然 | 810 | 辽宁 | 27 | 1 | | 5 | 李冰冰 | 20.15 | 黑龙江 | 43 | 0 | | 6 | 成龙 | 313 | 山东 | 63 | 1 | | 7 | 杨幂 | 123 | 北京 | 30 | 0 | | 8 | 刘诗诗 | 456 | 北京 | 29 | 1 | | 9 | 柳岩 | 23.4 | 湖南 | 36 | 0 | | 10 | 赵本山 | 3456 | 辽宁 | 63 | 1 | | 11 | 汪峰 | 34.32 | 北京 | 44 | 1 | | 12 | 郭德纲 | 212 | 天津 | 43 | 1 | +----+-----------+---------+-----------+-----+-----+ 12 rows in set (0.00 sec)
Nyatakan pertanyaan medan
<🎜. >mysql> select id,username, balance from money; +----+-----------+---------+ | id | username | balance | +----+-----------+---------+ | 1 | 李文凯 | 120.02 | | 2 | 范冰冰 | 260.23 | | 3 | 黄晓明 | 150.86 | | 4 | 井柏然 | 810 | | 5 | 李冰冰 | 20.15 | | 6 | 成龙 | 313 | | 7 | 杨幂 | 123 | | 8 | 刘诗诗 | 456 | | 9 | 柳岩 | 23.4 | | 10 | 赵本山 | 3456 | | 11 | 汪峰 | 34.32 | | 12 | 郭德纲 | 212 | +----+-----------+---------+ 12 rows in set (0.00 sec)Pertanyakan medan tunggal untuk rekod bukan pendua yang berbeza
mysql> select distinct age deptno from money; +--------+ | deptno | +--------+ | 29 | | 40 | | 27 | | 43 | | 63 | | 30 | | 36 | | 44 | +--------+ 8 rows in set (0.00 sec)
Pertanyaan bersyarat di mana
mysql> select * from money where age = 29; +----+-----------+---------+----------+-----+-----+ | id | username | balance | province | age | sex | +----+-----------+---------+----------+-----+-----+ | 1 | 李文凯 | 120.02 | 湖北 | 29 | 1 | | 8 | 刘诗诗 | 456 | 北京 | 29 | 1 | +----+-----------+---------+----------+-----+-----+ 2 rows in set (0.00 sec)Syarat yang boleh diikuti di mana operator perbandingan akan menyenaraikan rekod yang memenuhi syarat dalam set keputusan. Dalam contoh di atas, apa yang ditambah selepas di mana ialah '=' medan. Selain itu, anda juga boleh menggunakan operator perbandingan seperti >, <, >=, <=, !=;
Pengendali logik
Berbilang keadaan juga boleh menggunakan pengendali logik seperti atau dan dan untuk melaksanakan pertanyaan bersama berbilang syarat
mysql> select * from money where id <10 and province='湖北'; +----+-----------+---------+----------+-----+-----+ | id | username | balance | province | age | sex | +----+-----------+---------+----------+-----+-----+ | 1 | 李文凯 | 120.02 | 湖北 | 29 | 1 | +----+-----------+---------+----------+-----+-----+ 1 row in set (0.00 sec)
Isih set hasil
Gunakan susunan mengikut untuk mengisih set hasil selepas pilihan keluar, di mana desc dan asc berada dalam menyusun kata kunci tertib. desc bermaksud mengisih mengikut medan dalam tertib menurun, dan asc bermaksud mengisih dalam tertib menaik Jika tiada kata kunci ditulis, lalainya ialah mengisih dalam tertib menaik.
mysql> select id,username, balance from money order by balance desc; +----+-----------+---------+ | id | username | balance | +----+-----------+---------+ | 10 | 赵本山 | 3456 | | 4 | 井柏然 | 810 | | 8 | 刘诗诗 | 456 | | 6 | 成龙 | 313 | | 2 | 范冰冰 | 260.23 | | 12 | 郭德纲 | 212 | | 3 | 黄晓明 | 150.86 | | 7 | 杨幂 | 123 | | 1 | 李文凯 | 120.02 | | 11 | 汪峰 | 34.32 | | 9 | 柳岩 | 23.4 | | 5 | 李冰冰 | 20.15 | +----+-----------+---------+ 12 rows in set (0.00 sec)
Isih berbilang medan
urutan mengikut boleh diikuti oleh berbilang medan pengisihan yang berbeza, dan susunan set hasil yang berbeza bagi medan pengisihan juga berbeza Jika nilai medan pengisihan adalah sama, medan dengan nilai yang sama akan diisih mengikut ke medan pengisihan kedua.
* Nota: Jika medan pertama sudah menyusun keputusan. Medan isihan medan kedua tidak berkuat kuasa. Dalam kes ini, medan kedua adalah tidak sah. *
mysql> select id,username, balance from money order by balance desc,age asc; +----+-----------+---------+ | id | username | balance | +----+-----------+---------+ | 10 | 赵本山 | 3456 | | 4 | 井柏然 | 810 | | 8 | 刘诗诗 | 456 | | 6 | 成龙 | 313 | | 2 | 范冰冰 | 260.23 | | 12 | 郭德纲 | 212 | | 3 | 黄晓明 | 150.86 | | 7 | 杨幂 | 123 | | 1 | 李文凯 | 120.02 | | 11 | 汪峰 | 34.32 | | 9 | 柳岩 | 23.4 | | 5 | 李冰冰 | 20.15 | +----+-----------+---------+ 12 rows in set (0.00 sec)
Had set keputusan
Untuk pertanyaan atau set hasil diisih, jika anda mahu memaparkan hanya sebahagian daripada semua, gunakan had kekunci Hadkan bilangan set hasil perkataan.
mysql> select * from money limit 5; +----+-----------+---------+-----------+-----+-----+ | id | username | balance | province | age | sex | +----+-----------+---------+-----------+-----+-----+ | 1 | 李文凯 | 120.02 | 湖北 | 29 | 1 | | 2 | 范冰冰 | 260.23 | 山东 | 40 | 0 | | 3 | 黄晓明 | 150.86 | 山东 | 40 | 1 | | 4 | 井柏然 | 810 | 辽宁 | 27 | 1 | | 5 | 李冰冰 | 20.15 | 黑龙江 | 43 | 0 | +----+-----------+---------+-----------+-----+-----+ 5 rows in set (0.00 sec)
Hadkan set hasil dan susun
mysql> select id,username, balance from money order by balance desc limit 5; +----+-----------+---------+ | id | username | balance | +----+-----------+---------+ | 10 | 赵本山 | 3456 | | 4 | 井柏然 | 810 | | 8 | 刘诗诗 | 456 | | 6 | 成龙 | 313 | | 2 | 范冰冰 | 260.23 | +----+-----------+---------+ 5 rows in set (0.00 sec)
Keputusan Tetapkan pemilihan selang
Katakan saya mengambil 3 rekod bermula daripada rekod 0. Saya mahu mengambil 3 lagi rekod bermula dari yang ke-3. Apakah yang perlu saya lakukan jika saya ingin mengambil 4 rekod bermula dari rekod ke-6?
Pada masa ini, anda perlu menggunakan pemilihan selang set hasil.
mysql> select id,username, balance from money limit 0,3; +----+-----------+---------+ | id | username | balance | +----+-----------+---------+ | 1 | 李文凯 | 120.02 | | 2 | 范冰冰 | 260.23 | | 3 | 黄晓明 | 150.86 | +----+-----------+---------+ 3 rows in set (0.00 sec)
Bagaimana dengan tiga lagi bermula dari yang ketiga?
mysql> select id,username, balance from money limit 3,3; +----+-----------+---------+ | id | username | balance | +----+-----------+---------+ | 4 | 井柏然 | 810 | | 5 | 李冰冰 | 20.15 | | 6 | 成龙 | 313 | +----+-----------+---------+ 3 rows in set (0.00 sec)
Melalui idea di atas, paparan melengkapkan halaman.
Setiap halaman memaparkan 10 rekod, kemudian:
Halaman 1 adalah had 0,10
Halaman 2 adalah had 10,10
Halaman 3 adalah had 20,10
Dan seterusnya...
Fungsi statistik menggunakan
1. Bagaimana jika kita ingin mengetahui jumlah pengguna?
2. Bagaimana untuk menyemak siapa orang terkaya dalam jadual data?
3. Bagaimana jika kita ingin mengetahui jumlah purata wang yang dibelanjakan oleh pengguna?
4. Bagaimana jika kita ingin mengetahui jumlah keseluruhan pengguna?
Kami mempunyai empat fungsi statistik yang paling biasa digunakan:
mysql> select count(id) from money; +-----------+ | count(id) | +-----------+ | 12 | +-----------+ 1 row in set (0.00 sec)
Anda juga boleh memberikan alias kepada medan ! Gunakan sebagai kata kunci.
mysql> select count(id) as zongshu from money; +---------+ | zongshu | +---------+ | 12 | +---------+ 1 row in set (0.00 sec)
Semak jumlah purata
mysql> select avg(balance) from money; +--------------------+ | avg(balance) | +--------------------+ | 498.24833393096924 | +--------------------+ 1 row in set (0.00 sec)
Semak jumlah keseluruhan
mysql> select sum(balance) from money; +-------------------+ | sum(balance) | +-------------------+ | 5978.980007171631 | +-------------------+ 1 row in set (0.00 sec)
Semak jumlah maksimum
mysql> select max(balance) from money; +--------------+ | max(balance) | +--------------+ | 3456 | +--------------+ 1 row in set (0.00 sec)
Semak jumlah minimum
mysql> select min(balance) from money; +--------------------+ | min(balance) | +--------------------+ | 20.149999618530273 | +--------------------+ 1 row in set (0.00 sec)
kumpulan mengikut
Kami mengumpulkan data mengikut wilayah dalam jadual jumlah Anda akan mengetahui selepas mengumpulkan data. Wilayah yang sama akan dialih keluar. Maksudnya, wilayah adalah kumpulan.
mysql> select * from money group by province; +----+-----------+---------+-----------+-----+-----+ | id | username | balance | province | age | sex | +----+-----------+---------+-----------+-----+-----+ | 7 | 杨幂 | 123 | 北京 | 30 | 0 | | 12 | 郭德纲 | 212 | 天津 | 43 | 1 | | 2 | 范冰冰 | 260.23 | 山东 | 40 | 0 | | 1 | 李文凯 | 120.02 | 湖北 | 29 | 1 | | 9 | 柳岩 | 23.4 | 湖南 | 36 | 0 | | 4 | 井柏然 | 810 | 辽宁 | 27 | 1 | | 5 | 李冰冰 | 20.15 | 黑龙江 | 43 | 0 | +----+-----------+---------+-----------+-----+-----+
Statistik tentang jumlah bilangan kumpulan (kategori):
mysql> select deptno, count(1) from emp group by deptno; +--------+----------+ | deptno | count(1) | +--------+----------+ | 1 | 1 | | 2 | 5 | | 3 | 1 | | 5 | 4 | +--------+----------+ 4 rows in set (0.04 sec)
Selepas mengira bilangan wilayah, paparan kumpulan
mysql> select count(province),province from money group by province; +-----------------+-----------+ | count(province) | province | +-----------------+-----------+ | 3 | 北京 | | 1 | 天津 | | 3 | 山东 | | 1 | 湖北 | | 1 | 湖南 | | 2 | 辽宁 | | 1 | 黑龙江 | +-----------------+-----------+ 7 rows in set (0.00 sec)
Atas dasar pengumpulan Ia jarang digunakan untuk statistik
dengan rollup. Titik pengetahuan ini ditetapkan pada tahap pemahaman.
Fungsi utamanya adalah untuk mengira data terkumpul dan kemudian melakukan jumlah kiraan.
Berdasarkan statistik di atas, jumlah nombor dikira Dalam hasil contoh berikut, terdapat tambahan 12 NULL di penghujungnya.
mysql> select count(province),province from money group by province with rollup; +-----------------+-----------+ | count(province) | province | +-----------------+-----------+ | 3 | 北京 | | 1 | 天津 | | 3 | 山东 | | 1 | 湖北 | | 1 | 湖南 | | 2 | 辽宁 | | 1 | 黑龙江 | | 12 | NULL | +-----------------+-----------+ 8 rows in set (0.00 sec)
Hasilnya kemudian ditapis mempunyai
Klausa mempunyai adalah serupa dengan di mana tetapi juga berbeza. Kedua-duanya adalah pernyataan yang menetapkan syarat.
yang mempunyai ialah kumpulan penapisan dan di manakah rekod penapisan.
mysql> select count(province) as result ,province from money group by province having result >2; +--------+----------+ | result | province | +--------+----------+ | 3 | 北京 | | 3 | 山东 | +--------+----------+ 2 rows in set (0.00 sec)
Menggunakan SQL secara keseluruhan
Kami telah menggunakan pernyataan tertentu secara individu dalam pernyataan di atas, bukan secara keseluruhan.
Kami kini akan menyepadukan kenyataan dan menggunakannya bersama sekali. Struktur sintaks yang digunakan dengan pernyataan SQL keseluruhan adalah seperti berikut:
PILIH
[medan 1 [sebagai alias 1], [fungsi (medan 2),]...medan n]
DARI nama jadual
[WHERE mana keadaan]
[KUMPULAN MENGIKUT medan]
[MEMPUNYAI where_contition]
[syarat pesanan]
[syarat had]
Nota: Di atas [ ] boleh digunakan dalam pernyataan untuk mewakili pilihan.
Ringkasan sintaks akhir adalah seperti berikut:
Kami melaksanakan penggunaan gabungan keseluruhan untuk menanyakan medan jadual wang : id, nama pengguna, baki, wilayah memerlukan baki id>1 lebih besar daripada 50 dan wilayah itu digunakan untuk pengumpulan. Kami menggunakan ID pengguna untuk pesanan menurun, dan hanya 3 item dibenarkan untuk dipaparkan.
Akhir sekali tulis pernyataan SQL seperti berikut, dan hasil pertanyaan adalah seperti berikut:
mysql> select id,username,balance,province from money where id > 1 and balance > 50 group by province order by id desc limit 3; +----+-----------+---------+----------+ | id | username | balance | province | +----+-----------+---------+----------+ | 12 | 郭德纲 | 212 | 天津 | | 7 | 杨幂 | 123 | 北京 | | 4 | 井柏然 | 810 | 辽宁 | +----+-----------+---------+----------+ 3 rows in set (0.00 sec)