精通SQL数据库连接

      失落的学习 2005-9-6 14:17
要高效地处理查询和数据库设计,你必须对SQL连接声明有较好的了解。在基本的逻辑句法之外,还有一些关于连接和简便数据参考方面的概念,例如别名,自连接和ON子句。
  
  别名不只是做连接
  
  别名是一个SQL功能,他允许你在一个查询中为表格或专栏创建一个速记符号,他在处理自连接时也可以很便利地使用,这一点我会在后面提到。
  
  一个别名通用的格式是table_name.column_name AS alias,他允许你通过指派的处理器来参照已别名化的项目。在非常复杂的JOIN声明中,别名使得阅读和录入变得很容易。
  
  下面这个例子是典型的别名使用:
  
  SELECT Co.company_name AS coname, Ind.industry_name AS indname
  FROM Company AS Co LEFT JOIN Industry AS Ind
  ON Co.industry_id = Ind.industry_id
  WHERE coname LIKE ‘%Tech%’ AND indname = ‘Computing’;
  
  注意AS关键字是任选的,然而我建议使用他从而更加清楚。而且,专栏可以使用格式alias = table_name.column_name来别名化,但表格不能这样来别名化。
  
  自连接只使用一个表格
  自连接是一种在单一标准化表格上使用的JOIN声明,实质上,你可以使用自连接在一个表格内获得行与行之间的等级关系。你必须使用别名作为表格的两个实例来描述表格,然后将其连接起来。
  
  使用自连接的实例可以体现在列有所有雇员和经理的员工表格中,自连接允许你与单一查询建立联合,否则你就不得不在代码中处理一个循环。
  
  使用自连接的另一个实例是在包含工作任务的表格中追踪一个开发项目,在其他信息中,表格里包括一个TaskID专栏,他的每一行都有一个唯一的数字;一个DependenceID专栏,其中包括在现有任务可以开始之前必须完成的任务的ID。
  
  得到任务和其附属的列表,你可以使用如下连接:
  
  SELECT
  Current.task_descr AS Task,
  Previous.task_descr AS Dependence
  FROM Project AS Current
  LEFT JOIN Project AS Previous
  ON Current.DependenceID = Previous.TaskID;
  
  这个声明会在两个专栏中得到结果,标注为Task和Dependence且每一行里都具有相关信息。通过使用自连接,你可以使用来自单一表格的数据来创建一个内建载数据自身内部的等级的参照描述。
  
  USING和ON子句可以在多个专栏做连接
  除了ON子句,你还可以使用USING子句来实现一个等连接,他与连接表格中从一个表格到一个专栏的值相等。你也可以使用这两个声明来连接多个专栏,这在你构筑JOIN声明时会很方便使用。
  
  在ON子句中你可以指定专栏名称,这意味着你可以对两个专栏名不相配的表格中的数据进行比较,要在多个专栏上实现一个搜索行为,需要用AND关键字来分隔条件(见下段的使用实例)。
  
  在USING子句中,专栏名必须一致,并必须在要连接的两个表格中都要存在。如果你使用多个专栏做连接,用逗号分隔专栏名。下面是USING子句句法的基本实例:
  
  SELECT * FROM User INNER JOIN Event USING (userid);
  
  
  控制JOIN的顺序
  JOIN声明中并不要求做插入,但你可以在涉及多于两个表格时使用插入来改变JOIN声明的顺序。通常地,JOIN声明或者从左至右处理(以在查询中出现顺序为序),或者由数据库查询优化器在执行前决定。
  
  一些数据库,如SQL Server, Oracle和DB2也支持JOIN HINT关键字的概念。这些关键字被插入到JOIN声明中来控制JOIN被处理的顺序。例如,一个MERGE JOIN会在处理其他连接之前将两个表格连接在一起。HASH JOIN会将一个表格和一个已经被执行的JOIN声明的结果连接在一起。JOIN HINT会导致数据库性能的极端低下并应留给DBA处理。
  
  你的另一个选择是使用插入来控制JOIN的执行顺序,下面是使用实例,其中Catalog, Product和Color是表格:
  
  SELECT Catalog.item, Catalog.item_color, Product.item, Color.color_name
  FROM Catalog
  FULL OUTER JOIN ( Product CROSS JOIN Color )
  ON Catalog.item = Product.item
  AND Catalog.item_color = Color.color_name;
  
  
  成为数据库专家
  JOIN声明可以有效地找到你所需要的信息并避免带来麻烦。通过使用上面提到的概念,你可以逐渐掌握JOIN声明和数据库的使用。总的来说,别名,自连接和JOIN声明的使用会帮助你成为标准化数据库的专家。
