SQL

来源:互联网 发布:转录组数据上传geo 编辑:程序博客网 时间:2024/06/06 11:47

这个月又结束了,自己啃的几本厚书,还都没看完。看到前桌的DBA的一本书–《SQL必知必会》,挺薄的,就想用来完成作业。仔细想想,工作中经常用到SQL,因自己不是科班出身的,一直没有系统的学习过,就把其中的知识点集中整理一下,因为这本书很有很多很基础的东西,故本书只是检些知识点说明,文章是按书的章节来的。
1、基础
Database:保存数据的容器
DBMS: database management system数据库管理系统
Table : 是一种结构化的文件,可以用来存储某种特定类型的数据。
Schema:关于数据和表的布局及特性的信息
SQL: Structured Query Language
标准SQL由ANSI标准委员会管理
扩展PL/SQL Transact_SQL
SQL 书写规范:关键字大写 ,列名和表名小写

2、检索数据
指定检索的数量:
–Sql SERVER
SELECT TOP 5 prod_name FROM p;
–ORACLE
SELECT prod_name FROM p WEHRE ROWNUM<=5;
–MySQl
SELECT prod_name FROM p LIMIT 5;

3、排序检索数据
排序
其实,检索出的数据并不是随机显示的。如果不排序,数据一般将以它在底层表中出现的顺序显示,这有可能是数据最初添加到表中的顺序。但是,如果数据随后进行过更新或删除,那么这个顺序将会受到DBMS重用回收存储空间的方式的影响。因此,如果不明确控制的话,则最终的结果不能(也不应该)依赖该排序顺序。关系数据库设计理论认为,如果不明确规定排序顺序,则不应该假定检索出的数据的顺序有任何意。

在对文本性数据进行排序时,A与a相同吗?a位于B之前,还是Z之后?这些问题不是理论问题,其答案取决于数据库的设置方式。
在字典(dictionary)排序顺序中,A被视为与a相同,这是大多数数据库管理系统的默认行为。但是,许多DBMS允许数据库管理员在需要时改变这种行为(如果你的数据库包含大量外语字符,可能必须这样做)。
这里的关键问题是,如果确实需要改变这种排序顺序,用简单的ORDER BY子句可能做不到。你必须请求数据库管理员的帮助。

4、过滤数据
提示:有多少个0?
你在练习这个示例时,会发现显示的结果可能是3.49、3.490、3.4900等。出现这样的情况,往往是因为DBMS指定了所使用的数据类型及其默认行为。所以,如果你的输出可能与书上的有点不同,不必焦虑,毕竟从数学角度讲,3.49和3.4900是一样的。
创建表时,表设计人员可以指定其中的列能否不包含值。在一个列不包含值时,称其包含空值NULL。
无值(no value),它与字段包含0、空字符串或仅仅包含空格不同。
确定值是否为NULL,不能简单地检查是否= NULL。SELECT语句有一个特殊的WHERE子句,可用来检查具有NULL值的列。这个WHERE子句就是IS
NULL子句。其语法如下:
输入
SELECT prod_name
FROM Products
WHERE prod_price IS NULL;

5 、高级数据过滤
用来联结或改变WHERE子句中的子句的关键字,也称为逻辑操作符(logical operator)。
and 的优先级大于or
or 和in 有些相似

6、用通配符进行过滤
通配符(wildcard):用来匹配值的一部分的特殊字符。
搜索模式(search pattern):由字面值、通配符或两者组合构成的搜索条件。

通配符本身实际上是SQL的WHERE子句中有特殊含义的字符,SQL支持几种通配符。为在搜索子句中使用通配符,必须使用LIKE操作符。LIKE指示DBMS,后跟的搜索模式利用通配符匹配而不是简单的相等匹配进行比较。

7、谓词(predicate)
操作符何时不是操作符?答案是,它作为谓词时。从技术上说,LIKE是谓词而不是操作符。虽然最终的结果是相同的,但应该对此术语有所
了解,以免在SQL文献或手册中遇到此术语时不知所云。

SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE ‘Fish%’;
需要特别注意,除了能匹配一个或多个字符外,%还能匹配0个字符。%代表搜索模式中给定位置的0个、1个或多个字符。
说明:请注意后面所跟的空格
包括Access在内的许多DBMS都用空格来填补字段的内容。例如,如果某列有50个字符,而存储的文本为Fish bean bag toy(17个字符),则为填满该列需要在文本后附加33个空格。这样做一般对数据及其使用没有影响,但是可能对上述SQL语句有负面影响。子句WHERE
prod_name LIKE ‘F%y’只匹配以F开头、以y结尾的prod_name。如果值后面跟空格,则不是以y结尾,所以Fish bean bag toy就不会检索出
来。简单的解决办法是给搜索模式再增加一个%号:’F%y%’还匹配y之后的字符(或空格)。更好的解决办法是用函数去掉空格。

8、函数
与几乎所有DBMS都等同地支持SQL语句(如SELECT)不同,每一个DBMS都有特定的函数。事实上,只有少数几个函数被所有主要的DBMS等同地支持。虽然所有类型的函数一般都可以在每个DBMS中使用,但各个函数的名称和语法可能极其不同。
使用或是不使用也没有对错之分。如果你决定使用函数,应该保证做好代码注释,以
便以后你(或其他人)能确切地知道所编写的SQL代码的含义。

9、视图
视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。
注:项目经验,视图会消耗数据库资源。
10、存储过程
大多数DBMS将编写存储过程所需的安全和访问权限与执行存储过程所需的安全和访问权限区分开来。这是好事情,即使你不能(或不想)编写自己的存储过程,也仍然可以在适当的时候执行别的存储过程
11、事务处理(transaction processing)
通过确保成批的SQL操作要么完全执行,要么完全不执行,来维护数据库的完整性。
关键字:COMMIT和ROLLBACK
可以在SQL代码中设置任意多的保留点,越多越好。为什么呢?因为保留点越多,你就越能灵活地进行回退。

0 0
原创粉丝点击