博文

 Sql连接查询(2005-12-03 12:07:00)

摘要:   Sql连接查询


连接查询

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

在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行查询。

连接可以在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_......

阅读全文(3305) | 评论:0

SQL四条最基本的数据操作语句(2005-11-16 23:32:00)

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

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

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

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

  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提供对事务的支持。一次事务将数据库从一种一致性转移到另一种一致性。如果事务的某一部分失败,则整个事务都会失败,系统将会被恢复(或称之为回退)到......

阅读全文(3709) | 评论:0

SQL Server里一些未公开的扩展存储过程(2005-11-13 12:51:00)

摘要:
扩展存储过程(xp)是直接运行在SQL Server地址空间里的动态链接库,是通过使用SQL Server开放数据服务API(SQL Server Open Data Services API)开发的。我们可以像执行普通存储过程一样,在“查询分析器”里运行扩展存储过程。扩展存储过程被用于SQL Server的扩展功能,我们可以直接利用SQL Server附带的众多扩展存储过程,也可以用C或C++等编程语言编写我们自己的扩展存储过程。
在本文中,我将告诉大家一些未公开的有用的扩展存储过程。这些存储过程可以运行于SQL Server 7.0,当然SQL Server 2000也可以。

1、sp_MSgetversion
这个扩展存储过程可以用来获得Microsoft SQL Server的当前版本。要获得SQL Server的版本,执行:
EXEC master..sp_MSgetversion
注意,还有一种方法获得SQL Server的当前版本(这种方法能得到更多信息),那就是用下面的SELECT语句:
SELECT @@version

2、xp_dirtree
这个扩展存储过程可以用于为在扩展存储(xp)中命名的文件夹列出所有文件夹。要列出C:\MSSQL7中的所有文件夹,执行:
EXEC master..xp_dirtree 'C:\MSSQL7'

3、xp_enum_oledb_providers
这个扩展存储过程用于列出所有可用的OLE DB提供者(OLE DB providers)。它返回提供者的名称、解析名称(Parse Name)和提供者的描述。要获得你的SQL Server的所有OLE DB提供者,执行:
EXEC master..xp_enum_oledb_providers

4、xp_enumcodepages
这个扩展存储过程可以用来列出所有你的SQL Server的代码页(code pages)、字符集和它们的描述。要查看这些信息,执行:
EXEC master..xp_enumcodepages

5、xp_enumdsn
这个扩展存储过程系统所有的DSN和它们的描述。要......

阅读全文(5753) | 评论:0

 MYSQL初学者使用指南(2005-11-13 11:54:00)

摘要:


有很多朋友虽然安装好了mysql但却不知如何使用它。在这篇文章中我们就从连接MYSQL、修改密码、增加用户等方面来学习一些MYSQL的常用命令。
一、连接MYSQL。
格式: mysql -h主机地址 -u用户名 -p用户密码
1、例1:连接到本机上的MYSQL。
首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mysql>
2、例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:
mysql -h110.110.110.110 -uroot -pabcd123
(注:u与root可以不用加空格,其它也一样)
3、退出MYSQL命令: exit (回车)
二、修改密码。
格式:mysqladmin -u用户名 -p旧密码 password 新密码
1、例1:给root加个密码ab12。首先在DOS下进入目录mysqlbin,然后键入以下命令
mysqladmin -uroot -password ab12
注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。
2、例2:再将root的密码改为djg345。
mysqladmin -uroot -pab12 password djg345
三、增加新用户。(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)
格式:grant select on 数据库.* to 用户名@登录主机 identified by "密码"
例1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MYSQL,然后键入以下命令:
grant select,insert,update,delete on *.* to test1@"%" Identified by......

阅读全文(2841) | 评论:0

查询多个表格 (2005-11-13 10:11:00)

