我们先来建个表哦~~~

mysql> select * from e1;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  1 | rose  |   25 |
|  2 | jack  |   18 |
|  3 | bob   |   29 |
|  4 | alice |   31 |
|  5 | ben   |   20 |
|  6 | fan   |   20 |
+----+-------+------+
6 rows in set (0.00 sec)

第三部分——数据排序

asc升序、desc降序

单个列排序

select * from e1 order by age desc;

多个列排序

select * from e1 order by age asc, id desc;

先按第一个(age升序)、再按第二个(id降序)排序

按别名排序

select id,age*2 A_G_E from e1 order by A_G_E desc;

选择id列、age*2列(改名为A_G_E)并按照A_G_E列降序排序

mysql> select * from e1 order by age desc;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  4 | alice |   31 |
|  3 | bob   |   29 |
|  1 | rose  |   25 |
|  5 | ben   |   20 |
|  6 | fan   |   20 |
|  2 | jack  |   18 |
+----+-------+------+
6 rows in set (0.00 sec)mysql> select * from e1 order by age asc, id desc;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  2 | jack  |   18 |
|  6 | fan   |   20 |
|  5 | ben   |   20 |
|  1 | rose  |   25 |
|  3 | bob   |   29 |
|  4 | alice |   31 |
+----+-------+------+
6 rows in set (0.00 sec)mysql> select id,age*2 A_G_E from e1 order by A_G_E desc;
+----+-------+
| id | A_G_E |
+----+-------+
|  4 |    62 |
|  3 |    58 |
|  1 |    50 |
|  5 |    40 |
|  6 |    40 |
|  2 |    36 |
+----+-------+
6 rows in set (0.00 sec)

第四部分——子查询

建个新表,作为调用条件

mysql> select * from e2;
+----+------+
| id | age  |
+----+------+
|  1 |   10 |
|  2 |   26 |
|  3 |   20 |
|  4 |   35 |
|  5 |   50 |
+----+------+
5 rows in set (0.00 sec)
mysql> select * from e1;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  1 | rose  |   25 |
|  2 | jack  |   18 |
|  3 | bob   |   29 |
|  4 | alice |   31 |
|  5 | ben   |   20 |
|  6 | fan   |   20 |
+----+-------+------+
6 rows in set (0.00 sec)

单行子查询

select * from e1 where id = (select id from e2 where id+1=3);

多行子查询

等于列表中任意一个:select * from e1 where id in (select id from e2);

和任意一个值比较:select * from e1 where id >any (select id from e2);

和所有值比较:select * from e1 where age >all (select age from e2);

mysql> select * from e1 where id = (select id from e2 where id+1=3);
+----+------+------+
| id | name | age  |
+----+------+------+
|  2 | jack |   18 |
+----+------+------+
1 row in set (0.00 sec)mysql> select * from e1 where id in (select id from e2);
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  1 | rose  |   25 |
|  2 | jack  |   18 |
|  3 | bob   |   29 |
|  4 | alice |   31 |
|  5 | ben   |   20 |
+----+-------+------+
5 rows in set (0.00 sec)mysql> select * from e1 where id >any (select id from e2);
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  2 | jack  |   18 |
|  3 | bob   |   29 |
|  4 | alice |   31 |
|  5 | ben   |   20 |
|  6 | fan   |   20 |
+----+-------+------+
5 rows in set (0.00 sec)mysql> select * from e1 where age >all (select age from e2);
Empty set (0.01 sec)

第五部分——多表查询

内连接

select a.id,a.name,a.age,b.id,b.age from e1 a inner join e2 b on a.age=b.age;

mysql> select a.id,a.name,a.age,b.id,b.age from e1 a inner join e2 b on a.age=b.age;
+----+------+------+----+------+
| id | name | age  | id | age  |
+----+------+------+----+------+
|  5 | ben  |   20 |  3 |   20 |
|  6 | fan  |   20 |  3 |   20 |
+----+------+------+----+------+
2 rows in set (0.00 sec)

非等值连接

select a.id,a.name,a.age,b.id,b.age from e1 a,e2 b where b.age = 20;

select a.id,a.name,a.age,b.id,b.age from e1 a,e2 b where b.age > 30;

