《SQL21日自学通》笔记

之前断断续续学了很多sql的知识也使用了不少,但是一直想做一个总结性的笔记来备查备忘
这次找到了一个电子书《SQL21天自学通》感觉还不错,(电子书放在附件中了)快速的看了一下把其中自己感觉有帮助的地方摘录下来,权当温故知新吧^^

[color=red][/color]select [color=red]DISTINCT[/color] amount from checks;
使用了DISTINCT 所有只有不重复的数据才会被显示

SELECT ITEM WHOLESALE (WHOLESALE+0.15) RETAIL FROM PRICE
你不但可以创建一个新列而且还可以对它安自己的需要进行重命名你可以按语法:“列名 别名”来对任何一个[color=red]列进行重命名[/color](注意在列名与别名之间有空格)

SELECT * FROM FRIENDS WHERE AREACODE>=300
在这个语句中300没有使用引号,[color=red]对于数字型字段是不需要加引号的[/color]

SELECT * FROM FRIENDS WHERE FIRSTNAME <> 'AL'
[color=red]<>相当于!=[/color]

SELECT * FROM VACATION WHERE LASTNAME [color=red]NOT LIKE 'B%'[/color]SELECT * FROM PRICE WHERE WHOLESALE [color=red]IS NOT NULL[/color]

SELECT NAME FROM SOFTBALL [color=red]UNION[/color] SELECT NAME FROM FOOTBALL
返回了两个表中的10个记录,它们是不重复的
SELECT NAME FROM SOFTBALL [color=red]UNION ALL[/color] SELECT NAME FROM FOOTBALL
UNION ALL 与UNION 一样对表进行了合并但是它不去掉重复的记录
SELECT * FROM FOOTBALL INTERSECT SELECT * FROM SOFTBALL
返回两个表中共有的行
SELECT * FROM FOOTBALL [color=red]MINUS [/color]SELECT * FROM SOFTBALL
是存在于第一个表中但不存在于第二个表中的记录

SELECT * FROM FRIENDS WHERE STATE [color=red]IN[/color]('CA','CO','LA')
相当于SELECT * FROM FRIENDS WHERE STATE= 'CA' OR STATE ='CO' OR STATE =
'LA'

SELECT * FROM PRICE WHERE WHOLESALE [color=red]BETWEEN [/color]0.25 AND 0.75
相当于SELECT * FROM PRICE WHERE WHOLESALE<0.25 AND WHOLESALE>
0.75

SELECT COUNT(NAME) NUM_BELOW_350 FROM TEAMSTATS
WHERE HITS/AB <.35
等效于SELECT [color=red]COUNT(*) [/color]NUM_BELOW_350 FROM TEAMSTATS
WHERE HITS/AB <.35
结果是一样的,因为你所选择的NAME 列与WHERE 子句并不相关

SELECT [color=red]SUM(SINGLES)[/color] TOTAL_SINGLES FROM TEAMSTATS
WHERE HITS/AB >=.300
SUM操作对象是某列,求满足where要求的该列总和,注意只能操作于数字

SELECT [color=red]AVG(HITS)/AVG(AB)[/color] TEAM_AVERAGE FROM
TEAMSTATS
AVG 返回某一列的平均值

SELECT [color=red]MAX(NAME)[/color] FROM TEAMSTATS
MAX找出某列的最大值,可以操作于字符串
注:如果我想知道得分最多的人是谁怎么办?
SELECT NAME FROM TEAMSTATS WHERE HITS=MAX(HITS)
报错:ORA-00934 group function is not allowed here
这一信息提示你[color=red]汇总函数无法在WHERE 子句中使用[/color]
那该如何是好呢,别急后面会有子查询来完成这样的需求^^

SELECT [color=red]ADD_MONTHS(ENDDATE,2)[/color] FROM PROJECT
ADD_MONTHS的功能是将给定的日期增加若干个月
[color=red]INITCAP[/color]将参数的第一个字母变为大写,此外其它的字母则转换成小写
[color=red]LOWER[/color]将参数转换为全部小写字母而[color=red]UPPER[/color]则把参数全部转换成大写字母
还有很多日期函数数学函数字符函数这里就不列出来了要用的时候直接google一下即可

