赞
踩
CREATE TABLE <表名>
<列名><数据类型>[<默认值>|<标识列设置>][<该列的完整性约束>]
`完整性约束:
①NOT NULL :该列值不能为空
②NULL :该列值可以为空
③UNIQUE :该列值不能有相同者
ALTER TABLE <表名>
ADD <列名><数据类型>[列的完整性约束] 为表添加一个新列
ADD <表级完整性约束> 为表添加一个表级完整性约束
ALTER COLUMN<列名><新的数据类型> 修改表中原有列的数据类型
DROP COLUNM <列名> 删除表中原有的一个列
DROP CONSTRAINT<表级完整性约束> 删除原有的表级完整性约束
DROP TABLE <表名1>[,<表名2>];
CREATE [UNIQUE][CLUSTERED][NONCLUSTERED] INDEX <索引名>
ON <表名|视图名>(<列名清单>)
<列名清单> 中,每个列名后面都要指定 ASC(升序)、DESC(降序),不指定默认升序
DROP INDEX <索引名1>[,<索引名2>];
INSERT INTO <表名>[(<属性名清单>)]
VALUES(<常量清单>);
<常量清单>中,字符串常量和日期型常量要用单引号(英文符号)括起来
UPDATE <表名>
SET <列名>=<表达式>,[,<列名>=<表达式>]
[WHERE<条件>];
DELETE FROM <表名>
[WHERE<条件>];
SELECT [DISTINCT / ALL] < 目标列表达式 [[AS] 别名] 清单 >
FROM <关系名>
DISTINCT : 每组重复元组只输出一条元组
默认ALL
SELECT *
FROM <关系名>;
SELECT Title
FROM Employee;
SELECT DITINCT Title
FROM Employee;
ps: DISTINCT 关键字必须放在列名前
SELECT Ename , 2024-Age AS [Year of Birth] , Title
FROM Employee;
函数 | 功能 |
COUNT(DISTINCT / ALL]*) | 统计结果中元组个数 |
COUNT(DISTINCT / ALL]<列名>) | 统计结果中某列值的个数 |
MAX(<列名>) | 给出一列上的最大值 |
MIN(<列名>) | 给出一列上的最小值 |
SUM(DISTINCT / ALL]<列名>) | 给出一列上值的总和 |
AVG(DISTINCT / ALL]<列名>) | 给出一列上值的平均值 |
SELECT [DISTINCT / ALL] < 目标列表达式 [[AS] 别名] 清单 >
FROM <关系名>
WHERE <查询条件表达式>
= 、 < 、 >、<=、>=、<>
运算符号 | 含义 |
IN、NOT IN | 检查属性值是否属于一组值之一 |
BETWEEN...AND..、 NOT BETWEEN...AND... | 检查属性值是否属于某个范围 |
IS NULL、IS NOT NULL | 检查属性值是否为空 |
LIKE 、NOT LIKE | 字符串匹配 |
通配符:%表示任意长度的字符串(长度可以为0
_表示任意单个字符
NOT 、 AND 、 OR
SELECT [DISTINCT / ALL] <目标列表达式 [别名] 清单 >
FROM <关系名>
[WHERE<查询条件表达式>]
GROUP BY <列名清单>[HAVING<条件表达式>];
根据GRUOP BY 中的列名清单 的值进行分组
SELECT语句中有 集函数 COUNT、SUM等
HAVING语句条件作用于结果组
SELECT [DISTINCT / ALL] <目标列表达式 [别名] 清单 >
FROM <关系名>
[WHERE<查询条件表达式>]
[GROPUP BY <列名清单>[HAVING<条件表达式>]]
ORDER BY < 列名[ASC / DESC ]清单>;
ORDER BY 语句只作用于最终查询结果
SELECT [DISTINCT / ALL] <目标列表达式 [别名] 清单>
FROM <关系名[别名] 清单>
例如
SELECT e.Ename , e.Title , e.Dno , d.Dno , d.Name
FROM Employee e , Department d;
SELECT [DISTINCT / ALL] <目标列表达式 [别名] 清单>
FROM <关系名[别名] 清单>
WHERE <连接条件表达式>
SELECT e.Ename , e.Title , e.Dno , d.Dno , d.Name
FROM Employee e INNER JOIN Department d
ON e.Dno = d.Dno;
例如
SELECT e.Ename , e.Title , e.Dno , d.Dno , d.Name
FROM Employee e , Department d
WHERE e.Dno = d.Dno;
上面的语句先将Employee表和Department表做交叉连接,检索出的行数是Employee表的行数乘以Deprtment表的行数,然后WHERE语句将Employee表的Dno列与Department表的Dno列进行匹配,相等的行检索出来予以返回。
ps:连接的属性名不一定要相同,但是数据类型要兼容
1.左外连接:除了返回两表中满足连接条件的元组以外,还返回左侧表中不匹配的元组,右侧表中的空值则以空值(NULL)表示
2.右外连接
3.全外连接
LEFT JOIN、 RIGHT JOIN、 FULL JOIN
使用关系的别名
例如,Eno(职工号)、Ename(职工姓名)、Emgr(负责人)
SELECT emp1.Eno ,emp2.Emgr
FROM Employee emp1,Employee emp2
WHERE emp1.Emgr = emp2.Eno
自身连接,找到间接负责人
1.使用IN进行子查询
IN、NOT IN
2.使用比较运算符的嵌套查询
可以和ANY、ALL一起使用
3.使用BETWEEN的嵌套查询
4.相关子查询
例如
SELECT Ename
FROM Employee emp1
WHERE Age >
(SELECT AVG(Age)
FROM Employee emp2
WHERE emp2.Dno = emp1.Dno);
在相关子查询中,可以使用EXISTS ,测试子查询是否存在返回值
查询参加了项目的职工号、姓名
SELECT Eno,Ename
FROM Employee e
WHERE EXISTS
(SELECT *
FEOM Item_Emp
WHERE Eno = e.Eno);
子查询只返回逻辑值
集合操作:UNION(并操作、INTERSECT(交操作、EXCEPT(差操作
例如
SELECT *
FROM Item_Emp
WHERE Ino = '201801'
UNION
SELECT *
FROM Item_Emp
WHERE Ino = '202001'
查询项目号为‘201801’和‘202001’项目的职工参与信息
ps:参加UNION的记录结果集必须有相同的列数
INSERT INTO Employee_01
SELECT *
FROM Employee
WHERE Dno = '01'
UPDATE Salary
SET Rest = Rest + 200
WHERE Eno IN
(SELECT Eno
FROM Item_Emp
WHERE Ino = '201802');
使参加‘201802’项目的职工,工资表中津贴的值都增加200
DELETE FROM Item_Emp
WHERE Eno =
(SELECT Eno
FROM Employee
WHERE Ename = '丁过’);
删除项目参加人中包含‘丁过’的所有元组
视图是从一个或多个关系(基本表或者已有的视图)导出的关系
视图是虚表,视图不建立索引
CREATE VIEW <视图名>[<列名清单>]
AS <子查询>
[WITH CHECK OPTION]
[WITH CHECK OPTION]:之后对视图进行插入、修改、删除操作,会加上子查询中的条件,如果条件判断成立,则进行插入、修改和删除的操作
DROP VIEW <视图名>
不是所有的视图都是可以更新的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。