1.SQL概念、类别、特点、操作机理
(1)SQL概念:SQL(Structure Query Language )结构化查询语言,是一种对数据库进行访问的数据操作子语言。
其SQL语句执行命令完成对数据库访问操作。
(2)SQL语言特点:一体化、使用灵活、非过程化、语句简单易用
(3)SQL操作机理: 数据库应用程序--(提交SQL)--》DBMS(执行SQL)--(I/O)--》数据库
(4)SQL主要操作功能:数据的增删改查、创建数据库、表、视图、设计数据库对象访问权限
(5)SQL语言语句类别
1)数据操纵语言:DML(Data Manipulation Language)是SQL语言中用于增删改查的语句【INSERT、UPDATA、DELETE】
2)数据定义语言:DDL (Data Definition Language)是SQL语言中用于创建或删除数据库对象的语句。【CREAT、DROP、ALTER】
3)数据查询语言: DQL(Data Query Language)是SQL语言中用于对数据库进行查询的语句。【SELECT】
4)数据控制语言: DCL (Data Control Language)是用于对数据库对象访问权进行控制的SQL语句。【GRANT、DENY、REVOKE】
5) 事物处理语言: TPL (Transacion Process Language)是SQL语言中用于数据库内部事物处理的语句。【BEGIN TRANSACTION、 COMMIT 、ROLLBACK】
6) 游标控制语言: CCL(Cursor Control Language)是SQL语言中用于数据库游标操作的语句。【DECLARE CURSOR 、FETCH INTO 、CLOSE CURSOR】
2.数据库定义语句DDL
(1)数据库创建语句 CREATE DATABASE <数据库名>
(2)数据库删除语句 DROP DATABASE <数据库名>
(3)数据库表创建语句
CREATE TABLE <表名>
( <列名1> <数据类型> [列完整性约束],
<列名2> <数据类型> [列完整性约束],
<列名3> <数据类型> [列完整性约束],
......
);
列约束条件:PRIMARY KEY——主键
NOT NULL——非空值
NULL——空值
UNIQUE——值唯一
CHECK——有效性检查
DEFAULT——缺省值
代理键标识INDENTITY(初始值,增量)【SYBASS、SQL SERVER】
(4) 命名主键约束,以及为多个列定义主键约束
CONSTRAINT 主键约束名 PRIMARY KEY(主键名1,主键名2)
(5)修改表结构SQL语句
ALTER TABLE 表名
1)删除表中外键 : ALTER TABLE 表名 DROP CONSTRAINT 外键名
2)在表中添加约束: ALTER TABLE 表名
ADD CONSTRAINT 约束名
CHECK(约束条件)
3)在表中删除约束: ALTER TABLE 表名
DROP CONSTRAINT 约束名
4)在表中添加列: ALTER TABLE 表名
ADD 列名 数据类型 约束;
5)在表中删除列: ALTER TABLE 表名
DROP COLUMN 列名
(6)删除表结构SQL语句
DROP TABLE 表名;
(7)索引
索引的定义:在数据库中,索引是针对某个表一列或多列建立的指向表中记录数据页的逻辑指针清单,其作用类似图书目录可支持
对数据表的快速信息检索。
1)索引的创建: CREATE INDEX 索引名 ON 表名(列名);
2)索引的修改: ALTER INDEX 索引名 ON 表名 RENAME TO 新索引名
3)聚集索引和非聚集索引:ALTER INDEX 索引名 ON 表名 CLUSTERED\NOCLUSTERED
在聚集索引中,键值的逻辑顺序决定了表中相应行的物理顺序。【在聚集索引中,索引包含指向数据存储的块而不是数据存储地址的指针】
在非聚集索引中,键值的逻辑顺序可以与表中相应行的物理顺序不同。【在非聚集索引中,索引包含指向数据的指针】
4)索引的删除: DROP INDEX 索引名
3.数据库操纵语句DML
(1)数据插入: INSERT INTO 基本表[列名表] VALUES (列值表);
(2)数据更新: UPDATE 基本表
SET 列名1=表达式1 [,列名2=表达式]
[WHERE 条件表达式];
(3)数据删除: DELETE
FROM 表名
[WHERE 条件表达式];
4.SQL关系查询语句DQL
(1)语句基本格式: SELECT [ALL|DISTINCT] 目标列 [,目标列......]
[INTO新表]
FROM 表名[,表名......]
[WHERE 条件表达式]
[GROUP BY 列名 [HAVING 条件表达式]]
[ORDER BY 列名 [ASC|DESC]]
(2)从单个表中读取指定列: SELECT 目标列 [,目标列.......]
FROM 表名;
从表中查询所有列数据: SELECT*FROM 表名;
查询数据时过滤重复行: SELECT DISTINCT 目标列 FROM 表名
(3)从单个表读取指定行: SELECT*
FROM 表名
WHERE 条件表达式;
(4)从单个表中读取指定行和列: SELECT 目标列 [,目标列......]
FROM 表名
WHERE 条件表达式;
(5)WHERE条件子句
1)BETWEEN AND: SELECT 目标列
FROM 表名
WHERE 列名 BETWEEN 条件表达式1 AND 条件表达式2;
2) LIKE【限定范围】: SELECT 目标列
FROM 表名
WHERE 列名 LIKE 表达式;
LIKE子句当无法确切知道所要查找的值,而是知道所要查找的数据符合的模式时,可以使用LIKE 子句进行匹配。一般来说,LIKE 子句仅在字符串类型时使用。
3) AND、OR、NOT : SELECT 目标列
FROM 表名
WHERE 表达式1 AND 表达式2
4) IN【限定范围】: SELECT 目标列
FROM 表名
WHERE 列名 IN (表达式)
IN当确切知道所要查找的内容,且为多个值时,可以使用 IN 子句来进行数据比较。IN 子句中也可以使用数字、字符串或日期。
(6)结果进行排序: SELECT*
FROM 表名
ORDER BY 列名 DESC;【DESC 降序 ASC 升序】
(7)SQL内置函数和计算:
SELECT 函数名(目标列) AS 新命名列
FROM 表名 【AS用于函数计算后原列的重新命名】
(8)SQL内置函数和分组:对查询结果进行分组统计。
SELECT 目标列1 AS 新列名1, 函数名(目标列2) AS 新列名2
FROM 表名
GROUP BY 目标列3 【以目标列3内容对查询结果进行分类】
HAVING 条件表达式1 【条件表达式1为分组的限定统计条件】
(9)使用子查询处理多个表:子查询结果来自一个表的数据
SELECT 目标列1
FROM 表名1
WHERE 目标列2 IN
(SELECT 目标列2
FROM 表名2
WHERE 表达式);
(10)SQL JOIN...ON语法:实现多表关联
SELECT 目标列 [ , 目标列.......]
FROM 表名1 JOIN 表名2 ON 连接条件
LEFT JOIN: 左外连接,即使右表中没有匹配,也从左表返回所有行
RIGHT JOIN: 右外连接,即使左表中没有匹配,也从右表返回所有行
FULL JOIN: 全外连接,只要有其中一个表中存在匹配,就返回行
5.数据控制语句DCL
DCL是一种可对用户数据访问权限进行控制的语句。【GRANT授权、REVOKE收权语句、DENY拒绝权限语句】
(1)GRANT 权限列表【SELECT,INSERT,UPDATE,DELETE】 ON 数据库对象 TO 用户或角色 [WITH GRANT OPTION];
(2) REVOKE 权限列表 ON 数据库对象 FROM 用户或角色
(3)DENY 权限列表 ON 数据对象 TO 用户或角色
6.SQL视图
视图是一种通过其他表或视图构建的虚拟表,它本身没有自己的数据,而是使用了存储在表或其它视图中的数据。
(1)基本语句格式:CREATE VIEW 视图名[(列名1),(列名2),(列名3),...] AS SELECT查询语段
(2)视图删除: DROP VIEW 视图名;
(3)SQL视图使用: 1)使用视图简化复杂SQL查询操作
2)使用视图提高数据访问安全性
3)提供一定程度的数据逻辑独立性
4)集中展示用户所感兴趣的特定数据
7.问题讨论
(1)视图和数据表有何异同?
表是实实在在得保存数据的实体,写入的数据都保存在表中;视图是从一个或几个基本表导出的表,它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据存放在原来的基本表中。所以基本表中的数据发生变化,从视图中查询出的数据也就随之改变了。视图一经定义就可以像基本表一样被查询、删除,也可以在一个视图之上再定义新的视图,但是对视图的更新操作有限制。
联系: 视图是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系。
(2)在视图中,可以删除数据吗?
可以。
(3)当查询的结果数据需要从多个表中获取时,是采用子查询?还是采用关联查询?
(4)什么情况下,SQL查询需要使用左连接?右连接?
在多表关联时,需要知道不满足连接条件的元组数据。
(5)在DELETE数据删除语句中,若没有使用WHERE子句限定范围,将会发生什么情况?
会删除当前表的所有数据。
(6)DELETE数据删除语句与DROP TABLE语句有什么异同
1)delete主要用于删除数据 ,只删除数据不删除表的结构 ,drop主要用于删除结构
2)delete 语句是数据库操作语言(dml),drop 是数据库定义语言(ddl)
(7)在数据库中,是否创建索引取决于什么?创建更多索引势必会更好提升数据库访问速度?
1)索引可以提高数据检索速度,可快速连接关联表,减少分组和排序时间
2)创建和维护索引都需要较大开销,索引会占用额外存储空间,数据操纵因维护索引带来开销
(8)SQL语言能否实现功能逻辑处理?
能实现。
(9)SQL主键约束和唯一约束有什么区别呢?
主键约束:由一列或多列的组合,其值能唯一的标识表中的每一行。
唯一约束:不允许数据库表在指定列上具有相同的值,但允许有空值。
区别:一个表可以定义多个唯一约束,但只能定义一个主键约束;空值的列上可以定义唯一约束,不能定义主键约束。