mysql> select a.id,a.name,a.age,b.id,b.age from e1 a,e2 b where b.age = 20;
+----+-------+------+----+------+
| id | name  | age  | id | age  |
+----+-------+------+----+------+
|  1 | rose  |   25 |  3 |   20 |
|  2 | jack  |   18 |  3 |   20 |
|  3 | bob   |   29 |  3 |   20 |
|  4 | alice |   31 |  3 |   20 |
|  5 | ben   |   20 |  3 |   20 |
|  6 | fan   |   20 |  3 |   20 |
+----+-------+------+----+------+
6 rows in set (0.00 sec)mysql> select a.id,a.name,a.age,b.id,b.age from e1 a,e2 b where b.age > 30;
+----+-------+------+----+------+
| id | name  | age  | id | age  |
+----+-------+------+----+------+
|  1 | rose  |   25 |  4 |   35 |
|  1 | rose  |   25 |  5 |   50 |
|  2 | jack  |   18 |  4 |   35 |
|  2 | jack  |   18 |  5 |   50 |
|  3 | bob   |   29 |  4 |   35 |
|  3 | bob   |   29 |  5 |   50 |
|  4 | alice |   31 |  4 |   35 |
|  4 | alice |   31 |  5 |   50 |
|  5 | ben   |   20 |  4 |   35 |
|  5 | ben   |   20 |  5 |   50 |
|  6 | fan   |   20 |  4 |   35 |
|  6 | fan   |   20 |  5 |   50 |
+----+-------+------+----+------+
12 rows in set (0.00 sec)

外连接

select a.id,a.name,a.age,b.id,b.age from e1 a left join e2 b on a.age=b.age;

select a.id,a.name,a.age,b.id,b.age from e1 a right join e2 b on a.age=b.age;

mysql> select a.id,a.name,a.age,b.id,b.age from e1 a left join e2 b on a.age=b.age;
+----+-------+------+------+------+
| id | name  | age  | id   | age  |
+----+-------+------+------+------+
|  5 | ben   |   20 |    3 |   20 |
|  6 | fan   |   20 |    3 |   20 |
|  1 | rose  |   25 | NULL | NULL |
|  2 | jack  |   18 | NULL | NULL |
|  3 | bob   |   29 | NULL | NULL |
|  4 | alice |   31 | NULL | NULL |
+----+-------+------+------+------+
6 rows in set (0.00 sec)mysql> select a.id,a.name,a.age,b.id,b.age from e1 a right join e2 b on a.age=b.age;
+------+------+------+----+------+
| id   | name | age  | id | age  |
+------+------+------+----+------+
|    5 | ben  |   20 |  3 |   20 |
|    6 | fan  |   20 |  3 |   20 |
| NULL | NULL | NULL |  1 |   10 |
| NULL | NULL | NULL |  2 |   26 |
| NULL | NULL | NULL |  4 |   35 |
| NULL | NULL | NULL |  5 |   50 |
+------+------+------+----+------+
6 rows in set (0.00 sec)

自然连接

内连接查询:查询的结果为两个表匹配到的数据

select * from e1 inner join e2 on e1.age=e2.age;

右连接查询:两个表匹配到的数据,右表有的、左表中不存在的数据使用null填充

select * from e1 left join e2 on e1.age=e2.age;

左连接查询:两个表匹配到的数据,左表有的、右表中不存在的数据使用null填充

select * from e1 right join e2 on e1.age=e2.age;

mysql> select * from e1 inner join e2 on e1.age=e2.age;
+----+------+------+----+------+
| id | name | age  | id | age  |
+----+------+------+----+------+
|  5 | ben  |   20 |  3 |   20 |
|  6 | fan  |   20 |  3 |   20 |
+----+------+------+----+------+
2 rows in set (0.00 sec)mysql> select * from e1 left join e2 on e1.age=e2.age;
+----+-------+------+------+------+
| id | name  | age  | id   | age  |
+----+-------+------+------+------+
|  5 | ben   |   20 |    3 |   20 |
|  6 | fan   |   20 |    3 |   20 |
|  1 | rose  |   25 | NULL | NULL |
|  2 | jack  |   18 | NULL | NULL |
|  3 | bob   |   29 | NULL | NULL |
|  4 | alice |   31 | NULL | NULL |
+----+-------+------+------+------+
6 rows in set (0.00 sec)mysql> select * from e1 right join e2 on e1.age=e2.age;
+------+------+------+----+------+
| id   | name | age  | id | age  |
+------+------+------+----+------+
|    5 | ben  |   20 |  3 |   20 |
|    6 | fan  |   20 |  3 |   20 |
| NULL | NULL | NULL |  1 |   10 |
| NULL | NULL | NULL |  2 |   26 |
| NULL | NULL | NULL |  4 |   35 |
| NULL | NULL | NULL |  5 |   50 |
+------+------+------+----+------+
6 rows in set (0.00 sec)

