检查Oracle数据库中不合理的sql语句数据库教程

时间:2023-01-19 08:03:49 其他范文 收藏本文 下载本文

检查Oracle数据库中不合理的sql语句数据库教程(共9篇)由网友“金宝麻麻”投稿提供,下面是小编为大家整理后的检查Oracle数据库中不合理的sql语句数据库教程,仅供参考,喜欢可以收藏与分享哟!

检查Oracle数据库中不合理的sql语句数据库教程

篇1:检查Oracle数据库中不合理的sql语句数据库教程

oracle|数据|数据库|语句

代码:

select sql_text ,sharable_mem from v$sql where sharable_mem >'100000' order by sharable_mem ;

上面的sql语句是查询shared pool中占用内存超过100K的sql语句,

这个sql可以非常有效的检查出Oracle shared pool中那些严重占用内存的sql,根据我的经验,绝大多数有问题的sql语句都会在这里留下痕迹,通过在这里找出有问题的sql语句并进行修改,再反复运行这个sql脚本,直到所以有问题的sql都处理完毕,这就是对Oracle数据库在sql上面的最好的优化,可以保证不会因为程序员的sql语句问题导致Oracle数据库的性能问题。

共享池主要由库缓冲区(共享SQL区和PL/SQL区)和数据字典缓冲区组成。详细的情况你随便找一本介绍Oracle内存结构的书上面都有讲到。我就不把书上的内容给你打印一遍了,自己去看。

select * from v$sgastat; --显式SGA的状态信息。

有的人写的SQL语句非常复杂,嵌套了好几层,SQL语句本身写的很差,就有可能会占用很大的SQL区域。

其实现实的很多情况是本来不需要那么复杂的sql的时候,由于程序员水平不够,写了那种很糟糕很复杂的sql,造成的数据库性能问题。

另外还有一个常识问题,却很容易被忽略。比如:

代码:

select * from table_name where id = 1;

select * from table_name where id = 2;

对于这种带参数的sql,id = ? 这个地方叫做站位符(Placeholder)。

拿PHP为例,很多人喜欢这样写代码

代码:

$sql = “select * from table_name where id = ”;

$id=1;

$stmt = ociparse($conn,$sql.$id);

ociexecute($stmt);

......

$id = 2;

$stmt = ociparse($conn,$sql.$id);

ociexecute($stmt);

拿Java为例,是这样的:

代码:

String sql = “select * from table_name where id = ”;

Statement stmt = conn.createStatement;

rset = stmt.executeQuery(sql+“1”);

......

rset = stmt.executeQuery(sql+“2”);

这种写法,对于Oracle数据库来说,完全就是两条不同的sql语句,

代码:

select * from table_name where id = 1;

select * from table_name where id = 2;

每次查询都要进行sql语句的执行解析,并且每个sql都会分配一个区域来存放sql解析后的二进制可执行代码,

试想,要是id不同的10万个sql呢?Oracle就会分配10万个sql区域来分别存放10万个这样的id不同的sql语句。对于一个数据库驱动的Web网站这样情况下,SGA开的再大,也会很快被耗尽share pool的,最后报一个ORA-4031错误。数据库就连接不上了,只好重起。

正确的写法应该是:

代码:

$stmt = ociparse($conn,“select * from table_name where id = :id”);

ocibindbyname($stmt,“:id”,&$id, 12);

$id =1;

ociexecute($stmt);

...

$id = 2;

ociexecute($stmt);

代码:

PreparedStatement pstmt = conn.prepareStatement(“select * from table_name where id = ?”);

pstmt.setInt(1,1);

rset = pstmt.executeQuery();

...

pstmt.setInt(1,2);

rset = pstmt.executeQuery();

这样Oracle数据库就知道你实际上用的都是同一条sql语句,会以这样的形式:

select * from table_name where id = :1

解析执行后存放在sql区域里面,当以后再有一样的sql的时候,把参数替换一下,就立刻执行,不需要再解析sql了。既加快了sql执行速度,也不会占有过多SGA的share pool。

可惜的是,很多程序员明知道这个问题,却意识不到问题的严重性,因为上面那种写法,编程的时候很灵活,sql语句可以动态构造,实现起来很容易,后面那种写法,sql语句是写死的,参数不能再变了,编程经常会非常麻烦。

很多数据库的性能问题都是这样造成的。

有兴趣在一个生产系统中,用上面sql检查一下,看看是否选择出来的是否l有很多都是一样的sql语句,只是参数不同,如果是这样的话,就说明程序员的代码写的有问题。

篇2:sql数据库教程

掌握SQL四条最基本的数据操作语句:Insert,Select,Update和Delete,

练掌握SQL是数据库用户的宝贵财 富。在本文中,我们将引导你掌握四条最基本的数据操作语句―SQL的核心功能―来依次介绍比较操作符、选择断言以及三值逻辑。当你完成这些学习后,显然你已经开始算是精通SQL了。

在我们开始之前,先使用CREATE TABLE语句来创建一个表(如图1所示)。DDL语句对数据库对象如表、列和视进行定义。它们并不对表中的行进行处理,这是因为DDL语句并不处理数据库中实际的数据。这些工作由另一类SQL语句―数据操作语言(DML)语句进行处理。

SQL中有四种基本的DML操作:INSERT,SELECT,UPDATE和DELETE。由于这是大多数SQL用户经常用到的,我们有必要在此对它们进行一一说明。在图1中我们给出了一个名为EMPLOYEES的表。其中的每一行对应一个特定的雇员记录。请熟悉这张表,我们在后面的例子中将要用到它。

连接查询

通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型

数据库管理系统的一个标志。

在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在

一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带

来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行

查询。

连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于

将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。

SQL-92标准所定义的FROM子句的连接语法格式为:

FROM join_table join_type join_table

[ON (join_condition)]

其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一

个表操作的连接又称做自连接。

join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比

较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用

的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。

外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)

和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹

配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的

数据行。

交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的

数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑

运算符等构成。

无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接

连接。例如:

SELECT p1.pub_id,p2.pub_id,p1.pr_info

FROM pub_info AS p1 INNER JOIN pub_info AS p2

ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)

(一)内连接

内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分

三种:

1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接

表中的所有列,包括其中的重复列。

2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些

运算符包括>、>=、<=、<、!>、!<和>。

3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询

结果集合中所包括的列,并删除连接表中的重复列。

例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:

SELECT *

FROM authors AS a INNER JOIN publishers AS p

ON a.city=p.city

又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):

SELECT a.*,p.pub_id,p.pub_name,p.country

FROM authors AS a INNER JOIN publishers AS p

ON a.city=p.city

(二)外连接

内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件

的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外

连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。

如下面使用左外连接将论坛内容和作者信息连接起来:

SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b

ON a.username=b.username

下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市:

SELECT a.*,b.*

FROM city as a FULL OUTER JOIN user as b

ON a.username=b.username

(三)交叉连接

交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数

据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等

于6*8=48行。

SELECT type,pub_name

FROM titles CROSS JOIN publishers

ORDER BY type

UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联

合查询。UNION的语法格式为:

select_statement

UNION [ALL] selectstatement

[UNION [ALL] selectstatement][…n]

其中selectstatement为待联合的SELECT查询语句。

ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一

行。

联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语

句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。

在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选

择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类

型,系统将低精度的数据类型转换为高精度的数据类型。

在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:

查询1 UNION (查询2 UNION 查询3)

INSERT语句

用户可以用INSERT语句将一行记录插入到指定的一个表中。例如,要将雇员John Smith的记录插入到本例的表中,可以使用如下语句:

INSERT INTO EMPLOYEES VALUES

('Smith','John','1980-06-10',

'Los Angles',16,45000);

通过这样的INSERT语句,系统将试着将这些值填入到相应的列中。这些列按照我们创建表时定义的顺序排列。在本例中,第一个值“Smith”将填到第一个列LAST_NAME中;第二个值“John”将填到第二列FIRST_NAME中……以此类推。

我们说过系统会“试着”将值填入,除了执行规则之外它还要进行类型检查。如果类型不符(如将一个字符串填入到类型为数字的列中),系统将拒绝这一次操作并返回一个错误信息。

