初学,弱弱地问存储过程最基本知识

try_okey 2004-12-25 01:05:46
比如:
USE pubs
IF EXISTS(SELECT name FROM sysobjects
WHERE name='au_info_all' AND type='P')
DROP PROCEDURE au_info_all
GO
CREATE PROCEDURE au_info_all
AS
SELECT au_lname,au_fname,title,pub_name
FROM authors a INNER JOIN titleauthor ta
ON a.au_id=ta.au_id INNER JOIN titles t
ON t.title_id=ta.title_id INNER JOIN publishers p
ON t.pub_id=p.pub_id
-----------------------
1、IF EXISTS(。。。) DROP 。。。这句什么意思?这里的SELECT 和下面的SELECT有何关系??我看不出有什么关系嘛?!
2、FROM authors a INNER JOIN titleauthor ta这句后面的“a INNER JOIN titleauthor ta”什么意思?
3、ON a.au_id=ta.au_id INNER JOIN titles t这句,“ON a.au_id=ta.au_id ”什么意思?同样地,“INNER JOIN titles t”什么意思?

...全文
100 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
long111 2004-12-25
  • 打赏
  • 举报
回复
楼上的楼上说的好详细
我先收藏
zhonghlning 2004-12-25
  • 打赏
  • 举报
回复
1. IF EXISTs 是判断系统中是否有名叫au_info_all
的存储过程。如果有,则执行”DROP PROCEDURE au_info_all“语句,删除名叫au_info_all的存储过程。
2.au_lname,au_fname,title,pub_name 这四个字段在不同的表中,因此就要把不同的表连接在一起才能执行SQL语句。

3. a 和ta 是给两个表名取得临时表名。a 是他的authors 。 在你问的内容中“INNER JOIN ”是找两个表的连接点,找他们的共同点。

4.同样的意思找titles t 和publishers p的共同点,使他们在内联。
yingqing 2004-12-25
  • 打赏
  • 举报
回复
2
使用內部聯結
內部聯結 (Inner Join) 指的是被聯結資料行的數值是使用比較運算子 (Comparison Operator) 來進行比較的聯結。

在 SQL-92 標準之中,內部聯結可指定於 FROM 或 WHERE 子句中。這是 SQL-92 在 WHERE 子句中唯一支援的聯結類型。指定於 WHERE 子句中的內部聯結稱為舊式的內部聯結。

下列的 Transact-SQL 查詢是內部聯結的範例:

USE pubs
SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city = p.city
ORDER BY a.au_lname DESC

此內部聯結稱為等聯結 (Equi-Join)。它將傳回兩個資料表中的所有資料行,並只傳回聯結資料行中擁有相同數值的資料列。

以下為結果集:

au_id au_lname au_fname phone address city
----------- -------- -------- ------------ --------------- --------
238-95-7766 Carson Cheryl 415 548-7723 589 Darwin Ln. Berkeley
409-56-7008 Bennet Abraham 415 658-9932 6223 Bateman St. Berkeley

state zip contract pub_id pub_name city state country
----- ----- -------- ------ --------------------- -------- ----- -------
CA 94705 1 1389 Algodata Infosystems Berkeley CA USA
CA 94705 1 1389 Algodata Infosystems Berkeley CA USA

(2 row(s) affected)

在結果集之中,city 資料行將出現兩次。因為同樣的資訊重複出現並沒有什麼意義,您可藉著變更選取清單來刪除這兩個相同的資料行之一。此結果稱為自然聯結 (Natural Join)。您可以重新改寫上一個 Transact-SQL 查詢,以形成一個自然聯結,例如:例如:

USE pubs
SELECT p.pub_id, p.pub_name, p.state, a.*
FROM publishers p INNER JOIN authors a
ON p.city = a.city
ORDER BY a.au_lname ASC, a.au_fname ASC

以下為結果集:

