目录
创建数据库create database 数据库名 charset=utf8;
连接查询:from 表1 join 表2 on 表1.字段=表2.字段
-
类型
-
关系型数据库
- 常用关系数据库
- oracle
- mysql
- sql server
- 核心要素
- 数据行/记录
- 数据列/字段
- 数据表
- 数据库
- 常用关系数据库
-
非关系型数据库
- nosql
- redis
- hbase
-
-
MySQL
-
组成
- 服务器
- 客户端
-
客户端连接mysql服务器
- 确定mysql服务器的ip地址
- 通过ifconfig来确认
- 确认mysql服务器端口是否开启
- netstat -anptu |grep 3306
-
无UI界面、linux客户端终端连接
- mysql -h数据库ip -P端口号 -u数据库登录用户名 -p数据库登录密码
- -h不加时,表示服务器为本机
- -P不加时,默认端口3306
-
有UI界面、客户端navicat软件连接
- 确定mysql服务器的ip地址
-
辨:数据库,mysql,sql,navicat
- 数据库分为关系型数据库和非关系型数据库
- mysql是关系型数据库的一种
- sql是数据库语言,用于处理数据库
- mysql分为服务器和客户端
- navicat是mysql客户端的一种
-
-
navicat客户端
-
点点点操作(了解)
- 数据库操作
- 新建数据库
- 使用数据库
- 修改数据库
- 删除数据库
- 数据操作
- 添加数据
- 修改数据
- 删除数据
- 数据库操作
-
常用数据类型
- 整型int
- 小数decimal(n,m)
- n代表小数的总位数
- m代表小数位的位数
- 字符串varchar(n)
- n代表字符串的长度
- 时间datetime
-
数据约束
- 主键
- 主键字段,非空且值唯一
- 主键字段,不一定只有一个,可以由多个字段组成主键字段组
- 所有主键字段构成的主键组是一条记录的唯一标识,单一主键不能作为记录的唯一标识
- 外键
- 该字段为另一张表的主键,作为当前表的非主键字段
- 外键非空且唯一(因为外键是其他表的主键)
- 非空
- 空和" "空字符不一样
- 唯一
- 该字段的值不可重复
- 唯一的字段可以有多个
- 主键字段必唯一,唯一字段未必是主键
- 默认值
- 主键
- 数据库的备份和还原
-
-
linux客户端
-
数据库操作
- 查看所有数据库
- show databases;
- 查看当前使用数据库
- select database();
- 查看所有数据库
-
查看表的物理信息
- 查看当前数据库的所有表
- show tabels;
- 查看表结构
- desc 表名;
- 查看表的创建语句
- show create table 表名;
- 查看当前数据库的所有表
-
-
sql语句
-
数据库
-
创建数据库create database 数据库名 charset=utf8;
-
使用数据库use 数据库名;
-
修改数据库alter database 数据库名
-
删除数据库drop database 数据库名;
-
-
数据表
-
创建数据表create table 表名();
- 语法
- create table 表名(
- 字段名 类型 约束,
- 字段名 类型 约束
- );
- 不同字段之间用 , 区分
- 语法
-
删除数据表drop table 表名;
-
清空数据表truncate table 表名;
-
-
数据
-
增,insert into 表名
- 添加指定字段
- insert into 表名(字段名) values(值);
- 添加整行数据
- insert into 表名 values(整行记录的值);
- 添加多条数据
- insert into 表名 (字段) values(值), (值), .......
- 添加指定字段
-
删,delete from 表名
- delete from 表名
- 语法
- delete from 表名
- where 条件
- 此方法为物理删除,但是工作中大部分使用逻辑删除
- 逻辑删除的意思是,设置一个字段,标识当前记录是否已删除
- 语法
- truncate table 表名
- 清除表里的所有数据,但不删除表
- drop table 表名
- 直接删除表,包括数据和表结构
- delete from 表名
-
改,update 表名
- 语法
- update 表名
- set 字段1=值1,字段2=值2
- where 条件
- where筛选符合条件的行
- 语法
-
查,select
-
语法
- select 字段
- *代表所有字段
- 去重
- 数据统计
- 起别名
- from 表名
- 连接
- 起别名
- where 条件
- order by 字段名 asc|desc,默认asc(升序)
- group by 字段1,字段2,......
- having 条件
- limit start, count
- select 字段
-
根据表字段去重:select distinct 字段名
- select distinct 字段1,字段2,…… from 表名;
-
连接查询:from 表1 join 表2 on 表1.字段=表2.字段
-
规定
- 左表/主表为:关联键在表中为外键
- 右表/副表为:关联键在表中为主键
-
语法
- select *
- from 表1 inner join 表2 on 表1.列=表2.列
- 处理过程:先连接,再查询
-
内连接,inner join
- 取两表的交集
- 连接流程
- 按照记录先多后少的顺序遍历两张表的记录,每连接两条数据,就在表中“删除”(不是真删)连接的数据
- 如果记录的主键在另一张表中存在,则连接,否则不连接
-
自连接,inner join
- 左表和右表为同一张表
- 自关联一定要用别名
- select * from 表 as 别名1 inner join 表 as 别名2 on 别名1.字段=别名2.字段
-
左连接,left join
- 两个表连接时,以左表为准,右表中不存在的为空
- 连接过程
- 遍历左表的每行记录,如果该记录的关联键在右表内,则连接,否则相应位置为空
-
右连接,right join
- 两个表连接时,以右表为准,左表中不存在的为空
- 连接过程
- 遍历右表的每行记录,如果该记录的关联键在左表内,则连接,否则相应位置为空
-
-
起别名:select/from 字段名/表名 as 别名
-
给表起别名
- select 表别名.字段1,表别名.字段2,..... from 表名 as 表别名
- as可省
-
给字段起别名
- select 字段1 as 字段别名1,字段2 as 字段别名2..... from 表名
-
-
筛选行,字段做条件:where
- 遍历每一行,根据字段条件进行数据筛选
- 数学运算
- +,-,*,/
- 比较运算
- >,<,=,>=,<=,!=/<>
- 逻辑运算
- and,or,not
- 模糊查询:like
- %,匹配任意多个字符
- _,匹配任意单个字符
- 一般,like关键字只用来匹配字段类型为字符串的
- 范围查询
- in:集合
- c in (s1, s2, s3)
- 等价于or:c=s1 or c=s2 or c=s3
- between ... and ...:连续数据范围内
- c between a and b 等价于 c>=a and c<=b
- in:集合
- 判空
- is null/is not null
-
排序:order by
- order by 字段名 asc|desc,默认asc(升序)
- 按照多个字段进行排序时,先按照字段1排序,字段1相同的情况下,再按照字段2进行排序,……,在字段n-1相同的情况下,按照字段n进行排序
-
分组查询:group by
- select 所有分组字段1,聚合函数(字段1)
- 注意,此处字段1和group by为相同字段,聚合函数内的字段也为相同字段
- from 表名
- group by 分组字段1
- having 条件
- 分组的目的是对每一组的数据进行统计(使用聚合函数)
- 分组之后的数据,只可以用分组字段进行查询,但是聚合函数内可以用非分组字段进行数据筛选
- select +聚合函数+ group by的处理流程为
- 先查找select+from+where,再分组group by,最后对每个分组分别进行数据统计(聚合函数)
- group by之后,必须在select中使用字段进行数据统计,此时*代表每一组的所有数据
- select+聚合函数 vs select +聚合函数+ group by
- select +聚合函数+ group by的处理对象为:每个组的数据
- select+聚合函数的处理对象为:查出来的所有数据
- select 所有分组字段1,聚合函数(字段1)
-
筛选组,字段做条件:having
- 分组之后,将每一组作为一个表数据,通过having条件对“表数据”进行筛选
- 处理对象为:每一组数据
- having可以配合聚合函数进行使用
- having处理流程
- 先查找符合条件的数据,select+from+where
- 再分组,group by
- 再查找符合条件的分组,having
- 输出结果
-
分页查询:limit
- 查看[start, start+count]条数据
- select * from limit start, count
- start,代表开始的记录,从0开始
- count,代表从start开始,查找多少条记录
- select * from limit start, count
- 假设一页m行,查看第n页的数据
- select * from students limit (n-1)*m, m;
- n,代表页数
- m,代表每页的行数
- select * from students limit (n-1)*m, m;
- 查看[start, start+count]条数据
-
聚合函数
- count(某字段):求某字段的记录总数
- 可以和distinct配合使用,求某字段去重后的数据数
- max(字段名),min(字段名):对某字段求最大/小值
- sum(字段名):对某字段求和
- avg(字段名):对某字段求平均
- 适用范围
- select+聚合函数
- 如果用在select中,则聚合函数的处理对象为查询出来的所有记录,内部处理流程为:先查询,再聚合处理
- having+聚合函数
- 如果用在having中,则聚合函数的处理对象为每一组的数据,内部处理流程为:先查找,再分组,最后利用聚合函数进行筛选,筛选出符合条件的分组
- 注意!聚合函数不可以用在where中
- select+聚合函数
- count(某字段):求某字段的记录总数
-
子查询
- 子查询select语句,要么充当条件,要么充当数据源
- 执行顺序
- 从内到外,先执行子查询,再执行主查询
- 子查询的结果作为主查询的条件
-
子查询充当数据源
- from+子查询,子查询作为临时数据表
-
子查询充当条件
- where+子查询,子查询作为查询条件
- 标量子查询
- 子查询结果为一个值
- 行子查询
- 子查询结果为一组值,为子表
- 列子查询
- 子查询结果为一组值,为某个字段
- 子查询特定关键字
- 从内到外
- in、any、all、if exists
- in等价于any
- not in等价于 !=all
- 从外到内执行
- exists/not exists
- 从内到外
-
-
-