目录

  • 1 课程介绍
    • 1.1 课程介绍
    • 1.2 课程标准
    • 1.3 授课计划
      • 1.3.1 23交通运营管理
      • 1.3.2 24交通运营管理
  • 2 MySQL数据库基础
    • 2.1 数据库基础及MySQL
    • 2.2 MySQL的安装与配置
    • 2.3 MySQL的图形管理工具Navicat
    • 2.4 MySQL数据库的基本操作
  • 3 数据管理及数据查询分析
    • 3.1 存储引擎、字符集和数据类型
    • 3.2 创建数据表及导入数据
    • 3.3 备份和还原数据库
    • 3.4 数据查询和生成表
    • 3.5 数据插入、修改和删除
    • 3.6 数据库设计
    • 3.7 多表数据查询
  • 4 数据可视化技术
    • 4.1 数据可视化概述
    • 4.2 数据可视化工具ECharts
    • 4.3 交通数据指标可视化
  • 5 交通大数据处理与分析
    • 5.1 交通数据统计
    • 5.2 数据排序
    • 5.3 数据滤波
    • 5.4 数据抽样
    • 5.5 数据插值
    • 5.6 交通数据相关性分析
    • 5.7 回归分析与其他算法
  • 6 大作业
    • 6.1 道路运输数据统计分析
  • 7 实训指导手册
    • 7.1 实训01 安装、配置和使用数据库
    • 7.2 实训02 建立数据表并导入数据
    • 7.3 实训03 单表数据查询与更新
    • 7.4 实训04 建立数据库关系
    • 7.5 实训05 复杂数据查询
    • 7.6 实训06 创建高速公路数据库并导入数据
    • 7.7 实训07 查询分析高速公路交通数据
    • 7.8 实训08 交通参数指标统计
    • 7.9 实训09 数据排序
数据查询和生成表
  • 1 讲义
  • 2 微课视频



课堂讲义


1、数据分析本质上就是数据查询。


2、MySQL中的数据查询就是使用 SELECT语句,也可以使用视图方式创建查询(不建议)


3、熟练掌握SELECT语句。

SELECT [DISTINCT] [数据列]      //选择列

FROM [表]                       //选择表

WHERE [限定条件]                //确定查询条件

GROU BY [分组]                  //确定分组依据

HAVING [限定分组条件]           //对分组的条件进行限定,可以用聚集函数。

ORDER BY [排序条件]             //确定排序的条件

LIMIT [n]                       //限定查询记录的数量。

 

4、基本语法

(1)每写一个语句都要在末尾加分号;

(2)SELECT语句中共7个子句。

(3)在使用SELECT语句时,一定有SELECT和FROM子句,其他子句根据需要使用。

 

5、SELECT子句:选择列

(1) *  代表所有列;

(2) SELECT 后面可以接多列,每一列之间用逗号分隔,

      最后一列后面没有标点符号。

(3)可以为列改名:SELECT COL_NAME AS [新列名],也可以省略AS

      不改变表的数据列名称,建议新列名用单引号括住。

(4)如果是多表查询,建议列名前面加表名作前缀。table.col

      建议:表名可以在from子句中定义为简单的别名。

(5)可以使用函数对数据列进行运算。

      LEFT(),RIGHT(),SUBSTR(),YEAR(),CONCAT()

(6)可以对数据列之间进行运算。例如两列相加、相乘等。

(7) DISTINCT:消除重复的行,DISTINCT紧接SELECT

 

6、FROM子句: 选择表

(1) FROM 后面接数据表的名字,表名可以用反单引号括住。

(2) FORM 后面可以接多个数据表,各表之间用逗号分隔。

(3) FROM后面的表面建议定义表的别名(简单易懂)。FROM TABLE AS '新表名'

(4)多表查询就是基于多个表的笛卡儿积【各表行数相乘


7、ORDER BY子句

(1)ORDER BY + 排序的依据(条件),一般后面接列名。

排序的依据一般是在SELECT子句有显示的数据列。

例如:查询staffinfo所有信息,查询结果按照ID列的升序排序。

SELECT * FROM staffinfo   ORDER BY ID;