如果SQL拒绝了你所填入的一列值,语句中其他各列的值也不会填入。这是因为SQL提供对事务的支持。一次事务将数据库从一种一致性转移到另一种一致性。如果事务的某一部分失败,则整个事务都会失败,系统将会被恢复(或称之为回退)到此事务之前的状态。

回到原来的INSERT的例子,请注意所有的整形十进制数都不需要用单引号引起来,而字符串和日期类型的值都要用单引号来区别。为了增加可读性而在数字间插入逗号将会引起错误。记住,在SQL中逗号是元素的分隔符。

同样要注意输入文字值时要使用单引号。双引号用来封装限界标识符。

对于日期类型,我们必须使用SQL标准日期格式(yyyy-mm-dd),但是在系统中可以进行定义,以接受其他的格式。当然,临近,请你最好还是使用四位来表示年份。

既然你已经理解了INSERT语句是怎样工作的了,让我们转到EMPLOYEES表中的其他部分:

INSERT INTO EMPLOYEES VALUES

('Bunyan','Paul','1970-07-04',

'Boston',12,70000);

INSERT INTO EMPLOYEES VALUES

('John','Adams','1992-01-21',

'Boston',20,100000);

INSERT INTO EMPLOYEES VALUES

('Smith','Pocahontas','1976-04-06',

'Los Angles',12,100000);

INSERT INTO EMPLOYEES VALUES

('Smith','Bessie','1940-05-02',

'Boston',5,00);

INSERT INTO EMPLOYEES VALUES

('Jones','Davy','1970-10-10',

'Boston',8,45000);

INSERT INTO EMPLOYEES VALUES

('Jones','Indiana','1992-02-01',

'Chicago',NULL,NULL);

在最后一项中,我们不知道Jones先生的工薪级别和年薪,所以我们输入NULL(不要引号),

NULL是SQL中的一种特殊情况,我们以后将进行详细的讨论。现在我们只需认为NULL表示一种未知的值。

有时,像我们刚才所讨论的情况,我们可能希望对某一些而不是全部的列进行赋值。除了对要省略的列输入NULL外,还可以采用另外一种INSERT语句,如下:

INSERT INTO EMPLOYEES(

FIRST_NAME, LAST_NAME,

HIRE_DATE, BRANCH_OFFICE)

VALUE(

'Indiana','Jones',

'1992-02-01','Indianapolis');

这样,我们先在表名之后列出一系列列名。未列出的列中将自动填入缺省值,如果没有设置缺省值则填入NULL。请注意我们改变了列的顺序,而值的顺序要对应新的列的顺序。如果该语句中省略了FIRST_NAME和LAST_NAME项(这两项规定不能为空),SQL操作将失败。

让我们来看一看上述INSERT语句的语法图:

INSERT INTO table

[(column { ,column})]

VALUES

(columnvalue [{,columnvalue}]);

和前一篇文章中一样,我们用方括号来表示可选项,大括号表示可以重复任意次数的项(不能在实际的SQL语句中使用这些特殊字符)。VALUE子句和可选的列名列表中必须使用圆括号。

SELECT语句

SELECT语句可以从一个或多个表中选取特定的行和列。因为查询和检索数据是数据库管理中最重要的功能,所以SELECT语句在SQL中是工作量最大的部分。实际上,仅仅是访问数据库来分析数据并生成报表的人可以对其他SQL语句一窍不通。

SELECT语句的结果通常是生成另外一个表。在执行过程中系统根据用户的标准从数据库中选出匹配的行和列,并将结果放到临时的表中。在直接SQL(direct SQL)中,它将结果显示在终端的显示屏上,或者将结果送到打印机或文件中。也可以结合其他SQL语句来将结果放到一个已知名称的表中。

SELECT语句功能强大。虽然表面上看来它只用来完成本文第一部分中提到的关系代数运算“选择”(或称“限制”),但实际上它也可以完成其他两种关系运算―“投影”和“连接”,SELECT语句还可以完成聚合计算并对数据进行排序。

SELECT语句最简单的语法如下:

SELECT columns FROM tables;

当我们以这种形式执行一条SELECT语句时,系统返回由所选择的列以及用户选择的表中所有指定的行组成的一个结果表。这就是实现关系投影运算的一个形式。

让我们看一下使用图1中EMPLOYEES表的一些例子(这个表是我们以后所有SELECT语句实例都要使用的。而我们在图2和图3中给出了查询的实际结果。我们将在其他的例子中使用这些结果)。

假设你想查看雇员工作部门的列表。那下面就是你所需要编写的SQL查询:

SELECT BRANCH_OFFICE FROM EMPLOYEES;

以上SELECT语句的执行将产生如图2中表2所示的结果。

由于我们在SELECT语句中只指定了一个列,所以我们的结果表中也只有一个列。注意结果表中具有重复的行,这是因为有多个雇员在同一部门工作(记住SQL从所选的所有行中将值返回)。要消除结果中的重复行,只要在SELECT语句中加上DISTINCT子句:

SELECT DISTINCT BRANCH_OFFICE

FROM EMPLOYEES;

这次查询的结果如表3所示。

现在已经消除了重复的行,但结果并不是按照顺序排列的。如果你希望以字母表顺序将结果列出又该怎么做呢?只要使用ORDER BY子句就可以按照升序或降序来排列结果:

SELECT DISTINCT BRANCH_OFFICE

FROM EMPLOYEES

ORDER BY BRANCH_OFFICE ASC;

这一查询的结果如表4所示。请注意在ORDER BY之后是如何放置列名BRANCH _OFFICE的,这就是我们想要对其进行排序的列。为什么即使是结果表中只有一个列时我们也必须指出列名呢?这是因为我们还能够按照表中其他列进行排序,即使它们并不显示出来。列名BRANCH_ OFFICE之后的关键字ASC表示按照升序排列。如果你希望以降序排列,那么可以用关键字DESC。

同样我们应该指出ORDER BY子句只将临时表中的结果进行排序;并不影响原来的表。

假设我们希望得到按部门排序并从工资最高的雇员到工资最低的雇员排列的列表。除了工资括号中的内容,我们还希望看到按照聘用时间从最近聘用的雇员开始列出的列表。以下是你将要用到的语句:

SELECT BRANCH_OFFICE,FIRST_NAME,

LAST_NAME,SALARY,HIRE_DATE

FROM EMPLOYEES

ORDER BY SALARY DESC,

HIRE_DATE DESC;

这里我们进行了多列的选择和排序。排序的优先级由语句中的列名顺序所决定。SQL将先对列出的第一个列进行排序。如果在第一个列中出现了重复的行时,这些行将被按照第二列进行排序,如果在第二列中又出现了重复的行时,这些行又将被按照第三列进行排序……如此类推。这次查询的结果如表5所示。

将一个很长的表中的所有列名写出来是一件相当麻烦的事,所以SQL允许在选择表中所有的列时使用*号:

SELECT * FROM EMPLOYEES;

这次查询返回整个EMPLOYEES表,如表1所示。

下面我们对开始时给出的SELECT语句的语法进行一下更新(竖直线表示一个可选项,允许在其中选择一项。):

SELECT [DISTINCT]

(column [{, columns}])| *

FROM table [ {, table}]

[ORDER BY column [ASC] | DESC

[ {, column [ASC] | DESC }]];

定义选择标准

在我们目前所介绍的SELECT语句中,我们对结果表中的列作出了选择但返回的是表中所有的行。让我们看一下如何对SELECT语句进行限制使得它只返回希望得到的行:

SELECT columns FROM tables [WHERE predicates];

WHERE子句对条件进行了设置,只有满足条件的行才被包括到结果表中。这些条件由断言(predicate)进行指定(断言指出了关于某件事情的一种可能的事实)。如果该断言对于某个给定的行成立,该行将被包括到结果表中,否则该行被忽略。在SQL语句中断言通常通过比较来表示。例如,假如你需要查询所有姓为Jones的职员,则可以使用以下SELECT语句:

SELECT * FROM EMPLOYEES

WHERE LAST_NAME = 'Jones';

LAST_NAME = 'Jones'部分就是断言。在执行该语句时,SQL将每一行的LAST_NAME列与“Jones”进行比较。如果某一职员的姓为“Jones”,即断言成立,该职员的信息将被包括到结果表中(见表6)。

使用最多的六种比较

我们上例中的断言包括一种基于“等值”的比较(LAST_NAME = 'Jones'),但是SQL断言还可以包含其他几种类型的比较。其中最常用的为:

等于 =

不等于

小于 <

大于 >

小于或等于 <=

大于或等于 >=

下面给出了不是基于等值比较的一个例子:

SELECT * FROM EMPLOYEES

WHERE SALARY >50000;

这一查询将返回年薪高于$50,000.00的职员(参见表7)。

逻辑连接符

有时我们需要定义一条不止一种断言的SELECT语句。举例来说,如果你仅仅想查看Davy Jones的信息的话,表6中的结果将是不正确的。为了进一步定义一个WHERE子句,用户可以使用逻辑连接符AND,OR和NOT。为了只得到职员Davy Jones的记录,用户可以输入如下语句:

SELECT * FROM EMPLOYEES

WHERE LAST_NAME = 'Jones' AND FIRST_NAME = 'Davy';

在本例中,我们通过逻辑连接符AND将两个断言连接起来。只有两个断言都满足时整个表达式才会满足。如果用户需要定义一个SELECT语句来使得当其中任何一项成立就满足条件时,可以使用OR连接符:

SELECT * FROM EMPLOYEES

WHERE LAST_NAME = 'Jones' OR LAST_NAME = 'Smith';

有时定义一个断言的最好方法是通过相反的描述来说明。如果你想要查看除了Boston办事处的职员以外的其他所有职员的信息时,你可以进行如下的查询:

SELECT * FROM EMPLOYEES

WHERE NOT(BRANCH_OFFICE = 'Boston');

关键字NOT后面跟着用圆括号括起来的比较表达式。其结果是对结果取否定。如果某一职员所在部门的办事处在Boston,括号内的表达式返回true,但是NOT操作符将该值取反,所以该行将不被选中。

断言可以与其他的断言嵌套使用。为了保证它们以正确的顺序进行求值,可以用括号将它们括起来:

SELECT * FROM EMPLOYEES

WHERE (LAST_NAME = 'Jones'

AND FIRST_NAME = 'Indiana')

OR (LAST_NAME = 'Smith'

AND FIRST_NAME = 'Bessie');

SQL沿用数学上标准的表达式求值的约定―圆括号内的表达式将最先进行求值,其他表达式将从左到右进行求值。

篇3:数据库经典SQL语句

下列语句部分是Mssql语句,不可以在access中使用。

SQL分类:

DDL―数据定义语言(CREATE,ALTER,DROP,DECLARE)

DML―数据操纵语言(SELECT,DELETE,UPDATE,INSERT)

DCL―数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)

首先,简要介绍基础语句:

1、说明:创建数据库

CREATE DATABASE database-name

2、说明:删除数据库

drop database dbname

3、说明:备份sql server

--- 创建备份数据的 device

USE master

EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat'

--- 开始备份

BACKUP DATABASE pubs TO testBack

4、说明:创建新表

create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)

根据已有的表创建新表:

A:create table tab_new like tab_old (使用旧表创建新表)

B:create table tab_new as select col1,col2? from tab_old definition only

5、说明:

删除新表: tabname

6、说明:

增加一个列:Alter table tabname add column col type

注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。

7、说明:

添加主键:Alter table tabname add primary key(col)

说明:

删除主键:Alter table tabname drop primary key(col)

8、说明:

创建索引:create [unique] index idxname on tabname(col?.)

删除索引:drop index idxname

注:索引是不可更改的,想更改必须删除重新建。

9、说明:

创建视图:create view viewname as select statement

删除视图:drop view viewname

10、说明:几个简单的基本的sql语句

选择:select * from table1 where 范围

插入: into table1(field1,field2) values(value1,value2)

删除: from table1 where 范围

更新:table1 set field1=value1 where 范围

查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!

排序:select * from table1 order by field1,field2 [desc]

总数:select count * as totalcount from table1

求和:select sum(field1) as sumvalue from table1

平均:selectavg(field1) as avgvalue from table1

最大:select max(field1) as maxvalue from table1

最小:select min(field1) as minvalue from table1

11、说明:几个高级查询运算词

A: UNION 运算符

UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。

B: EXCEPT 运算符

EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。

C: INTERSECT 运算符

INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。

注:使用运算词的几个查询结果行必须是一致的。

12、说明:使用外连接

A、left outer join:

左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。

SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

B:right outer join:

右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。

C:full outer join:

全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。

其次,大家来看一些不错的sql语句

1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)

法一:select * into b from a where 11

法二:select top 0 * into b from a

2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)

into b(a, b, c) select d,e,f from b;

3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)

into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件

例子:..from b in '“&Server.MapPath(”.“)&”data.mdb“ &”' where..

4、说明:子查询(表名1:a 表名2:b)

select a,b,c from a where a IN (select d from b ) 或者: selecta,b,c from a where a IN (1,2,3)

5、说明:显示文章、提交人和最后回复时间

selecta.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

6、说明:外连接查询(表名1:a 表名2:b)

selecta.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

7、说明:在线视图查询(表名1:a )

select * from (SELECT a,b,c FROM a) T where t.a>1;

8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括

select * from table1 where time between time1 and time2

select a,b,c, from table1 where a not between 数值1 and 数值2

9、说明:in 的使用方法

select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

10、说明:两张关联表,删除主表中已经在副表中没有的信息

from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )

11、说明:四表联查问题:

select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....

12、说明:日程安排提前五分钟提醒

SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate)>5

13、说明:一条sql语句搞定数据库分页

select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段

14、说明:前10条记录

select top 10 * form table1 where 范围

15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)

selecta,b,c from tablename ta where a=(select max(a) from tablenametb where tb.b=ta.b)

16、说明:包括所有在TableA中但不在TableB和TableC中的行并消除所有重复行而派生出一个结果表

(select a from tableA ) except (select a from tableB) except (select a from tableC)

17、说明:随机取出10条数据

select top 10 * from tablename order by newid()

18、说明:随机选择记录

selectnewid()

19、说明:删除重复记录

篇4:数据库经典SQL语句

数据库基本SQL语句大全

数据库基本----SQL

语句大全

一、基础

1、说明:创建数据库

Create DATABASE database-name

2、说明:删除数据库

drop database dbname

3、说明:备份sql server

--- 创建 备份数据的 device

USE master

EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat' --- 开始 备份

BACKUP DATABASE pubs TO testBack

4、说明:创建新表

create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)

根据已有的表创建新表:

A:create table tab_new like tab_old (使用旧表创建新表)

B:create table tab_new as select col1,col2? from tab_old definition only

5、说明:删除新表

tabname

6、说明:增加一个列

Alter table tabname add column col type

注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。

7、说明:添加主键: Alter table tabname add primary key(col) 说明:删除主键: Alter table tabname drop primary key(col)

8、说明:创建索引:create [unique] index idxname on tabname(col?.) 删除索引:drop index idxname

注:索引是不可更改的,想更改必须删除重新建。

9、说明:创建视图:create view viewname as select statement 删除视图:drop view viewname

10、说明:几个简单的基本的

sql语句

选择:select * from table1 where 范围

插入: into table1(field1,field2) values(value1,value2)

删除: from table1 where 范围

更新:table1 set field1=value1 where 范围

查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!

排序:select * from table1 order by field1,field2 [desc]

总数:select count as totalcount from table1

求和:select sum(field1) as sumvalue from table1

平均:select avg(field1) as avgvalue from table1

最大:select max(field1) as maxvalue from table1

最小:select min(field1) as minvalue from table1

11、说明:几个高级查询运算词

A: UNION 运算符

UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除

重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。

B: EXCEPT 运算符

EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。 C: INTERSECT 运算符

INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复

行。注:使用运算词的几个查询结果行必须是一致的。

12、说明:使用外连接

A、left outer join:

左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。

SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c B:right outer join:

右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。 C:full outer join:

全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。

二、提升

1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)

法一:select * into b from a where 11

法二:select top 0 * into b from a

2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)

into b(a, b, c) select d,e,f from b;

3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)

into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件 例子:..from b in '“&Server.MapPath(”.“&”data.mdb“ &”' where..

4、说明:子查询(表名1:a 表名2:b)

