python數據庫-MySQL單表查詢基本操做(50)

 

1、條件查詢

一、查詢的基本語法

select * from 表名;
  • from關鍵字後面寫表名,表示數據來源因而這張表
  • select後面寫表中的列名,若是是*表示在結果中顯示錶中全部列
  • 在select後面的列名部分,能夠使用as爲列起別名,這個別名出如今結果集中
  • 若是要查詢多個列,之間使用逗號分隔

二、消除重複行

  在select後面列前使用distinct能夠消除重複的行mysql

elect distinct h_gender from hero;

 

三、使用where子句對錶中的數據篩選,結果爲true的行會出如今結果集中  

select * from 表名 where 條件;

四、比較運算符

  • 等於=
  • 大於>
  • 大於等於>=
  • 小於<
  • 小於等於<=
  • 不等於!=或<>
4.一、查詢表中所有數據(這個表是我提早建立好的)
mysql> select *from hero; +------+-----------+--------------+---------+----------+------------+----------+--------+
| h_id | h_name    | h_skill      | h_blood | h_attack | h_isdelete | h_gender | h_type |
+------+-----------+--------------+---------+----------+------------+----------+--------+
|    1 | 李白      | 青蓮劍歌     |    1000 |     1000 |            |        1 | 刺客   |
|    2 | 魯班      | 空中支援     |     950 |     1000 |            |        1 | 射手   |
|    3 | 王昭君    | 凜冬已至     |     950 |      950 |            |        0 | 法師   |
|    4 | 虞姬      | 樹神護佑     |     900 |      950 |            |        0 | 射手   |
|    5 | 甄姬      | 洛神降臨     |     900 |      900 |            |        0 | 法師   |
|    6 | 莊周      | 天人合一     |     850 |      900 |            |        1 | 輔助   |
|    7 | 韓信      | 國士無雙     |     850 |      850 |            |        1 | 刺客   |
|    8 | 孫尚香    | 窮極弩炮     |     800 |      850 |            |        0 | 射手   |
|    9 | 孫策      | 長帆破浪     |     800 |      800 |            |        1 | 戰士   |
|   10 | 公孫離    | 孤鶩斷霞     |     750 |      800 |            |        0 | 射手   |
+------+-----------+--------------+---------+----------+------------+----------+--------+
10 rows in set (0.00 sec)
4.二、查詢h_attack大於900的
mysql> select *from hero where h_attack>900; +------+-----------+--------------+---------+----------+------------+----------+--------+
| h_id | h_name    | h_skill      | h_blood | h_attack | h_isdelete | h_gender | h_type |
+------+-----------+--------------+---------+----------+------------+----------+--------+
|    1 | 李白      | 青蓮劍歌     |    1000 |     1000 |            |        1 | 刺客   |
|    2 | 魯班      | 空中支援     |     950 |     1000 |            |        1 | 射手   |
|    3 | 王昭君    | 凜冬已至     |     950 |      950 |            |        0 | 法師   |
|    4 | 虞姬      | 樹神護佑     |     900 |      950 |            |        0 | 射手   |
+------+-----------+--------------+---------+----------+------------+----------+--------+

五、邏輯運算符

  • and
  • or
  • not

5.一、查詢h_attack大於950而且h_blood大於900的herosql

mysql> select *from hero where h_attack>950 and h_blood>900; +------+--------+--------------+---------+----------+------------+----------+--------+
| h_id | h_name | h_skill      | h_blood | h_attack | h_isdelete | h_gender | h_type |
+------+--------+--------------+---------+----------+------------+----------+--------+
|    1 | 李白   | 青蓮劍歌     |    1000 |     1000 |            |        1 | 刺客   |
|    2 | 魯班   | 空中支援     |     950 |     1000 |            |        1 | 射手   |
+------+--------+--------------+---------+----------+------------+----------+--------+

5.二、查詢h_attack大於950或者h_blood大於900的hero瀏覽器

mysql> select *from hero where h_attack>950 or h_blood>900; +------+-----------+--------------+---------+----------+------------+----------+--------+
| h_id | h_name    | h_skill      | h_blood | h_attack | h_isdelete | h_gender | h_type |
+------+-----------+--------------+---------+----------+------------+----------+--------+
|    1 | 李白      | 青蓮劍歌       |    1000 |     1000 |            |        1 | 刺客   |
|    2 | 魯班      | 空中支援       |     950 |     1000 |            |        1 | 射手   |
|    3 | 王昭君    | 凜冬已至       |     950 |      950 |            |        0 | 法師   |
+------+-----------+--------------+---------+----------+------------+----------+--------+

2、模糊查詢

  • like
  • %表示任意多個任意字符
  • _表示一個任意字符

一、查詢名字裏姓‘孫’的