如果你想知道的是对每一个PAYEE花了多少钱时又该怎么办呢?
SELECT PAYEE, SUM(AMOUNT) FROM CHECKS [color=red]GROUP BY [/color]PAYEE
SELECT 子句有一个正常的列之后是一个汇总函数。
如果它的后边只有FROM CHECKS 子句的话那么你将会看到:
SELECT PAYEE SUM AMOUNT FROM CHECKS;
Dynamic SQL Error:invalid column reference
该信息表明SQL无法把正常的列和汇总函数结合在一起,这时就[color=red]需要GROUP BY 子句它可以对SELECT 的结果进行分组后再应用汇总函数[/color]
SELECT PAYEE MAX(AMOUNT) MIN(AMOUNT) FROM CHECKS GROUP BY REMARKS
报错,分析下原因:先按REMARKS分组,那么就是说每组REMARK 是一行,但是发现了在某组REMARK 字段中找到了不同的PAYEE,那就没法显示了。

下边的这条语句的目的是返回分组后平均工资低于38000 的组:
SELECT TEAM, AVG(SALARY) FROM ORGCHART WHERE AVG(SALARY)< 38000 GROUP BY TEAM
报错:-Invalid aggregate reference
错误产生的原因是由于汇总函数不能工作在WHERE 子句中如果想要让这个查询工作的话我们需要一些新东西――HAVING 子句
SELECT TEAM, AVG(SALARY) FROM ORGCHART GROUP BY TEAM [color=red]HAVING [/color]AVG(SALARY)< 38000;
注意:不要在having子句中使用非汇总函数,因为得到的结果很可能不是你想要的。
HAVING 子句允许使用多个条件:
SELECT TEAM AVG(SICKLEAVE), AVG(ANNUALLEAVE) FROM ORGCHART GROUP BY TEAM HAVING AVG(SICKLEAVE)< 25 AND AVG(ANNUALLEAVE)> 20
也可以在HAVING 中使用在SELECT 中没有指出的字段进行汇总:
SELECT TEAM AVG(SICKLEAVE), AVG(ANNUALLEAVE) FROM ORGCHART GROUP BY TEAM HAVING COUNT(TEAM)> 1
也可以在HAVING子句中带逻辑操作符:
SELECT TEAM AVG(SALARY) FROM ORGCHART GROUP BY TEAM HAVING TEAM IN ('PR','RESEARCH');
只要记住:[color=red]having是用来对group by所得到的组来进行筛选的[/color]

切记:无论在什么情况下,进行分组SELECT 语句中出现的字段只能是在GROUP BY 中出现过的才可以。这个原因上面已经解释过了。^^

注意:WHERE 子句与ORDER BY 子句常在对单行进行处理时看到;
而GROUP BY 和HAVING 子句常用在对数据进行汇总操作上
如果把它们结合起来使用会有出人意料的结果。
[color=red]WHERE 子句会在分组前将一些记录过滤掉[/color]。
建议是最好不好混用这些子句,在处理实际的数据库时会有不可预知的结果,没试过不知道会有什么结果。。

SELECT * FROM TABLE1,TABLE2
你会发现联合的结果其实就是将TABEL1 中的每一行与TABEL2 中的每一行都接合了起来。
等值连接:
SELECT E.EMPLOYEE_ID, E.LAST_NAME, EP.SALARY FROM EMPLOYEE_TBL E, EMPLOYEE_PAY_TBL EP WHERE E.EMPLOYEE_ID = EP.EMPLOYEE_ID
AND E.LAST_NAME = 'SMITH';
如果你在联合表的时候没有使用WHERE 子句,你执行的其实是笛卡尔联合也就是笛卡尔叉积,这种联合会对FROM 中指出的表进行完全的组合。如果每个表有200个记录的话,那么所得到的结果将会有40000 行(200 *200), 这太大了所以除非你确实是想对表中的所有记录进行联合,否则一定不要忘记使用WHERE 子句。

RIGHT OUTER JOIN 会令SQL 返回右边表集内的全部记录
不要对内部联合和外部联合操太多的心大多数的SQL 产品会判断应该在你的查询中使用哪一种联合。