select a,b,c from a where a IN (select d from b或者: select a,b,c from a where a IN (1,2,3)

5、说明:显示文章、提交人和最后回复时间

select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

6、说明:外连接查询(表名1:a 表名2:b)

select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

7、说明:在线视图查询(表名1:a

select * from (Select a,b,c FROM a) T where t.a >1;

8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括

select * from table1 where time between time1 and time2

select a,b,c, from table1 where a not between 数值1 and 数值2

9、说明:in 的使用方法

select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

10、说明:两张关联表,删除主表中已经在副表中没有的信息

from table1 where not exists ( select * from table2 where table1.field1=table2.field1

11、说明:四表联查问题:

select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where ..

12、说明:日程安排提前五分钟提醒

select * from 日程安排 where datediff('minute',f开始时间,getdate())>5

13、说明:一条sql 语句搞定数据库分页

select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段

14

、说明:前10条记录

select top 10 * form table1 where 范围

15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)

select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表

(select a from tableAexcept (select a from tableB) except (select a from tableC)

17、说明:随机取出10条数据

select top 10 * from tablename order by newid()

18、说明:随机选择记录

select newid()

19、说明:删除重复记录

Delete from tablename where id not in (select max(id) from tablename group by col1,col2,)

20、说明:列出数据库里所有的表名

select name from sysobjects where type='U'

21、说明:列出表里的所有的

select name from syscolumns where id=object_id('TableName')

22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。

select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end)

FROM tablename group by type

显示结果:

type vender pcs

电脑 A 1

电脑 A 1

光盘 B 2

光盘 A 2

手机 B 3

手机

C 3

23、说明:初始化表table1

TRUNCATE TABLE table1

24、说明:选择从10到15的记录

select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc

三、技巧

1、1=1,1=2的使用,在SQL语句组合时用的较多

“where 1=1” 是表示选择全部“where 1=2”全部不选,

如:

if @strWhere !='

begin

set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere

end

else

begin

set @strSQL = 'select count(*) as Total from [' + @tblName + ']'end

我们可以直接写成

set @strSQL = 'select count(*) as Total from [' + @tblName + '] where 1=1 安定 '+ @strWhere

2、收缩数据库

--重建索引

DBCC REINDEX

DBCC INDEXDEFRAG

--收缩数据和日志

DBCC SHRINKDB

DBCC SHRINKFILE

3、压缩数据库

dbcc shrinkdatabase(dbname)

4、转移数据库给新用户以已存在用户权限

exec sp_change_users_login 'update_one','newname','oldname'

go

篇5:数据库经典SQL语句

常用SQL语句大全

一、基础

1

、说明:创建数据库

CREATE DATABASE database-name

2、说明:删除数据库

DROP database dbname

3、说明:备份sql server

--- 创建 备份数据的 device

USE master

EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat' --- 开始 备份

BACKUP DATABASE pubs TO testBack

4、说明:创建新表

create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根据已有的表创建新表:

A:create table tab_new like tab_old (使用旧表创建新表)

B:create table tab_new as select col1,col2? from tab_old definition only

5、说明:删除新表

DROP table tabname

6、说明:增加一个列

Alter table tabname add column col type

注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。

7、说明:添加主键: Alter table tabname add primary key(col)

说明:删除主键: Alter table tabname DROP primary key(col)

8、说明:创建索引:create [unique] index idxname on tabname(col?.) 删除索引:DROP index idxname

注:索引是不可更改的,想更改必须删除重新建。

9、说明:创建视图:create view viewname as select statement

删除视图:DROP view viewname

10、说明:几个简单的基本的sql语句

选择:select * from table1 where 范围

插入: into table1(field1,field2) values(value1,value2)

删除: from table1 where 范围

更新:table1 set field1=value1 where 范围

查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!

排序:select * from table1 order by field1,field2 [desc]

总数:select count as totalcount from table1

求和:select sum(field1) as sumvalue from table1

平均:select avg(field1) as avgvalue from table1

最大:select max(field1) as maxvalue from table1

最小:select min(field1) as minvalue from table1

11、说明:几个高级查询运算词

A: UNION 运算符

UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。

B: EXCEPT 运算符

EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。

C: INTERSECT 运算符

INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。

注:使用运算词的几个查询结果行必须是一致的。

12、说明:使用外连接

A、left outer join:

左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。 SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c B:right outer join:

右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。

C:full outer join:

全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。

二、提升

1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)

法一:select * into b from a where 11

法二:select top 0 * into b from a

2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)

into b(a, b, c) select d,e,f from b;

3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用) into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件 例子:..from b in '“&Server.MapPath(”.“)&”data.mdb“ &”' where..

4、说明:子查询(表名1:a 表名2:b)

select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)

5、说明:显示文章、提交人和最后回复时间

select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

6、说明:外连接查询(表名1:a 表名2:b)

select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

7、说明:在线视图查询(表名1:a )

select * from (SELECT a,b,c FROM a) T where t.a >1;

8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括

select * from table1 where time between time1 and time2

select a,b,c, from table1 where a not between 数值1 and 数值2

9、说明:in 的使用方法

select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

10、说明:两张关联表,删除主表中已经在副表中没有的信息

from table1 where not exists ( select * from table2 where

table1.field1=table2.field1 )

11、说明:四表联查问题:

select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....

12、说明:日程安排提前五分钟提醒

SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate)>5

13、说明:一条sql 语句搞定数据库分页

select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段

14、说明:前10条记录

select top 10 * form table1 where 范围

15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)

select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表

(select a from tableA ) except (select a from tableB) except (select a from tableC)

17、说明:随机取出10条数据

select top 10 * from tablename order by newid()

18、说明:随机选择记录

select newid()

19、说明:删除重复记录

Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)

20、说明:列出数据库里所有的表名

select name from sysobjects where type='U'

21、说明:列出表里的所有的

select name from syscolumns where id=object_id('TableName')

22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。

select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type

显示结果:

type vender pcs

电脑 A 1

电脑 A 1

光盘 B 2

光盘 A 2

手机 B 3

手机 C 3

23、说明:初始化表table1

TRUNCATE TABLE table1

24、说明:选择从10到15的记录

select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc

三、技巧

1、1=1,1=2的使用,在SQL语句组合时用的较多

“where 1=1” 是表示选择全部“where 1=2”全部不选,

如:

if @strWhere !=''

begin

set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere

end

else

begin

set @strSQL = 'select count(*) as Total from [' + @tblName + ']'

end

我们可以直接写成

set @strSQL = 'select count(*) as Total from [' + @tblName + '] where 1=1 安定 '+ @strWhere

2、收缩数据库

--重建索引

DBCC REINDEX

DBCC INDEXDEFRAG

--收缩数据和日志

DBCC SHRINKDB

DBCC SHRINKFILE

3、压缩数据库

dbcc shrinkdatabase(dbname)

4、转移数据库给新用户以已存在用户权限

exec sp_change_users_login 'update_one','newname','oldname'

go

5、检查备份集

RESTORE VERIFYONLY from disk='E:dvbbs.bak'

6、修复数据库

ALTER DATABASE [dvbbs] SET SINGLE_USER

GO

DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK GO

ALTER DATABASE [dvbbs] SET MULTI_USER

GO

7、日志清除

SET NOCOUNT ON

DECLARE @LogicalFileName sysname,

@MaxMinutes INT,

@NewSize INT

USE tablename -- 要操作的数据库名

SELECT @LogicalFileName = 'tablename_log', -- 日志文件名

@MaxMinutes = 10,-- Limit on time allowed to wrap log.

@NewSize = 1-- 你想设定的日志文件的大小(M)

-- Setup / initialize

DECLARE @OriginalSize int

SELECT @OriginalSize = size

FROM sysfiles

WHERE name = @LogicalFileName

SELECT 'Original Size of ' + db_name() + ' LOG is ' +

CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +

CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'

FROM sysfiles

WHERE name = @LogicalFileName

CREATE TABLE DummyTrans

(DummyColumn char (8000) not null)

DECLARE @CounterINT,

@StartTime DATETIME,

@TruncLog VARCHAR(255)

SELECT @StartTime = GETDATE(),

@TruncLog = 'BACKUP LOG ' + db_name() + ' WITH

TRUNCATE_ONLY'

DBCC SHRINKFILE (@LogicalFileName, @NewSize)

EXEC (@TruncLog)

-- Wrap the log if necessary.

WHILE @MaxMinutes >DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired

AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)

AND (@OriginalSize * 8 /1024) >@NewSize

BEGIN -- Outer loop.