mysql> select *from hero where h_name like '孫%'; +------+-----------+--------------+---------+----------+------------+----------+--------+
| h_id | h_name    | h_skill      | h_blood | h_attack | h_isdelete | h_gender | h_type |
+------+-----------+--------------+---------+----------+------------+----------+--------+
|    8 | 孫尚香    | 窮極弩炮       |     800 |      850 |            |        0 | 射手   |
|    9 | 孫策      | 長帆破浪       |     800 |      800 |            |        1 | 戰士   |
+------+-----------+--------------+---------+----------+------------+----------+--------+

二、查詢名字裏麪包含‘孫’的函數

mysql> select *from hero where h_name like '%孫%'
+------+-----------+--------------+---------+----------+------------+----------+--------+
| h_id | h_name    | h_skill      | h_blood | h_attack | h_isdelete | h_gender | h_type |
+------+-----------+--------------+---------+----------+------------+----------+--------+
|    8 | 孫尚香    | 窮極弩炮     |     800 |      850 |            |        0 | 射手   |
|    9 | 孫策      | 長帆破浪     |     800 |      800 |            |        1 | 戰士   |
|   10 | 公孫離    | 孤鶩斷霞     |     750 |      800 |            |        0 | 射手   |
+------+-----------+--------------+---------+----------+------------+----------+--------+

三、查詢性孫的而且名只有一個字spa

mysql> select *from hero where h_name like '孫_'; +------+--------+--------------+---------+----------+------------+----------+--------+
| h_id | h_name | h_skill      | h_blood | h_attack | h_isdelete | h_gender | h_type |
+------+--------+--------------+---------+----------+------------+----------+--------+
|    9 | 孫策   | 長帆破浪     |     800 |      800 |            |        1 | 戰士   |
+------+--------+--------------+---------+----------+------------+----------+--------+

 

3、範圍查詢

  • in表示在一個非連續的範圍內

例如:查找h_id爲一、三、5的英雄code

mysql> select *from hero where h_id in(1,3,5); +------+-----------+--------------+---------+----------+------------+----------+--------+
| h_id | h_name    | h_skill      | h_blood | h_attack | h_isdelete | h_gender | h_type |
+------+-----------+--------------+---------+----------+------------+----------+--------+
|    1 | 李白      | 青蓮劍歌       |    1000 |     1000 |            |        1 | 刺客   |
|    3 | 王昭君    | 凜冬已至       |     950 |      950 |            |        0 | 法師   |
|    5 | 甄姬      | 洛神降臨       |     900 |      900 |            |        0 | 法師   |
+------+-----------+--------------+---------+----------+------------+----------+--------+
  • between ... and ...表示在一個連續的範圍內

例如:查詢血量在900-950之間的應用blog

mysql> select *from hero where h_blood between 900 and 950; +------+-----------+--------------+---------+----------+------------+----------+--------+
| h_id | h_name    | h_skill      | h_blood | h_attack | h_isdelete | h_gender | h_type |
+------+-----------+--------------+---------+----------+------------+----------+--------+
|    2 | 魯班      | 空中支援       |     950 |     1000 |            |        1 | 射手   |
|    3 | 王昭君    | 凜冬已至       |     950 |      950 |            |        0 | 法師   |
|    4 | 虞姬      | 樹神護佑       |     900 |      950 |            |        0 | 射手   |
|    5 | 甄姬      | 洛神降臨       |     900 |      900 |            |        0 | 法師   |
+------+-----------+--------------+---------+----------+------------+----------+--------+

 

4、空查詢

  • 注意:null與''是不一樣的
  • 判空 is null

查詢isdelect沒有填寫的hero排序

select *from hero where h_isdelete is null;

 

5、聚合查詢

爲了快速獲得統計數據,提供了5個聚合函數索引

一、count(*)表示計算總行數,括號中寫星與列名,結果是相同的

查詢hero的總數it

mysql> select count(*) from hero; +----------+
| count(*) |
+----------+
|       10 |
+----------+

二、max(列)表示求此列的最大值

查詢攻擊力最大的值

mysql> select max(h_attack) from hero; +---------------+
| max(h_attack) |
+---------------+
|          1000 |
+---------------+

三、min(列)表示求此列的最小值

查詢攻擊力最小的值

mysql> select min(h_attack) from hero; +---------------+
| min(h_attack) |
+---------------+
|           800 |
+---------------+

四、sum(列)表示求此列的和

查詢全部hero的攻擊力之和

mysql> select sum(h_attack) from hero; +---------------+
| sum(h_attack) |
+---------------+
|          9000 |
+---------------+

五、avg(列)表示求此列的平均值

查詢全部hero的攻擊力平均值

mysql> select avg(h_attack) from hero;
+---------------+
| avg(h_attack) |
+---------------+
|      900.0000 |
+---------------+ 

 

6、分組查找

  • 按照字段分組,表示此字段相同的數據會被放到一個組中
  • 分組後,只能查詢出相同的數據列,對於有差別的數據列沒法出如今結果集中
  • 能夠對分組後的數據進行統計,作聚合運算
select 列1,列2,聚合... from 表名 group by 列1,列2,列3...

 一、查詢男hero和女hero的總數