子查询:
SELECT O.ORDEREDON, O.PARTNUM, P.DESCRIPTION, O.QUANTITY, O.REMARKS, FROM ORDERS O, PART P WHERE O.PARTNUM = P.PARTNUM AND O.PARTNUM = (SELECT PARTNUM FROM PART WHERE DESCRIPTION = "ROAD BIKE")
子查询嵌套:
SELECT C.NAME, C.ADDRESS, C.STATE, C.ZIP FROM CUSTOMER C WHERE C.NAME IN (SELECT O.NAME FROM ORDERS O, PART P WHERE O.PARTNUM = P.PARTNUM
AND O.QUANTITY * P.PRICE> (SELECT AVG(O.QUANTITY * P.PRICE) FROM ORDERS O, PART P WHERE O.PARTNUM = P.PARTNUM));

[color=red]UPDATE [/color]COLLECTION [color=red]SET [/color]WORTH = 900 WHERE ITEM = 'STRING';
[color=red]INSERT INTO[/color] COLLECTION [color=red]VALUES[/color]('CHIA PET', 5,'WEDDING GIFT');

[color=red]CREATE TABLE [/color]BILLS ( NAME CHAR(30), AMOUNT NUMBER, ACCOUNT_ID NUMBER NOT NULL);

视图常常被称为虚表,它是用CREATE VIEW 语句来建立的
[color=red]CREATE VIEW[/color] CREDITCARD_DEBTS [color=red]AS [/color]SELECT * FROM DEBTS WHERE ACCOUNT_ID = 4;
视图所能进行的操作用以上的操作都能实现,而且其实在数据库底层就是通过上述的各种语句来实现视图的各种操作,但是视图还是有存在的意义。
视图主要用于以下方面:
1 提高用户数据的安全性:比如你只想让用户访问BILLS表中的NAME 字段你需要创建一个名字叫BILLS_NAME 的视图;
2 进行单位换算
3 创建一个新格式的虚表
4 使复杂查询的构筑简单化:234都是为了方便使用

[color=blue]-----------------------分割线:以上是前十天的内容-------------------------[/color]
如果你是一个临时用户只需要偶而使用SQL 从数据库获得数据的话,那么前十天的的主题已经为你提供了足够的内容。但是如果你想开发可以在使用数据库系统下运行的专业应用程序(这在当前在很普遍的),那么你在今后四天中讲到的内容事务控制、安全、内嵌SQL、语句数据库过程将会对你有很大的帮助。

事务控制或者说事务处理是指关系数据库系统执行数据库事务的能力。事务是指在逻辑上必须完成的一命令序列的单位,单元工作期是指事务的开始和结束时期。[color=red]如果在事务中产生的错误那么整个过程可以根据需要被终止[/color],[color=red]如果每一件事都是正确的那么结果将会被保存到数据库中[/color]。

事务的开始与结束
[color=red]SET TRANSACTION [/color]READ ONLY; //事务建立
SELECT * FROM CUSTOMERS WHERE NAME = 'Bill Turner';
[color=red]COMMIT[/color]; //事务提交

事务的回滚
SET TRANSACTION;
INSERT INTO CUSTOMERS VALUES ("Bubba MacDowell", "2222 Blue Lake Way", "Austin", "TX", 39874);
[color=red]ROLLBACK[/color]; //回滚
SELECT * FROM CUSTOMERS;
注:在COMMIT 语句运行以后,在事务中的所有动作都会得到确认,这时在使用ROLLBACK命令就太晚了。

允许你在当前事务中设一个保存点,从这一点开始如果你使用了ROLLBACK 命令,那么系统将会回到保存点时的状态,而在保存点之前的语句将会得到确认
SQL> SET TRANSACTION
SQL> UPDATE BALANCES SET CURR_BAL = 25000 WHERE ACCOUNT_ID = 5
SQL> [color=red]SAVEPOINT [/color]save_it
SQL> DELETE FROM BALANCES WHERE ACCOUNT_ID = 5
SQL> ROLLBACK TO [color=red]SAVEPOINT [/color]save_it
SQL> COMMIT
SQL> SELECT * FROM BALANCES

