| 1
 | CREATE SCHEMA TEST AUTHORIZATION ZHANG;
 | 
 
| 1
 | DROP SCHEMA <模式名> <CASCADE | RESTRICT>;
 | 
 
| 1
2
 | DROP TABLE  <表  名> <CASCADE | RESTRICT>;     ---缺省是RESTRICT
                       级联      限制
 | 
 
| 1
2
3
4
5
6
7
 | CREATE TABLE SC(
        Sno CHAR(5), 
        Cno CHAR(3), 
        Grade int,
       PRIMARY KEY (Sno,Cno),
       FOREIGN KEY (Sno) REFERENCES S(Sno),       --- FOREIGN KEY <列名>REFERENCES <被参照表名>(<列名>)
       FOREIGN KEY (Cno) REFERENCES C(Cno));
 | 
 
| 1
2
3
4
 | ALTER TABLE <表名>
    [ ADD <新列名> <数据类型> [ 完整性约束 ] ]
    [ DROP <完整性约束名>]
  [ ALTER COLUMN <列名>  <数据类型> ] ;
 | 
 
| 1
2
3
4
5
 | ALTER TABLE Student ADD Scome DATE ;
ALTER TABLE Student Drop Scome ;
ALTER TABLE Student ALTER COLUMN Sage SMALLINT ;
ALTER TABLE Student ADD UNIQUE(Sname) ;
ALTER TABLE Student DROP UNIQUE(Sname) ;
 | 
 
| 1
2
 | SC表按学号升序和课程号降序建唯一索引
CREATE UNIQUE INDEX SCno ON SC(Sno,Cno DESC);
 | 
 
| 1
2
 | 在Student表的Sname列上建立一个聚簇索引,而且Student表中的记录将按照Sname值的升序存放
CREATE CLUSTER INDEX Stusname ON Student(Sname);
 | 
 
| 1
 | DROP INDEX Stusname; ---SQL标准中没有定义对索引的修改功能,而采用删除后重新定义索引的方式实现
 | 
 
| 1
2
 | SELECT DISTINCT Sno FROM SC; ---DISTINCT取消重复行,作用范围是所有目标列
投影(π)运算的定义中直接去掉了结果中的重复元组,SQL中必须明确指定DISTINCT,否则默认ALL
 | 
 
| 1
2
3
4
 | -查询年龄不在20~23岁之间的学生姓名、系别和年龄。
SELECT Sname,Sdept,Sage FROM Student WHERE Sage NOT BETWEEN 20  AND 23;
-查询不是信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。
SELECT Sname,Ssex FROM Student WHERE Sdept NOT IN ('IS','MA','CS');
 | 
 
| 1
2
3
4
5
6
7
8
 | %:任意长度(可以为0)的字符串    _:任意单个字符
-查询姓名中第二个字为“阳”字的学生姓名和学号。
SELECT Sname,Sno FROM Student WHERE Sname LIKE '__阳%';
-查询以"DB_"开头,倒数第3个字符为i的课程的详细情况。
SELECT * FROM Course WHERE Cname LIKE 'DB\_%i__' ESCAPE '\';
-查询所有有成绩的学生学号和课程号
SELECT Sno,Cno FROM SC WHERE Grade IS NOT NULL;
!!!   [NOT] BETWEEN … AND … 和 [NOT] IN将不会利用索引提高查询效率,应改为多重条件查询
 | 
 
| 1
2
 | -所在系的系名升序排列,年龄降序排列
SELECT * FROM Student ORDER BY Sdept,Sage DESC;
 | 
 
| 1
2
 | 集函数:
COUNT ([DISTINCT|ALL] <列名>) SUM AVG MAX MIN   ---DISTINCT以避免重复
 | 
 
| 1
2
 | 查询有3门以上课程是90分以上的学生的学号及(90分以上的)课程数。
SELECT Sno, COUNT(*) FROM SC WHERE Grade>90 GROUP BY Sno HAVING COUNT(*)>3;
 | 
 
WHERE->GROUP BY->HAVING->SELECT
| 1
2
 | SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student LEFT OUTER JOIN SC 
ON Student.Sno = SC.Sno;    或USING(Sno);
 | 
 
子查询的限制--不能使用ORDER BY子句
| 1
2
3
 | -查询其他系中比信息系某些学生年龄小的学生姓名和年龄。
SELECT Sname,Sage FROM Student WHERE Sage < ANY (SELECT Sage FROM Student WHERE Sdept= 'IS') AND Sdept <> 'IS';
SELECT Sname,Sage FROM Student WHERE Sage < (SELECT MAX(Sage) FROM Student WHERE Sdept= 'IS') AND Sdept <> 'IS';
 | 
 
| 1
2
3
4
 | 输出这样的学生,不存在某门课程,在他的选课记录里没有选这门课
SELECT Sname FROM Student WHERE 
NOT EXISTS (SELECT * FROM Course WHERE 
NOT EXISTS (SELECT * FROM SC WHERE Sno = Student.Sno AND Cno = Course.Cno));
 |