1.数据库
什么是数据库?
对于这个问题每个人都有自己的理解
数据库(Database):就是一个存储数据的仓库,其本身其实是一张张表格,每张表格间又通过一定的联系连接在一起,就这样组成了一个数据库。
可以这样理解
数据库中最基本的元素为表(table),每张表都有一个主键(用于对表的身份进行标识,主键具有唯一性),表中包含列和行,列为名称标签,行为记录具体数据。
在数据库中如何关联其他的表后面会讲到
选取主流的数据库
市场上主流的数据有MySQL、Oracle、SQL Server等,而MySQL 是一个开源的关系型的数据库管理系统,应用非常广泛,因而选择使用Mysql学习sql是个不错的选择。
mysql的安装与配置非常简单,我们从官网下载社区版本安装,windows用户可以选择安装MSI安装(Windows Installer),一直默认安装,到了数据库用户和密码设置时,设置即可。
选取MySQL的GUI工具
这样的工具有很多种,每个人都有自己的喜好,我用的是HeidiSQL
该工具操作简单方便这里不过多叙述使用方法
SQL的基本操作
创建数据库,含有一个简单的数据表,并进行C(创建)U(更新)R(读取,查询)D(删除)操作数据表
创建数据库
CREATE DATABASE 数据库名称
CREATE DATABASE STUDENTS
打开数据库
USE 数据库名称
USE STUDENTS
查看所有数据库
#查看所有数据库 SHOW DATABASES #查看当前打开的数据库 SELECT DATABASE()
删除数据库
DROP DATABASES 数据库名称
DROP DATABASE STUDENTS
在数据库中创建数据表,根据具体数据类型,选择想用数据长度
CREATE TABLE tb1( ID INT(20) NOT NULL, 姓名 varchar(20), 性别 varchar(5) ) #查看数据表 SHOW TABLES FROM STUDENTS #查看数据表结构 SHOW COLUMNS FROM STUDENTS
向表中写入记录
INSERT 表名称 (列1, 列2,...) VALUES (值1, 值2,....)
INSERT tb1(ID, 姓名, 性别) VALUES(1,'张三', '男'); INSERT tb1(ID, 姓名, 性别) VALUES(2,'李四', '女'); INSERT tb1(ID, 姓名, 性别) VALUES(3,'王五', '男'); INSERT tb1(ID, 姓名, 性别) VALUES(4,'赵六', '女');
删除记录的数据
DELETE FROM 表名 WHERE 列名称 = 某值
DELETE FROM tb1 WHERE 姓名 = '赵六'
更新记录的数据
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
UPDATE persons SET 性别 = '男' WHERE 姓名 ='赵六'
ALTER TABLE 语句用于在已有的表中添加、修改或删除列
2.SQL重点知识
我们在进行数据分析时,最常用的功能就是查询功能,所以首先我们要明确SQL中一些语句的执行顺序
select---from---where---groupby---having---orderby
一、基础知识
列出一些关键字
- select.....from
- where
- group by --having
- order by
- like
- distinct
- 常用函数:sum,count, max, min,avg
- case when then else end
select :选取数据,查看数据,指定返回的列 from: 需要从哪个数据表选取数据
select 列名称 from 表名称 select * from 表名称 #获取所有列
where : 设置条件筛选数据
WHERE 列 运算符 值
需要理解筛选的条件,合理利用运算符获取数据
group by:对指定的字段进行分组,产生汇总信息,一般结合sum,count函数使用。
select 字段1,字段2 from Table1 GROUP BY 字段1,字段2
group by 使用中需要注意的问题
1,注意返回结果集的字段,,这些字段要么要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中
2,where 搜索条件在进行group by 分组操作之前应用,不能使用聚合函数
3, having 搜索条件在进行分组操作之后应用,可以使用聚合函数
order by : 根据指定的列对结果集进行排序, 默认按照升序,降序用desc
ORDER BY 字段1,字段2
like:模糊搜索,用于在 WHERE 子句中搜索列中的指定模式,结合“%”通配符使用
where column_namelike pattern
还可以用正则表达式来进行搜寻,REGEXP pattern(后续研究正则再详细减少)
distinct: 去重字段,需注意,只能放在select 语句首字段中
SELECT DISTINCT 列名称 FROM 表名称
sum:返回数值列的总数、 avg: 返回列的平均值、 count()返回表中的记录数
max():返回最大值、 min():返回最小值
二、连接(join)查询
- 内连接
- 外连接
内连接
等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。
不等值连接:在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。
自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
多表内连接:将多张表连接在一起,只列出匹配的记录
FROM 表1 [INNER] JOIN 表2 ON〈联接条件〉
自连接(特殊的内 联 接): 将一张表,在逻辑上分为两张表,每张表取不同的别名来区别
FROM 表1 表名1 [INNER] JOIN 表1 表名2 ON〈联接条件〉
外连接
包括,左、右连接,返回所有的行
FROM 表1 LEFT JOIN 表2 ON〈连接条件〉
内联接 inner Join,找出两张表共有的字段;
左联接 left join,以 join 前面一张表为主,返回其所有行,如果与右表有相同的字段,全部返回,否则为空,右联接刚好与之相反。
全连接 Full join, 两张表全部返回
三、子查询
说白了就是嵌套查询,包含在某个查询中,如果子查询依赖于外部条件,则被称为相关子查询;
反之为非相关子查询