创建用户名密码:
CREATE USER Bryan [color=red]IDENTIFIED BY [/color]CUTIGER;
用户名是Bryan,密码是 CUTIGER

赋予与移除角色(三种)(Connect 最少而DBA 则拥有全部的访问能力):
[color=red]GRANT [/color]CONNECT/RESOURCE/DBA TO Bryan;
[color=red]REVOKE [/color]CONNECT/RESOURCE/DBA FROM Bryan;

该命令将允许系统中的所有用户都具有在自己的模块中创建视图和访问视图的能力:
GRANT CREATE VIEW TO [color=red]PUBLIC[/color];

[color=blue]------------------------分割线:开始第三周-------------------------------[/color]
[color=red]PL/SQL[/color] 是一项ORACLE 的技术它可以让SQL 像过程型语言一样工作。

ROWID 是存在于ORACLE 数据库的每一个表中的预定义列。ROWID 以二进制格式
存储和确定表中的每一列,索引就是使用ROWID 指向数据的。

1 在 [color=red]DECLARE[/color] 部分包括了定义的变量和其它的对象如常量和指针这一部分在PL/SQL 块中是可以选择的。
DECLARE
customer char(30);//变量
fiscal_year number(2) NOT NULL := '97';//:=赋初值,这可能是个常量
cursor employee_cursor is select * from employees;//指针


2 [color=red]PROCDURE[/color] 部分包括条件语句和SQL 语句块可以对它进行控制它是PL/SQL的必须部分
一个PROCDURE 部分的基本结构:
BEGIN
open a cursor;
condition1;
statement1;
condition2;
statement2;
...
close the cursor;
END

来看一个例子:
DECLARE
cursor employee_cursor is
select emp_id, emp_name from employees;
id_num employees.emp_id%TYPE;
name employees.emp_name%TYPE;
BEGIN
open employee_cursor;
loop
fetch employee_cursor into id_num, name;
end loop;
close employee_cursor;
END
在这个例子中是把当前的指针所指的行的对应数据填入变量id_num 和name 中,这两
个变量是在DECLARE 部分中定义的。

IF...THEN语法:
IF condition1 THEN
statement1
ELSIF condition2 THEN
statement2
ELSE
statement3


LOOP 本身是一个无限的循环,它经常在指针中使用,如果你想终止这种循环,你必
须指定在什么时候退出。例如,在循环中翻阅指针的时候,你可以指定当指针处于最后一行
的时候退出循环,见下例:
BEGIN
open employee_cursor
LOOP
FETCH employee_cursor into employee_record
EXIT WHEN employee_cursor%NOTFOUND
statement1
END LOOP
close employee_cursor
END

%NOTFOUND 是指针的一种属性,它表明在当前指针中没有任何数据。在这个例
子中,如果指针没有发现数据就会退出循环,假如你在循环中忽略了这条语句循环将会一
直进行下去。
WHILE-LOOP 则是在当条定条件满足时执行特定的语句而当条件不在满足时就会从循环中退出转而执行下一条语句。
当然还有FOR-LOOP,这里就不列出来了,有兴趣的话可以google一下。

3 [color=red]EXCEPTION[/color] 告诉了PL/SQL 如何处理指定的错误并按用户的定义进行处理它也是PL/SQL 的可选择部分。
在语句块中的异常可以[color=red]由RAISE 语句来激活[/color],异常可以由程序员进行准确地激活,然而当数据库产生内部错误时它会被自动激活或由默认的数据库服务来调用
BEGIN
DECLARE
exception_name EXCEPTION
BEGIN
IF condition THEN
RAISE exception_name
END IF
EXCEPTION
WHEN exception_name THEN
Statement
END
END


PL/SQL中也有事务控制语句COMMIT和ROLLBACK,这里就不举例了

[color=red]SQL*PLUS[/color]: 这种SQL 是针对ORACLE 的RDBMS 的。
在SQL*PLUS 中你想启动一个文件时,不必一定要输入它的扩展名,数据库默认你要执
行的文件是有扩展名的,与此类似,当你在SQL 提示符下创建编辑一个文件如SAVE GET EDIT 你也不必指定文件的扩展名。