pub_id pub_name state au_id au_lname au_fname
------ --------------- -------- ----------- -------- -------- 1389 Algodata Infosystems CA 409-56-7008 Bennet Abraham
1389 Algodata Infosystems CA 238-95-7766 Carson Cheryl

phone address city state zip contract
--------------- ------------- -------- ----- ----- ---------
415 658-9932 6223 Bateman St. Berkeley CA 94705 1
415 548-7723 589 Darwin Ln. Berkeley CA 94705 1

(2 row(s) affected)

在此範例中,publishers.city 並沒有顯示在結果之中。

使用非 Equal 運算子的聯結
您也可以聯結 (Join) 兩個資料行中不相等的數值。用於內部聯結 (Inner Join) 的相同運算子與述詞 (Predicate) 可用在不相等聯結之中。如需有關聯結中可用運算子與述詞的詳細資訊,請參閱在運算式中使用運算子 與 WHERE。

下列的 Transact-SQL 範例是大於 (>) 聯結的範例,它可找出居住州名的字母順序位於 Massachusetts (位於 New Moon Books 所在州名) 後面的 New Moon 作者。

USE pubs
SELECT p.pub_name, p.state, a.au_lname, a.au_fname, a.state
FROM publishers p INNER JOIN authors a
ON a.state > p.state
WHERE p.pub_name = 'New Moon Books'
ORDER BY au_lname ASC, au_fname ASC

以下為結果集:

pub_name state au_lname au_fname state
---------------- ------- -------------------- -------------------- -----
New Moon Books MA Blotchet-Halls Reginald OR
New Moon Books MA del Castillo Innes MI
New Moon Books MA Greene Morningstar TN
New Moon Books MA Panteley Sylvia MD
New Moon Books MA Ringer Albert UT
New Moon Books MA Ringer Anne UT

(6 row(s) affected)

使用不相等運算子的聯結
不相等聯結 (< >) 較少使用。一般來說,不相等聯結只在用於自我聯結 (Self-Join) 時才有意義。例如,下列的不相等 Transact-SQL 聯結與自我聯結,將用來找出具有兩個或多個不同價格之廉價 (少於 $15) 書籍的類別:

USE pubs
SELECT DISTINCT t1.type, t1.price
FROM titles t1 INNER JOIN titles t2
ON t1.type = t2.type
AND t1.price <> t2.price
WHERE t1.price < $15 AND t2.price < $15



附註 運算式 NOT column_name = column_name 相當於 column_name < > column_name。


此 Transact-SQL 範例可使用不相等聯結來與自我聯結合併,以找出 titleauthor 資料表中的所有資料列,在此資料表中兩個或多個資料列擁有相同的 title_id,但有不同的 au_id 編號 (也就是書籍擁有多位作者):

USE pubs
SELECT DISTINCT t1.au_id, t1.title_id
FROM titleauthor t1 INNER JOIN titleauthor t2
ON t1.title_id = t2.title_id
WHERE t1.au_id <> t2.au_id
ORDER BY t1.au_id

以下為結果集:

au_id title_id
----------- --------
213-46-8915 BU1032
267-41-2394 BU1111
267-41-2394 TC7777
409-56-7008 BU1032
427-17-2319 PC8888
472-27-2349 TC7777
672-71-3249 TC7777
722-51-5454 MC3021
724-80-9391 BU1111
724-80-9391 PS1372
756-30-7391 PS1372
846-92-7186 PC8888
899-46-2035 MC3021
899-46-2035 PS2091
998-72-3567 PS2091
yingqing 2004-12-25
  • 打赏
  • 举报
回复
IF EXISTS(SELECT name FROM sysobjects WHERE name='au_info_all' AND type='P')
DROP PROCEDURE au_info_all
判斷當前數據庫是否存在命名為'au_info_all' 的存取過程
sysobjects
包含在資料庫中建立的每一個物件 (條件約束、預設值、記錄檔、規則、預存程序等等) 的一資料列。只存在於 tempdb,這個資料表包含每一個暫時物件。

