MariaDB

1.5 MariaDB 服务端命令(DML-SELECT基本用法)

 

1>返回指定表的所有数据
SELECT  *  FROM  tbl_name;

2>返回指定表的特定字段的所有数据
SELECT  col_name1, col_name2, …  FROM  tbl_name;

显示时,字段可以显示为别名(字段别名);
“col_name AS  col_alias”,别名”col_alias”无需事先定义,只是作为临时显示效果而已;

3>指定字段,显示符合条件的数据
SELECT  col_name1, col_name2, …  FROM  tbl_name  WHERE  clause;

WHERE  clause:指明条件;

SELECT语法结构:
=======================

SELECT
        select_expr [, select_expr …]
        [FROM  table_references
        [WHERE  where_condition]
        [GROUP  BY {col_name | expr | position}
              [ASC | DESC], … [WITH  ROLLUP]]
        [HAVING  where_condition]
        [ORDER  BY  {col_name | expr | position}
              [ASC | DESC], …]
        [LIMIT  {[offset,] row_count | row_count  OFFSET  offset}]

>>WHERE子句:指明过滤条件以实现“选择”的功能
——————————————
算术操作符:+, -, *, /, %
比较操作符:=, !=, <>, <=>, >, >=, <, <=

BETWEEN  min_num  AND  max_num                    前面指定字段名称,查找介于最小数值与最大数值之间的数据;
IN  (element1, element2, …)
IS  NULL                                  前面指定字段名称,查找空值的数据;
IS  NOT  NULL                       前面指定字段名称,查找非空值的数据;
LIKE:                                        前面指定字段名称,模糊匹配查找数据;
  %:                        任意长度的任意字符
  _:                      任意单个字符
RLIKE                   前面指定字段名称,支持正则表达式;

逻辑操作符:NOT,AND,OR

>> GROUP BY:根据指定的条件把查询结果进行”分组”,以用于做“聚合”运算:avg(), max(), min(), count(), sum();
>> HAVING: 对分组聚合运算后的结果指定过滤条件;
>> ORDER BY:根据指定的字段对查询结果进行排序,升序为ASC,降序为DESC;默认是升序排列;
>> LIMIT [[offset,]row_count]:对查询的结果进行输出行数数量限制;

图示SELECT执行条件的次序
=============================

select语句的从句分析顺序:from(过滤表)–>where(过滤行)–>group by(分组)–>having(分组过滤)–>order by(排序)–

>select(选取字段)–>limit(查询限制)–>最终结果;

举例:

MariaDB [firstdb]> select * from shediao;
+-----------+-----------------+--------+-------------+-----------------+------------------+-------+
| jianghuid | name            | gender | area        | arena           | title            | level |
+-----------+-----------------+--------+-------------+-----------------+------------------+-------+
|         1 | Huang YaoSHi    | M      | Tao Hua Dao | Tao Hua Dao     | Dong Xue         |  8820 |
|         2 | ou yang feng    | M      | xi yu       | bai tuo shan    | xi du            |  8850 |
|         3 | duan zhi xin    | M      | da li       | di huang        | nan di           |  8810 |
|         4 | hong qi         | M      | zhong yuan  | gai bang        | bei gai          |  8855 |
|         5 | wang chong yang | M      | zhong yuan  | quan zheng jiao | zhong sheng tong |  9500 |
|         6 | Guo Jing        | M      | NULL        | NULL            | NULL             |  9800 |
|         7 | Huang Rong      | F      | NULL        | NULL            | NULL             |  8688 |
+-----------+-----------------+--------+-------------+-----------------+------------------+-------+
7 rows in set (0.00 sec)

WHERE字句举例:
—————————————

MariaDB [firstdb]> select * from shediao where level<9000;
+-----------+--------------+--------+-------------+--------------+----------+-------+
| jianghuid | name         | gender | area        | arena        | title    | level |
+-----------+--------------+--------+-------------+--------------+----------+-------+
|         1 | Huang YaoSHi | M      | Tao Hua Dao | Tao Hua Dao  | Dong Xue |  8820 |
|         2 | ou yang feng | M      | xi yu       | bai tuo shan | xi du    |  8850 |
|         3 | duan zhi xin | M      | da li       | di huang     | nan di   |  8810 |
|         4 | hong qi      | M      | zhong yuan  | gai bang     | bei gai  |  8855 |
|         7 | Huang Rong   | F      | NULL        | NULL         | NULL     |  8688 |
+-----------+--------------+--------+-------------+--------------+----------+-------+
5 rows in set (0.00 sec)


MariaDB [firstdb]> select * from shediao where level>=8855;
+-----------+-----------------+--------+------------+-----------------+------------------+-------+
| jianghuid | name            | gender | area       | arena           | title            | level |
+-----------+-----------------+--------+------------+-----------------+------------------+-------+
|         4 | hong qi         | M      | zhong yuan | gai bang        | bei gai          |  8855 |
|         5 | wang chong yang | M      | zhong yuan | quan zheng jiao | zhong sheng tong |  9500 |
|         6 | Guo Jing        | M      | NULL       | NULL            | NULL             |  9800 |
+-----------+-----------------+--------+------------+-----------------+------------------+-------+
3 rows in set (0.00 sec)

MariaDB [firstdb]> select * from shediao where name='guo jing';
+-----------+----------+--------+------+-------+-------+-------+
| jianghuid | name     | gender | area | arena | title | level |
+-----------+----------+--------+------+-------+-------+-------+
|         6 | Guo Jing | M      | NULL | NULL  | NULL  |  9800 |
+-----------+----------+--------+------+-------+-------+-------+
1 row in set (0.00 sec)


MariaDB [firstdb]> select * from shediao where level between 7000 and 9000;
+-----------+--------------+--------+-------------+--------------+----------+-------+
| jianghuid | name         | gender | area        | arena        | title    | level |
+-----------+--------------+--------+-------------+--------------+----------+-------+
|         1 | Huang YaoSHi | M      | Tao Hua Dao | Tao Hua Dao  | Dong Xue |  8820 |
|         2 | ou yang feng | M      | xi yu       | bai tuo shan | xi du    |  8850 |
|         3 | duan zhi xin | M      | da li       | di huang     | nan di   |  8810 |
|         4 | hong qi      | M      | zhong yuan  | gai bang     | bei gai  |  8855 |
|         7 | Huang Rong   | F      | NULL        | NULL         | NULL     |  8688 |
+-----------+--------------+--------+-------------+--------------+----------+-------+
5 rows in set (0.00 sec)

GROUP BY分组举例:
—————————

MariaDB [firstdb]> SELECT * FROM shediao WHERE level BETWEEN 7000 AND 9000 GROUP BY level DESC;
+-----------+--------------+--------+-------------+--------------+----------+-------+
| jianghuid | name         | gender | area        | arena        | title    | level |
+-----------+--------------+--------+-------------+--------------+----------+-------+
|         4 | hong qi      | M      | zhong yuan  | gai bang     | bei gai  |  8855 |
|         2 | ou yang feng | M      | xi yu       | bai tuo shan | xi du    |  8850 |
|         1 | Huang YaoSHi | M      | Tao Hua Dao | Tao Hua Dao  | Dong Xue |  8820 |
|         3 | duan zhi xin | M      | da li       | di huang     | nan di   |  8810 |
|         7 | Huang Rong   | F      | NULL        | NULL         | NULL     |  8688 |
+-----------+--------------+--------+-------------+--------------+----------+-------+
5 rows in set (0.00 sec)

ORDER BY排序举例:
—————————–

MariaDB [firstdb]> SELECT * FROM shediao WHERE level BETWEEN 7000 AND 9000 ORDER BY level DESC;
+-----------+--------------+--------+-------------+--------------+----------+-------+
| jianghuid | name         | gender | area        | arena        | title    | level |
+-----------+--------------+--------+-------------+--------------+----------+-------+
|         4 | hong qi      | M      | zhong yuan  | gai bang     | bei gai  |  8855 |
|         2 | ou yang feng | M      | xi yu       | bai tuo shan | xi du    |  8850 |
|         1 | Huang YaoSHi | M      | Tao Hua Dao | Tao Hua Dao  | Dong Xue |  8820 |
|         3 | duan zhi xin | M      | da li       | di huang     | nan di   |  8810 |
|         7 | Huang Rong   | F      | NULL        | NULL         | NULL     |  8688 |
+-----------+--------------+--------+-------------+--------------+----------+-------+
5 rows in set (0.00 sec)

LIMIT限制行显示举例:
——————————

MariaDB [firstdb]> SELECT * FROM shediao WHERE level BETWEEN 7000 AND 9000 ORDER BY level DESC LIMIT 3;
+-----------+--------------+--------+-------------+--------------+----------+-------+
| jianghuid | name         | gender | area        | arena        | title    | level |
+-----------+--------------+--------+-------------+--------------+----------+-------+
|         4 | hong qi      | M      | zhong yuan  | gai bang     | bei gai  |  8855 |
|         2 | ou yang feng | M      | xi yu       | bai tuo shan | xi du    |  8850 |
|         1 | Huang YaoSHi | M      | Tao Hua Dao | Tao Hua Dao  | Dong Xue |  8820 |
+-----------+--------------+--------+-------------+--------------+----------+-------+
3 rows in set (0.00 sec)


LIMIT m,n  : 'm'表示偏移量,第一行偏移量为'0',表示显示'm+1'所在的行,以及'm+1'往下'n'行;

MariaDB [firstdb]> SELECT * FROM shediao ORDER BY name ;
+-----------+-----------------+--------+-------------+-----------------+------------------+-------+
| jianghuid | name            | gender | area        | arena           | title            | level |
+-----------+-----------------+--------+-------------+-----------------+------------------+-------+
|         3 | duan zhi xin    | M      | da li       | di huang        | nan di           |  8810 |
|         6 | Guo Jing        | M      | NULL        | NULL            | NULL             |  9800 |
|         4 | hong qi         | M      | zhong yuan  | gai bang        | bei gai          |  8855 |
|         7 | Huang Rong      | F      | NULL        | NULL            | NULL             |  8688 |
|         1 | Huang YaoSHi    | M      | Tao Hua Dao | Tao Hua Dao     | Dong Xue         |  8820 |
|         2 | ou yang feng    | M      | xi yu       | bai tuo shan    | xi du            |  8850 |
|         5 | wang chong yang | M      | zhong yuan  | quan zheng jiao | zhong sheng tong |  9500 |
+-----------+-----------------+--------+-------------+-----------------+------------------+-------+
7 rows in set (0.00 sec)

MariaDB [firstdb]> SELECT * FROM shediao ORDER BY name LIMIT 3,2;
+-----------+--------------+--------+-------------+-------------+----------+-------+
| jianghuid | name         | gender | area        | arena       | title    | level |
+-----------+--------------+--------+-------------+-------------+----------+-------+
|         7 | Huang Rong   | F      | NULL        | NULL        | NULL     |  8688 |
|         1 | Huang YaoSHi | M      | Tao Hua Dao | Tao Hua Dao | Dong Xue |  8820 |
+-----------+--------------+--------+-------------+-------------+----------+-------+
2 rows in set (0.00 sec)





MariaDB [firstdb]> SELECT * FROM shediao GROUP BY level DESC LIMIT 1;
+-----------+----------+--------+------+-------+-------+-------+
| jianghuid | name     | gender | area | arena | title | level |
+-----------+----------+--------+------+-------+-------+-------+
|         6 | Guo Jing | M      | NULL | NULL  | NULL  |  9800 |
+-----------+----------+--------+------+-------+-------+-------+
1 row in set (0.00 sec)

From  MariaDB  10.3.2,  ORDER  BY  and  LIMIT  can  be  used  in  a  multi-table  update:

CREATE TABLE warehouse (product_id INT, qty INT);
INSERT INTO warehouse VALUES (1,100),(2,100),(3,100),(4,100);

CREATE TABLE store (product_id INT, qty INT);
INSERT INTO store VALUES (1,5),(2,5),(3,5),(4,5);

UPDATE warehouse,store SET warehouse.qty = warehouse.qty-2, store.qty = store.qty+2 
  WHERE (warehouse.product_id = store.product_id AND store.product_id  >= 1) 
    ORDER BY store.product_id DESC LIMIT 2;

SELECT * FROM warehouse;
+------------+------+
| product_id | qty  |
+------------+------+
|          1 |  100 |
|          2 |  100 |
|          3 |   98 |
|          4 |   98 |
+------------+------+

SELECT * FROM store;
+------------+------+
| product_id | qty  |
+------------+------+
|          1 |    5 |
|          2 |    5 |
|          3 |    7 |
|          4 |    7 |
+------------+------+
CREATE TABLE plays (name VARCHAR(16), plays INT, wins INT);
INSERT INTO plays VALUES 
  ("John", 20, 5), 
  ("Robert", 22, 8), 
  ("Wanda", 32, 8), 
  ("Susan", 17, 3);

SELECT (wins / plays) AS winavg, COUNT(*) FROM plays GROUP BY winavg;
+--------+----------+
| winavg | COUNT(*) |
+--------+----------+
| 0.1765 |        1 |
| 0.2500 |        2 |
| 0.3636 |        1 |
+--------+----------+
3 rows in set (0.00 sec)


SELECT (wins / plays) AS winavg, AVG(plays) FROM plays GROUP BY winavg;
+--------+------------+
| winavg | AVG(plays) |
+--------+------------+
| 0.1765 |    17.0000 |
| 0.2500 |    26.0000 |
| 0.3636 |    22.0000 |
+--------+------------+
3 rows in set (0.00 sec)

From  MariaDB  10.3.3, LIMIT  can  be  used  with  GROUP_CONCAT,  so,  for example,  given  the  following  table:

CREATE TABLE d (dd DATE, cc INT);

INSERT INTO d VALUES ('2017-01-01',1);
INSERT INTO d VALUES ('2017-01-02',2);
INSERT INTO d VALUES ('2017-01-04',3);

SELECT GROUP_CONCAT(CONCAT_WS(":",dd,cc) ORDER BY cc DESC LIMIT 1) FROM d;
+-------------------------------------------------------------+
| GROUP_CONCAT(CONCAT_WS(":",dd,cc) ORDER BY cc DESC LIMIT 1) |
+-------------------------------------------------------------+
| 2017-01-04:3                                                |
+-------------------------------------------------------------+

 

Leave a Reply

Your email address will not be published. Required fields are marked *