加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

数据分析-技能篇-MySQL基础

发布时间:2022-09-19 15:44:53 所属栏目:MySql教程 来源:
导读:  SQL是数据分析师的必备技能之一,也是所需技能中最重要的技能之一。相比Excel,数据库能够处理分析海量数据,这是Excel所不能完成的。因此,本篇文章选取目前比较流行的数据库——MySQL进行学习。
  SQL是数据分析师的必备技能之一,也是所需技能中最重要的技能之一。相比Excel,数据库能够处理分析海量数据,这是Excel所不能完成的。因此,本篇文章选取目前比较流行的数据库——MySQL进行学习。
 
  需要注意的是:对于数据分析师而言,我们的重点是掌握SQL基础查询、常用函数、窗口函数的使用。至于数据库底层原理、存储过程等,不在本文的范围之内。
 
  接下来,我们就一起学习MySQL吧~
 
  下图是MySQL学习的模块:
 
  MySQL 选择数据库_ip地址库 mysql_mysql备份整个库
 
  本篇文章着重学习第一个模块:MySQL基础。
 
  一、数据库1、什么是数据库?数据库(DataBase) 是按照数据结构来组织、存储和管理数据的仓库
 
  数据库是一个数据的集合
 
  其本质是一个文件系统,以文件的方式,将数据保存在电脑上2、为什么要使用数据库?数据存储方式的比较
 
  (1) 内存
 
  优点:速度快
 
  缺点:容量有限,不能够永久保存,数据是临时状态的
 
  (2) 文件(Excel)
 
  优点:数据是可以永久保存的
 
  缺点:少量数据直接打开获取数据,大量数据使用程序IO流操作文件, 不方便;同一时间多人操作某一个文件也可能出现问题
 
  (3) 数据库
 
  优点:海量数据存储,提供不错的查询效率;数据可以永久保存;方便存储和管理数据;使用统一的方式操作数据库
 
  缺点:占用资源(重型武器);有些数据库需要付费3、数据库与数据库管理系统的区别?数据库(DB):指的是按照一定结构组织的数据集合,由存储数据的文件组成。
 
  数据库管理系统(DBMS):是一款管理软件。
 
  它用于对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过 DBMS访问数据库中的数据,数据库管理员也通过 DBMS 进行数据库的维护工作。DBMS 允许多个应用程序或多个用户使用不同的方法,在同一时刻或不同时刻去建立、修改和询问数据库。
 
  注:我们通常所说的数据库其实是DBMS,例如:
 
  Oracle 公司的 Oracle 和 MySQL
 
  IBM 公司的 DB2
 
  Microsoft 公司的 Access 和 SQL Server4、数据库的分类?关系型数据库 (RDB- Relationship DataBase) :关系型数据库可以使用SQL语言/SQL语句来操作;
 
  关系型数据库是创建在关系模型基础上的数据库;
 
  典型代表有:MySQL、Oracle、Microsoft SQL Server、Access、PostgreSQL、DB2等。
 
  非关系型数据库(NoSQL)
 
  常规情况我们是不能使用SQL进行操作的,它不是关系模型;
 
  非关系型数据库也被称为 NoSQL 数据库,NoSQL 并不是某个具体数据库,它泛指所有非关系型数据库;
 
  典型代表有:Hbase、MongoDB、Redis(k/v)、CouchDB等。5、关系型数据库的主要对象?(1) 表
 
  表是包含数据库中所有数据的数据库对象,由行和列组成(二维表格模型,就类似于
 
  Sheet),用于组织和存储数据。
 
  (2) 字段
 
  表中每一列称为一个字段,字段有自己的属性,如字段类型、字段大小等。其中,字段类
 
  型是字段最重要的属性,它决定了字段能够存储哪种数据。
 
  和Excel不同,这里针对列(字段要求比较严格),该列存储什么类型数据,长度多少都应
 
  该提前(建表的时候)进行定义
 
  (3) 索引
 
  索引是一个单独的、物理的数据库结构。它是依赖于表建立,在数据库中使用索引,无须
 
  对整个表进行扫描,就可以找到需要的数据。
 
  (4) 视图
 
  视图是从一张或多张表中导出的表(也称虚拟表),是用户查看数据表中数据的一种方
 
  式。二、通用语法1、SQL通用语法(1) SQL语句可以单行 或者 多行书写,以分号结尾 ; (Sqlyog中可以不用写分号)
 
  (2) 可以使用空格和缩进来增加语句的可读性;
 
  (3) MySql中使用SQL不区分大小写,一般关键字大写,数据库名 表名列名 小写。2、注释方式注释语法说明
 
  -- 空格
 
  单行注释
 
  #
 
  单行注释
 
  /* */
 
  多行注释
 
  3、数据库语言
 
  (1) DDL-数据定义语言
 
  创建数据库
 
  命令说明
 
  create database 数据库名;
 
  创建制定名称的数据库
 
  create database 数据库名 character set 字符集;
 
  创建指定名称的数据库,并且指定字符集(一般都指定utf8)
 
  -- 创建数据库示例
  create database db; -- 创建db数据库
  create database db character set utf8; -- 创建db数据库,并制定字符集为utf8
  查看/选择数据库
 
  命令说明
 
  use 数据库;
 
  切换数据库
 
  select database();
 
  查看当前正在使用的数据库
 
  show databases;
 
  查看MySQL中都有哪些数据库
 
  show create database 数据库名;
 
  查看一个数据库的定义信息
 
  -- 查看/选择数据库示例
  use db; -- 切换至db数据库
  select database(); -- 查看当前正在使用的数据库
  show databases; -- 查看MySQL中都有哪些数据库
  show create database db; -- 查看db数据库的定义信息
  修改数据库
 
  命令说明
 
  alter database 数据库名 character set 字符集;
 
  数据库的字符集修改操作
 
  -- 修改数据库示例
  alter table db character set utf8; -- 将数据库db的字符集修改为utf8
  删除数据库
 
  命令说明
 
  drop database 数据库名;
 
  从数据库中永久的删除某个数据库
 
  -- 删除数据库示例
  drop database db;
  创建表
 
  -- 语法格式
  CREATE TABLE 表名
  (
     字段名称1 字段类型(长度),
     字段名称2 字段类型 注意 最后一列不要加逗号
  );
  -- 示例
  USE db; -- 切换到数据库 db
  -- 创建表
  CREATE TABLE category
  (
     cid INT,
     cname VARCHAR(20)
  );
  查看表
 
  命令说明
 
  show tables;
 
  查看当前数据库中的所有表名
 
  desc 表名;
 
  参看数据表的结构
 
  -- 查看当前数据库中的所有表名
  SHOW TABLES;
  -- 显示当前数据表的结构
  DESC category;
  -- 查看创建表的SQL语句
  SHOW CREATE TABLE category;
  删除表
 
  命令说明
 
  drop table 表名;
 
  从数据库中永久删除一张表
 
  drop table if exists 表名;
 
  判断表是否存在MySQL 选择数据库,存在的话就删除,不存在就不执行删除
 
  -- 直接删除 category 表
  DROP TABLE category ;
  -- 先判断 再删除category 表
  DROP TABLE IF EXISTS category;
  修改表
 
  关键字命令说明
 
  rename
 
  rename table 旧表名 to 新表名;
 
  修改表名
 
  add
 
  alter table 表名 add 字段名称 字段类型;
 
  向表中添加列
 
  modify
 
  alter table 表名 modify 字段名称 字段类型;
 
  修改表中列的 数据类型或长度
 
  change
 
  alter table 表名 change 旧列名 新列名 类型(长度);
 
  修改列名称
 
  drop
 
  alter table 表名 drop 列名;
 
  删除列
 
  -- 修改表示例
  -- 将category表 改为 category1
  RENAME TABLE category TO category1;
  -- 为分类表添加一个新的字段为 分类描述 cdesc varchar(20)
  ALTER TABLE category ADD cdesc VARCHAR(20);
  -- 对分类表的描述字段进行修改,类型varchar(50)
  ALTER TABLE category MODIFY cdesc VARCHAR(50);
  -- 对分类表中的 desc字段进行更换, 更换为 description varchar(30)
  ALTER TABLE category CHANGE cdesc description VARCHAR(30);
  -- 删除分类表中description这列
  ALTER TABLE category DROP description;
  (2) DML-数据操纵语言
 
  插入数据
 
  -- 语法格式
  insert into 表名 (字段名1,字段名2...) values(字段值1,字段值2...);
  -- 向学生表中添加数据,3种方式
  -- 方式1: 插入全部字段, 将所有字段名都写出来
  INSERT INTO student (sid,sname,age,sex,address) VALUES(1,'孙悟
  空',20,'男','花果山');
  -- 方式2: 插入全部字段,不写字段名
  INSERT INTO student VALUES(2,'孙悟饭',10,'男','地球');
  -- 方式3:插入指定字段的值
  INSERT INTO category (cname) VALUES('白骨精');
  注意:
 
  1) 值与字段必须要对应,个数相同&数据类型相同
 
  2)值的数据大小,必须在字段指定的长度范围内
 
  3)varchar char date类型的值必须使用单引号包裹。
 
  4)如果要插入空值,可以忽略不写,或者插入null
 
  5) 如果插入指定字段的值,必须要上写列名
 
  更改数据
 
  -- 语法格式1:不带条件的修改
  update 表名 set 列名 = 值
  -- 语法格式2:带条件的修改
  update 表名 set 列名 = 值 [where 条件表达式:字段名 = 值 ]
  -- 更改数据示例
  -- 1) 不带条件修改,将所有的性别改为女(慎用!!)
  UPDATE student SET sex = '女';
  -- 2) 带条件的修改,将sid 为3的学生,性别改为男
  UPDATE student SET sex = '男' WHERE sid = 3;
  -- 3)一次修改多个列, 将sid为 2 的学员,年龄改为 20,地址改为 北京
  UPDATE student SET age = 20,address = '北京' WHERE sid = 2;
  删除数据
 
  如果要删除表中的所有数据,有两种做法
 
  1. delete from 表名; 不推荐. 有多少条记录 就执行多少次删除操作. 效率低
 
  2. truncate table 表名: 推荐. 先删除整张表, 然后再重新创建一张一模一样的表. 效率高
 
  当一个表中条数非常多,又要做删除动作的时候,如果用delete会很慢,那我们可以使用
 
  truncate
 
  truncate table student;
  (3) DQL-数据查询语言
 
  准备数据
 
  #创建员工表
  表名 emp
  表中字段:
  eid 员工id,int
  ename 姓名,varchar
  sex 性别,char
  salary 薪资,double
  hire_date 入职时间,date
  dept_name 部门名称,varchar
  #创建员工表
  CREATE TABLE emp(
 
  eid INT,
  ename VARCHAR(20),
  sex CHAR(1),
  salary DOUBLE,
  hire_date DATE,
  dept_name VARCHAR(20)
  );
  #添加数据
  INSERT INTO emp VALUES(1,'孙悟空','男',7200,'2013-02-04','教学部');
  INSERT INTO emp VALUES(2,'猪八戒','男',3600,'2010-12-02','教学部');
  INSERT INTO emp VALUES(3,'唐僧','男',9000,'2008-08-08','教学部');
  INSERT INTO emp VALUES(4,'白骨精','女',5000,'2015-10-07','市场部');
  INSERT INTO emp VALUES(5,'蜘蛛精','女',5000,'2011-03-14','市场部');
  INSERT INTO emp VALUES(6,'玉兔精','女',200,'2000-03-14','市场部');
  INSERT INTO emp VALUES(7,'林黛玉','女',10000,'2019-10-07','财务部');
  INSERT INTO emp VALUES(8,'黄蓉','女',3500,'2011-09-14','财务部');
  INSERT INTO emp VALUES(9,'吴承恩','男',20000,'2000-03-14',NULL);
  INSERT INTO emp VALUES(10,'孙悟饭','男', 10,'2020-03-14',财务部);
  INSERT INTO emp VALUES(11,'兔八哥','女', 300,'2010-03-14',财务部);
  简单查询
 
  执行顺序:FROM --> WHERE --> GROUP BY --> HAVING --> SELECT --> ORDER BY 查询不会对数据库中的数据进行修改.只是一种显示数据的方式 SELECT
 
  语法格式:
 
  select 列名 from 表名;
  需求1: 查询emp中的 所有数据
 
  SELECT * FROM emp; -- 使用 * 表示所有列
  需求2: 查询emp表中的所有记录,仅显示id和name字段
 
  SELECT eid,ename FROM emp;
  需求3: 将所有的员工信息查询出来,并将列名改为中文
 
  # 使用 AS关键字,为列起别名
  SELECT
  eid AS '编号',
  ename AS '姓名' ,
  sex AS '性别',
  salary AS '薪资',
  hire_date '入职时间', -- AS 可以省略
  dept_name '部门名称'
  FROM emp;
  需求4:查询一共有几个部门
 
  -- 使用distinct 关键字,去掉重复部门信息
  SELECT DISTINCT dept_name FROM emp;
  需求5: 将所有员工的工资 +1000 元进行显示
 
  -- 运算查询 (查询结果参与运算)
  SELECT ename , salary + 1000 FROM emp;
  条件查询
 
  如果查询语句中没有设置条件,就会查询所有的行信息,在实际应用中,一定要指定查询条件,对记录进行过滤
 
  语法格式:
 
  select 列名 from 表名 where 条件表达式
  -- 先取出表中的每条数据,满足条件的数据就返回,不满足的就过滤掉
  运算符
 
  需求1:
 
  # 查询员工姓名为黄蓉的员工信息
  # 查询薪水价格为5000的员工信息
  # 查询薪水价格不是5000的所有员工信息
  # 查询薪水价格大于6000元的所有员工信息
  # 查询薪水价格在5000到10000之间所有员工信息
  # 查询薪水价格是3600或7200或者20000的所有员工信息
  代码实现:
 
  # 查询员工姓名为黄蓉的员工信息
  SELECT * FROM emp WHERE ename = '黄蓉';
  # 查询薪水价格为5000的员工信息
  SELECT * FROM emp WHERE salary = 5000;
  # 查询薪水价格不是5000的所有员工信息
  SELECT * FROM emp WHERE salary != 5000;
  SELECT * FROM emp WHERE salary <> 5000;
  # 查询薪水价格大于6000元的所有员工信息
  SELECT * FROM emp WHERE salary > 6000;
  # 查询薪水价格在5000到10000之间所有员工信息
  SELECT * FROM emp WHERE salary BETWEEN 5000 AND 10000;
  # 查询薪水价格是3600或7200或者20000的所有员工信息
  -- 方式1: or
  SELECT * FROM emp WHERE salary = 3600 OR salary = 7200 OR salary = 20000;
  -- 方式2: in() 匹配括号中指定的参数
  SELECT * FROM emp WHERE salary IN(3600,7200,20000);
  需求2:
 
  # 查询含有'精'字的所有员工信息
  # 查询以'孙'开头的所有员工信息
  # 查询第二个字为'兔'的所有员工信息
  # 查询没有部门的员工信息
  # 查询有部门的员工信息
  模糊查询:通配符
 
  代码实现:
 
  # 查询含有'精'字的所有员工信息
  SELECT * FROM emp WHERE ename LIKE '%精%';
  # 查询以'孙'开头的所有员工信息
  SELECT * FROM emp WHERE ename LIKE '孙%';
  # 查询第二个字为'兔'的所有员工信息
  SELECT * FROM emp WHERE ename LIKE '_兔%';
  # 查询没有部门的员工信息
  SELECT * FROM emp WHERE dept_name IS NULL;
  # 查询有部门的员工信息
  SELECT * FROM emp WHERE dept_name IS NOT NULL;
  (4) DQL-数据控制语言
 
  数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等。
 

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!