1、
SQL:Structured Query Language,结构化查询语言。
SQL是一个通用的、功能强大的关系数据库语言。
特点:容易掌握、但是想精通使用则会有一定难度
2、SQL的基本功能
数据定义: CREATE、DROP、ALTER
数据操纵: INSERT、UPDATE、DELETE
数据控制: GRANT、REVOKE
数据查询: SELECT
SELECT:从一个表或多个表中查询数据
CREATE:创建数据库对象
DROP:删除数据库对象
ALTER:变更数据库对象,例如对增删表列等
INSTERT: 向一个表中插入数据
UPDATE:更新表中的数据
DELECT:删除表中的数据
GRANT:授予权限
REVOKE:回收权限
3、SQL的基本对象
表空间 – TABLESPACE
用户 – USER
模式 – SCHEMA
表 – TABLE
视图 – VIEW
列 – COLUMN
存储过程 – PROCEDURE
存储函数 – FUNCTION
存储包 – PACKAGE
触发器 – TRIGGER
序列 – SEQUENCE
索引 – INDEX
数据字典 – DICTIONARY
4、SQL的基本操作
创建对象 - CREATE TABLE TABNAME…
撤销对象 - DROP TABLE TABNAME…
插入数据 - INSERT INTO TABNAME…
更新数据 - UPDATE TABNAME…
删除数据 - DELETE FROM TABNAME…
查询数据 - SELECT * FROM TABNAME…
授予权限 - GRANT SELECT ON TABNAME TO…
回收权限 - REVOKE SELECT ON TABNAME FROM…
5、SQL语法要素
属性词 - Predicates
条件子句 - Clause
运算符 - Operator
操作数 - Operation
函数 - Function
SQL语句 - Statement
基本格式:命令+条件子句
6、关键字
DISTINCT 取消重复行
TOP 顶部筛选返回结果 ① 返回确定数目的记录个数 ② 返回结果集中指定百分比的记录数
7、ORDER BY条件语句
通常与SELECT语句合并使用,目的是将查询的结果依照指定字段加以排序。
ASC:递增顺序类别(默认) DESC:递减顺序类别
8、操作多个表
SQL允许一个SELECT语句同时从多个表中取出数据,只需在SELECT语句的FROM从句中列出要从中取出数据的表名称即可:
例:SELECT A., B. FROM 课程成绩 A, 学生信息 B WHERE A.学号=B.学号 ORDER BY A.课程, B.学号;
9、排序查询结果
SQL表数据没有内在的顺序。然而,你可以操纵一个SQL查询结果的顺序。
例如:看一列没有特定顺序的名字是很不方便的。如果把这些名字按字母顺序排列,读起来就会容易得多。
SELECT AU_LNAME FROM AUTHORS ORDER BY AU_LNAME;
你也可以同时对多个列使用ORDER BY子句。SELECT AU_LNAME,AU_FNAME FROM AUTHORS ORDER BY AU_LNAME,AU_FNAME;
如果你想把查询结果按相反的顺序排列,你可以使用关键字DESC。SELECT AU_LNAME,AU_FNAME FROM AUTHORS WHERE AU_LNAME=”RINGER” ORDER BY AU_LNAME ,AU_FNAME DESC;
10、建立索引
聚簇索引和非聚簇索引,每个表只能有一个聚簇索引,因为一个表中的记录只能以一种物理顺序存放。通常你要对一个表按照标识字段建立聚簇索引。当你需要取出一定范围内的数据时,用聚簇索引也比用非聚簇索引好。例如,假设你用一个表来记录访问者在你网点上的活动。如果你想取出在一定时间段内的登录信息,可以使用这个表的DATETIME型字段建立聚簇索引。
这两种类型的索引都有两个重要属性:你可以用两者中任一种类型同时对多个字段建立索引(复合索引);两种类型的索引都可以指定为唯一索引。
CREATE INDEX MYCOLUMN_INDEX ON MYTABLE (MYCLUMN);
如果你需要改变一个索引的类型,你必须删除原来的索引并重建一个。建立了一个索引后,你可以用下面的SQL语句删除它:DROP INDEX MYCOLUMN_INDEX;
要建立一个聚簇索引,可以使用关键字CLUSTERED。记住一个表只能有一个聚簇索引。例如:CREATE CLUSTERED INDEX MYCOLUMN_CLUST_INDEX ON MYTABLE(MYCOLUMN);
要对一个表建立唯一索引,可以使用关键字UNIQUE。对聚簇索引和非聚簇索引都可以使用这个关键字。这里有一个例子:CREATE UNIQUE COUSTERED INDEX MYCLUMN_CINDEX ON MYTABLE(MYCOLUMN);
最后,要建立一个对多个字段的索引复合索引在索引建立语句中同时包含多个字段名。下面的例子对FIRSTNAME和LASTNAME两个字段建立索引:CREATE INDEX NAME_INDEX ON ;
11、SQL运算符
SELECT语句中的WHERE可选从句用来规定哪些数据值或哪些行将被作为查询结果返回或显示。在WHERE条件从句中可以使用以下一些运算符来设定查询标准:
= 等于
> 大于
< 小于
>= 大于等于
<= 小于等于
<> 不等于
除了上面所提到的运算符外,LIKE运算符在WHERE条件从句中也非常重要。LIKE运算符的功能非常强大,通过使用LIKE运算符可以设定只选择与用户规定格式相同的记录。此外,我们还可以使用通配符“%”用来代替任何字符串。举例如下:
SELECT FIRSTNAME, LASTNAME, CITY FROM EMPLOYEE WHERE FIRSTNAME LIKE ‘E%’;
12、HAVING集合条件
用户在使用SQL语言的过程中可能希望解决的另一个问题就是对由SUM或其它集合函数运算结果的输出进行限制。
例:SELECT STORE_NAME, SUM(SALES) FROM STORE_INFORMATION GROUP BY STORE_NAME HAVING SUM(SALES) > 1500;
13、使用EXISTS相关结果
可以通过多种途径来访问相同的数据,而且你需要对你的结果进行匹配(或相关)来得到值的交叉区。
例:SELECT * FROM 学生信息 A WHERE EXISTS
(
SELECT * FROM 签到记录 WHERE 学号=A.学号
);
14、JOIN连接查询
JOIN的类型有几种:LEFT,RIGHT,FULL OUTER,INNER和CROSS。你所使用的类型是由你想要看到的结果所决定的。例如,使用LEFT OUTER JOIN将会从列出的第一个表格中返回所有有关的行,而同时如果没有信息与第一个表格相关的话将潜在地从所列出的第二个表格中加入行。
在这里INNER JOIN和暗含的JOIN是不同的,INNER JOIN将只返回那些在两个表格中都有数据的行。
对第一个SELECT查询使用如下JOIN声明:
SELECT TABLE1.COLUMN1, TABLE2.COLUMN2 FROM TABLE1 INNER JOIN TABLE2 ON TABLE1.COLUMN1 = TABLE2.COLUMN1;
15、视图
在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。
16、控制事务
DM_SQL语言提供了事务的回滚(ROLLBACK)与提交(COMMIT)语句。
用户可以使用显式的提交或回滚语句来结束一个事务,也可以隐式的结束一个事务。
提交语句:COMMIT [WORK];
回滚语句:ROLLBACK [WORK];
该语句回滚(废除)当前事务工作单元中的所有操作,并结束该事务。
17、GUID
定义:GUID()
功能说明:生成一个唯一编码串(32个字符)
返回值:返回一个唯一编码串。
举例说明: 获取一个唯一编码串。SELECT GUID(); SELECT GUID(),GUID(),GUID();
18、获取系统当前时间
语法:NOW(N)
功能:返回系统的当前时间戳。等价于GETDATE()。
参数:N:指定毫秒的精度。取值范围0-6,默认为6。
SELECT NOW,NOW(1),NOW(2),NOW(3),NOW(4),NOW(5),NOW(6);
19、获取系统支持的数据类型
查询系统字典,获取数据库系统支持的数据类型。
SELECT * FROM SYS.SYSTYPEINFOS;
20、获取数据库对象信息
SELECT * FROM SYS.SYSOBJECTS;
SELECT TYPE
,
S
U
B
T
Y
P
E
,SUBTYPE
,SUBTYPE,COUNT(*) FROM SYS.SYSOBJECTS GROUP BY TYPE
,
S
U
B
T
Y
P
E
,SUBTYPE
,SUBTYPE ORDER BY 1,2;
详情请参考:https://eco.dameng.com