SELECT @Counter = 0

WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000)) BEGIN -- update

篇6:有关Oracle 数据库连接查询SQL语句

内连接(inner join)。

外连接:

全连接(full join)、左连接(left join)、右连接(right join)。

交叉联接(cross join)。

外连接与内连接不一样,外连接返回的查询结果中不仅包含符合条件的行,还包括左表(左外连接),右表(右外连接)或者两个连接表(全外连接)中的所有不符合条件的数据行。

1.左连接 (left [outer] join)

左外连接就是将左表的所有数据分别于右表的每条数据进行连接组合,返回的结果除内连接的数据外,还有左表中不符合条件的数据,并在右表的相应列中填上null值。

SQL语句如下:

select * from mt_pb_org o left join mt_pb_orgframe f on o.PB_ORGFRAMEID = f.PB_ORGFRAMEID;

等价语句:

select * from mt_pb_org o,mt_pb_orgframe f where o.pb_orgframeid = f.pb_orgframeid(+);

2.右连接 (right [outer] join)

右外连接就是将右表中的所有数据分别与左表的每条数据进行连接组合,返回的结果除了内连接的数据外,还有右表中不符合条件的数据,并在左表相应的列中填上null值。

SQL语句如下:

select * from mt_pb_org o right join mt_pb_orgframe on o.pb_orgframeid = f.pb_orgframeid;

等价语句:

select * from mt_pb_org o,mt_pb_orgframe f where o.pb_orgframeid(+) = f.pb_orgframeid;

3.全外连接 (full [outer] join)

全外连接就是将左表的所有数据分别与右表的每条数据进行连接组合,返回的结果除了内连接的数据外,还有两个表中不符合条件的数据,并在左表或者右表的相应列中填上null值。

SQL语句如下:

select * from mt_pb_org o full join mt_pb_orgframe o.pb_orgframeid = f.pb_orgframeid;

4.交叉连接(cross join)

交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

SQL语句如下:

select * from mt_pb_org o cross join mt_pb_orgframe f;

篇7:Oracle 和 MIcrosoft SQL 的不同数据库教程

oracle

还是有很多的不同,如下:www.bristle.com/Tips/SQL.htm#Oracle%20Tips

Table of Contents:Oracle Tips SQL Tips SELECT * and more Materialized View PL/SQL Tips SQL Navigator Tips See Also MS SQL Server Tips SQL Tips Dynamic SQL in a Stored Procedure SQL Enterprise Manager Tips Keyboard Shortcuts SQL Generating SQL See Also Differences Between Oracle and MS SQL Server Concepts and Terminology Data Types Limits Operators Built-In Functions Differences in SQL Syntax Differences in SQL Semantics Differences in Managing Databases Differences in Managing Database Objects Differences in Managing Users Differences in Integration with MS ADO, RDO, etc. Miscellaneous Differences See Also Details of Tips:Oracle TipsSQL Tips

This section contains tips on standard SQL (Structured Query Language) statements in Oracle.

SELECT * and more

Last Updated: 6/6/

Applies to: Oracle 7.3, 8 (and probably earlier versions)

To select all columns of a table:

select * from table

However, to select all real columns, plus a pseudo-column like “user”:

select table.*, user from table

The following does not work:

select *, user from table

--Fred

Materialized View

Last Updated: 1/7/

Applies to: Oracle 8+

Oracle 8i introduced a new feature called a “materialized view”. You define it just like any other view, except that you add the keyword MATERIALIZED:

CREATE MATERIALIZED VIEW view_name

A materialized view is like a combination of a table and a view. Like a view, it is defined as a logical view into the data of one or more tables. When you update the tables, subsequent queries of the view see the updated data. However, like a table, its data is stored in the database. Also, like a table, it is faster if you define indexes for it.

A regular view is stored as a mapping of data from tables. When you modify the data in the tables, the view is completely ignored. When you access the view, it joins the data currently in the tables, and returns the data you requested. A materialized view is stored as such a mapping along with a copy of the actual data from the tables. When you modify the data in the tables, the view's copy of the data is also updated. When you access the view, the data is drawn directly from the copy.

Thus a materialized view makes table updates a little slower, but makes view queries much faster. It also consumes additional space in the database.

You could accomplish the same effect by defining an additional table instead of the view, and using triggers on the component tables to update it each time they are changed. However, using a materialized view is more convenient, more efficient, and clearer to the next person who has to maintain your database.

Thanks to Andy Glick for sending me a sample of a materialized view from his application!

--Fred

PL/SQL Tips

This section contains tips on PL/SQL statements -- the Oracle “procedural language” superset of SQL that you use to write stored procedures.

SQL Navigator Tips

This section contains tips on the SQL Navigator tool by Quest Systems. It is a graphical front end to the Oracle database, allowing you to create, delete, view, and modify all Oracle objects: tables, views, stored procedures, etc.

See Also

Last Updated: 6/6/1999

Applies to: Oracle 7.3+

The following are good sources of info about Oracle:

Koch, George, and Kevin Loney. Oracle 8, The Complete Reference. Berkeley CA: For Oracle Press by Osborne McGraw-Hill, . ISBN 0-07-882396-X.

This book includes introductory database concepts as well as a complete reference to Oracle SQL and PL/SQL statements. The companion CD contains a complete copy of the book, so you can read it on-line, search it, etc. Any of the O'Reilly books. I've been very impressed by all of the O'Reilly books since my early Unix and X-Windows days in the 80's, and they have a complete series on Oracle, covering PL/SQL, the standard packages, etc.

--Fred

MS SQL Server TipsSQL Tips

This section contains tips on SQL (Structured Query Language) statements in MS SQL Server.

Dynamic SQL in a Stored Procedure

Last Updated: 2/7/1999

Applies to: MS SQL Server 6.5+

A typical tradeoff for a database application is dynamic SQL (SQL commands embedded in the application -- for flexibility) vs. stored procedures (pre-compiled SQL procedures stored in the database and invoked by name from the application -- for speed and control over what SQL statements get executed). However, you can have the best of both worlds by using dynamic SQL inside your stored procedures. In a stored procedure, you can use the EXEC statement to execute a string of SQL statements that you built dynamically in the stored procedure or read from the database or any other data source.

Thanks to Steve Rhoads for this tip.

--Fred

SQL Enterprise Manager Tips

This section contains tips on the SQL Enterprise Manager tool. It is a graphical front end to the database, allowing you to create, delete, view, and modify all MS SQL Server objects: tables, views, stored procedures, etc.

Keyboard Shortcuts

Last Updated: 6/20/1999

Applies to: MS SQL Server 7.0

Here is a list of some of the more useful shortcut keys in SQL Enterprise Manager.

KeyFunctionF1Help on SQL Enterprise ManagerShift-F1Help on syntax of current SQL statementCtrl-EExecute selected text in Query AnalyzerCtrl-RHide/show results pane in Query Analyzer

Obviously, this list is far from complete. Please feel free to mail me your favorite shortcuts. I'll add to this list as time permits.

See also: Windows Shortcut Keys

--Fred

SQL Generating SQL

Last Updated: 2/7/1999

Applies to: MS SQL Server 6.5+

To automate tedious database maintenance chores, you can use SQL statements to generate SQL statements that do your maintenance for you. For example, to change the permissions on all stored procedures in a database, you can use a SELECT statement like:

SELECT 'GRANT EXECUTE ON ' + name + ' TO PUBLIC GO' FROM sysobjects WHERE type = 'P'

The output of this SELECT statement is a series of alternating GRANT and GO statements, one pair per stored procedures, for all stored procedures in the database. Then you copy that output as your next set of commands and execute it.

Note: Be sure to leave the line break before the word GO. It is required to start on a new line, after the GRANT statement.

Thanks to Steve Rhoads for this tip.

--Fred

See Also

Last Updated: 6/6/1999

Applies to: MS SQL Server 6.5+

The following are good sources of info about MS SQL Server:

MS SQL Server books on the MSDN Library CD.

--Fred

Differences Between Oracle and MS SQL ServerConcepts and Terminology

Last Updated: 4/24/

Applies to: Oracle 7.3+, MS SQL Server 6.5+

The following table shows some differences in concepts and terminology between Oracle and MS SQL Server:

