- 8-18:
- 做了‘如何获取emp_v和employees有相同的数据no’,学到的东西如下:
- 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。
create view emp_v as select * from employees where emp_no >10005;
从as后面的语句的结果中创造了一个视图view
-
视图可以完成像表一样的操作比如:
select * from emp_v
-
INTERSECT:是对两个 SQL 语句所产生的结果做处理的,求交集
SELECT * FROM employees INTERSECT SELECT * FROM emp_v
- 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。
-
做了‘分页查询employees表,每5行一页,返回第2页的数据’
-
答案是
select * from employees limit 5,5
说明第一个5所在的位置是从0开始计数的,0,1,2,3,4,是前5个
-
- 做了‘如何获取emp_v和employees有相同的数据no’,学到的东西如下:
-
8-22
-
今天做公司的事儿学到了很多
-
查找一个表中重复的记录
select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
-
删除这些重复的东西时由于mysql的特殊性得多加一层select
-
查找两个表不同的地方
select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
-
-
-
9-14:
-
视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。
-
事务处理
-
事务(transaction)指一组SQL语句
-
回退(rollback)指撤销指定SQL语句的过程;
-
提交(commit)指将未存储的SQL语句结果写入数据库表
-
使用事务处理(transaction processing),通过确保成批的SQL操作要么完全执行,要么完全不执行,来维护数据库的完整性。
-
例子
-
有的DBMS要求明确标识事务处理块的开始和结束。如在SQL Server中,标识如下:
BEGIN TRANSACTION ... COMMIT TRANSACTION
在这个例子中,BEGIN TRA NSA CTION和COMMIT TRA NSA CTION语句之间的SQL必须完全执行或者完全不执行。
-
SQL的ROLLBA CK命令用来回退(撤销)SQL语句,请看下面的语句:
DELETE FROM Orders; ROLLBACK;
在此例子中,执行DELETE操作,然后用ROLLBA CK语句撤销。
-
一般的SQL语句都是针对数据库表直接执行和编写的。这就是所谓的隐式提交(implicit commit),即提交(写或保存)操作是自动进行的。在事务处理块中,提交不会隐式进行。下面是一个SQL Server的例子:
BEGIN TRANSACTION DELETE OrderItems WHERE order_num = 12345 DELETE Orders WHERE order_num = 12345 COMMIT TRANSACTION
在这个SQL Server例子中,从系统中完全删除订单12345。因为涉及更新两个数据库表Orders和OrderItems,所以使用事务处理块来保证订单
不被部分删除。最后的COMMIT语句仅在不出错时写出更改。如果第一条DELETE起作用,但第二条失败,则DELETE不会提交。
-
-
-
游标
-
背景:SQL检索操作返回一组称为结果集的行,这组返回的行都是与SQL语句相匹配的行(零行或多行)。简单地使用SELECT语句,没有办法得到第一行、下一行或前10行。但这是关系DBMS功能的组成部分。
-
定义:有时,需要在检索出来的行中前进或后退一行或多行,这就是游标的用途所在。游标(cursor)是一个存储在DBMS服务器上的数据库查询,
它不是一条SELECT语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。 -
创建游标:使用DECLA RE语句创建游标,这条语句在不同的DBMS中有所不同。DECLA RE命名游标,并定义相应的SELECT语句,根据需要带WHERE和其
他子句。为了说明,我们创建一个游标来检索没有电子邮件地址的所有顾客,作为应用程序的组成部分,帮助操作人员找出空缺的电子邮件地
址。DECLARE CustCursor CURSOR FOR SELECT * FROM Customers WHERE cust_email IS NULL
DECLARE语句用来定义和命名游标,这里为CustCursor。SELECT语句定义一个包含没有电子邮件地址(NULL值)的所有顾客的游标。
-
使用游标:使用OPEN CURSOR语句打开游标,这条语句很简单,在大多数DBMS中的语法相同:
OPEN CURSOR CustCursor
在处理OPEN CURSOR语句时,执行查询,存储检索出的数据以供浏览和滚动。现在可以用FETCH语句访问游标数据了。FETCH指出要检索哪些行,从何处检索它们以及将它们放于何处(如变量名)。第一个例子使用Oracle语法从游标中检索一行(第一行):
DECLARE TYPE CustCursor IS REF CURSOR RETURN Customers%ROWTYPE; DECLARE CustRecord Customers%ROWTYPE BEGIN OPEN CustCursor; FETCH CustCursor INTO CustRecord; CLOSE CustCursor; END;
在这个例子中,FETCH用来检索当前行(自动从第一行开始),放到声明的变量CustRecord中。对于检索出来的数据不做任何处理。下一个例子(也使用Oracle语法)中,从第一行到最后一行,对检索出来的数据进行循环:
DECLARE TYPE CustCursor IS REF CURSOR RETURN Customers%ROWTYPE; DECLARE CustRecord Customers%ROWTYPE BEGIN OPEN CustCursor; LOOP FETCH CustCursor INTO CustRecord; EXIT WHEN CustCursor%NOTFOUND; ... END LOOP; CLOSE CustCursor; END;
与前一个例子一样,这个例子使用FETCH检索当前行,放到一个名为CustRecord的变量中。但不一样的是,这里的FETCH位于LOOP内,因此它反复执行。代码EXIT WHEN CustCursor%NOTFOUND使在取不出更多的行时终止处理(退出循环)。这个例子也没有做实际的处理,实际例子中可用具体的处理代码替换占位符…。
-
关闭游标
CLOSE CustCursor
-
-
记录做牛客网sql题学到的新技能
猜你喜欢
转载自blog.csdn.net/weixin_38104825/article/details/81811187
今日推荐
周排行