【1】DDL数据定义语言部分
(1) 定义基本表的语法:
CREATE TABLE <表格> (<列名> <数据类型 > [列级约束条件]
[,<列名> <数据类型 > [列级约束条件]......]
[,<表级约束条件>]......);
例如创建一个Student表,语句如下:
CREATE TABLE Student(
Sno CHAR(10) NOT NULL UNIQUE,
Sname CHAR(20),
Ssex CHAR(2),
Sage INT,
Sdept CHAR(15)
)
一些基本数据类型说明如下:
DATE 日期型,格式为YYY-MM-DD
TIME 时间型,格式为HH.MM.SS.XX
TIMESTAMP 日期加时间
FLOAT 双字长浮点数
INT 全字长二进制数
修改基本表语法格式如下;
ALTER TABLE <表名>
[ADD <新列名> <数据类型> [完整性约束]]
[DROP <完整性约束名>]
[MODIFY <列名> <数据类型>];
例如:ALTER TABLE Student ADD Scome INT; /*添加字段*/
ALTER TABLE Student DROP Scome; /*删除字段*/
删除基本表语法格式如下:
DROP TABLE <表名>
例如删表: DROP TABLE Student;
(2)索引相关操作
建立索引语法格式如下:
CREATE [UNIQUE][CLUSTER] INDEX <索引名>
ON <表名> (<列名> [<次序>] [,<列名> [<次序>]])
/*次序默认为ASC升序排列,DESC为降序排列
UNIQUE是建立一个逻辑上的索引,每一个索引值对应一
个唯一的数据记录,是逻辑上的排序。CLUSTER表示建立
一个聚簇索引,是物理上的排序,适用于查找比较频繁,
数据更新比较少的情况,根据情况选择合适的索引建立,
索引是系统自动存取会自动选择合适的索引作为存取路
径,用户不必也不能选择索引
*/
删除索引语法如下:
DROP INDEX <索引名>
(3)建立视图语法如下:
CREATE VIEW <视图名> [(<列名>[,<列名>]...)]
AS <子查询>
[WITH CHECK OPTION]
/*
WITH CHECK OPTION对操作进行视图定义检查,对DML操作
都限制在指定列内;创建视图时最好指定视图的列名,可
以在基本表添加列或者更改过后还能够使用,能够正确工
作;如:CREATE VIEW V_STudent Sno,Sname,Sage
AS
SELECT Sno,Sname,Sage FROM Student
DROP VIEW V_STudent进行删除
*/
【2】DML数据控制语言
查询数据的语法构成如下:
SELECT [ALL]|[DISTINCT] <目标列表达式> [,<目标列表达式>]...
FROM <表名或视图>[,<表名或视图名>]....
[WHERE <条件表达式>]
[GROUP BY <列名1> [HAVING <条件表达式>]]
[ORDER BY <列名2> [ASC|DESC]];
/*
ALL表示查询所有数据,DISTINCT表示查询数据显示不重复
GROUP用于对指定的列进行分组,HAVING表示分组过后满足
条件才能被选择出来,ORDER BY用于根据指定列进行排序
*/
带条件的查询,下面列出常用的查询条件:
常用的查询条件 |
|
比较 |
‘=,>,<,>=,<=,<>,!=,!<等 |
确定范围 |
BETWEEN AND,NOT BETWEEN AND |
确定集合 |
IN,NOT IN |
字符匹配 |
LIKE,NOTLIKE |
空值 |
IS NULL,IS NOT NULL |
多重条件 |
AND,OR |
/* BETWEEN AND用于确定范围,用于查找值是否在范围内:
SELECT * FROM Student WHERE Sage BETWEEN 20 AND 23
IN用于确定集合,用来确定查找值是否在这个集合内部:
SELECT * FROM Student WHERE Sdepe IN ('IS','CS')
[NOT] LIKE '<匹配串>' [ESCAPE '<换码字符>']
LIKE用于模糊查询,常用来查询字符匹配问题.%(百分号)
代表任意长度的字符串,_(下划线)表示单个字符:
SELECT * FROM WHERE Sname LIKE '李%'表示查询所有姓
李的学生;另外可以用 ESCAPE来转换这两个字符,如果查询
中的字符串含有这两个特殊字符;
SELECT * FROM Course WHERE Cname LIKE 'DB\_Design'
ESCAPE '\'
涉及空值的查询,用谓词IS NULL来判断:SELECT * FROM SC
WHERE Grade IS NOT NULL
常用集函数:
COUNT(DISTINCT|ALL *)
COUNT(DISTINCT|ALL <列名>)
SUM(DISTINCT|ALL <列名>)
MAX(DISTINCT|ALL <列名>)
MIN(DISTINCT|ALL <列名>)
AVG(DISTINCT|ALL <列名>)
GROUP BY用于分组,将根据指定的列进行分组。将相同的分成一组
,查询中只能使用集函数和指定分组的列:SELECT Sage COUNT(*) FROM
Student GROUP BY Sage HAVING COUNT(*)>20
另外还ANY和ALL谓词查询,ANY是指其中的任意一个值,ALL是指查询中
的所有值:
SELECT * FROM Student WHERE Sage<ALL(SELECT Sage FROM Student
WHERE Sdept='IS') AND Sdept<>'IS'意思是在Student表中查询比IS
中所有年龄都大的学生
EXISTS谓词查询,EXISTS代表存在量词。不返回任何实际数据,只产生
逻辑值True|False:SELECT Sname FROM Student WHERE EXISTS(SELECT
* (通常采用,因为并不返回实际内容)
FROM SC WHERE SC.Sno=Student.Sno AND SC.Cno='1')意思是从Student
中取出一个Sno和SC里面的进行比较,如果相等就返回真值否则返回假。
*/
SQL语句书写顺序如下:
SELECT-FROM-WHERE-GROUP BY-HAVING-ORDER BY
SQL语句执行顺序如下:
FROM-WHERE-GROUP BY-HAVING-SELECT-ORDER BY
数据更新语法
插入数据语法: INSERT INTO <表名> ([<属性列1>[,<属性列2>]....)
VALUES(<常量1>[,<常量2>]....)
数据更新语法: UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]...
[WHERE <条件>];
/*
INSERT INTO SC(Sno,Cno) VALUES('95020','1'); /*插入数据到指定列*/
UPDATE Student SET Sage=22 WHERE Sno='95001'; /*更新指定列*/
*/