(2)排序默认为按照升序排序:ASC

如果要按降序排序,则要在排序条件后加:DESC 示例: SELECT * FROM staffinfo ORDER BY ID DESC;

(3)ORDER BY后面可以接多个排序条件,各条件之间用逗号分隔。

ORDER BY 条件1,条件2… 示例:先按性别的升序排序,后按ID降序排序。 SELECT * FROM staffinfo ORDER BY GENDER ASC, ID DESC;

(4)汉字的排序问题。中文字符数据列的排序,要按照汉语拼音顺序排序。

如果是UTF8字符集,排序规则选择:utf8mb4_zh_0900_as_cs 可以为数据列选择GB2312字符集,排序规则:gb2312_chinese_ci 示例: SELECT * FROM staffinfo ORDER BY NAME;

备注:如果数据库已经设定好了字符集和排序规则。

那么,可以在需要查询的表中,利用表设计器,选中需要排序的数据列, 修改字符集和排序规则即可。


8、LIMIT子句

用法:LIMIT n, 作用:显示前n行记录。

备注:LIMIT子句一般和ORDER BY子句一起使用。

      LIMIT子句放在SELECT语句的最后。

示例:显示年龄最大前5名员工信息。

SELECT *

FROM staffinfo

ORDER BY Birthday ASC

LIMIT 5;


随堂练习:

查询staffinfo表,要求显示工龄最长的5个员工信息。

显示的信息包括:员工编号、姓名、性别、入职时间、工龄。

备注:工龄=今年-入职年份。


9、WHERE 子句【最重要的一个子句】 

(1)WHERE 子句的作用:限定查询的条件。 WHERE <条件表达式>:查询满足<条件表达式>的记录。

什么叫条件表达式:常量(数值)、变量(数据列)、运算符的组合。

核心就是如何写正确的表达式,满足查询的要求。


例如:性别是男的,如何表达?籍贯是广州的? 性别是女的,而且驾驶年龄大于10年的。

常量:男、女、广州、10

变量:数据列 运算符: ——逻辑运算符:NOT, AND, OR ——算术运算符:+,-,*,/,MOD, ——比较运算符:=,>=,>,<=,!=,in,like,between…AND

能否灵活运用SELECT语句,关键是写好WHERE子句,

写好WHERE子句的关键,是熟练掌握条件表达式的写法。


(2)WHERE子句怎么写?就变成了如何写表达式的问题。和Python的编程也一样。

注意:WHERE 子句的条件表达式,不能用列的别名,因为WHERE子句是属于先判断。

    其他子句可以用列的别名,因为ORDER BY,GROUP BY等属于后判断运行。



(3)最简单的条件表达式:列名=value 文本类、日期时间类的常量,要用单引号括住。 示例: SELECT * FROM staffinfo WHERE GENDER = '女';


(4)结合逻辑运算符、比较运算符:条件1 and 条件2 or 条件3… 多个条件的时候,注意使用圆括号括住。 示例: 性别是女,而且来自广州的;或者性别是男的,而且来自清远的。 SELECT * FROM staffinfo WHERE (GENDER = '女' AND NativePlace='广州')       OR      (GENDER = '男' AND NativePlace='清远');


(5)数据列 BETWEEN A AND B, [A,B]闭区间。 相当于: 数据列 >= A AND 数据列 <= B 示例:查询驾驶时间为5-10年的员工信息。 SELECT NAME 姓名,       Gender 性别,       DriveTime 准驾时间,       YEAR(NOW())-YEAR(DriveTime) 驾龄 FROM staffinfo WHERE (YEAR(NOW())-YEAR(DriveTime) >= 5)  

       AND

      (YEAR(NOW())-YEAR(DriveTime) <=10) ORDER BY 驾龄 DESC;  


SELECT NAME 姓名,       Gender 性别,       DriveTime 准驾时间,       YEAR(NOW())-YEAR(DriveTime) 驾龄 FROM staffinfo WHERE (YEAR(NOW())-YEAR(DriveTime)) BETWEEN 5 AND 10 ORDER BY 驾龄 DESC;  