[color=blue]-------------------分割线:常见的SQL错误及解决方法------------------------[/color]
1 Table or View Does Not Exist
如果你已经知道了表是存在的,而你仍然收到了错误信息呢?有时你收到这个信息是因为表并不存在,但是也可以是由于安全原因——也就是说表是存在的,但是你没有权限访问它,这个错误用数据库服务人员的话来精确地说就是“你没有权限来访问这个表”

2 Invalid Username or Password
确认你的密码是正确的吗?如果你确认你输入的用户名和密码是正确的,那么在你访问多个数据库时确认你要联接的数据库是正确的

3 FROM Keyword Not Specified
如果在SELECT 中的列名之后没有逗号,那么查询的处理机制会认为没有FROM 关键字

4 Group Function Is Not Allowed Here
任何组函数不可能在GROUP BY 子句中使用

5 Invalid Column Name
确认列名是正确的?确认表名是正确的?

6 Missing Keyword
创建视图的时候是不是缺了AS?

7 Missing Left Parenthesis
括号左右都完整吗?

8 Column Ambiguously Defined
注意:[color=red]在CREATE VIEW 语句中是不能使用ORDER BY 子句的,要用GROUP BY 来代替[/color]。
查询处理器要在ORDER BY 子句之前寻找结束标志(分号或正斜线)
因为处理器认为ORDER BY 不是CREATE VIEW 的一部分。
而由于在ORDER BY 之前没有结束标志,所以错误返回并指明是在ORDER BY 子句所在行。

9 Oracle Not Available
你没有得到SQL*PLUS 的提示,数据库可能当掉了。检查数据库的状态,同样如果你在访问多个数据库的话,你要确认你的连接是正确的。

10 TNS:listener Could Not Resolve SID Given in Connect Descriptor
在ORACLE 数据库中这个错误很常见, listener 在请求客户与远程服务通讯时产生了
错误,这里是你试图连接数据库,不论是数据库名字错误还是LISTENER 当掉都是有可能
的。你检查一个数据库的名字然后再输入一次,如有必要将这个问题告知数据库管理员。

11 Insufficient Privileges During Grants
你没有将指定权限分配给其他用户的权限

...当然还有很多常见错误这里就不一一列举了^^