摘要:  在对跨多个表格的数据进行组合时,有时很难搞清楚要使用哪一个SQL句法。我将在这里对将多个表格中的查询合并至单一声明中的常用方式进行阐述。
-------------------------------------------------------------------------------- 在这篇文章中的样本查询符合SQL92 ISO标准。不是所有的数据库生产商都遵循这项标准,而且很多厂商采取的提升措施会带来一些意料不到的后果。如果你不确定你的数据库是不是支持这些标准,你可以参看生产厂商的有关资料。 SELECT 一个简单的SELECT声明就是查询多个表格的最基本的方式。你可以在FROM子句中调用多个表格来组合来自多个表格的结果。这里是一个它如何工作的实例: SELECT table1.column1, table2.column2 FROM table1, table2 WHERE table1.column1 = table2.column1; 这个实例中,我使用点号(table1.column1)来指定专栏来自哪一个表格。如果所涉及的专栏只在一个参考的表格中出现,你就不需要加入完整的名称,但是加入完整名称会对可读性起到帮助。 在FROM子句中表格之间由逗号来分隔,你可以加入所需的任意多的表格,尽管一些数据库有一个在引入正式的JOIN声明之前他们可以有效地处理的内容这方面的限制,这个将在下面谈到。 这个句法是一个简单的INNER JOIN。一些数据库将它看成与一个外部的JOIN是等同的。WHERE子句告知数据库哪一个区域要做关联,而且它返回结果时,就像列出的表格在给定的条件下组合成一个单独的表格一样。值得注意的是,你的比较条件并不需要与你作为结果组返回的专栏相同。在上面的例子中,table1.column1和table2.column1用来组合表格,但是返回的却是table2.column2。 你可以在WHERE子句中使用AND关键字来将这个功能扩展至多于两个的表格。你还可以使用这样的表格组合来限制你的结果而不用实际地从每个表格返回专栏。在下面的例子中,table3与table1匹配,但是我没有从table3返回任何东西来显示。我只是确保来自table1的有关专栏存在于table3之中。注意此例中table3需要在......

阅读全文(3225) | 评论:0

SQL语言详解 (2005-11-13 10:10:00)

