数据挖掘——MySQL基础

一、MySQL入门

1、进入mysql

 mysql -uroot -p

2、显示数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test_db            |
+--------------------+

3、选择数据库

mysql> use test_db;
Database changed

4、查看可用表

mysql> show tables;
+-------------------+
| Tables_in_test_db |
+-------------------+
| tb_emp1           |
| tb_emp2           |
+-------------------+

5、查看表的列

mysql> show columns from tb_emp1;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | YES  |     | NULL    |       |
| name_  | varchar(25) | YES  |     | NULL    |       |
| deptid | int(11)     | YES  |     | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+

6、导入、导出文件

导入

mysql> load data infile 'C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\wine_data.csv'
    -> into table tb_emp2
    -> fields terminated by ','
    -> lines terminated by '\r\n'
    -> ignore 1 lines;

导出

mysql> select id,name_ into outfile 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/1.csv'
    -> fields terminated by ','
    -> lines terminated by '\r\n'
    -> from tb_emp1

7、创建删除表

mysql> create table tb_emp2
    -> (
    -> id char(25),
    -> number float,
    -> salary int(25)
    -> );
mysql> drop table tb_emp2;

8、重命名表

mysql> rename table tb_emp2 to tb_emp3;

9、插入数据

mysql> insert into tb_emp2(id,name)
    -> values(6,7);
mysql> select * from tb_emp2;
+------+------+
| id   | name |
+------+------+
|    2 | bcd  |
|    3 | cde  |
|    4 | efg  |
|    5 | bob  |
|    6 | 7    |
+------+------+

二、检索数据

1、检索列

mysql> select id,name_ from tb_emp1;
+------+-------+
| id   | name_ |
+------+-------+
|    1 | abc   |
|    2 | bcd   |
|    3 | cde   |
|    4 | efg   |
|    5 | bob   |
|    6 | opp   |
|    7 | ckk   |
|    8 | llo   |
|    9 | kkp   |
|   10 | kkp   |
+------+-------+

select * from tb_emp1;检索所有列,其中*是通配符

2、检索不同的行

mysql> select distinct name_ from tb_emp1;
+-------+
| name_ |
+-------+
| abc   |
| bcd   |
| cde   |
| efg   |
| bob   |
| opp   |
| ckk   |
| llo   |
| kkp   |
+-------+

3、限制结果

mysql> select distinct name_ from tb_emp1
    -> limit 5;
+-------+
| name_ |
+-------+
| abc   |
| bcd   |
| cde   |
| efg   |
| bob   |
+-------+
limit 5,5表示从行5开始的5

【注】我们可以使用完全限定的表名,这是一个很好的习惯

mysql> select distinct tb_emp1.name_ from tb_emp1 limit 3;
+-------+
| name_ |
+-------+
| abc   |
| bcd   |
| cde   |
+-------+

4、排序数据

mysql> select id,name_,salary from tb_emp1
    -> order by salary;
+------+-------+--------+
| id   | name_ | salary |
+------+-------+--------+
|   10 | kkp   |   2964 |
|    9 | kkp   |   2969 |
|    8 | llo   |   2974 |
|    7 | ckk   |   2979 |
|    6 | opp   |   2984 |
|    5 | bob   |   2989 |
|    4 | efg   |   2994 |
|    3 | cde   |   2999 |
|    2 | bcd   |   3004 |
|    1 | abc   |   3009 |
+------+-------+--------+

也可以按照多个列排序,有先后顺序;desc关键词可以指定降序排列。

三、过滤数据

1、简单筛选

mysql> select id,name_ from tb_emp1
    -> where id=1 or id between 5 and 7;
+------+-------+
| id   | name_ |
+------+-------+
|    1 | abc   |
|    5 | bob   |
|    6 | opp   |
|    7 | ckk   |
+------+-------+

and表示且,or表示或

mysql> select id,name_ from tb_emp1
    -> where (id between 7 and 10 and name_='kkp') or id=1;