mysql> select h_gender as 性別,count(*) from hero group by h_gender; +--------+----------+
| 性別   | count(*) |
+--------+----------+
|      0 |        5 |
|      1 |        5 |
+--------+----------+

二、查詢按照英雄類型、性別分組統計

mysql> select h_type as 英雄類型,h_gender as 性別,count(*) as 個數 from hero group by h_type,h_gender;
+--------------+--------+--------+
| 英雄類型      | 性別    | 個數   |
+--------------+--------+--------+
| 刺客         |      1 |      2 |
| 射手         |      0 |      3 |
| 射手         |      1 |      1 |
| 戰士         |      1 |      1 |
| 法師         |      0 |      2 |
| 輔助         |      1 |      1 |
+--------------+--------+--------+

三、分組後的數據篩選

  having後面的條件運算符與where的相同

 例如:查詢男英雄的個數

方法一:

mysql> select count(*) from hero where h_gender = 1;
+----------+
| count(*) |
+----------+
|        5 |
+----------+

方法二:

mysql> select h_gender as 性別,count(*) from hero group by h_gender having h_gender=1;
+--------+----------+
| 性別    | count(*) |
+--------+----------+
|      1 |        5 |
+--------+----------+

對比where與having

  • where是對from後面指定的表進行數據篩選,屬於對原始數據的篩選
  • having是對group by的結果進行

 

7、排序

  爲了方便查看數據,能夠對數據進行排序

select * from 表名
order by 列1 asc|desc,列2 asc|desc,...
  • 將行數據按照列1進行排序,若是某些行列1的值相同時,則按照列2排序,以此類推
  • 默認按照列值從小到大排列
  • asc從小到大排列,即升序
  • desc從大到小排序,即降序
mysql> select *from hero where h_gender=1 order by h_attack asc;
+------+--------+--------------+---------+----------+------------+----------+--------+
| h_id | h_name | h_skill      | h_blood | h_attack | h_isdelete | h_gender | h_type |
+------+--------+--------------+---------+----------+------------+----------+--------+
|    9 | 孫策   | 長帆破浪       |     800 |      800 |            |        1 | 戰士   |
|    7 | 韓信   | 國士無雙       |     850 |      850 |            |        1 | 刺客   |
|    6 | 莊周   | 天人合一       |     850 |      900 |            |        1 | 輔助   |
|    1 | 李白   | 青蓮劍歌       |    1000 |     1000 |            |        1 | 刺客   |
|    2 | 魯班   | 空中支援       |     950 |     1000 |            |        1 | 射手   |
+------+--------+--------------+---------+----------+------------+----------+--------+

 

8、分頁查找

  當數據量過大時,在一頁中查看數據是一件很是麻煩的事情,並且如今不少瀏覽器也都是分頁顯示數據,例如:

語法:

select * from 表名 limit start,count
  • 從start開始,獲取count條數據
  • start索引從0開始
mysql> select *from hero limit 0,5; +------+-----------+--------------+---------+----------+------------+----------+--------+
| h_id | h_name    | h_skill      | h_blood | h_attack | h_isdelete | h_gender | h_type |
+------+-----------+--------------+---------+----------+------------+----------+--------+
|    1 | 李白      | 青蓮劍歌     |    1000 |     1000 |            |        1 | 刺客   |
|    2 | 魯班      | 空中支援     |     950 |     1000 |            |        1 | 射手   |
|    3 | 王昭君    | 凜冬已至     |     950 |      950 |            |        0 | 法師   |
|    4 | 虞姬      | 樹神護佑     |     900 |      950 |            |        0 | 射手   |
|    5 | 甄姬      | 洛神降臨     |     900 |      900 |            |        0 | 法師   |
+------+-----------+--------------+---------+----------+------------+----------+--------+
5 rows in set (0.00 sec)

mysql> select *from hero limit 5,5; +------+-----------+--------------+---------+----------+------------+----------+--------+
| h_id | h_name    | h_skill      | h_blood | h_attack | h_isdelete | h_gender | h_type |
+------+-----------+--------------+---------+----------+------------+----------+--------+
|    6 | 莊周      | 天人合一     |     850 |      900 |            |        1 | 輔助   |
|    7 | 韓信      | 國士無雙     |     850 |      850 |            |        1 | 刺客   |
|    8 | 孫尚香    | 窮極弩炮     |     800 |      850 |            |        0 | 射手   |
|    9 | 孫策      | 長帆破浪     |     800 |      800 |            |        1 | 戰士   |
|   10 | 公孫離    | 孤鶩斷霞     |     750 |      800 |            |        0 | 射手   |
+------+-----------+--------------+---------+----------+------------+----------+--------+
5 rows in set (0.00 sec)

例子二:

  • 已知:每頁顯示m條數據,當前顯示第n頁,求第n頁的數據
select * from hero limit (n-1)*m,m
相關文章
相關標籤/搜索