数据库
数据库就是长期存在于计算机内,有组织,可共享的,大量数据的集合。数据是按照特定的数据模型来组织的,存储在数据库中的。
好处: 持久化数据到本地,可以实现结构化查询,方便管理
数据库的相关概念
DB:数据库,保存一组有组织的数据的容器
DBMS :数据库管理系统
SQL:结构化查询语言,用于和数据通信的语言
SQL语言的分类:
DML:数据操作语言,用于添加,删除,修改数据库记录,并检查数据的完整性,关键字:insert, delete,update
DDL:数据定义语言,用于库和表的创建,修改,删除,关键字:create,alter,drop
TCL:数据事务语言
DQL:数据查询语言,用于查询数据库中表的记录,关键字:select,where
DQL语言
有着简单查询
条件查询
排序查询
常见函数:分组函数:
count:计算个数 max:计算最大值 min:计算最小值 sum:计算和 avg:计算平均值
分组查询:特点
1 可以按单个字段分组
2 和分组函数一同查询的字段最好是分组后的字段
3 可以按多个子段分组,字段之间用逗号隔开
4 可以支持排序
5 having 后可以支持别名
多表连接查询
笛卡尔集:产生条件
1 省略连接条件
2 连接条件无效
3 所有表中的所有行互相连接
内连接
一般以SQL99语法为主
select 字段列表
from 表名1
[inner] join 表名2 on 条件
where 筛选条件
group by 分组条件
having 分组后的筛选条件
order by 排序字段
外连接:
左外连接:查询的是左表所有数据及其交集部分
select 字段列表
from 表1
left [outer] join 表2 on 条件
右连接:查询的是右表所有数据及其交集部分
select 字段列表
from 表1
right [outer] join 表2 on 条件
select 字段列表
from 表1
right [outer] join 表2 on 条件
子查询:查询中嵌套查询
特点:1 子查询都放在小括号里面
2 子查询一般放在from后面,select后面,where后面,having后面,但是一般放在条件的右侧
3 子查询优先于主查询执行,主查询使用了子查询的执行结果
单行子查询:
结果集只有一行
一帮搭配单行操作符使用:> < = <> >= <=
非法使用子查询的情况:
子查询的结果为一组值
子查询的结果为空
多行子查询:
结果集一般有多行
搭配: any, all ,in ,not in
分页查询:
select 字段|表达式,...
from 表
where 条件
group by 分组字段
having 条件
order by 排序的字段
limit 起始的条目索引,条目数;
特点:
起始索引条目从0开始
limit放在语句的最后面
联合查询:
select 字段|常量|表达式|函数 from 表 where 条件 union 【all】
select 字段|常量|表达式|函数 from 表 where 条件 union 【all】
select 字段|常量|表达式|函数 from 表 where 条件 union 【all】
.....
select 字段|常量|表达式|函数 from 表 where 条件
特点:
1多条查询的列数必须是一致的
2 多条查询语句的查询列的类型几乎相同
3 union代表去重,union all 代表不去重
DDL语言
创建数据库:create database if not exists 数据库名称;
创建数据库并指定字符集:create database 数据库名称 character set 字符集名;
查询数据库所有名称:show databases;
修改数据库的字符集:alter datebase 数据库名称 character set 字符集名称;
删除数据库:drop database 数据库名称;
查询当前使用的数据库名称 select database();
使用数据库 use 数据库名称
数据表的操作
表的创建
* create table 表名(
列名1 数据类型1 【字段约束】,
列名2 数据类型2 【字段约束】,
....
列名n 数据类型n 【字段约束】
);
* 注意:最后一列,不需要加逗号(,)
查询表的结构:DESC 表名
修改表的字符集: alter table 表名 character set 字符集名称;
修改表名:alter table 表名 rename to 新的表名;
添加列:alter table 表名 add 列名 数据类型;
修改列的名称和类型:* alter table 表名 change 列名 新列别 新数据类型;
* alter table 表名 modify 列名 新数据类型;
删除列 alter table 表名 drop 列名;
删除表:drop table 表名
常用的数据类型:
1. int:整数类型
2. double:小数类型
3. date:日期,只包含年月日,yyyy-MM-dd
4. datetime:日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss
5. timestamp:时间错类型 包含年月日时分秒 yyyy-MM-dd HH:mm:ss
6. varchar:字符串
约束:
1 主键约束 primary key
2 非空约束: not null
3 唯一约束:unique
4 外键约束:foreign key
5 默认:default
6 检查:check
自动增长:
如果某一列是数值类型的,使用auto_increment 可以来完成值的自动增长
DML语言
添加数据:insert into 表名(列名1,列名2.。。)values(值1,值2,,,,)
删除数据:delete from 表名 where 条件
truncate table表名
修改数据:update 表名 set 列名1=值1,列名2=值2,where 条件
update 表1 别名1,表2 别名2 set 字段=新值 ,字段=新值 where 连接条件 and 筛选条件