[color=blue]--------------------------------结束语---------------------------------[/color]
关于数据库关于SQL有很多值得学习的知识,这里列出的只是LZ在浏览性学习了《SQL21日自学通》这本电子书后做的摘录,都是些比较基础的知识。还有更多知识需要通过实践或者各种途径的充电来等待我们去挖掘^^
目录1 译者的话 14 第一周概貌 16 从这里开始 16 第一天SQL 简介 17 SQL 简史 17 数据库简史 17 设计数据库的结构21 SQL 总览23 流行的SQL 开发工具 24 SQL 在编程中的应用 27 第二天查询— — SELECT 语句的使用 30 目标 30 背景 30 一般的语法规则 30 你的第一个查询 33 总结 37 问与答 38 校练场 38 练习 39 第三天表达式条件语句与运算 40 第四天函数对数据的进一步处理 60 目标 60 汇总函数 60 COUNT61 SUM 61 AVG 63 MAX 63 MIN 64 VARIANCE65 STDDEV66 期/时间函数66 ADD_MONTHS 67 LAST_DAY68 MONTHS_BETWEEN 69 NEW_TIME70 NEXT_DAY71 SYSDATE72 数学函数 72 ABS 73 CEIL 和FLOOR 73 COS COSH SIN SINH TAN TANH 73 EXP 75 LN and LOG75 MOD 76 POWER77 SIGN 77 SQRT 78 字符函数 79 CHR 79 CONCAT 79 INITCAP80 LOWER 和UPPER 81 LPAD 与RPAD 82 LTRIM 与RTRIM 83 REPLACE 84 SUBSTR85 TRANSLATE88 INSTR 88 LENGTH89 转换函数 89 TO_CHAR90 TO_NUMBER91 其它函数 91 GREATEST 与LEAST 91 USER 92 总结 92 问与答 93 校练场 93 练习 94 第五天SQL 中的子句95 目标 95 WHERE 子句96 STARTING WITH子句 98 ORDER BY 子句99 GROUP BY 子句104 HAVING 子句109 子句的综合应用112 总结117 问与答117 校练场117 练习118 第六天表的联合119 介绍119 在一个SELECT 语句中使用多个表119 正确地找到列123 等值联合124 不等值联合129 外部联合与内部联合130 表的自我联合132 总结134 问与答134 校练场134 练习135 第七天子查询内嵌的SQL 子句136 目标136 建立一个子查询136 在子查询中使用汇总函数140 子查询的嵌套141 相关子查询144 EXISTS ANY ALL 的使用147 总结151 问与答151 校练场152 练习153 第一周回顾154 预览154 第二周概貌155 这一周都讲些什么155 第八天操作数据156 目标156 数据操作语句156 插入语句157 INSERT VALUES 语句157 INSERT SELECT 语句161 UPDATE语句163 DELETE 语句166 从外部数据源中导入和导出数据169 Microsoft Access 170 Microsoft and Sybase SQL Server 171 Personal Oracle7171 总结172 问与答172 校练场173 练习173 第九天创建和操作表174 目标174 CREATE DATABASE 语句174 建立数据库时的选项175 设计数据库176 建立数据字典176 建立关键字段177 CREATE TABLE 语句178 表名179 FIRST NAME179 空值属性180 唯一属性181 表的存储与尺寸的调整183 用一个已经存在的表来建表184 ALTER TABLE 语句185 DROP TABLE 语句186 DROP DATABASE语句187 总结188 问与答188 校练场189 练习190 第10 天 创建视图和索引191 目标191 使用视图192 列的重命名196 SQL 对视图的处理过程197 在SELECT 语句使用约束201 在视图中修改数据201 在视图中修改数据的几个问题203 用应用程序的视图204 删除视图语句207 使用索引207 什么是索引207 使用索引的技巧212 对更多的字段进行索引212 在创建索引时使用UNIQUE 关键字214 索引与归并216 群集簇的使用217 总结218 问与答219 校练场219 练习220 第11 天事务处理控制221 目标221 事务控制221 银行应用程序222 开始事务处理223 结束事务处理225 取消事务处理228 在事务中使用保存点231 总结234 问与答234 校练场235 练习235 第12 天数据库安全236 前提数据库管理员236 流行的数据库产品与安全237 如何让一个数据库变得安全237 Personal Oracle7 与安全238 创建用户238 创建角色240 用户权限242 为安全的目的而使用视图247 总结251 问与答252 校练场252 练习253 第13 天 高级SQL254 目标254 临时表254 Title 257 游标259 创建游标260 打开游标260 使用游标来进行翻阅261 测试游标的状态262 关闭游标263 游标的适用范围264 创建和使用存贮过程265 在存贮过程中使用参数267 删除一个存贮过程269 存贮过程的嵌套270 设计和使用触发机制272 触发机制与事务处理273 使用触发机制时的限制275 触发机制的嵌套275 在选择语句中使用更新和删除275 在执行前测试选择语句276 嵌入型SQL277 静态SQL 与动态SQL277 使用SQL 来编程279 总结280 问与答280 校练场280 练习281 第14 天动态使用SQL 282 目标282 快速入门282 ODBC 282 Personal Oracle 7283 InterBase SQL ISQL 283 Visual C++ 284 Delphi284 设置284 创建数据库285 使用MS QUERY 来完成链接290 将VISUAL C++与SQL 结合使用292 将DELPHI 与SQL 结合使用296 总结302 问与答303 校练场303 练习303 第二周回顾304 第三周概貌305 应用你对SQL 的知识305 第15 天对SQL 语句优化以提高其性能306 目标306 让你的SQL 语句更易读307 全表扫描308 加入一个新的索引309 在查询中各个元素的布局309 过程311 避免使用OR311 OLAP 与OLTP 的比较313 OLTP 的调试313 OLAP 的调试314 批量载入与事务处理进程314 删除索引以优化数据的载入316 经常使用COMMIT 来让DBA 走开316 在动态环境中重新生成表和索引317 数据库的调整319 性能的障碍322 内置的调整工具323 总结323 问与答324 校练场324 练习324 第16 天用视图从数据字典中获得信息326 目标326 数据字典简介326 用户的数据字典327 数据字典中的内容327 Oracle 的数据字典328 Sybase 的数据字典328 ORACLE 数据字典的内部结构328 用户视图328 系统数据库管理员视图336 数据库对象339 数据库的生长343 动态执行视图347 总结349 问与答349 校练场350 练习350 第17 天使用SQL 来生成SQL 语句351 目标351 使用SQL 来生成SQL 语句的目的351 几个SQL*PLUS 命令352 SET ECHO ON/OFF353 SET FEEDBACK ON/OFF353 SET HEADING ON/OFF 353 SPOOL FILENAME/OFF353 START FILENAME354 ED FILENAME354 计算所有的表中的行数354 为多个用户赋予系统权限359 将你的表的权限赋予其它的用户361 在载入数据时解除对数的约束363 一次创建多个同义字364 为你的表创建视图368 在一个计划中清除其所有的表的内容369 使用SQL 来生成SHELL 脚本371 再建表和索引372 总结373 问与答373 校练场373 练习374 第18 天PL/SQL 简介376 目标376 入门376 在PL/SQL 中的数据类型377 字符串类型377 数值数据类型378 二进制数据类型378 期数据类型378 逻辑数据类型378 ROWID379 PL/SQL 块的结构379 注释380 DECLARE 部分380 变量声明380 常量定义381 指针定义381 %TYPE 属性382 %ROWTYPE 属性382 %ROWCOUNT 属性383 Procdure 部分383 BEGIN … … END383 指针控制命令384 条件语句386 LOOPS 循环387 EXCEPTION 部分390 激活EXCEPTION 异常390 异常的处理391 将输入返回给用户392 在PL/SQL 中的事务控制393 让所有的事在一起工作394 示例表及数据394 一个简单的PL/SQL 语句块395 又一个程序398 存储过程包和触发机制403 总结406 问与答407 校练场407 练习407 第19 天TRANSACT-SQL 简介408 目标408 TRANSACT-SQL 概貌408 对ANSI SQL 的扩展408 谁需要使用TRANSACT-SQL409 TRANSACT-SQL 的基本组件409 数据类型409 使用TRANSACT-SQL 来访问数据库411 BASEBALL 数据库411 定义局部变量414 定义全局变量414 使用变量415 PRINT 命令417 流控制417 BEGIN … … END 语句418 IF … … ELSE 语句418 EXIST 条件421 WHILE 循环422 使用WHILE 循环在表中翻阅424 TRANSACT-SQL 中的配符426 使用COMPUTE 来生成摘要报告426 期转换427 SQL SERVER 的诊断工具— — SET 命令427 总结428 问与答428 校练场429 练习429 第20 天SQL*PLUS 430 目标430 简介430 SQL*PLUS 缓存430 DESCRIBE 命令435 SHOW 命令436 文件命令438 SAVE GET EDIT 命令438 运行一个文件439 查询的假脱机输出440 SET 命令442 LOGINSQL 文件445 CLEAR 命令446 将你的输出格式化446 TTITLE 与BTITLE446 格式化列COLUMN HEADING FORMAT 447 报表与分类汇总449 BREAK ON449 COMPUTE450 在SQL*PLUS 中使用变量453 DEFINE 454 ACCEPT 455 NEW_VALUE457 DUAL 表458 DECODE 函数459 期转换462 运行一系列的SQL 文件465 在你的SQL 脚本中加入注释466 高级报表467 总结469 问与答469 校练场469 练习470 第21 天常见的SQL 错误及解决方法471 目标471 介绍471 常见的错误471 Table or View Does Not Exist471 Invalid Username or Password 472 FROM Keyword Not Specified473 Group Function Is Not Allowed Here 474 Invalid Column Name475 Missing Keyword 475 Missing Left Parenthesis 476 Missing Right Parenthesis 477 Missing Comma478 Column Ambiguously Defined 478 Not Enough Arguments for Function480 Not Enough Values481 Integrity Constraint Violated--Parent Key Not Found 482 Oracle Not Available 483 Inserted Value Too Large for Column 483 TNS:listener Could Not Resolve SID Given in Connect Descriptor 484 Insufficient Privileges During Grants484 Escape Character in Your Statement--Invalid Character 485 Cannot Create Operating System File 485 Common Logical Mistakes485 Using Reserved Words in Your SQL statement 486 The Use of DISTINCT When Selecting Multiple Columns487 Dropping an Unqualified Table 487 The Use of Public Synonyms in a Multischema Database488 The Dreaded Cartesian Product 488 Failure to Enforce File System Structure Conventions 489 Allowing Large Tables to Take Default Storage Parameters489 Placing Objects in the System Tablespace490 Failure to Compress Large Backup Files 491 Failure to Budget System Resources 491 Preventing Problems with Your Data491 Searching for Duplicate Records in Your Database491 总结491 校练场492 练习492 第三周回顾494 附件A 在SQL 中的常见术语495 ALTER DATABASE495 ALTER USER495 BEGIN TRANSACTION 495 CLOSE CURSOR495 COMMIT TRANSACTION496 CREATE DATABASE496 CREATE INDEX496 CREATE PROCEDURE496 CREATE TABLE497 CREATE TRIGGER497 CREATE USER497 CREATE VIEW497 DEALLOCATE CURSOR498 DROP DATABASE498 DROP INDEX498 DROP PROCEDURE498 DROP TABLE498 DROP TRIGGER 499 DROP VIEW499 EXECUTE499 FETCH499 FROM499 GRANT500 GROUP BY500 HAVING500 INTERSECT500 ORDER BY500 ROLLBACK TRANSACTION 500 REVOKE500 SELECT501 SET TRANSACTION501 UNION501 WHERE501 *501 附件B 在第14 天中的C++源代码清单502 附件 C 第14 天中的Delphi 源代码清单521 附件D 参考内容524 书524 Developing Sybase Applications 524 Sybase Developer's Guide 524 Microsoft SQL Server 65 Unleashed, 2E 524 Teach Yourself Delphi in 21 Days 524 Delphi Developer's Guide 524 Delphi Programming Unleashed 525 Essential Oracle 72 525 Developing Personal Oracle7 for Windows 95 Applications 525 Teach Yourself C++ Programming in 21 Days 525 Teach Yourself Tansact-SQL in 21 Days 525 Teach Yourself PL/SQL in 21 Days 525 杂志526 DBMS526 Oracle Magazine526 SQL 的互联网资源526 附件E ACSLL 码表527 附件F 问题与练习答案533 第一天SQL 简介533 问题答案533 练习答案533 第二天查询— — SELECT 语句的使用533 问题答案533 练习答案534 第三天表达式条件语句与运算535 问题答案535 练习答案535 第四天函数对获得数据的进一步处理536 问题答案536 练习答案537 第五天SQL 中的子句538 问题答案538 练习答案538 第六天表的联接540 问题答案540 练习答案541 第7 天子查询内嵌的SELECT 语句542 问题答案542 练习答案544 第八天操作数据544 问题答案544 练习答案546 第九天创建和操作表546 问题答案546 练习答案548 第10 天 创建视图和索引549 问题答案549 练习答案550 第11 天事务处理控制550 问题答案550 练习答案551 第12 天数据库安全552 问题答案552 练习答案552 第13 天 高级SQL553 问题答案553 练习答案553 第14 天动态使用SQL 554 问题答案554 练习答案554 第15 天对SQL 语句优化以提高其性能555 问题答案555 练习答案555 第16 天用视图从数据字典中获得信息557 问题答案557 练习答案557 第17 天使用SQL 来生成SQL 语句558 问题答案558 练习答案560 第18 天PL/SQL 简介561 问题答案561 练习答案561 第19 天TRANSACT-SQL 简介562 问题答案562 练习答案562 第20 天SQL*PLUS 563 问题答案563 练习答案563 第21 天常见的SQL 错误及解决方法564 问题答案564 练习答案565
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值