資料行名稱 資料型別 描述
name sysname 物件名稱。
Id int 物件識別碼。
xtype char(2) 物件類型。可以是這些物件類型之一:
C = CHECK 條件約束
D = DEFAULT 條件約束
F = FOREIGN KEY 條件約束
L = 記錄檔
FN = 存量函數IF = 內嵌資料表函數P = 預存程序
PK = PRIMARY KEY 條件約束 (類型為 K)
RF = 複寫篩選條件預存程序
S = 系統資料表
TF = 資料表函數TR = 觸發程序
U = 使用者資料表
UQ = UNIQUE 條件約束 (類型為 K)
V = 檢視表
X = 延伸預存程式

uid smallint 擁有者物件的使用者識別碼。
info smallint 保留。限內部使用。
status int 保留。限內部使用。
base_schema_
ver int 保留。限內部使用。
replinfo int 保留。僅用於複寫。
parent_obj int 父物件的物件識別碼 (例如,如果是觸發程序或條件約束,即為資料表的識別碼)。
crdate datetime 物件建立的日期。
ftcatid smallint 註冊為全文索引之所有使用者資料表的全文類別識別項,如果所有的使用者資料表都未註冊,值為 0。
schema_ver int 隨每次資料表的結構檢視變更而漸增的版本號碼。
stats_schema_
ver int 保留。限內部使用。
type char(2) 物件類型。它可以是下列各值之一:
C = CHECK 條件約束
D = DEFAULT 條件約束
F = FOREIGN KEY 條件約束
FN = 純量函數IF = 內嵌資料表函數K = PRIMARY KEY 或 UNIQUE 條件約束
L = 記錄檔
P = 預存程序
R = 規則
RF = 複製篩選預存程序
S = 系統資料表
TF = 資料表函數TR = 觸發程序
U = 使用者資料表
V = 檢視表
X = 延伸預存程式

userstat smallint 保留。
sysstat smallint 內部狀態資訊。
indexdel smallint 保留。
refdate datetime 保留以供未來使用。
version int 保留以供未來使用。
deltrig int 保留。
instrig int 保留。
updtrig int 保留。
seltrig int 保留。
category int 使用於發行集、條件約束與識別項。
cache smallint 保留。
存在的話就Drop掉
ljian_mail 2004-12-25
  • 打赏
  • 举报
回复
IF EXIST是判断系统表中是否存在你要写的存储过程,如果存在的话,则要删除。固定的开头。

inner join连接。你还是好好看看书吧
kongguyoulan2002 2004-12-25
  • 打赏
  • 举报
回复
1。IF EXIST是判断系统表中是否存在你要写的存储过程,如果存在的话,则要删除。固定的开头。

