数据库3,4 SQL

表创建

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表示撤销操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值