第六部分——Mysql和Python的交互

使用Python DB API 访问数据库流程

  1. 开始
  2. 创建connection
  3. 获取cursor
  4. 执行SQL语句(增删改查数据)
  5. 关闭cursor
  6. 关闭connection
  7. 结束

第七部分——分组

建个表

mysql> select * from e3;
+----+-----------------+------+--------+--------+
| id | name            | age  | height | gender |
+----+-----------------+------+--------+--------+
|  1 | 温迪            |   16 |     40 | 男     |
|  2 | 钟离            |   30 |     65 | 男     |
|  3 | 纳西妲          |   22 |     35 | 女     |
|  4 | 荒泷一斗        |   27 |     70 | 男     |
|  5 | 珊瑚宫心海      |   25 |     45 | 女     |
|  6 | 深海龙蜥        |  100 |    500 | 未知   |
|  7 | 雷电将军        |   26 |     47 | 女     |
|  8 | 草龙            |   85 |    350 | 未知   |
|  9 | 流浪者          |   20 |     50 | 保密   |
| 10 | 凝光            |   30 |     48 | 女     |
+----+-----------------+------+--------+--------+
10 rows in set (0.00 sec)

group by

将查询结果按照1个或者多个字段进行分组,相同的字段为一组。

既可用于单字段分组、也可用于多字段分组。

select gender from e3 group by gender;

mysql> select gender from e3 group by gender;
+--------+
| gender |
+--------+
| 保密   |
| 女     |
| 未知   |
| 男     |
+--------+
4 rows in set (0.00 sec)

group by + group _concat()

group _concat(字段名)可作为单独字段输出。

分组后根据结果,使用group _concat()防止每一组每一字段的值的集合。

select gender,group_concat(name) from e3 group by gender;

mysql> select gender,group_concat(name) from e3 group by gender;
+--------+-----------------------------------------------+
| gender | group_concat(name)                            |
+--------+-----------------------------------------------+
| 保密   | 流浪者                                         |
| 女     | 纳西妲,珊瑚宫心海,雷电将军,凝光                 |
| 未知   | 深海龙蜥,草龙                                  |
| 男     | 温迪,钟离,荒泷一斗                             |
+--------+-----------------------------------------------+
4 rows in set (0.01 sec)

select gender,group_concat(age) from e3 group by gender;

mysql> select gender,group_concat(age) from e3 group by gender;
+--------+-------------------+
| gender | group_concat(age) |
+--------+-------------------+
| 保密   | 20                |
| 女     | 22,25,26,30       |
| 未知   | 100,85            |
| 男     | 16,30,27          |
+--------+-------------------+
4 rows in set (0.00 sec)

group + 集合函数

通过集合函数对这些值做操作

select gender,count(*) from e3 group by gender;

mysql> select gender,count(*) from e3 group by gender;
+--------+----------+
| gender | count(*) |
+--------+----------+
| 保密   |        1 |
| 女     |        4 |
| 未知   |        2 |
| 男     |        3 |
+--------+----------+
4 rows in set (0.00 sec)

select gender,avg(age) from e3 group by gender;

mysql> select gender,avg(age) from e3 group by gender;
+--------+----------+
| gender | avg(age) |
+--------+----------+
| 保密   |  20.0000 |
| 女     |  25.7500 |
| 未知   |  92.5000 |
| 男     |  24.3333 |
+--------+----------+
4 rows in set (0.00 sec)

group + having

having条件表达式:分组查询后指定条件输出查询结果

having作用和where一样,但having只可用于group by

select gender,count(*) from e3 group by gender having count(*)>2;

mysql> select gender,count(*) from e3 group by gender having count(*)>2;
+--------+----------+
| gender | count(*) |
+--------+----------+
| 女     |        4 |
| 男     |        3 |
+--------+----------+
2 rows in set (0.00 sec)

group by + with rollup

with rollup得到作用是:在最后新增一行,记录当前列里的所有记录之和(可取值、可打印输出)

select gender,count(*) from e3 group by gender with rollup;