摘要:  Visual FoxPro的诸多特色之一便是结构化查询语言(Structured Query Language)。SQL此一语言提供了用来建立、维护几查询一个关系数据库管理系统的命令。 1.SQL的SELECT命令 SQL有许多重要的层面,但是其语言的核心则依靠数据查询与查询结果的快速回报。对某些使用者而言,他很可能仅使用到SQL此一层面。在SQL中,所有的查询(Query)操作完全由SELECT命令独立完成。 SELECT是一个用来从一个或一个以上的表获取数据的SQL命令。当您使用SELECT命令进行一个查询时,Visual FoxPro会解译此查询并从表中获取指定的数据。SELECT命令叙述可简可繁,命令行的长度依据查询的复杂度而定。它能够包含数据字段、常数值、内存变量、运算式、函数或宏。然而,SQL的SELECT终究还是一个命令,因此其单一命令叙述最长不可超过8192个符号。而任何使用在SELECT命令中的宏替换最大亦不可超过8192个符号。 或许有人会问,此SELECT命令不是与切换工作区用的SELECT命令相同吗?关于此点您大可放心,因为Visual FoxPro不仅是快速,它更是聪明,它会自动分辨您所使用的究竟是SQL之SELECT或是切换工作区的SELECT。 SQL之SELECT命令的语法如下: SELECT[ALL DISTINCT] [TOP nExpr [PERCENT]]
[Alias.] Select_Item [AS Column_Name]
[,[Alias.] Select_Item [AS Column_name]…]
FROM [FORCE]
[DatabaseName!]Table[[AS]Local_Alias]
[[INNer LEFT[OUTER] RIGHT[OUTER] FULL [OUTER]JOIN
DatabaseName!]Table[[AS] Local_Alias]
[ON JoinCondition…]
[[INTO Destination]
[TO FILE FileName [ADDITIVE] TO PRINTER [PROMPT]
TO SCREEN]]
[PREFERENCE Prefere......

阅读全文(5707) | 评论:0

全面接触SQL语法(2005-11-13 10:09:00)

摘要:全面接触SQL语法(1)
SQL功能与特性
  其实,在前面的文章中,已经提及SQL命令的一些基本功能,然而,通过SQL命令,程序设计师或数据库管理员(DBA)可以:
  (一)建立数据库的表格。(包括设置表格所可以使用之空间)
  (二)改变数据库系统环境设置。
  (三)针对某个数据库或表格,授予用户存取权限。
  (四)对数据库表格建立索引值。
  (五)修改数据库表格结构。(新建、删除或是修改表格字段)
  (六)对数据库进行数据的新建。
  (七)对数据库进行数据的删除。
  (八)对数据库进行数据的修改。
  (九)对数据库进行数据的查询。
  这几项便是通过SQL命令可以完成的事情,看起来是不是比起“查询”两个字所代表的功能要多的多了呢?   SQL语法的分类   其实SQL命令并不是非常多,可是要把SQL用到出神入化,却也只需要短短几个命令便够,因为SQL命令是针对关系型数据库所建立出来的语法叙述,
所以SQL在这类数据库中所发挥的功能非常的强,以下将针对在VB中常用的SQL语法基本命令加以分类介绍。在说明SQL的命令以及使用语法之前,以下将SQL做了的分类,在致上SQL语法所使用到的类型,可以说都已包含在这些类别当中。   第一类、属性词(Predicates)   在SQL命令中用来指明所要选择的记录的方式。如ALL、TOP与DISTINCT等等。   第二类、声明(Declaration)   针对SQL Parameter或Parameter Query 的名称与数据类型做声明,如PARAMETERS的声明等等。   第三类、条件子句(Clause)   在SQL的查询中,利用一些表达式定义出查询的条件,以缩小寻找的范围,如WHERE。   第四类、运算符(Operator)与操作数(Operation)   在SQL的查询中,与Operation共同组成表达式(Expression),如BETWEEN....AND 运算符与INNER JOIN操作数。   第五类、函数(Function)   一些SQL常见的函数,像是AVG()是求算数平均数的函数。   第六类、SQL语句(Statement)   SQL的语句,可以说是SQ......

阅读全文(3412) | 评论:0

SELECT 使用经验 (2005-11-13 10:07:00)

摘要: 
Select命令参数很多,功能也很强大,适当的使用一些技巧,可以使程序更洁练,运行速度更快。但如果不是很强求速度的话,我认为太过复杂的命令对以后的维护工作带来困难。呵呵,有时我要理解自己写的命令都有点困难,实在是太复杂了。以下内容是工在工作过程中摸索出来的一些小技巧,希望对别人有帮助。
【在select的输出字段使用函数的技巧】 不要以为select的输出字段只能用“表.字段名”这样的格式,其实这里面大有文章可作。它可用使用函数、甚至自定义函数(当然这样会影响速度,搞不好还会影响结果的正确性,所以很复杂的自定义函数就不要用了)。而在这里最经常用的就是sum()、avg()、iif()之类的函数了。举个例子: 人员资料表ryb,内容如下: 姓名 职称 政治面貌 科室
awfw 助工 党员 通讯科
wafawe 高工 党员 机械科
afawe 技术员 团员 财务科
2wraw 无 无 人事科
afwe 工程师 无 办公室
…… 现要统计每个科室各有几名技术员、助工、工程师、高工、党员、团员,以下列表的形式打印出来 科室 技术员 助工 工程师 高工 党员 团员
财务科 2 2 3 3 4 3
…… 命令如下: sele 科室,sum(iif(职称='技术员',1,0)), sum(iif(职称='助工',1,0)), ;
sum(iif(职称='工程师',1,0)), sum(iif(职称='高工',1,0)), ;
sum(iif(政治面貌='党员',1,0)),sum(iif(政治面貌='团员',1,0)) ;
from ryb grou by 科室 是不是很方便? 这里还有一个更绝的例子:   表recdbf
    〖性质〗分一般、重大、特大;
    〖日期〗 要统计出某年的12个月内每个月每种性质的记录各有多少,若该月没有记录就为零。 结果:
月份  一般 重大 特大  
 1   0  1    3
 2   2  12   3
 ......
 12   3  0   5 这跟上面那个例子有点不同,上例只是按表中科室来分类,而这里就不同,因为不是每个月都有案件的,但在报表里没有案件的月也要占......

阅读全文(5523) | 评论:0