(6)IN取值范围:IN(取值列表),相当于OR 讨论:从staffinfo表中查询来自广州、清远、江门的员工信息。 select * from staffinfo as S WHERE S.NativePlace IN('广州','江门','清远');


错误的写法:条件表达式不能用,连接。 select * from staffinfo as S WHERE S.NativePlace='广州',     S.NativePlace='江门',         S.NativePlace='清远' ORDER BY S.NativePlace;


(7)LIKE和通配符

_:代表一个字符; 

%:代表0个或多个字符。

LIKE 运算符,也叫模糊查询。 

用法:数据列 LIKE ‘通配符’ 

示例: 在staffinfo表中,查询所有姓陈的员工信息。

select * from staffinfo as S WHERE S.Name LIKE '陈%'


示例: 在staffinfo表,查询姓名里面有个“八”字的。 select * from staffinfo as S WHERE S.Name LIKE '%八%'



10、GROUP BY  子句 (1)GROUP BY 的作用是分组    怎么分组?    分组的依据是什么(GROUP BY 后面接什么):有重复数值的数据列。    有重复数值的数据列,才有分组的意义。    例如:性别,籍贯。    没有重复数值的数据列,例如:ID,没有必要进行分组。


(2)分组的目的是什么?   分组的目的是:统计。

  既然要分组统计,SELECT后面首先要显示分组的信息(即:分组后有多少个不同的组)

  要显示的信息应该有什么?


(3)分组显示的信息:  两个重要结论    ——GROUP BY 后面接什么,SELECT后面就接什么,        分组依据应放在SELECT后的第一位,作用是显示分组信息。


    ——SELECT后面除了接分组条件以外,只能接聚集函数。

   分组的目的是统计。统计什么?统计分组后各组的信息, 所以必须用聚集函数统计分组的相关信息。

    常用的5个聚集函数:

               COUNT(*):统计各组的记录的数量。
               AVG(数据列):统计各组的对应数据列的平均值。
               MAX(数据列): 统计各组的对应数据列的最大值。
               MIN(数据列): 统计各组的对应数据列的最小值。

               SUM(数据列): 统计各组的对应数据列的和。


 例子:

   SELECT GENDER

   FROM staffinfo    GROUP BY GENDER;

     等价于:

   SELECT DISTINCT GENDER

    FROM staffinfo;


思考题目:

统计男女职员的年龄信息。在staffinfo表中,请分别统计男、女职员的人数、平均年龄、 最大年龄、最小年龄,请写出SELECT语句。



11、HAVING 子句 (1)作用:限定分组的条件,和WHERE一样。


SELECT NativePlace 籍贯 FROM staffinfo WHERE NativePlace!='潮州' GROUP BY 籍贯;

等价于:

SELECT NativePlace 籍贯 FROM staffinfo GROUP BY 籍贯 HAVING 籍贯!='潮州';


(2)和WHERE不同之处

--HAVING 后面的条件,可以使用列的别名。因为HAVING是属于后判断,WHERE 后面不可以使用列的别名。

--HAVING 后面可以使用聚集函数,而WHERE后面不可以用聚集函数。


例子:

统计不同地方的人数,要求不显示潮州的,而且只显示人数大于等于3的地方。


SELECT NativePlace 籍贯,       COUNT(*) 人数 FROM staffinfo GROUP BY 籍贯 HAVING 籍贯!='潮州' AND 人数 >= 3;



12、生成表

所谓生成表,就是利用已有的数据表,重新生成含有数据的新表或不含数据的表。

(1)生成新表,并包含数据。 

语法:CREATE TABLE new_table      AS      SELECT … 

备注:生成的新表只有数据和数据类型,不含数据列的约束


例如:从staffinfo表选择所有男性的职员,生成新表new_staff 

CREATE TABLE new_staff 

AS 

SELECT * FROM staffinfo WHERE Gender='男';


(2)生成新表,但不包含数据。使用LIKE关键字

语法: CREATE TABLE new_table  LIKE old_table 

备注:生成的新表和源表结构一致,包括数据列的所有约束。


示例: CREATE TABLE new_staff LIKE staffinfo;