Concept/TermOracleMS SQL ServerDatabase enginedatabasedatabase serverDatabase (collection of tables)schemadatabaseRoles/GroupsrolesgroupsDatabase adminstrator account, database ownerdbasa, dboData about the databaseData Dictionary

- one per serverDatabase Catalog

- one per database

“master” database

- one per serverBlocks and extentsblocks and extentspages and extentsNetwork softwareSQL*NetNet-libraryData stream protocolTransparent Network Substrate (TNS)Tabular Data Stream (TDS) Case sensitivity of names of tables, columns, etc.case-insensitivedepends on character sort order, default is case-insensitiveSynonymssupportednot supportedReadonly transactionsupportednot supported

--Fred

Data Types

Last Updated: 6/6/1999

Applies to: Oracle 7.3+, MS SQL Server 6.5+

The following table shows the corresponding data types in Oracle and MS SQL Server:

Data TypeOracleMS SQL ServerFixed Length StringCHAR(n)

- limit 2KBCHAR(n), CHARACTER(n)

- limit 255 (6.5)

- limit 8KB (7.0)Variable Length StringVARCHAR2(n), VARCHAR(n)

- limit 4KB in a column

- limit 32KB in a variable

- VARCHAR is obsolete

VARCHAR(n), CHAR VARYING(n), CHARACTER VARYING(n)

- limit 255 (6.5)

- limit 8KB (7.0)IntegerINTEGER, INTEGER(n), SMALLINTINTEGER (4 bytes),

INT (4 bytes),

SMALLINT (2 bytes),

TINYINT (1 byte),

BIT (1 bit)Fixed PointNUMBER, NUMBER(n), NUMBER(n,d),

FLOAT, FLOAT(n), FLOAT(n,d)NUMERIC, NUMERIC(n), NUMERIC(n,d),

DECIMAL, DECIMAL(n), DECIMAL(n,d),

DEC, DEC(n), DEC(n,d),

MONEY, SMALLMONEYFloating PointDECIMALFLOAT, FLOAT(n), DOUBLE PRECISION,

REAL, DateDATEDATETIME, SMALLDATETIME, TIMESTAMP

- TIMESTAMP auto-updatedBinaryRAW(n)

- limit 255 bytesBINARY(n), VARBINARY(n), BINARY VARYING(n)

- limit 255 (6.5)

- limit 8KB (7.0)Large StringLONG, LONG VARCHAR

- limit 2GB

- limit one per table row

CLOB

- limit 4GBTEXT

- limit 2GBLarge BinaryLONG RAW

- limit 2GB

- limit one per table row

BLOB

- limit 4GBIMAGE

- limit 2GBMulti-byte charsNCHAR(n)

NVARCHAR(n)

NCLOB

- same limits as CHAR, VARCHAR, CLOBNCHAR(n), NATIONAL CHAR(n), NATIONAL CHARACTER(n)

NVARCHAR(n), NATIONAL CHAR VARYING(n), NATIONAL CHARACTER VARYING(n)

NTEXT, NATIONAL TEXT

- same limits as CHAR, VARCHAR, TEXTOS FileBFILERow Identifierimplicit ROWID column(use an IDENTITY column)Secure OS LabelMLSLABEL, RAW MLSLABEL128-bit Unique Number

(UUID, GUID) UNIQUEIDENTIFIER (version 7.0 only)

--Fred

Limits

Last Updated: 6/14/

Applies to: Oracle 7.3+, MS SQL Server 6.5+

The following table shows differences in limits of Oracle and MS SQL Server:

DescriptionOracleMS SQL ServerColumns per table1000250 (6.5)

1024 (7.0)Row size unlimited1962 bytes (6.5)

8060 bytes (7.0)

- includes pointers, but not data, for TEXT and IMAGE columnsLONG and LONG RAW columns per row1 (must be last column)unlimited (16-byte pointer per)LOB, TEXT, and IMAGE columns per rowunlimited (16-byte pointer per)unlimited (16-byte pointer per)Clustered indexes per table11Non-clustered indexes per tableunlimited249Columns per index1616Index row size2K bytes900 bytesIdentifier Length30 chars30 chars (6.5)

128 chars (7.0)Tables per SELECTunlimited16 (6.5)

256 (7.0)Source code per stored procedure 64KB (6.5)

250MB (7.0)Data type limits(see Data Types)

--Fred

Operators

Last Updated: 6/7/1999

Applies to: Oracle 7.3+, MS SQL Server 6.5+

Most operators are the same in Oracle and MS SQL Server. Here are some that differ:

DescriptionOracleMS SQL ServerString concatenationstring1 || string2string1 + string2

--Fred

Built-In Functions

Last Updated: 6/7/1999

Applies to: Oracle 7.3+, MS SQL Server 6.5+

Oracle and MS SQL Server offer many of the same built-in functions. For example, they both offer ABS, EXP, ROUND, UPPER, LOWER, AVG, COUNT, SUM, ASCII, etc. The following table shows some of the corresponding functions that don't have the same name. For a more complete list, see “Migrating Oracle Applications to SQL Server”

DescriptionOracleMS SQL ServerSmallest integer >= nCEILCEILINGModulusMOD%Truncate numberTRUNCMax or min number or string in listGREATEST,

LEASTTranslate NULL to nNVLISNULLReturn NULL if two values are equalDECODENULLIFString concatenationCONCAT(str1,str2)str1 + str2Convert ASCII to charCHRCHARCapitalize first letters of wordsINITCAPFind string in stringINSTRCHARINDEXFind pattern in stringINSTRPATINDEXString lengthLENGTHDATALENGTHPad string with blanksLPAD,

RPADTrim leading or trailing chars other than blanksLTRIM(str,chars),

RTRIM(str,chars)Replace chars in stringREPLACESTUFFConvert number to stringTO_CHARSTR, CASTConvert string to numberTO_NUMBERCASTGet substring from stringSUBSTRSUBSTRINGChar for char translation in stringTRANSLATEDate additionADD_MONTH or +DATEADDDate subtractionMONTHS_BETWEEN or -DATEDIFFLast day of monthLAST_DAYTime zone conversionNEW_TIMENext specified weekday after dateNEXT_DAYConvert date to stringTO_CHARDATENAME, CONVERTConvert string to dateTO_DATECASTConvert date to numberTO_NUMBER(TO_CHAR(d))DATEPARTDate roundROUNDCONVERTDate truncateTRUNCCONVERTCurrent dateSYSDATEGETDATEConvert hex to binaryHEXTORAWCASTConvert binary to hexRAWTOHEXCONVERTIf statement in an expressionDECODECASE ... WHEN

or COALESCEUser's login id number or nameUID, USERSUSER_ID, SUSER_NAMEUser's database id number or nameUID, USERUSER_ID, USER_NAMECurrent userUSERUSER

--Fred

Differences in SQL Syntax

Last Updated: 3/21/2001

Applies to: Oracle 7.3+, MS SQL Server 6.5+

The following table shows the different syntax used in Oracle and MS SQL Server for the same SQL operations:

DescriptionOracleMS SQL ServerLeft Outer JoinWHERE column1 = column2(+)FROM table1 LEFT OUTER JOIN table2 ON table1.column1 = table2.column2

Note: The following syntax is also supported, but is no longer recommended:

WHERE column1 *= column2Right Outer JoinWHERE column1(+) = column2FROM table1 RIGHT OUTER JOIN table2 ON table1.column1 = table2.column2

Note: The following syntax is also supported, but is no longer recommended:

WHERE column1 =* column2Full Outer Join FROM table1 FULL OUTER JOIN table2 ON table1.column1 = table2.column2SELECT without FROMSELECT 'hello world' FROM DUALSELECT 'hello world'SELECT data into a tableCREATE TABLE AS SELECT ...SELECT ... INTOIntersection of 2 SELECTSSELECT ... INTERSECT SELECT ...SELECT ... WHERE EXISTS (SELECT ...)Subtraction of 2 SELECTSSELECT ... MINUS SELECT ...SELECT ... WHERE NOT EXISTS (SELECT ...)INSERT into a JOININSERT INTO SELECT ...Create a VIEW and INSERT INTO it.UPDATE data in a JOINUPDATE SELECT...Create a VIEW and INSERT INTO it.UPDATE one table based on criteria in another tableUPDATE table FROM ...DELETE rows from one table based on criteria in another tableDELETE FROM table FROM ...DROP a column from a tableALTER TABLE table_name DROP COLUMN column_nameReadonly VIEWCREATE VIEW ... WITH READONLYGRANT SELECT ...Save pointSAVEPOINTSAVE TRANSACTIONTable lockLOCK TABLE...IN SHARE MODE SELECT...table_name (TABLOCK)Exclusive table lockLOCK TABLE...IN EXCLUSIVE MODE SELECT...table_name (TABLOCKX)Reserving index space PCTFREE=0FILLFACTOR=100Declaring a local variableDECLARE varname type;DECLARE @varname typeInitializing a local variableDECLARE varname type := value;Declaring a constantDECLARE varname CONSTANT type := value;Assigning to a variablevarname := value