+------+-------+
| id   | name_ |
+------+-------+
|    1 | abc   |
|    9 | kkp   |
|   10 | kkp   |
+------+-------+

2、条件范围过滤

mysql> select id,name_,salary from tb_emp1
    -> where id in (4,6)
    -> order by salary;
+------+-------+--------+
| id   | name_ | salary |
+------+-------+--------+
|    6 | opp   |   2984 |
|    4 | efg   |   2994 |
+------+-------+--------+

可以in前面加not表示相反条件过滤

3、通配符

%匹配任意字符出现任意次数
_匹配单个任意字符

mysql> select id,name_,salary from tb_emp1
    -> where name_ like '%p'
    -> order by salary;
+------+-------+--------+
| id   | name_ | salary |
+------+-------+--------+
|   10 | kkp   |   2964 |
|    9 | kkp   |   2969 |
|    6 | opp   |   2984 |
+------+-------+--------+

4、正则表达式

.可以匹配任意一个字符

mysql> select id,name_,salary from tb_emp1
    -> where salary regexp '2...';
+------+-------+--------+
| id   | name_ | salary |
+------+-------+--------+
|    3 | cde   |   2999 |
|    4 | efg   |   2994 |
|    5 | bob   |   2989 |
|    6 | opp   |   2984 |
|    7 | ckk   |   2979 |
|    8 | llo   |   2974 |
|    9 | kkp   |   2969 |
|   10 | kkp   |   2964 |
+------+-------+--------+

|、[]、可以进行or匹配
还有匹配字符类,多用用就熟悉了

四、字段拼接和计算

1、拼接

mysql> select concat(id,'\'','name_','\'') as name from tb_emp1;
+-----------+
| name      |
+-----------+
| 1'name_'  |
| 2'name_'  |
| 3'name_'  |
| 4'name_'  |
| 5'name_'  |
| 6'name_'  |
| 7'name_'  |
| 8'name_'  |
| 9'name_'  |
| 10'name_' |
+-----------+

2、计算

mysql> select id,name_,salary,id*salary as i_salary from tb_emp1
    -> order by i_salary desc;
+------+-------+--------+----------+
| id   | name_ | salary | i_salary |
+------+-------+--------+----------+
|   10 | kkp   |   2964 |    29640 |
|    9 | kkp   |   2969 |    26721 |
|    8 | llo   |   2974 |    23792 |
|    7 | ckk   |   2979 |    20853 |
|    6 | opp   |   2984 |    17904 |
|    5 | bob   |   2989 |    14945 |
|    4 | efg   |   2994 |    11976 |
|    3 | cde   |   2999 |     8997 |
|    2 | bcd   |   3004 |     6008 |
|    1 | abc   |   3009 |     3009 |
+------+-------+--------+----------+

五、数据处理函数

1、文本处理函数

删除空白(rtrim删除左边空白,ltrim删除右边空白,trim删除左右空白)

mysql> select rtrim(name_) as name_ from tb_emp1;
+-------+
| name_ |
+-------+
| abc   |
| bcd   |
| cde   |
| efg   |
| bob   |
| opp   |
| ckk   |
| llo   |
| kkp   |
| kkp   |
+-------+

2、日期处理函数

mysql>select id,name_ from tb_emp1
	->from tb_emp1
	->where date(order_date) between '2015-09-01' and '2016-09-01';

3、数值处理函数

abs()、mod()等等

mysql> select mod(salary,2) as mod_ from tb_emp1;
+------+
| mod_ |
+------+
|    1 |
|    0 |
|    1 |
|    0 |
|    1 |
|    0 |
|    1 |
|    0 |
|    1 |
|    0 |
+------+

4、聚集函数

avg、max、min、sum、count函数

mysql> select avg(distinct salary) as a_salary from tb_emp1;
+----------+
| a_salary |
+----------+
|   2986.5 |
+----------+
mysql> select count(id) as count_ from tb_emp1;
+--------+
| count_ |
+--------+
|     10 |
+--------+