mysql> select gender,count(*) from e3 group by gender with rollup;
+--------+----------+
| gender | count(*) |
+--------+----------+
| 保密   |        1 |
| 女     |        4 |
| 未知   |        2 |
| 男     |        3 |
| NULL   |       10 |
+--------+----------+
5 rows in set (0.00 sec)

select gender,group_concat(age) from e3 group by gender with rollup;

mysql> select gender,group_concat(age) from e3 group by gender with rollup;
+--------+--------------------------------+
| gender | group_concat(age)              |
+--------+--------------------------------+
| 保密   | 20                             |
| 女     | 22,25,26,30                    |
| 未知   | 100,85                         |
| 男     | 16,30,27                       |
| NULL   | 20,22,25,26,30,100,85,16,30,27 |
+--------+--------------------------------+
5 rows in set (0.00 sec)

第八部分——分页

还是那样,先建个表。

mysql> select * from e3;
+----+-----------------+------+--------+--------+
| id | name            | age  | height | gender |
+----+-----------------+------+--------+--------+
|  1 | 温迪            |   16 |     40 | 男     |
|  2 | 钟离            |   30 |     65 | 男     |
|  3 | 纳西妲          |   22 |     35 | 女     |
|  4 | 荒泷一斗        |   27 |     70 | 男     |
|  5 | 珊瑚宫心海      |   25 |     45 | 女     |
|  6 | 深海龙蜥        |  100 |    500 | 未知   |
|  7 | 雷电将军        |   26 |     47 | 女     |
|  8 | 草龙            |   85 |    350 | 未知   |
|  9 | 流浪者          |   20 |     50 | 保密   |
| 10 | 凝光            |   30 |     48 | 女     |
| 11 | 宵宫            |   19 |     55 | 女     |
| 12 | 达达利亚        |   33 |     60 | 男     |
| 13 | 行秋            |   24 |     43 | 保密   |
| 14 | 风魔龙          |  210 |    390 | 未知   |
| 15 | 枫原万叶        |   24 |     63 | 男     |
| 16 | 妮露            |   17 |     46 | 女     |
| 17 | 琴              |   25 |     40 | 女     |
+----+-----------------+------+--------+--------+
17 rows in set (0.00 sec)

当数据量过大的时候,在一页中查看信息比较麻烦

select * from e3 limit 7,3;

mysql> select * from e3 limit 7,3;
+----+-----------+------+--------+--------+
| id | name      | age  | height | gender |
+----+-----------+------+--------+--------+
|  8 | 草龙      |   85 |    350 | 未知   |
|  9 | 流浪者    |   20 |     50 | 保密   |
| 10 | 凝光      |   30 |     48 | 女     |
+----+-----------+------+--------+--------+
3 rows in set (0.00 sec)

select * from e3 where gender='女' limit 2,4;

mysql> select * from e3 where gender='女';
+----+-----------------+------+--------+--------+
| id | name            | age  | height | gender |
+----+-----------------+------+--------+--------+
|  3 | 纳西妲          |   22 |     35 | 女     |
|  5 | 珊瑚宫心海      |   25 |     45 | 女     |
|  7 | 雷电将军        |   26 |     47 | 女     |
| 10 | 凝光            |   30 |     48 | 女     |
| 11 | 宵宫            |   19 |     55 | 女     |
| 16 | 妮露            |   17 |     46 | 女     |
| 17 | 琴              |   25 |     40 | 女     |
+----+-----------------+------+--------+--------+
7 rows in set (0.00 sec)mysql> select * from e3 where gender='女' limit 2,4;
+----+--------------+------+--------+--------+
| id | name         | age  | height | gender |
+----+--------------+------+--------+--------+
|  7 | 雷电将军     |   26 |     47 | 女     |
| 10 | 凝光         |   30 |     48 | 女     |
| 11 | 宵宫         |   19 |     55 | 女     |
| 16 | 妮露         |   17 |     46 | 女     |
+----+--------------+------+--------+--------+
4 rows in set (0.00 sec)