SELECT value INTO varnameSET @varname = value

SELECT @varname = valueAssigning to a variable from a cursorFETCH cursorname INTO varnameFETCH NEXT FROM cursorname INTO varnameDeclaring a cursorCURSOR curname (params)

IS SELECT ...;DECLARE curname CURSOR FOR SELECT ...If statementIF ... THEN

ELSIF ... THEN

ELSE

ENDIFIF ...

BEGIN ... END

ELSE BEGIN ... ENDWhile loopWHILE ... LOOP

END LOOPWHILE ...

BEGIN ... ENDOther loopsFOR ... END LOOP

LOOP ... END LOOPLoop exitEXIT, EXIT WHENBREAK, CONTINUEPrint outputDBMS_OUTPUT.PUT_LINEPRINTRaise errorRAISE_APPLICATION_ERRORRAISERRORStatement terminatorSemi-colon (;)

Thanks to Tom Johnston for catching a mistake in this tip. I had the FROM DUAL in the wrong column.

--Fred

Differences in SQL Semantics

Last Updated: 6/6/1999

Applies to: Oracle 7.3+, MS SQL Server 6.5+

The following table shows some semantic differences between Oracle and MS SQL Server:

DescriptionOracleMS SQL ServerCommitExplicit COMMIT statement requiredAutomatic commit unless SET IMPLICIT_TRANSACTIONS ONReading uncommitted dataDatabase does temporary internal rollback to reconstruct most recently committed data for reader.Depending on options, reader as allowed to read uncommitted data, or is forced to wait for writer to commit or rollback.Releasing cursor dataCLOSE CURSOR releases all data. You can't re-open.CLOSE CURSOR does not release data. You must explicitly call DEALLOCATE CURSOR. Until then, you can re-open the cursor.Implicit data conversion in a statement like the following where vc is a column of type VARCHAR2:

SELECT * FROM person

WHERE vc =123

As each row is fetched from the table, an attempt is made to convert it to a number for the comparison with 123. If any row contains a value that cannot be converted to a number, a runtime error occurs.The number 123 is converted to the string '123' once, and then the data is fetched from the table. If any row contains a value that cannot be converted to a number, it simply doesn't match '123' and is skipped without any error.Conversion to NULLSetting a VARCHAR2 column to '' (the empty string) makes it NULL.Setting a VARCHAR column to '' makes it the empty string (not NULL).

--Fred

Differences in Managing Databases

Last Updated: 6/6/1999

Applies to: Oracle 7.3+, MS SQL Server 6.5+

The following table shows some differences in how databases are managed in Oracle and MS SQL Server:

DescriptionOracleMS SQL ServerModel databaseNo model databaseNewly created databases inherit characteristics (users, etc.) from the special database named “model”.

--Fred

Differences in Managing Database Objects

Last Updated: 6/6/1999

Applies to: Oracle 7.3+, MS SQL Server 6.5+

The following table shows some differences in how database objects (tables, views, stored procedures, etc.) are managed in Oracle and MS SQL Server:

DescriptionOracleMS SQL ServerFully qualified name[schema.]table

[schema.]view[[[server.][database].][owner].]table

[[[server.][database].][owner].]viewTemp tablesPre 8i: Temporary tables must be deleted explicitly

8i+: CREATE GLOBAL TEMPORARY TABLE

#table -- Any table named starting with a pound sign (#) is automatically deleted when the user logs off or the procedure ends.

##table -- Same as above, except that the table is accessible to other users.Re-creating an objectCREATE OR REPLACE ...DROP ...

CREATE ...Create view before dependent tables CREATE FORCE VIEWNot supported. Tables used by view must exist before view can be created.

--Fred

Differences in Managing Users

Last Updated: 6/6/1999

Applies to: Oracle 7.3+, MS SQL Server 6.5+

The following table shows some differences in how users are managed in Oracle and MS SQL Server:

DescriptionOracleMS SQL ServerMembership in groupsEach user can be a member of any number of groups.Each user can be a member of only one group other than “public”.

--Fred

Differences in Integration with MS ADO, RDO, etc.

Last Updated: 6/6/1999

Applies to: Oracle 7.3+, MS SQL Server 6.5+

The following table shows the different techniques used in Oracle and MS SQL Server to interact with MS ADO, RDO, etc.:

DescriptionOracleMS SQL ServerReturn a recordset to the callerReturn a handle to a cursor.

For more info: See MS KB article Q174679.SELECT with no INTO clause;

Multiple such SELECTs return multiple recordsets

--Fred

Miscellaneous Differences

Last Updated: 6/6/1999

Applies to: Oracle 7.3+, MS SQL Server 6.5+

The following table shows miscellaneous differences between Oracle and MS SQL Server:

DescriptionOracleMS SQL ServerGenerate unique numbersCREATE SEQUENCEIDENTITY column of a tableCascaded DELETEDELETE CASCADE ...(use triggers)Call a user-defined function from a SQL statement (as column of SELECT or expression in WHERE clause)supportednot supported

--Fred

See Also

Last Updated: 3/3/2001

Applies to: Oracle 7.3+, MS SQL Server 6.5+

The following are good sources of info about differences between Oracle and MS SQL Server:

Bowman, Judith S., Sandra L. Emerson, and Marcy Darnovsky. The Practical SQL Handbook. Addison-Wesley Publishing Company, 1993. ISBN 0-201-62623-3.

This book gives a good introduction to SQL, with a slight emphasis on Sybase, but with a useful summary in the back of the syntax for each of the SQL statements (SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, GRANT, REVOKE, etc.) for each of the major databases (Oracle, Sybase, DB2, Informix, Ingres, etc.) The book pre-dates MS SQL Server, but the Sybase info is a good approximation since MS SQL Server is a derivative of Sybase.

“Migrating Oracle Applications to SQL Server” on MSDN CD, and at MS TechNet Web site:

www.microsoft.com/TechNet/sql/Tools/Sqldevkt/ORCL2SQL.asp

Microsoft clearly intended this to be used in one direction only, but I've used it quite successfully to translate my SQL Server knowledge to Oracle as well.

篇8:学习SQL 文档数据库教程

数据库: SQL Sever 2000

注意:

如果你将SQL Sever配置为使用完整安全或混合安全,那么你可以使用可信连接,如果你使用标准安全,你则需要提供用户 帐号 和密码。

库名:  pubs (包含一个虚拟的出版商使用的各个表;安装好就有的,本文例子就用此表讲解)

调试工具: SQL 查询分析器 (允许执行交互的SQL查询,在把查询语句写进程序之前进行测试是非常有用的。)

选库 :  在查询窗口顶部的 DB下拉框中选择数据库pubs,这样你就选择了数据库。

1         例子

1.1       记录查询 ( 附 :有编号)

1.1.1   简单SELECT查询语句

1.1.1.1 描述:

SELECT 字段 1, 字段 2, …… FROM 表 [WHERE 条件]

1.1.1.2 SQL语句:

“ SELECT au_lname, phone FROM authors

” SELECT * FROM authors WHERE au_lname ='Ringer'

1.1.1.3 结果:

1.1.1.4  注意:

1.1.2   操作多个表

1.1.2.1 描述:

1.1.2.2 Sql 语句

“ SELECT au_lname ,title  FROM  authors, titles

” SELECT title,pub_name FROM titles,publishers WHERE titles.pub_id=publishers.pub_id

1.1.2.3 结果:

1.1.2.4 注意:

1.1.3  操作字段

1.1.3.1 描述:

1.1.3.2 Sql 语句

“ SELECT  phone as '电话号码' FROM authors WHERE au_lname ='Ringer'

