数据库复习笔记

xeonds

2024-01-15 19:17:19

这学期学的数据库主要偏向应用,理论部分相对比较少,重点如下:

数据库系统概论 大纲

整理的不是特别全乎,不过也涵盖不少了。往年大题就那几道,题型相对固定,针对性做题,做会题就算复习完了。

上面的知识点里边特别重要的就那几个:关系代数,关系完整性,SQL,关系数据理论和事务与并发,查询优化这几个。其他零碎的小知识点有印象就行了。

复习方法一是做题,最好是看答案;二是看例子,例题,然后递归复习知识点,效率最高。三是下策,先看知识点,再做题,适合开始复习比较早,时间充裕的情况,也是最充分的复习,但是问题是容易动力不足。

SQL

CREATE,DROP,ALTER

CREATE SCHEMA <"name"> AUTHORIZATION "username";
DROP SCHEMA "name" [CASCADE/RESTRICT];
CREATE TABLE "name"
{   Col1 VARCHAR(10) PRIMARY KEY,
    Col2 NUMBER(10) NOT NULL UNIQUE,
    Col3 INT FOREIGN KEY(Sno) REFERENCES TABLE2(Sno),
    CHECK(Col1 > 1 AND Col1 < 10)
};
CREATE TABLE schema.tablename{
    // 同上
};
CREATE SCHEMA "name" AUTHORIZATION "user" CREATE TABLE "table1"
{
    // 同上
};
ALTER TABLE "name" [ADD COLUMN name VARCHAR(10) |
                    ADD UNIQUE(Cname) |
                    ADD FOREIGN KEY(Cno) REFERENCES Student(Cno) |
                    DROP Col1 CASCADE|RESTRICT
                    DROP CONSTRAINT “completeness” CASCADE|RESTRICT
                    ALTER COLUMN Col1 VARCHAR(114514)
];
DROP TABLE "name" CASCADE|RESTRICT;

INDEX

CREATE UNIQUE|CLUSTER INDEX "index_name" ON tableName(Col1 DESC, Col2 ASC);
ALTER INDX "old_index" RENAME TO "new_index";
DROP INDEX "index_name";

SELECT

SELECT [DISTINCT|ALL] 2022-table1.age,table2.Sname
FROM ["table1" | "view1"]
WHERE age>5 AND|OR age<7 AND Sdept='CS' AND age [NOT]  BETWEEN 20 AND 30 AND Sdept IN('CS','MA') AND name LIKE '张____' AND GRADE IS NULL
GROUP BY Col2 HAVING AVG(Grade)>=90
ORDER BY Col1 DESC;

连接查询时,列举全部属性列,去掉相同的列就是自然连接。

单表连接查询:

FROM Course.FIRST, Course.SECOND
SELECT FIRST.Cno, SECOND.Cpno
WHERE FIRST.Cpno=SECOND.Cno;
//外连接查询
FROM table1 LEFT|RIGHT OUTER JOIN table2 ON|USING(table1.sno=table2.sno) // USING去重

%_任意字符、一个字符,汉字长两个字符

子查询使用IN关键字,阅读/构造时从内部构造。下面的例子相当于是将子查询的结果作为父查询的语句的参数了。

SELECT Sno, Sname, Sdept
FROM Student
WHERE Sdept IN (
    SELECT Sdept
    FROM Student
    WHERE Sname='lex'
) AND xxx;

还有EXISTS子查询,跟上边IN差不多,不过意思是将”至少存在一个查询结果“作为查询选择器的条件。

多个查询可以用UNION,, INTERSECT, EXCEPT分别进行并,交,差三个集合运算,目标的数据结构必须相同。 ### INSERT,UPDATE,DELETE

INSERT INTO table(Col1, Col2) [
    VALUES(1,2,3,'4') | 
    SELECT xxx FROM xxx WHERE xxx GROUP BY xxx
];

UPDATE table
SET Col1=xxx
WHERE cond;

DELETE
FROM table
WHERE cond;

VIEW

CREATE VIEW vname(Col1,Coln)
AS 子查询
[WITH CHECK OPTION]
GROUP BY xxx;
DROP VIEW vname CASCADE

空值

xxx IS [NOT] NULL