一.SQL语句的分类(关键字大小写不敏感,数据大小写敏感)
SQL语言可分为如下5种,本课程需重点掌握DML、DQL、TCL语言,理解DDL语言、了解DCL即可
分类
|
名称
|
用途
|
代表关键字
|
补充1
|
表的约束
|
DDL
(Data Definition Language)
|
数据定义语言
|
用来定义数据库、
表及其它对象的结构 rename
|
CREATE
DROP(删除)ALTER(更改)
|
1.创建表:
create table 表名(
列名1 数据类型(位数)PRIMARY KEY,
列名2 数据类型(位数)FOREIGN KEY,
列名3 数据类型 (位数)REFERENCES 所关联表(列名),
列名4 数据类型(位数)CHECK (x>=1 and x<=10)
);
2.修改表:
改表名:alter table 原表名 rename 新表名;
追加列名:alter table 表名 add column 列名 数据类型;
修改列名:alter table 表名 change column 列名 数据类型;
删除列:alter table 表名 drop column 列名 ;
修改列为主键:alter table add constrans primary key(列名);
修改列为外键:alter table add constrans foreign key(列名);
3.删除表:
drop table 表名;
4.截断表:清空表数据,保留表结构
truncate table 表名;
|
约束录入表数据的准确性,通过对列的约束来实现
1.主键约束(primary key):
(1)约束列的数据有整行数据的代表性 => 唯一且非空
(2)尽量不使用有现实意义的数据作为主键
(3)只有一个主键约束,但一个约束可以约束多个列
2.外键约束(foreign key):
(1)一般不设置外键:不影响导表顺序(在前端进行准确性约束)
3.唯一约束(unique):
(1)被约束列是唯一的,可以为空
(2)一个表可以设置多个唯一约束
4.非空约束(not null):
(1)被约束列不许录入,不得为空
5.检查约束(MySQL不支持):
(1)CHECK 自定义约束
|
DML
(Data Manipulation Language)
|
数据操作语言
|
用来增加、
修改、
删除表中的数据
|
INSERT、
DELETE、
UPDATE
|
1.数据插入(新增):
方式一:
insert into 表名
values (值1,' 1999-1-2 ','文本用单引3',null,值4 ......)
方式二:
insert into 表名 (列1,列5,列8)
values (值1,值5,值8)
方言三:
insert into 表名 (列1,列5,列8)
values (1,5,8),(11,55,88),(111,555,888)
2.修改数据:
update 表名
set 列 1 = 新值 1,列 2 = 新值 2,列 3 = 新值 3
where 条件
3.删除数据:
delete from 表名
where 条件
| |
DQL
(Data Query Language)
|
数据查询语言
|
用来查询表中的数据
|
SELECT、FROM、WHERE、ORDER BY 、GROUP BY、HAVING
|
1.MySQL方言:
select 允许单独使用,Oracle必须与from联合使用。
(1) select current time( )
(2) select current date( )
(3) select now( )
(4)Oracle:select sysdate( )
2.select 全部列名/*(没有挨个列手打效率高)
3.null参与算数运算,结果为null
4.在sql中任意两个null不相等
5.null处理函数(方言):
if null(参数1,参数2)if 参数1为null 结果为 参数2
6.DISTINCT(去掉重复的条数(或者说相同的对象))
7.文本类型:=(文本一致),<>(文本不一致)
8.强调*(方言):
BINARY :强制敏感,绝大部分数据库,筛选时数据大小写是敏感的
9.时间:筛选符号同数值类型(越未来的时间越大)
|
10.条件的逻辑组合
(1) 既有and又有or ,and 的优先级高于 or:解决方案加()
(2)特殊筛选关键字:
(3)排序:
(4)分页,分段:LIMIT(方言)
|
1.聚合函数
(1)单行函数(方言):
一行数据经过函数计算得到一行结果
(2)组函数:
一组数据经过函数计算得到一个结果
(
MAX, MIN, AVG, SUM, COUNT)
2.分组句式
(1)对查询样本进行分组统计
(在分组查询时,只有在 GROUP BY 中出现的列,才允许出现在select 中。)
(2)GROUP BY 可以使用多个列进行分组
from---where---group by(having专门用于筛选分组函数)
---select---order by---limit
3.
DQL的执行顺序(数据查询语言)
-- FROM 从表中获取数据
-- WHERE 筛选需要的数据行
-- GROUP BY 对筛选后的数据行进行分组,并计算分组函数
-- HAVING 专门用于筛选分组函数的条件
-- SELECT 筛选数据列,计算算术表达式,列的别名
-- ORDER BY 根据结果进行排序
-- LIMIT 结果分页分段
左右外连接示意图
|
4. 多表关联查询的基础 -- 笛卡尔积
关联条件: 两张表中,具备相同意义的两个列,是他们的关联列,大部分情况下它们的名字也是相同。
A{x,y,z} B{m,n}
A x B = {xm,xn,ym,yn,zm,zn}
SQL中,笛卡尔积使用“交叉连接”来实现
CROSS JOIN
(1) 多表连接
SELECT *
FROM a表
CROSS JOIN b表
(2) 等值连接
SELECT *
FROM a表
JOIN b表
ON(e.deptno= d.deptno)
(3) 外连接
---左外连接 ---
SELECT *
FROM a表
LEFT JOIN b表
ON(e.deptno= d.deptno)
---右外连接 ---
SELECT *
FROM a表
RIGHT JOIN b表
ON(e.deptno= d.deptno)
---全外连接---
SELECT *
FROM a表
LEFT JOIN b表
ON(e.deptno= d.deptno)
UNION
SELECT *
FROM a表
RIGHT JOIN b表
ON(e.deptno= d.deptno)
(4)自连接(有层次结构,有上下级):
SELECT *
FROM a表
JOIN a1表
ON(a.deptno= a1.mgr)
(5) 集合操作
并集操作:
交集操作:交集函数(INTERSECT)
| ||||
1.子查询
(1)简单子查询:sub query :
(2)多行子查询(多行单列)
(a)子查询中
in中有null,主查询无法查出=null的数据
(b)
not in()有null就无法查询任何数据
(c)>any 大于最小值,<any小于最大值
(d) >all 大于最大值 , <all小于最小值
(3)from中的子查询(临时视图)
(4)相关子查询 EXISTS 和 NOT EXISTS
逐条验证主查询数据存在与否(有、没有)
2. 视图
数据库一种对象,关键字是VIEW
它是对数据表中的数据产生的“透视”,不存储数据。
通常做2件事:
(1) 将常用的复杂查询编制成一个视图,直接通过查询视图获得需要的数据
(2) 隐藏敏感数据
创建视图
CREATE OR REPLACE VIEW 视图名
AS
DQL语句
删除视图
DROP VIEW 视图名;
3. 索引
索引目的为了提高表的检索(查询)速度,实际是不一定的
索引建立后一定会降低插入和删除的执行速度
自动索引:表的主键列和唯一约束列
相应的列会自动添加索引
手动索引:通过人工添加索引
索引的关键字是INDEX
CREATE INDEX 索引名 ON 表(列) -- 为“表”的“列”添加索引
DROP INDEX 索引名
索引是自行维护,创建之后不用管理
|
(a)原子性:事务是一个不可继续划分的整体
如果一个事务由多个DML操作组成,这些DML操作被看作成一个整体
(b)一致性:组成事务这些DML操作,要么都成功,要么都失败。
(c)隔离性:不同事务之间不能互相影响。
(d)持久性:事务提交后,数据存入数据库,持久生效。
2.事务控制
3.数据库设计
1.数据库的设计范式
第一范式1NF:
第二范式2NF
第三范式3NF
2.实体关系设计
一对一关系
一对多关系
多对多关系
| ||||
DCL
(Data Control Language)
|
数据控制语言
|
用来授予和收回权限
|
GRANT(授权)、REVOKE(收回权限)
| ||
TCL
(Transaction Control Language)
|
事务处理语言
|
用来对数据进行提交和回滚
|
COMMIT(提交)、ROLLBACK(回滚)
|
二.SQL的数据类型
1.数字
2.文本
3.时间