” SELECT  phone '电话号码' FROM authors WHERE au_lname ='Ringer'

“ SELECT  price * 2 FROM titles

” SELECT  price  “Original price”, price * 2 “New price” FROM  titles

1.1.3.3 结果:

1.1.3.4 注意:

你可以使用大多数标准的数学运算符来操作字段值,如加(+),减(-),乘(*)和除(/)。

你也可以一次对多个字段进行运算.

1.1.4  排序查询结果

1.1.4.1 描述:

1.1.4.2 Sql 语句

“ SELECT au_lname FROM  authors  ORDER  BY  au_lname

” SELECT au_lname ,au_fname FROM authors ORDER BY au_lname ,au_fname

“ SELECT au_lname,au_fname FROM authors ORDER BY au_lname ,au_fname DESC

1.1.4.3 结果:

1.1.4.4 注意:

警告:

不是特别需要时,不要对查询结果进行排序,因为服务器完成这项工作要费些力气。这意味着带有ORDER BY 子句的SELECT语句执行起来比一般的SELECT语句花的时间长。

1.1.5  取出互不相同的记录

1.1.5.1 描述:

1.1.5.2 Sql 语句

” SELECT DISTINCT au_lname FROM authors WHERE au_lname = 'Ringer'

1.1.5.3 结果:

1.1.5.4 注意:

警告:

如同ORDER BY子句一样,强制服务器返回互不相同的值也会增加运行开销,

福气不得不花费一些时间来完成这项工作。因此,不是必须的时候不要使用关键字DISTINCT。

1.1.6  集合函数

1.1.6.1 描述:

? 可以统计记录数目,平均值,最小值,最大值,或者求和。

1.1.6.2 Sql 语句

“ SELECT AVG( lowqty ) 'the_average' FROM discounts

” SELECT COUNT( au_lname ) FROM authors WHERE au_lname= 'Ringer'

“ SELECT COUNT( DISTINCT au_lname ) FROM authors WHERE au_lname= 'Ringer'

” SELECT COUNT( * ) FROM authors WHERE au_lname= 'Ringer'

“ SELECT SUM( min_lvl ) FROM jobs

” SELECT MAX( min_lvl ) FROM jobs

“ SELECT MIN( min_lvl ) FROM jobs

1.1.6.3 结果:

1.1.6.4 注意:

1.1.7  通过匹配来取出数据

1.1.7.1 描述:

? 百分号是通配符的例子之一。它代表 0个或多个字符。

? 中括号([])用来匹配处在指定范围内的单个字符。

? '[ABC]%'任何一个其名字以这些字符中的任一个开头记录都将被返回。

? 脱字符( ^)来排除特定的字符。

? 通过使用下划线字符( _),你可以匹配任何单个字符。

1.1.7.2 Sql 语句

” SELECT royalty FROM titles WHERE royalty >= 10  AND  royalty <= 12

“ SELECT royalty FROM titles WHERE royalty BETWEEN 10 AND 12

” SELECT royalty FROM titles WHERE royalty NOT BETWEEN 10 AND 12

“ SELECT royalty FROM titles WHERE royalty = 10  OR  royalty = 12

” SELECT royalty FROM titles WHERE royalty IN (10,12)

“ SELECT type FROM titles WHERE type LIKE '%popular_comp%'

” SELECT type FROM titles WHERE type LIKE '[A-M ]%'

“ SELECT type FROM titles WHERE type LIKE '[ABC]%'

” SELECT type FROM titles WHERE type LIKE '[a-fm]%'

“ SELECT type FROM titles WHERE type LIKE '[^(a-fmt)]%'

1.1.7.3 结果:

1.1.7.4 注意:

注意:

如果你想匹配百分号或下划线字符本身,你需要把它们括在方括号中。如果你想匹配连字符 (-),应把它指定为方括号中的第一个字符。如果你想匹配方括号,应把它们也括在方括号中。例如,下面的语句返回所有其描述中包含百分号的站点:

1.1.8  转换数据

1.1.8.1 描述:

? SQL Sever 把大部分数值从一种类型转换为另一种类型。例如,要比较SMALLINT型和INT型数据的大小,你不需要进行显式的类型转换。SQL Sever会为你完成这项工作。

? 当想在字符型数据和其它类型的数据之间进行转换时,需要自己进行转换操作。

? 函数 CONVERT( )

1.1.8.2 Sql 语句

” SELECT CONVERT( CHAR(8),price) + '$' as '钱' FROM titles

1.1.8.3 结果:

1.1.8.4 注意:

函数 CONVERT( ) 带有两个变量。第一个变量指定了数据类型和长度。第二个变量指定了要进行转换的字段。

篇9:SQL循序渐进SELECT语句数据库教程

SELECT语句

在上面的教程中已经有用到SELECT语句,在本节教程中将详细对它进行阐述。SELECT语句是SQL的核心,在你的SQL语句中可能用的最多的就是SELECT语句了。由于大量的选项可以用于SELECT语句,所以整个教程好象就是围这SELECT语句转。当我们构造SQL查询语句(利用了SELECT语句)的时候,认识所有的可能选项和最好的或者最有效率的方法来实现是很有用的。这个教程将为你提供这些技能。

SELECT语句用于查询数据库并检索匹配你指定条件的选择数据。SELECT语句有五个主要的子句子你可以选择,而FROM是唯一必须的子句。每一个子句有大量的选择项、参数等等。这些子句将罗列在下面,而且它们每一个都将在以后的教程有更为详细的描述。

以下是SELECT语句的格式:

SELECT [ALL | DISTINCT] column1[,column2]

FROM table1[,table2]

[WHERE “conditions”]

[GROUP BY “column-list”]

[HAVING “conditions]

[ORDER BY ”column-list“ [ASC | DESC] ]

下面举个例子:

SELECT name, age, salary

FROM employee

WHERE age >50;

上面的这个语句将从employee表中选择age大于50的所有的name、age和salary列的数值。

注意:一定要在SQL语句末尾加上一个分号。这个分号提示SQL语句已经结束并准备被解释,

以下的表格给出了各种比较运算符号:

=

等于

>

大于

<

小于

>=

大于等于

<=

小于等于

不等于

LIKE

字符串比较测验

举个例子吧:

SELECT name, title, dept

FROM employee

WHERE title LIKE 'Pro%';

上面的语句是从employee表中选择title是以'Pro'为开头的name、title和dept列中的所有行或者数值。

另外ALL和DISTINCT也是SQL中的关键字,它们用于在你的查询结果中选择ALL(缺省)或者”distinct“或者单一记录。如果你想在指定的列中检索单一记录,你可以使用”DISTINCT" 关键子。 因为DISTNCT 将会丢弃所有你在SELECT指定的列复制的记录,比如 :

SELECT DISTINCT age

FROM employee_info;

这条语句将返回所有在employee_info表中单一的age数据。

而ALL就将显示所有指定的类,包括所有的复制数据。在没有指定的时候,这个ALL关键字是缺省的。

优化其索引的小技巧数据库教程

如何实现数据的自动录入数据库教程

跟踪标记全攻略数据库教程

用一个实例讲解Oracle数据库的PL/SQL语句块

对于跨不同服务器的sql脚本执行语言的摘要数据库教程

如何恢复MYSQL实体文件MYI,MYD到数据库中数据库教程

PowerDesign9.5+ 中的GTL编程 解决大问题数据库教程

了解一下NULLs怎样影响IN和EXISTS数据库教程

从零开始学Oracle―约束

uniqueidentifier 数据类型数据库教程

检查Oracle数据库中不合理的sql语句数据库教程
《检查Oracle数据库中不合理的sql语句数据库教程.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

【检查Oracle数据库中不合理的sql语句数据库教程(共9篇)】相关文章:

sql连接语句2023-07-30

SQL Server触发器及触发器中的事务学习2022-12-01

关于一个数据转换软件的使用StatTransfer7数据库教程2023-05-15

浅谈mssql access数据库 top分页方法2023-05-24

oracle数据库索引失效2023-04-28

Oracle SQL精妙SQL语句讲解2022-06-09

NBSI2内部功能实现大揭谜数据库教程2023-01-10

oracle 存储过程详细介绍(创建,删除存储过程,参数传递等)2023-04-30

程序员年终总结2022-11-28

年终总结程序员2024-03-09