学习笔记——mysql数据库(四)相关推荐

  1. java学习笔记④MySql数据库--03/04 DQL查询

    03 使用DQL查询数据(一) 04 使用DQL查询数据(二) DQL 数据查询语言  select select * 方式效率低 AS 取别名 (给字段取别名,给表取别名,给计算结果取别名) as取 ...

  2. oracle protocol=beq 不可用,学习笔记:Oracle数据库坏块 深入研究obj$坏块导致exp/expdp不能执行原因...

    天萃荷净 深入研究Oracle坏块obj$导致exp/expdp不能执行导出的原因 上篇(案例:Oracle出现obj$坏块exp/expdp导出不能导出的解决办法ORA-01578 ORA-0111 ...

  3. python数据挖掘学习笔记】十四.Scipy调用curve_fit实现曲线拟合

    #2018-03-28 10:02:08 March Wednesday the 13 week, the 087 day SZ SSMR python数据挖掘学习笔记]十四.Scipy调用curve ...

  4. Spring Security技术栈学习笔记(十四)使用Spring Social集成QQ登录验证方式

    上一篇文章<Spring Security技术栈开发企业级认证与授权(十三)Spring Social集成第三方登录验证开发流程介绍>主要是介绍了OAuth2协议的基本内容以及Spring ...

  5. Unity3D笔记——MySQL数据库 简单使用

    ** Unity3D笔记--MySQL数据库 简单使用 前言:Unity3D笔记是我平时做一些好玩的测试和研究,记录的笔记.会比较详细也可能随口一提就过了. 所以大家见谅了,内容一般都会是原创的(非原 ...

  6. oracle中如何格式化输出,【学习笔记】数据库日期时间格式化输出案例

    天萃荷净 分享一篇关于开发DBA在工作中常用到的日期时间格式化输出方法案例,含:mysql.sql server.oracle 3种数据库日期时间格式化输出 1.mysql数据库时间格式化输出 DAT ...

  7. 数据挖掘学习笔记——GEO数据库:芯片数据分析

    数据挖掘 数据挖掘学习笔记--GEO数据库:芯片数据分析 文章目录 数据挖掘 一.芯片基础知识 1.1.背景 二.GEO数据库概述 2.1.基础简介 2.2.检索页面展示 三.GSE项目的三种下载方式 ...

  8. C++ Primer 学习笔记(第四章:表达式)

    2019独角兽企业重金招聘Python工程师标准>>> ##C++ Primer 学习笔记(第四章:表达式) [TOC] ###4.1 基础 左值和右值: 当一个对象被用作右值的时候 ...

  9. 以下用于数据存储领域的python第三方库是-Python3爬虫学习之MySQL数据库存储爬取的信息详解...

    本文实例讲述了Python3爬虫学习之MySQL数据库存储爬取的信息.分享给大家供大家参考,具体如下: 数据库存储爬取的信息(MySQL) 爬取到的数据为了更好地进行分析利用,而之前将爬取得数据存放在 ...

最新文章

  1. WPF wpf scrollviewer 触屏滚动 窗体弹跳
  2. Bootstrap(一):CSS--栅格系统
  3. exit()与_exit()的区别
  4. 4.QPixmap,QTransform,绘图函数的使用
  5. 思科认证网络工程师CCNA(更新完毕)
  6. 《大数据、小数据、无数据:网络世界的数据学术》一 3.4 开放学术
  7. uCOS-II核心算法分析(μCOS-Ⅱ)
  8. 浅谈C#字符串构建利器StringBuilder
  9. 英语作业介绍一项发明计算机,介绍电脑的发明的英语作文
  10. 前端学习(2659):组件间传参
  11. 各纬度气候分布图_地理:世界各种气候类型分布图(高清版)汇总!以及解答分析哦~...
  12. Java知识系统回顾整理01基础04操作符02关系操作符
  13. git已经删除了远程分支,但本地环境仍能看到远程分支
  14. 现在,你可以撸机器猫了
  15. Jmeter——将Fiddeler作为代理服务器
  16. 浅谈Chrome OS
  17. python for循环求1到100的和_python中用for循环语句实现1加到100的方法
  18. PS画直线虚线及图形虚线
  19. 肯德基 服务器响应异常,肯德基链接服务器异常
  20. 异常:could not initialize proxy - the owning Session

热门文章

  1. 蓝天变多了,为什么你家里的空气却更差了?
  2. JSP上传图片限制大小像素
  3. 抖音小店免费开通指南,小店保证金类目都有哪些?丨国仁网络资讯
  4. r5 5500u和r5 5625u哪个好 r55500u和5625u对比
  5. 使用树莓派初阶段总结
  6. 假设系统时钟频率采用6MHz c语言,定时器例题.ppt
  7. Android弹幕功能实现,模仿斗鱼直播的弹幕效果,跪了
  8. Tango control system配套软件
  9. Android监听手机短信
  10. 计算机主机内部的结构,计算机主机内部解析