请问ASP是怎样连接SQL数据库的,请给我代码,谢谢!(表名为:dianzishangwu;密码为sa;用户名为sa)
绝对100相送!

---------------------------------------------------------------

dianzishangwu是数据库名吧,

Set Conn=Server.CreateObject("Adodb.Connection")

Conn.Open "Provider=SqlOledb.1;Data Source=(local);initial catalog=dianzishangwu;uid=sa;pwd=sa"



---------------------------------------------------------------

<%连SQL2000数据库
dim conn
dim str
on error resume next
Set Conn=Server.CreateObject("ADODB.Connection")
Conn.open "driver={SQL Server};server=你的机器名;uid=sa;pwd=;database=你的数据库名称" '
'连access数据库
'dim conn
'dim connstr
'on error resume next
'connstr="DBQ="+server.mappath("你的数据库名称.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
' set conn=server.createobject("ADODB.CONNECTION")
'conn.open connstr
%>
---------------------------------------------------------------

Dim Cnn, StrCnn
Set Cnn = Server.CreateObject("ADODB.Connection")
strcnn="Provider=SQLOLEDB.1;UID="& strUser &";PWD="& strPass &";database=" & strDataBase &";server=" & strServer"
Cnn.Open StrCnn


strUser:数据库Login ID
strPass:数据库密码
strDataBase:要连接的数据库
server:数据库服务器的名字
---------------------------------------------------------------

不用那么多代码很简单的!
你通过你——————管理工具---32 位数据源--自己定义系统DSN就可以了。有你填密码和拥用户名的地方!和DSN名字
<%
' FileName="Connection_odbc_conn_dsn.htm"
' Type="ADO"
' DesigntimeType="ADO"
' HTTP="false"
' Catalog=""
' Schema=""
Dim PSQL “ 数据库变量:”
PSQL = "dsn=你的DSN名字"
%>
上面是定义数据库
下面是打开数据库
<%
Dim tushu
Dim tushu_numRows

Set tushu = Server.CreateObject("ADODB.Recordset")
tushu.ActiveConnection = paql"你自己定义的数据库变量“
tushu.Source = "你要执行的数据库操作SQL语句"

tushu.CursorType = 0
tushu.CursorLocation = 2
tushu.LockType = 1
tushu.Open() ”打开数据库!“

tushu_numRows = 0
%>


这个办法的优点,就是你以后变了数据库,只用从新定义DSN就可以了,只要的数据表的结构不发生变化。就不需要从新写代码了!
如有什么问题可以和我联系:wlgg@china.com.cn
---------------------------------------------------------------

二、连接SQL SERVER数据库
1) oledb直接连接
set cnobj = Server.CreateObject("ADODB.Connection")
strcon="PROVIDER=SQLOLEDB;DATA SOURCE=(主机名称或ip,如果是本地,可以不要);DATABASE=(数据库名,注不是保存的文件名,而是企业管理器中的数据库名称);UID=(登陆名);PWD=(登陆密码)"
cnobj.Open strcon
set rstobj=server.createobject("adodb.recordset")
set rstobj=cnobj.execute("select * from users")

2)“文件型”ODBC数据源连接1
set cnobj = Server.CreateObject("ADODB.Connection")
cnobj.open "filedsn=wang.dsn;database=db1;uid=;pwd=;"
set rstobj=server.createobject("adodb.recordset")
set rstobj=cnobj.execute("select * from users")

3)“文件型”ODBC数据源连接2 (安全性最高)
和第二种方法连接几乎一样,只是将密码写在确确实实存在的ODBC文本文件中,一般存放在(盘符:\program files\common files\odbc\data sources)目录下,本例为wang.dsn文件,用记事本打开它,在"UID=用户名"这一行下加上一行PWD="UID给出的用户密码",这是安全性最高的一种连接了,因为除了在WEB服务器上登录,没人可以读取到这个文件,也就不会知道SQL的用户名和密码,最后将SQL连接中的第三种方法第2行改为:cnobj.open "filedsn=wang.dsn"

4)系统型连接

set cnobj = Server.CreateObject("ADODB.Connection")
cnobj.open "dsn=localserver;uid=sa;pwd=sa;"
set rstobj=server.createobject("adodb.recordset")
set rstobj=cnobj.execute("select * from users")

注:其实和“文件型”几乎一样,只有一句dsn=localserver不一样,在“文件型”中是filedsn=wang.dsn,因为“系统型”ODBC是在系统注册表中进行连接,而“文件型”是确确实实存在的文本文件,本例中localserver是建立的系统ODBC数据源名称,wang.dsn是文件型数据源的文本文件名.

标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commenttime}{commentauthor}

{CommentUrl}
{commentcontent}