数据分析-技能篇-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用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等。 (编辑:拼字网 - 核心网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