美文网首页
【数据分析】基本MySQL语句

【数据分析】基本MySQL语句

作者: FLYNNNOTES | 来源:发表于2018-08-28 21:46 被阅读0次

    平时多奋战于excel中,用到MySQL时,颇为生疏,梳理基本用法,以备翻阅。

    Attention: SQL语句要以【;】结束,习惯了python,经常忘记Orz...

    数据库启动,连接

    net start mysql
    mysql -uroot -p
    

    有时启动不了数据库,可以尝试win+R至services.msc中手动停止mysql再重新启动。

    mysql> show databases; #显示所有database
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | report             |
    | test               |
    +--------------------+
    5 rows in set (0.00 sec)
    
    mysql> use test;    # 使用test库
    Database changed
    

    创建表格

    creat table [table_name](
        cn1 cn1_type,
        ...,
        cnk cnk_type
        );
    
    mysql> CREATE TABLE Produce48(
        -> member_name VARCHAR(30) NOT NULL,
        -> group_name VARCHAR(20) NOT NULL,
        -> age INT(10) NOT NULL
        -> );
    Query OK, 0 rows affected (0.60 sec)
    

    查看表结构

    mysql> DESC Produce48;
    +-------------+-------------+------+-----+---------+-------+
    | Field       | Type        | Null | Key | Default | Extra |
    +-------------+-------------+------+-----+---------+-------+
    | member_name | varchar(30) | NO   |     | NULL    |       |
    | group_name  | varchar(20) | NO   |     | NULL    |       |
    | age         | int(10)     | NO   |     | NULL    |       |
    +-------------+-------------+------+-----+---------+-------+
    3 rows in set (0.06 sec)
    

    插入数据

    INSERT INTO table_name ( field1, field2,...,fieldN )
                           VALUES
                         (valueA1,valueA2,...,valueAN),
                         (valueB1,valueB2,...,valueBN),
                         (valueC1,valueC2,...,valueCN);
    
    mysql> INSERT INTO Produce48(member_name, group_name, age)
        -> VALUES
        -> ("Sakura"," HKT48","20"),
        -> ("Saep","NMB48", "20");
    Query OK, 2 rows affected (0.13 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    

    数据查询

    SELECT column_name FROM table_name
    
    mysql> SELECT member_name FROM Produce48;   #选择某一列数据
    +-------------+
    | member_name |
    +-------------+
    | Sakura      |
    | Saep        |
    | Erii        |
    +-------------+
    3 rows in set (0.08 sec)
    
    mysql> SELECT * FROM Produce48; #选择全量数据
    +-------------+------------+-----+
    | member_name | group_name | age |
    +-------------+------------+-----+
    | Sakura      |  HKT48     |  20 |
    | Saep        | NMB48      |  20 |
    | Erii        | AKB48      |  16 |
    +-------------+------------+-----+
    3 rows in set (0.06 sec)
    
    mysql> SELECT * FROM Produce48
        -> LIMIT 2; #限制查询的数据条数
    +-------------+------------+-----+
    | member_name | group_name | age |
    +-------------+------------+-----+
    | Sakura      |  HKT48     |  20 |
    | Saep        | NMB48      |  20 |
    +-------------+------------+-----+
    2 rows in set (0.00 sec)
    

    条件语句

    SELECT column_name FROM table_name
    [WHERE condition1 [AND|OR] condition2,...
    
    mysql> SELECT * FROM Produce48
        -> WHERE age > 17;
    +-------------+------------+-----+
    | member_name | group_name | age |
    +-------------+------------+-----+
    | Sakura      |  HKT48     |  20 |
    | Saep        | NMB48      |  20 |
    +-------------+------------+-----+
    2 rows in set (0.05 sec)
    
    

    更新values

    UPDATE table_name SET column_name1=new_value1
    [WHERE conditon]
    
    mysql> UPDATE Produce48 SET age="19"
        -> WHERE member_name="Saep";
    Query OK, 1 row affected (0.12 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    mysql> SELECT * FROM Produce48;
    +-------------+------------+-----+
    | member_name | group_name | age |
    +-------------+------------+-----+
    | Sakura      |  HKT48     |  20 |
    | Saep        | NMB48      |  19 |
    | Erii        | AKB48      |  16 |
    +-------------+------------+-----+
    3 rows in set (0.00 sec)
    

    LIKE语句

    SELECT column_name FROM table_name
    WHERE column_name1 LIKE condition
    
    • '%a' a结尾的数据
    • 'a%' a开头的数据
    • '%a%' 包含a的数据
    mysql> SELECT * FROM Produce48
        -> WHERE group_name LIKE "AKB%";
    +-------------+------------+-----+
    | member_name | group_name | age |
    +-------------+------------+-----+
    | Erii        | AKB48      |  16 |
    | Jury        | AKB48      |  20 |
    +-------------+------------+-----+
    2 rows in set (0.00 sec)
    

    除了用LIKE语句,还可以用正则

    • '^a':以a开头的数据;
    • 'a$':以a结尾的数据;
    • 'a':包含a的数据
    mysql> SELECT * FROM Produce48
        -> WHERE group_name REGEXP '^AKB';
    +-------------+------------+-----+
    | member_name | group_name | age |
    +-------------+------------+-----+
    | Erii        | AKB48      |  16 |
    | Jury        | AKB48      |  20 |
    +-------------+------------+-----+
    2 rows in set (0.08 sec)
    
    mysql> SELECT * FROM Produce48
        -> WHERE group_name REGEXP '^[N]|[B]';
    +-------------+------------+-----+
    | member_name | group_name | age |
    +-------------+------------+-----+
    | Saep        | NMB48      |  19 |
    | Erii        | AKB48      |  16 |
    | Jury        | AKB48      |  20 |
    | Rika        | NGT48      |  17 |
    +-------------+------------+-----+
    4 rows in set (0.00 sec)
    

    排序

    SELECT column_name FROM table_name
    ORDER BY column_name [ASC[DESC]]
    
    mysql> SELECT * FROM Produce48
        -> ORDER BY age DESC;
    +-------------+------------+-----+
    | member_name | group_name | age |
    +-------------+------------+-----+
    | Sakura      |  HKT48     |  20 |
    | Jury        | AKB48      |  20 |
    | Saep        | NMB48      |  19 |
    | Erii        | AKB48      |  16 |
    +-------------+------------+-----+
    4 rows in set (0.06 sec)
    

    GROUP BY语句

    SELECT column_name, function(column_name) 
    FROM table_name
    WHERE column_name operator value
    GROUP BY column_name
    
    mysql> SELECT group_name, COUNT(*) FROM Produce48
        -> GROUP BY group_name;
    +------------+----------+
    | group_name | COUNT(*) |
    +------------+----------+
    |  HKT48     |        1 |
    | AKB48      |        2 |
    | NMB48      |        1 |
    +------------+----------+
    3 rows in set (1.41 sec)
    
    mysql> SELECT group_name, AVG(age) FROM Produce48
        -> GROUP BY group_name;
    +------------+----------+
    | group_name | AVG(age) |
    +------------+----------+
    |  HKT48     |  20.0000 |
    | AKB48      |  18.0000 |
    | NMB48      |  19.0000 |
    +------------+----------+
    3 rows in set (0.00 sec)
    
    mysql> SELECT group_name, AVG(age) as group_average_age  FROM Produce48
        -> GROUP BY group_name WITH ROLLUP;
    +------------+-------------------+
    | group_name | group_average_age |
    +------------+-------------------+
    |  HKT48     |           20.0000 |
    | AKB48      |           18.0000 |
    | NMB48      |           19.0000 |
    | NULL       |           18.7500 |
    +------------+-------------------+
    4 rows in set (0.06 sec)
    

    表连接

    • INNER JOIN
    • LEFT JOIN
    • RIGHT JOIN
    mysql> SELECT * FROM Produce48;
    +-------------+------------+-----+
    | member_name | group_name | age |
    +-------------+------------+-----+
    | Sakura      |  HKT48     |  20 |
    | Saep        | NMB48      |  19 |
    | Erii        | AKB48      |  16 |
    | Jury        | AKB48      |  20 |
    +-------------+------------+-----+
    4 rows in set (0.00 sec)
    
    mysql> SELECT * FROM Group_Message;
    +------------+----------+---------------+
    | group_name | location | member_number |
    +------------+----------+---------------+
    | AKB48      | TOKYO    |           400 |
    | NMB48      | OSAKA    |           100 |
    +------------+----------+---------------+
    2 rows in set (0.00 sec)
    
    mysql> SELECT a.member_name, a.age FROM Produce48 a
        -> INNER JOIN Group_Message b
        -> ON a.group_name = b.group_name;
    +-------------+-----+
    | member_name | age |
    +-------------+-----+
    | Saep        |  19 |
    | Erii        |  16 |
    | Jury        |  20 |
    +-------------+-----+
    3 rows in set (0.06 sec)
    

    ALERT 用法

    修改数据表名或数据表字段

    增加一列

    ==ALTER TABLE table_name ADD column_name==

    • 默认添加在最后一列
    • INT FIRST #添加在第一列
    • INT AFTER column_name #添加在某一列后面
    mysql> ALTER TABLE Group_Message ADD establish_date INT AFTER location;
    Query OK, 0 rows affected (0.88 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    mysql> SHOW COLUMNS FROM Group_Message;
    +----------------+-------------+------+-----+---------+-------+
    | Field          | Type        | Null | Key | Default | Extra |
    +----------------+-------------+------+-----+---------+-------+
    | group_name     | varchar(30) | NO   |     | NULL    |       |
    | location       | varchar(30) | YES  |     | NULL    |       |
    | establish_date | int(11)     | YES  |     | NULL    |       |
    | member_number  | int(10)     | YES  |     | NULL    |       |
    +----------------+-------------+------+-----+---------+-------+
    4 rows in set (0.03 sec)
    

    修改字段类型、名称等

    mysql> ALTER TABLE Group_Message MODIFY establish_date DATE;
    Query OK, 2 rows affected (0.75 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    mysql> SHOW COLUMNS FROM Group_Message;
    +----------------+-------------+------+-----+---------+-------+
    | Field          | Type        | Null | Key | Default | Extra |
    +----------------+-------------+------+-----+---------+-------+
    | group_name     | varchar(30) | NO   |     | NULL    |       |
    | location       | varchar(30) | YES  |     | NULL    |       |
    | establish_date | date        | YES  |     | NULL    |       |
    | member_number  | int(10)     | YES  |     | NULL    |       |
    +----------------+-------------+------+-----+---------+-------+
    4 rows in set (0.07 sec)
    

    删除某一列

    mysql> ALTER TABLE Group_Message DROP establish_date;
    Query OK, 0 rows affected (0.52 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    mysql> SHOW COLUMNS FROM Group_Message;
    +---------------+-------------+------+-----+---------+-------+
    | Field         | Type        | Null | Key | Default | Extra |
    +---------------+-------------+------+-----+---------+-------+
    | group_name    | varchar(30) | NO   |     | NULL    |       |
    | location      | varchar(30) | YES  |     | NULL    |       |
    | member_number | int(10)     | YES  |     | NULL    |       |
    +---------------+-------------+------+-----+---------+-------+
    3 rows in set (0.01 sec)
    

    修改表名

    mysql> ALTER TABLE Group_Message RENAME TO Group_Information;
    Query OK, 0 rows affected (0.17 sec)
    
    mysql> show tables;
    +-------------------+
    | Tables_in_test    |
    +-------------------+
    | group_information |
    | produce48         |
    +-------------------+
    2 rows in set (0.00 sec)
    

    相关文章

      网友评论

          本文标题:【数据分析】基本MySQL语句

          本文链接:https://www.haomeiwen.com/subject/vozqwftx.html