数据库
Database(简称DB)
按照一定的数据结构来组织、存储和管理数据的仓库。
存储货物的地方,我们叫做仓库。存储数据的地方,我们叫数据库
SQL
SQL(Structured Query Language),结构化的查询语言。
它是一种在操作关系型数据库的编程语言,定义了一套操作关系型数据库统一SQL标准。
关系型数据库
ps:以后会有非关系型
关系型数据库:有多张相互链接的二维表组成的数据库,就像Excel一样,有行和列组成的二维表。
特点:
- 使用表存储数据,格式统一,便于维护
- 使用SQL语句操作,标准统一,使用方便
- 数据存储在磁盘,安全
代表:
- Mysql
- Oracle
MySQL概述
MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),它是最流行的开源数据库之一。MySQL由瑞典的MySQL AB公司开发,后来被sun收购,最终被Oracle收购。MySQL以其开源免费、简单易用、高性能和可靠性而闻名。
数据库操作
1 连接数据库
-
打开navicate
-
点击连接
-
选择Mysql
-
填写数据库连接信息
-
确认连接(连接前也可以测试连接)
2 创建数据库
- 选择数据库
- 右键选择新建数据库
- 填写数据库名,字符集,排序规则
创建表
1 数据类型
- 数字
类型 | 大小 | 描述 |
---|---|---|
TINYINT | 1 byte | 小整数值 |
INT或INTEGER | 4 bytes | 整数值 |
FLOAT | 4 bytes | 单精度浮点数值 |
DECIMAL |
- 字符串
类型 | 大小 | 描述 |
---|---|---|
CHAR | 0-255 bytes | 定长字符串 |
VARCHAR | 0-65535 bytes | 变长字符串 |
TEXT | 0-65 535 bytes | 长文本数据 |
- 日期类型
类型 | 格式 | 描述 |
---|---|---|
DATE | YYYY-MM-DD | 日期值 |
TIME | HH:MM:SS | 时间值或持续时间 |
YEAR | YYYY | 年份值 |
DATETIME | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | 混合日期和时间值,时间戳 |
2 创建表
- 打开数据库,右键表–新建表
- 填写字段名,类型,长度等信息
3 删除表
- 想要删除表该怎么办呢?我们直接删除就可以啦
SQL通用语法
- SQL语句可以单行或多行书写,以分号结尾。
- SQL语句可以使用空格/缩进来增强语句的可读性
- 注释
- 单行注释:-- 注释内容 或 # 注释内容
- 多行注释: /* 注释内容 */
表操作
1添加数据(INSERT)
# 给指定字段添加数据
insert into 表名 (字段1,字段2...) values (值1,值2...);
# 给全部字段添加数据
insert into 表名 values (值1,值2...);
# 批量添加数据
insert into 表名 (字段1,字段2...) values (值1,值2...),(值1,值2...),(值1,值2...);
insert into 表名 values (值1,值2...),(值1,值2...),(值1,值2...);
2 修改数据(UPDATE)
update 表名 set 字段1=值1, 字段2=值2,...[where 条件]
修改语句的条件可以有,也可以没有,如果没有条件就会修改整张表的所有数据。
3删除数据(DELETE)
delete from 表名 [where 条件]
DELETE 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。
条件(where)
sql语句中,where后面跟条件
# 运算符
=、!=、<>、<、<=、>、>=
# 关键字
BETWEEN...AND、IN(SET)、IS NULL、AND、OR、NOT
基本查询
select 字段列表 from 表名
select * from person
SELECT id,name,age,sex,favourite from person
条件查询
用where表示查询的条件
SELECT id,name,age ,sex ,favourite from person where id BETWEEN 1 and 10
SELECT id,name,age ,sex ,favourite from person where id>5 and sex='男'
SELECT id,name,age ,sex ,favourite from person where id>5 or sex='男'
%匹配0或多个字符,一般不用左模糊(%放在左边,导致索引失效,会降低查询效率但是是对百万级数据)
SELECT id,name,age ,sex ,favourite from person where name like '%辰
_代表匹配一个字符
SELECT id,name,age ,sex ,favourite from person where name like '_辰'
SELECT id,name,age ,sex ,favourite from person where name like '%辰%'
分页查询
语法 limit 起始索引,个数
分页查询第m页,每页展示n 条数据 limit (m-1)*n, n
SELECT id,name,age ,sex ,favourite from person limit 0,5
SELECT id,name,age ,sex ,favourite from person limit 5,5
SELECT id,name,age ,sex ,favourite from person limit 10,5
排序
排序 order by 字段名 ASC 升序,DESC降序
SELECT id,name,age ,sex ,favourite from person ORDER BY age ASC;
SELECT id,name,age ,sex ,favourite from person ORDER BY age DESC;
聚合函数
聚合函数 count() sum() avg() max() min()
select count(0) from person 查询数据总数
select sum(age) from person 求和
select avg(age) from person 平均
select min(age) from person 最大值
select max(age) from person 最小值
分组查询
分组查询 group by 字段
SELECT sex,count(0),avg(age) from person GROUP BY sex;
having条件查询 where分组前,having分组后的条件
SELECT sex,count(0),avg(age) from person where age>8 GROUP BY sex having avg(age)>20;
子查询
把查询到的结果当作另一个查询的条件,也可以把查询到的结果作为表来用,但是需要给表起别名
SELECT id,name,age ,sex ,favourite from person where id in (SELECT pid from dept where name='人事部')
数据字典表
就是只有id和名字,可以帮助我们查询到其它表单(类似于部门表,分类表)
表与表之间的关系
一对一
一对多
多对一
多对多
内连接
显示内连接 inner可以省略
select * from person INNER JOIN dept on person.id=dept.pid
select * from person JOIN dept on person.id=dept.pid
select p.id,p.name,age,sex,favourite,birth,d.id deptid,d.name deptname,pid from person p JOIN dept d on p.id=d.pid
隐式内连接
select * from person,dept where person.id=dept.pid
注意:也可以给表名起别名,如果两个表中有相同的字段名称,那么需要用别名+点号来区别,否则报错。
外连接
左外连接 left [outer] join 主表在左从表在右
select p.id,p.name,age,sex,favourite,birth,d.id 部门id,d.name as deptname,pid from person p left outer join dept d on p.id=d.pid
select p.id,p.name,age,sex,favourite,birth,d.id 部门id,d.name as deptname,pid from person p left join dept d on p.id=d.pid
右外连接 right [outer] join 主表在右表在左
select p.id,p.name,age,sex,favourite,birth,d.id 部门id,d.name as deptname,pid from person p right outer join dept d on p.id=d.pid