sql server 语句总结

注意:sql不提供模式修改与修改视图定义的操作
本博客里的任何关键句都是用大写的...

模式: SCHEMA
创建模式
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>
实例: CREATE SCHEMA TEST AUTHORIZATION YSP;
删除模式
DROP SCHEMA <模式名> <CASCADE(级联 删除该模式的同时将所有数据库对象一起删除) | RESTRICT(在没有数据库对象的 时候才会执行删除)>
DROP SCHEMA TEST CASCADE

创建表
CREATE TABLE student (
sno CHAR(9) PRIMARY KEY // (主键),
sname CHAR(20) UNIQUE//(取唯一值),
FOREIGN KEY (sname) REFERENCE course(cn) //sname是外码,等于course 中的属性 cn
)
修改基本表
ALTER TABLE <表名> ADD|DROP COLUMN(列) <列名> <数据类型>|CONSTRAINT(完整性约束)
删除基本表
DROP TABLE <表名> CASCADE | RESTRICT

索引:
创建索引
CREATE UNIQUE INDEX stusno ON student(sno);
删除索引
DROP INDEX stusno

数据查询
单表查询
按列查询
SELECT sno,sname FROM Student;(查询列的值)
SELECT sno,2015-sage Birthday(用作别名 格式 :前面内容,后面别名) FROM Student;(查询结果有运算)
SELECT DISTINCT sno FROM sc;(DISTINCT 用于消除结果中相同的部分)
按WHERE查询
SELECT sno FROM s WHERE sagc BETWEEN 10 AND 20;
SELECT sno FROM s WHERE sag IN |NOT IN ('列名');
LIKE 查询(SELECT sno FROM s WHERE ** LIKE)
% 代表任意长度 'a%b' 表示 以a开头以b结尾的任意长度的字符串
_ 代表单个字符 ‘a_b’表示以a开头,以b结尾 长度为3 的字符串 !!!数据库为ASII __=汉 gbk _=汉
ESCAPE'\' 让该符号失去特殊含义 如 LIKE 'K\_' ESCAPE '\_'
排序
ORDER BY grade ASC(升序)|DESC(降序)
聚集函数(就是把 结果利用函数来处理 )
SELECT COUNT(*) FROM student;//查询学生总人数
SELECT AVG(grade) FROM SC WHERE cno=‘1’ //计算选修1号可学生的成绩,
GROUP BY (按一列或则多列的值分组,值相同的为一组)
SELECT cno COUNT(sno) FROM sc GROUP BY cno; //选相同课程号cno 并将它们用COUNT统计
SELECT sno,AVG(grade) FROM sc GROUP BY sno HAVING AVG(grade)>=90// WHERE 里不能用 聚集函数
连接
SELECT first.cno,second.cpnp FROM course first(定义表名),course2 second where first.cno = second.cno;
嵌套查询
SELECT sname FROM s WHERE sno IN( || ALL || ANY >=....括号为注释 若是IN 改为EXISTS返回的将会是true or false )( SELECT sno FROM sc WHERE cno='2');
子查询不依赖于父查询称为不相关子查询
子查询依赖于父查询称为相关子查询
集合查询(其实就是将查询结果 并 交 差)
并 SELECT *** UNION SELECT ***;
交 SELECT *** INTERSECT SELECT ***;
差 SELECT *** EXCEPT SELECT ***;
基于派生表查询 (其实就是在FROM后面加个查询)
SELECT * FROM s,(SECECT * FROM sc WHERE);

数据更新
插入元组
INSERT INTO s (sno,sname) VALUES('1','ysp');
修改元组
UPDATE student SET sage=22 WHERE sno='2222';(修改单个)
UPDATE student SET sage=sage+1;(修改多个);
删除数据
DELETE FROM student WHERE sno='22';(删除单个)
DELETE FROM student;(让该表格成为空表)

视图
CREATE VIEW <视图名>(<列名>,<列名>)
AS<子查询 > //就是SELECT 语句
[WITH CHECK OPTION] //这里面不是关键,是一种判断,例如WHERE 语句,其实就包含在SELECT语句中。

数据库权限:
创建角色
CREATE ROLE username;
将一个角色授予其他角色
GRANT username
TO username
WITH GRANT OPTION(允许授予他人该项权力) | WITH NO OPTION (不允许授予他人该项权力)
授予权限
GRANT SELECT(查找) | ALL PRIVILEGES(全部) | UPDATE(更新 列名) | INSERT ( 插入这些都是权限)
ON TABLE s
TO username
WITH GRANT OPTION(允许授予他人该项权力) | WITH NO OPTION (不允许授予他人该项权力)
权限收回
REVOKE SELECT(查找) | ALL PRIVILEGES(全部) | UPDATE(更新 列名) | INSERT ( 插入这些都是权限)
ON TABLE s
FROM username;

数据完整性操作
在列级定义主码
CREATE TABLE student(
sno CHAR(9) PRIMARY KEY, //主码
sname CHAR(20) NOT NULL //码
)
在表级定义主码
CREATE TABLE student(
sno CHAR(9) ,
sname CHAR(20) NOT NULL ,//码
PRIMARY KEY(sno)//主码
)
参照完整性
CREATE TABLE student(
sno CHAR(9) ,
sname CHAR(20) NOT NULL ,//码
PRIMARY KEY(sno)//主码
FOREIGN KEY(sname) REFERENCE course(cname)
ON (DELETE(删除) |UPDATE(更新)) (CASCADE (级联 外表改变,该表也改变) | NO ACTION(不一致不做改变))
)
列值唯一
CREATE TABLE student(
sno CHAR(9) UNIQUE}
指定列值应该满足的条件
CREATE TABLE student(
sno CHAR(9) CONSTRAINT c1(完整性名称) CHECK( sno BETWEEN 0 AND 100))
去除完整性
ALTER TABLE student DROP CONSTRAINT c1;
创建断言
CREATE ASSERTION assertion
CHECK(60 >= (SELECT COUNT(*) FROM s,sc);
这个返回的是真假,假表示操作被拒绝
删除断言
DROP ASSERTION assertion;
创建触发器:
CREATE TRIGGER <触发器名>
BEFORE | AFTER <触发事件> ON <表名> //BEFORE 指写入数据库之前 AFTER 指写入数据库之后
REFERENCING NEW | OLD ROW AS <变量> //这里的变量用作新和旧的表来操作
FOR EACH ROW | STATEMENT //是作为行级触发器还是作为语句级触发器
WHEN <触发条件>|<触发动作体>
删除触发器
DROP TRIGGER <触发器名> ON <表名>



发布了28 篇原创文章 · 获赞 14 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_28738419/article/details/53612851