【复习】数据库知识

一、SQL简单语法

1.集合运算

union、union all(保留重复)

intersect、intersect all(保留重复)

except、except all(保留重复)


2.空值

is null

= null(返回unknown)


3.聚集函数

avg()、max()、min()、sum()、count() 

count()会计算null列,其他会忽略null列

不能用count(distinct *),但可count(distinct ID).

count(空集)返回0,其他函数如max(空集)会返回null.


group by ...

having ...(针对group by)


some、every处理布尔值的聚集

some:其中有true返回true,所有均为false返回false.

every:所有均为true返回true,其中有false返回false.


4.嵌套子查询

select (子查询句) as tablename1(a1,b1,c1..)

from (子查询句) as tablename2(a2,b2,c2...)

where tablename3(a3,b3,c3) in/not in (子查询句)


unique/not unque 传入表中是否含重复元组

exists/not exists 传入表中是否为空集

with tablename(a,b,c..) as (子查询句) with子句提供定义临时关系的方法,这个定义只包含with子句的查询有效.


5.连接表达式

table1 join table2 on table1.a=table2.a;

(inner) join

natural join 如果两张表中有相同名字的列,但是数据类型不一致,如果能隐式转换,则能正常连接,但如果隐式转换不成功,则报错。

left outer join 左向外联接的结果集包括  LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。     

right outer join 右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。  

full outer join 完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。  


6.视图和索引

create view viewname(a,b,c...) as

(子查询句)

视图实际上只是存储了子查询句,方便调用查询句.(有物化视图能根据表的改变而改变,但是要付出较大的更新开销)

create index indexname on table(a,b..)

索引是将指定列的地址进行记录,下次调用时可以直接通过索引访问到该指定列,减少了查询的时间.


7.事务

事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。
事务的四个特性(A-C-I-D):1.原子性(atomicity) 2 .一致性(consistency)  3.隔离性(isolation) 4.持久性(durability) 

commit work:提交当前事务

rollback work:回滚当前事务


8.like

例:

SELECT * FROM Persons
WHERE City LIKE 'N%'

通配符 描述
% 替代一个或多个字符
_ 仅替代一个字符
[charlist] 字符列中的任何单一字符

[^charlist]

或者

[!charlist]

不在字符列中的任何单一字符

9.top  注释: 并非所有的数据库系统都支持 TOP 子句。

SQL Server 的语法:

SELECT TOP number|percent column_name(s)
FROM table_name

MySQL 和 Oracle 中的 SQL SELECT TOP 是等价的

MySQL 语法

SELECT column_name(s)
FROM table_name
LIMIT number

例子

SELECT *
FROM Persons
LIMIT 5

Oracle 语法

SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number

例子

SELECT *
FROM Persons
WHERE ROWNUM <= 5


二、进阶SQL

1.存储过程和函数

语法举例:

存储过程:

create procedure procedurename(in a,out b)

begin

(子查询句)

end

in表示待赋值的参数

out表示为返回结果而在过程中设置的值

调用时:exec 存储过程名 参数


函数(参数为20长度内的字符串,返回值为表):

create function functionname(a varchar(20)) return table(a,b,c...)

return table (子查询句);

调用时其实与系统函数的调用类似


总体来说,

存储过程
   

    1. 功能强大,限制少
    2. 不能直接引用返回值
    3. 用select语句返回记录集

自定义函数


   1. 诸多限制,有许多语句不能使用,许多功能不能实现
   2. 可以直接引用返回值
   3. 用表变量返回记录集


2.触发器

 触发器对表进行插入、更新、删除的时候会自动执行的特殊存储过程。触发器一般用在check约束更加复杂的约束上面。触发器和普通的存储过程的区别是:触发器是当对某一个表进行操作。诸如:update、insert、delete这些操作的时候,系统会自动调用执行该表上对应的触发器。

语法:

Create Trigger truStudent            --truStudent是触发器名称
       On Student                         --哪个表中创建触发器 
       for Update                          --触发什么样事件/insert/delete
     As                                        
       if Update(StudentID)           --如果什么样的事件触发 
       begin 

         Update BorrowRecord 
           Set StudentID=i.StudentID 
           From BorrowRecord br , Deleted   d ,Inserted i      --那就做什么样的事(具体实现上面for update) 
           Where br.StudentID=d.StudentID 

       end        

猜你喜欢

转载自blog.csdn.net/xc1158840657/article/details/77949433