SQL总结
第一章:数据库Database
到目前为止,主要学习的数据库是MySQL 的简单SQL操作,同时是时间库中的关系型数据库(RDBMS)
数据库的优点是:减少数据的冗余
保证数据的有效性
数据的一致性
数据的共享
维护的完整性
数据的安全性
主要的数据模型有:层状模型
网状模型
关系型模型
对象模型
现在广泛运用的是关系型数据库,它已经能解决我们的大多数的问题,往后发展会越来越多的运用对象模型。
SQL的语句有:
DDL 数据定义语言 创建定义,删除定义等
DML 数据操作语言 增、删、改
DQL 数据查询语言
DCL 数据控制语言 grant、revak等
DDL—数据定义语句
Create 创建 database 数据库
Create database 名字; ————创建数据库
Table 表
Create table 名字; ————创建表
Drop 删除
Create table/database 表名/数据库; ————删除表/数据库
一般定义表用 t_xxx 一般定义主键用 pk_xxx 一般定义列用 f_xxx或c_xxx
一般外键用 fk_xxx
注意:数据库中只有字符串,SQL可以使用引擎,innodb只有这个引擎才支持外键。
Frm数据包文件。
第二章:数据库数据类型
整数型
TINYINT 1字节 短小整数型
SMALLINT 2字节 小整数值
MEDIUMINT 3字节 小整数型
INT 4字节 整数值
BIGINT 8字节 大整数值
浮点型
FLOAT 4字节 单精度
DOUBLE 8字节 双精度
DECIMAL(M.D) 17字节 大浮点数
NUMERIC --同上(DECIMAL)
字符串型
CHAR(N) N 0-255 字符型 定长
VARCHAR(N) N 0-65535 字符型 变长
变长节约磁盘空间,查询时定长给好。
日期
YEAR 1字节 YYYY 1901-2155
DATE 3字节 YYYY-MM-DD 1000-01-01 9999-12-31
TIMESAMP 4字节 YYYY-MM-DD
HH:MM:SS 1970-01-01 00:00:01-2038
DATETIME 8字节 YYYY-MM-DD 1000-01-01 9999-12-31
HH:MM:SS 00:00:00-23:59:59
以上为常用数据类型,除了以上的数据类型以外还有二进制型、逻辑性。
简单的数据定义操作:
Create 创建 database 数据库
Create database 名字; ————创建数据库
Table 表
Create table 名字; ————创建表
Drop 删除
Create table/database 表名/数据库; ————删除表/数据库
增加列 修改列
Alter table 表名 alter table 表名
Add 列名类型; change 原列名现列名类型;
删除列
Alter table 表名
Drop column 原名;
索引
创建 Create index 索引名 on 表名(列一,列二,…);
删除 alter table 表名 drop index 索引名;
约束
Primary key 主键(一张表中有且只有一个隐含非空,隐含一个主键索引)
Unique 唯一(一张表中有多个,但是包含一个空)
Default 默认
No null 非空
Foreign key 外键
Auto_increment 自动增长
外键
普通列→外键列
Alter table 当前表名
Add constraint 新外键名 foreign key 当前指向列 references 指向表(指向表主键);
主键
主键列自动创建一个约束。
数据完整性
1. 实体完整性,保证这一行的有效
2. 域完整性,一列数据有效
3. 引用完整性,引用编号有效
4. 用户自定义完整性,保证自定义规则
第三章:DML数据操作语言
Insert 添加 update 修改 delete 删除
Insert into 表名(列名) values(值);————添加列的数据
Select * from 表名; ————查询表
表的复制
Insert into 新表名 select * from 旧表名; ————保存前表存在
Create into 新表名 select * from 旧表名; ————复制列名,数据类型,非空,默认约束
。。。。。where 1=2;————不带数据复制
更改
Update 更改
Update 表名 set 列名=新值,列名2=新值2
…..条件; ————修改表里列的值
删除
Delete (表中的数据)
Delete from 表名;————删除表中的数据
清空表
Truncate table 表名;
投影
Select * from 表名; ————只用于DQL
投影时可以取别名,更加简化,国际化。
去掉重复数据
Select distinct _from_;
Limit (限制,用于分页)
Select_from_timit 开始序号,返回的行数;
选择
Where 条件;————查询时的条件
多条件: and与 or或
Between 执行范围测试
Between 上限and 下限;
in或not。。。 列举
模糊查询
Like 像什么什么
通配符:
‘%’表示0个或多个字符
‘_’任何一个字符
Select _from 表 where _like 模式;
空值数据
。。。where 。。。is null;
排序:
默认的顺序为自然顺序从小到大,也可以从大到小
顺序 asc(一般不用写出,系统默认) 倒叙 desc
Select * from 表 order by 列 desc;
批量插入
Insert into _
Select * from _;
Create into _
Select * from _;
第四章:聚合函数
Count 列数量 sum列的合 avg 列的平均值 max最大 min最小
Select Count(计算模式)from 表名;————计算所有列如有NULL忽略,如果要NULL值可以用ALL
Select sum(计算模式)from 表名;
Avg
Sum 、 avg 都是数值列
Select max(计算模式)from 表名;
Min
数据分组
凡是select子句里的聚合函数,并且有非聚合函数的列,就需要进行分组
Group by
Select 列A 聚合函数() from 表名
Where 条件
Group by 列A;
Having 相当于 where
Select 列A 函数() from 表名
Group by 列A
Having 函数()关系式值;
Where 列值进行比较
Having 必须有聚合结果进行匹配选择
SQL执行顺序
1. from
2. where
3. group by
4. select
5. having
6. order by
第五章:子查询和组合函数
Select columnA (子查询) as column from 表名;
子查询中有相关和非相关
相关:一个查询语句,不能单独运行,而且一般有多少行记录就返回多少次记录
非相关:得到一个结果,单独运行,并且一般只执行一次
运算符:in not in all any eists
All:结果逐一比较,必须满足时表达式的值才为真
Any:结果进行逐一比较,其中一条满足则表达式值为真
Exists:判断子查询是否存在数据,如果存在表达式为真,如果不存在表达式为否
Exists()跟在where后面()里面写条件,通常为非相关子查询,如果没结果相当于false反之执行。
用子查询写多重查询,首先写要显示的那个条件语句,之后关键字相关联,有关建子的地方选择子查询 where后面多个结果使用 in
组合查询
Select 列1,列2 表1
Union
Select 列3,列4 表2;
多个select 结果组合在一起显示,组合和显示的列名就是第一个查询的名,组合必须有同样的数目的结果列,列数不同不能组合,列的类型也要相同或相似
联接
Join 数据来自多张表,多个表联接在一起实现查询结果
笛卡尔乘积:数据自由组合
Select 列A,列B from 表1 join 表2
On 表1,列=表2,列;
分类
内联接: inner join inner可以省略 内联仅显示相关联的信息
外联接
自联接:来自同一张表,自己和自己作联接
自联接:内联和外联的一个特例,主外建在一张表里面。
外联接
左联接 右联接 全联(mysql不支持)
左外联:left onter join on
右外联:right outer join on