2。inner join是内连接。 语法是这样的。
3。on后跟表达式。连接的条件。
大家都是抱着对算法与数据结构极大的兴趣才参加集训的,我们也希望大家学有所成,但是刚刚接触信息学领域的同学往往存在很多困惑,不知道从何入手学习,在这篇向导里,我希望能将自己不多的经验与大家分享,希望对各位有所帮助. 一、语言是最重要的基本功 无论侧重于什么方面,只要是通过计算机程序去最终实现的竞赛,语言都是大家要过的第一道关.亚洲赛区的比赛支持的语言包括C/C++与JAVA.虽然JAVA在应用极为广泛,但是其运行速度不可恭维.而且在以往的比赛中来看,大多数队伍还是采用了C或者C++.而且C语言是大家接触的第一门编程语言,所以我们集训队都采用C和C++混编的方式写代码. 新来的同学可能C的基础知识刚刚学完,还没有接触过C++,其实在赛场上使用纯C的选手还是大有人在的,它们主要是看重了纯C在效率上的优势,所以这部分同学如果时间有限,并不需要急着去学习新的语言,只要提高了自己在算法设计上的造诣,纯C一样能发挥巨大的威力.但是我还是希望大家都能够学点C++. C++相对于C,在输入输出流上的封装大大方便了我们的操作,同时降低了出错的可能性,并且能够很好地实现标准流与文件流的切换,方便了调试的工作。如果有些同学比较在意这点,可以尝试C和C++的混编,毕竟仅仅学习C++的流操作还是不花什么时间的。 C++的另一个支持来源于标准模版库(STL),库中提供的对于基本数据结构的统一接口操作和基本算法的实现可以缩减我们编写代码的长度,这可以节省一些时间。但是,与此相对的,使用STL要在效率上做出一些牺牲,对于输入规模很大的题目,有时候必须放弃STL,这意味着我们不能存在“有了STL就可以不去管基本算法的实现”的想法;另外,熟练和恰当地使用STL必须经过一定时间的积累,准确地了解各种操作的时间复杂度,切忌对STL中不熟悉的部分滥用,因为这其中蕴涵着许多初学者不易发现的陷阱。像STL中的很多容器, vector,queue,stack,map,set等一定要比较熟悉,STL中的sort是必需要掌握的.掌握这些STL知识后写代码的时候相对于纯C会节省不少时间. C语言学习推荐:C程序设计(谭浩强编著) C++学习推荐: C++Prime, C++大学教程.(其实基本上的C++教程都行的…) STL学习推荐: C++Prime,STL标准库.(理论联系实际,边学就用学的最快) 二、以数学为主的基础知识十分重要 虽然被定性为程序设计竞赛,但是参赛选手所遇到的题更多的是没有解决题的思路,而不是有了思路却死活不能实现,这就是平时积累的基础知识不够。竞赛中对于基础学科的涉及主要集中于数学,此外对于物理、电路等等也可能有一定应用,但是不多。因此,大一的同学也不必为自己还没学数据结构而感到不知从何入手提高,把数学捡起来吧!下面来谈谈在竞赛中应用的数学的主要分支。 1、离散数学——作为计算机学科的基础,离散数学是竞赛中涉及最多的数学分支,其重中之重又在于图论和组合数学,尤其是图论。 图论之所以运用最多是因为它的变化最多,而且可以轻易地结合基本数据结构和许多算法的基本思想,较多用到的知识包括连通性判断、DFS和BFS,关节点和关键路径、欧拉回路、最小生成树、最短路径、二部图匹配和网络流等等。虽然这部分的比重很大,但是往往也是竞赛中的难题所在,如果有初学者对于这部分的某些具体内容暂时感到力不从心,也不必着急,可以慢慢积累。 竞赛中设计的组合计数题大都需要用组合数学来解决,组合数学中的知识相比于图论要简单一些,很多知识对于小学上过奥校的同学来说已经十分熟悉,但是也有一些部分需要先对代数结构中的群论有初步了解才能进行学习。组合数学在竞赛中很少以难题的形式出现,但是如果积累不够,任何一道这方面的题目却都有可能成为难题。 2、数论——以素数判断和同余为模型构造出来的题目往往需要较多的数论知识来解决,这部分在竞赛中的比重并不大,但只要来上一道,也足以使知识不足的人冥思苦想上一阵时间。素数判断和同余最常见的是在以密码学为背景的题目中出现,在运用密码学常识确定大概的过程之后,核心算法往往要涉及数论的内容。 3、计算几何——计算几何相比于其它部分来说是比较独立的,就是说它和其它的知识点很少有过多的结合,较常用到的部分包括——线段相交的判断、多边形面积的计算、内点外点的判断、凸包等等。计算几何的题目难度不会很大,但也永远不会成为最弱的题。 4、线性代数——对线性代数的应用都是围绕矩阵展开的,一些表面上是模拟的题目往往可以借助于矩阵来找到更好的算法。 5、概率论——竞赛是以黑箱来判卷的,这就是说你几乎不能动使用概率算法的念头,但这也并不是说概率就没有用。关于这一点,只有通过一定的练习才能体会。而且近年来概率题出现的次数越来越多了.

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