表创建
create table table_name(attr_name1, 类型, attr_name2, 类型, primary key(attr));
create table table_name(attr_name1, 类型, attr_name2, 类型, forign key(attr1) references attr2);
插入语句
insert into table_name values(value1, value2);
插入一条记录
insert into table_name values(value1, value2) values(value1’, value2’);
插入两条记录
删除语句
delete from table_name where…
修改值
update table_name set … where…
set 后面是一个赋值语句
查询语句
select distinct attr from table_name where …
导致查询结果去除重复
select attr from table1, table2 where …
导致table1和table2笛卡尔积运算
select attr from table1 natural join table2
导致table1和table2自然连接
select * from table1 where…
order by attr1 desc
导致返回结果按照attr1降序排列
select * from table1 where…
order by attr1 asc
导致返回结果按attr1升序排列
更名运算
select attr1 as a, attr2 from table
a as b作为一个更名,将属性更名
select T.a, S.b from table1 as T, table2 as S where
将from的表更名,可以在select的时候就使用
对于自身的比较很有用,比如在表Table1中,求attr1属性高于attr2='a’记录的那些记录。
即所有记录和attr2='a’的记录进行比较
select * from table1 as T, table1 as S
where T,attr1 > S.attr1 and S.attr2 = ‘a’
集合运算
(select … from … where …) union (select … from … where);
把运算结果合并,去除重复
(select … from … where …) intersect (select … from … where);
取出两边都有的记录,会去除重复
(select … from … where …) expect (select . from … where)
前一个减去后一个,会去除重复
聚集
select avg(a) as avg_a from … where … group by attr1
按照attr1分组计算a属性平均值,返回的是(attr1_value, avg_a)的若干条记录。表示attr1为value的这几条记录, a平均值为a_avg
还有max, min, count,sum
select attr1, count(attr2) fom table where… group by attr1
select中只除了分组依据的属性,即attr1,如果出现其他属性一定要被聚集函数包裹,不然是不合法的。
因为只能返回分组后组内相同的属性的值。如果要求返回在组内不同的属性值,则不合法
select attr1 from … where … group by attr1 having avg(attr2) > a
having 跟在group by … 后面,条件是对分组后每个组的要求。所以属性只能是分组依据的属性或者被聚集函数包裹。
嵌套查询
select … from (select … from … where) where …
在from中可以使用子查询
select … from … where … and … and (attr1, attr2) in {
seect attr1 , attr2 from … where …}
在where中,可以使用in查询元素是否在后面一个子查询中。
select … from … where (attr) > all(select from … )
使用all和some表示所有元素和某一个元素。
允许=some,<>some,=all,<>all等
not exists (B except A)
实现除法 A/B,A的一部分属性和B相同,某些记录的这些属性值包含了B,
而这些记录的其他属性都是相同的。则返回这些相同的属性值。
例如:查询选了生物系所有课程的学生
select SID from student as S
where not exists ((select course_id from course where dept_name = “Biology”)
except (select course_id from takes where s.SID = takes.SID))
except后面是某个同学所选课程,前面是生物系所有的课程。结果是同学所选课程除以生物系课程,如果能够除断,将会返回同学的SID
unique(select … )
检测是否存在重复元素
断言
对一个式子进行检测,看是否满足
create assertion assert_name check (…)
check里面是想要检测的东西,用not exists (…)表示
触发器
结构:
create trigger trigger_name after/before updata/insert/delete of table_name on attr
referencing new row as new
referencing old row as old
for each row
when(…)begin
set … = …
rollback
end
after/before 是触发时间
on table或者of table on attr指定了table或者更加具体的列,表示该表或者列被操作时触发
对于数据的操作:set … = (select … from … )表示赋值
rollback表示撤销操作