5、分组函数

频率统计

mysql> select name_,count(*) as num_prods from tb_emp1 group by name_;
+-------+-----------+
| name_ | num_prods |
+-------+-----------+
| abc   |         1 |
| bcd   |         1 |
| cde   |         1 |
| efg   |         1 |
| bob   |         1 |
| opp   |         1 |
| ckk   |         1 |
| llo   |         1 |
| kkp   |         2 |
+-------+-----------+

分组过滤having

mysql> select id,name_,count(*) as num_prods
    -> from tb_emp1
    -> where salary<=3000
    -> group by name_
    -> having count(*)>=1;
+------+-------+-----------+
| id   | name_ | num_prods |
+------+-------+-----------+
|    3 | cde   |         1 |
|    4 | efg   |         1 |
|    5 | bob   |         1 |
|    6 | opp   |         1 |
|    7 | ckk   |         1 |
|    8 | llo   |         1 |
|    9 | kkp   |         2 |
+------+-------+-----------+

六、子查询

1、表之间关联查询

mysql> select id,name_ from tb_emp1 where id in (select id from tb_emp2);
+------+-------+
| id   | name_ |
+------+-------+
|    2 | bcd   |
|    3 | cde   |
|    4 | efg   |
|    5 | bob   |
+------+-------+

2、作为字段使用子查询

mysql> select id,name_,(select count(*) from tb_emp2 where tb_emp1.id=tb_emp2.id) as num from tb_emp1;
+------+-------+------+
| id   | name_ | num  |
+------+-------+------+
|    1 | abc   |    0 |
|    2 | bcd   |    1 |
|    3 | cde   |    1 |
|    4 | efg   |    1 |
|    5 | bob   |    1 |
|    6 | opp   |    0 |
|    7 | ckk   |    0 |
|    8 | llo   |    0 |
|    9 | kkp   |    0 |
|   10 | kkp   |    0 |
+------+-------+------+

七、表联结

在这里插入图片描述

1、内联接

mysql> select tb_emp1.name_,tb_emp2.name from tb_emp1
    -> inner join tb_emp2
    -> on tb_emp1.id=tb_emp2.id;
+-------+------+
| name_ | name |
+-------+------+
| bcd   | bcd  |
| cde   | cde  |
| efg   | efg  |
| bob   | bob  |
+-------+------+
mysql> select tb_emp1.name_,tb_emp2.name from tb_emp1,tb_emp2
    -> where tb_emp1.id=tb_emp2.id;
+-------+------+
| name_ | name |
+-------+------+
| bcd   | bcd  |
| cde   | cde  |
| efg   | efg  |
| bob   | bob  |
+-------+------+

2、外联接

①左联接

mysql> select tb_emp1.name_,tb_emp2.name from tb_emp1
    -> left join tb_emp2
    -> on tb_emp1.id=tb_emp2.id;
+-------+------+
| name_ | name |
+-------+------+
| bcd   | bcd  |
| cde   | cde  |
| efg   | efg  |
| bob   | bob  |
| abc   | NULL |
| opp   | NULL |
| ckk   | NULL |
| llo   | NULL |
| kkp   | NULL |
| kkp   | NULL |
+-------+------+

②右联接

mysql> select tb_emp1.name_,tb_emp2.name from tb_emp1
    -> right join tb_emp2
    -> on tb_emp1.id=tb_emp2.id;
+-------+------+
| name_ | name |
+-------+------+
| bcd   | bcd  |
| cde   | cde  |
| efg   | efg  |
| bob   | bob  |
+-------+------+

3、全联接

UNION 操作符用于合并两个或多个 SELECT 语句的结果集

mysql> select tb_emp1.name_,tb_emp2.name from tb_emp1 left join tb_emp2 on tb_emp1.id=tb_emp1.id
    -> union
    -> select tb_emp1.name_,tb_emp2.name from tb_emp1 right join tb_emp2 on tb_emp1.id=tb_emp1.id;
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tao_RY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值