账号通
    

账号  

密码  

245267

查看

195

回复
主题:[精品教程分享]官方手把手带您一起学SQL,实例说明,本系列教程不断更新中... [收藏主题] 转到:  
swcml 当前离线

454

主题

0

广播

0

粉丝
添加关注
级别:四年级

用户积分:2920 分
登录次数:119 次
注册时间:2006/11/11
最后登录:2013/3/10
swcml 发表于:2008/1/12 23:02:00   | 只看该作者 查看该作者主题 91楼 
科汛在线商城系统(NET)
不错,好东西,官方响应用户的要求速度挺快的
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
91fafa 当前离线

370

主题

0

广播

0

粉丝
添加关注
级别:三年级

用户积分:2842 分
登录次数:174 次
注册时间:2007/12/5
最后登录:2020/11/5
91fafa 发表于:2008/1/12 21:50:00   | 只看该作者 查看该作者主题 92楼 
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
cevin001 当前离线

57

主题

0

广播

0

粉丝
添加关注
级别:学前班

用户积分:758 分
登录次数:36 次
注册时间:2007/11/27
最后登录:2009/12/4
cevin001 发表于:2008/1/12 21:37:00   | 只看该作者 查看该作者主题 93楼 
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
天下有雪 当前离线

653

主题

0

广播

0

粉丝
添加关注
级别:六年级

用户积分:4882 分
登录次数:550 次
注册时间:2006/10/10
最后登录:2012/3/1
天下有雪 发表于:2008/1/12 21:28:00   | 只看该作者 查看该作者主题 94楼 
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
任我行 当前离线

6496

主题

191

广播

251

粉丝
添加关注
级别:管理员

用户积分:46047 分
登录次数:4180 次
注册时间:2006/4/26
最后登录:2023/12/4
任我行 发表于:2008/1/12 22:39:00   | 只看该作者 查看该作者主题 95楼 
做在线知识付费 选科汛云开店

第二节 实例:用SQL标签实现文章列表

先看下最终要实现的效果:

一般,这种效果我们都是利用系统自带的系统函数标签,这边我是为了举例,还是建议用系统函数标签去实现。

我们分析下:

主要由:. 文章标题 标题带有链接 及文章添加的日期 四个要素组成。

分析完毕,我们着手建标签,到系统后台标签-->>自定义SQL函数标签-->>

点击新建标签-->>


此主题相关图片如下:未标题-1.gif
未标题-1.gif

下一步:主表中选择 文章数据表



此主题相关图片如下:未标题-2.gif
未标题-2.gif

根据我们以上的分析,我们按住ctrl,利用鼠标点击要用到的


此主题相关图片如下:未标题-3.gif
未标题-3.gif

接下来就是写循环语句:



此主题相关图片如下:未标题-4.gif
未标题-4.gif

点击“保存标签”,完成标签的制作。

和系统函数标签一样,在模板要调用的位置插入该标签

{SQL_最新文章列表()}

保存模板,生成一下,看到效果了吧^_^......

 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
任我行 当前离线

6496

主题

191

广播

251

粉丝
添加关注
级别:管理员

用户积分:46047 分
登录次数:4180 次
注册时间:2006/4/26
最后登录:2023/12/4
任我行 发表于:2008/1/14 20:17:00   | 只看该作者 查看该作者主题 96楼 
科汛在线商城系统(NET)

今晚我们接着上面两节课来讲一下利用SQL函数标签来实现通用栏目列表的效果,即可以做一个通用的标签,调用的时候只要填入栏目的ID和要调用的文章数目即可.

OK,进入正题:

要达到的效果

. 复制(9) 基本面利空笼罩 原油失守90美元2007-12-03
. 复制(8) 基本面利空笼罩 原油失守90美元2007-12-03
. 复制(7) 基本面利空笼罩 原油失守90美元2007-12-03
. 复制(6) 基本面利空笼罩 原油失守90美元2007-12-03
. 复制(5) 基本面利空笼罩 原油失守90美元2007-12-03
. 复制(4) 基本面利空笼罩 原油失守90美元2007-12-03
. 复制(3) 基本面利空笼罩 原油失守90美元2007-12-03

新建标签:


此主题相关图片如下:未标题-1.gif
未标题-1.gif

主表选择文章数据表,然后和上一节课讲的一样,选择要用到的字段

如下图:


此主题相关图片如下:未标题-1.gif
未标题-1.gif

查询语句如下:

select top {$Param(1)} ID,Title,Adddate from KS_Article Where tid='{$Param(0)}' and verific=1 order by id desc

备注(帮助新手朋友理解)

其中:{$Param(1)}
即为我们输入的参数说明中的调用的文章数量, top {$Param(1)}
即我们呆会要调用的时候系统会提示您输入要调用几条,
tid='{$Param(0)}' and verific=1
即栏目的ID号和已经被审核的文章,

order by id desc即按降序输出,最新添加的显示在最上面

看明白上面的,我们接着完成循环体:


此主题相关图片如下:未标题-1.gif
未标题-1.gif

附循环体内容:

[loop={$Param(1)}]

<li>
   <a href="{$Field(ID,GetInfoUrl,1,1)}">{$Field(Title,Text,0,...,0,)}</a>{$Field(Adddate,Date,YYYY-MM-DD)}
</li>

[/loop]

最后保存标签,到模板要显示的位置插入该标签如:

{SQL_通用栏目列表标签(20071229508802,10)}

系统要提示您输入要调用的栏目ID,及要调用的文章数量,保存模板,发布即可.

第四节课敬请关注,我们会陆续完善,一步步教您利用SQL标签实现各种效果,让您将科汛系统发挥的更自如....






 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
bluefirejj 当前离线

164

主题

0

广播

2

粉丝
添加关注
级别:一年级

用户积分:1007 分
登录次数:86 次
注册时间:2007/7/14
最后登录:2017/9/20
bluefirejj 发表于:2008/1/12 21:26:00   | 只看该作者 查看该作者主题 97楼 
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
任我行 当前离线

6496

主题

191

广播

251

粉丝
添加关注
级别:管理员

用户积分:46047 分
登录次数:4180 次
注册时间:2006/4/26
最后登录:2023/12/4
任我行 发表于:2008/1/12 20:57:00   | 只看该作者 查看该作者主题 98楼 
做在线知识付费 选科汛云开店

Count

SELECT COUNT("栏位")
FROM "表格名"

在上一页有提到,COUNT 是函数之一。由于它的使用广泛,我们在这里特别提出来讨论。基本上,COUNT 让我们能够数出在表格中有多少笔资料被选出来。它的语法是:

SELECT COUNT("栏位名")
FROM "表格名"

举例来说,若我们要找出我们的示范表格中有几笔 store_name 栏不是空白的资料时,

Store_Information 表格

store_name
Sales
Date
Los Angeles
$1500
Jan-05-1999
San Diego
$250
Jan-07-1999
Los Angeles
$300
Jan-08-1999
Boston
$700
Jan-08-1999

我们就打入,

SELECT COUNT(store_name)
FROM Store_Information
WHERE store_name is not NULL

结果:

Count(store_name)
4

"is not NULL" 是 "这个栏位不是空白" 的意思。

COUNTDISTINCT 经常被合起来使用,目的是找出表格中有多少笔不同的资料 (至于这些资料实际上是什么并不重要)。 举例来说,如果我们要找出我们的表格中有多少个不同的 store_name,我们就打入,

SELECT COUNT(DISTINCT store_name)
FROM Store_Information

结果:

Count(DISTINCT store_name)
3

Group By

SELECT "栏位1", SUM("栏位2")
FROM "表格名"
GROUP BY "栏位1"

我们现在回到函数上。记得我们用 SUM 这个指令来算出所有的 Sales (营业额)吧!如果我们的需求变成是要算出每一间店 (store_name) 的营业额 (sales),那怎么办呢?在这个情况下,我们要做到两件事:第一,我们对于 store_name 及 Sales 这两个栏位都要选出。第二,我们需要确认所有的 sales 都要依照各个 store_name 来分开算。这个语法为:

SELECT "栏位1", SUM("栏位2")
FROM "表格名"
GROUP BY "栏位1"

在我们的示范上,

Store_Information 表格

store_name
Sales
Date
Los Angeles
$1500
Jan-05-1999
San Diego
$250
Jan-07-1999
Los Angeles
$300
Jan-08-1999
Boston
$700
Jan-08-1999

我们就打入,

SELECT store_name, SUM(Sales)
FROM Store_Information
GROUP BY store_name

结果:

store_nameSUM(Sales)
Los Angeles$1800
San Diego$250
Boston$700

当我们选不只一个栏位,且其中至少一个栏位有包含函数的运用时,我们就需要用到 GROUP BY 这个指令。在这个情况下,我们需要确定我们有 GROUP BY 所有其他的栏位。换句话说,除了有包括函数的栏位外,我 们都需要将其放在 GROUP BY 的子句中。

Having

SELECT "栏位1", SUM("栏位2")
FROM "表格名"
GROUP BY "栏位1"
HAVING (栏位)

那我们如何对函数产生的值来设定条件呢?举例来说,我们可能只需要知道哪些店的营业额有超过 $1,500。在这个情况下,我们不能使用 WHERE 的指令。那要怎么办呢?很幸运地,SQL 有提供一个 HAVING 的指令,而我们就可以用这个指令来达到这个目标。 HAVING 子句通常是在一个 SQL 句子的最后。一个含有 HAVING 子句的 SQL 并不一定要包含 GROUP BY 子句。HAVING 的语法如下:

SELECT "栏位1", SUM("栏位2")
FROM "表格名"
GROUP BY "栏位1"
HAVING (函数条件)

请读者注意: GROUP BY 子句并不是一定需要的。

在我们Store_Information 表格这个例子中,

Store_Information 表格

store_name
Sales
Date
Los Angeles
$1500
Jan-05-1999
San Diego
$250
Jan-07-1999
Los Angeles
$300
Jan-08-1999
Boston
$700
Jan-08-1999

我们打入,

SELECT store_name, SUM(sales)
FROM Store_Information
GROUP BY store_name
HAVING SUM(sales) > 1500

结果:

store_nameSUM(Sales)
Los Angeles
$1800

Create Table

CREATE TABLE "表格名"
("栏位 1" "栏位 1 资料种类",
"栏位 2" "栏位 2 资料种类",
... )

表格是数据库中储存资料的基本架构。在绝大部份的情况下,数据库厂商不可能知道您需要如何储存您的资料,所以通常您会需要自己在数据库中建立表格。虽然许多数据库工具可以让您在不需用到 SQL 的情况下建立表格,不过由于表格是一个最基本的架构,我们决定包括 CREATE TABLE 的语法在这个网站中。

在我们跳入 CREATE TABLE 的语法之前,我们最好先对表格这个东西有些多一点的了解。表格被分为栏位 (column) 及列位 (row)。每一列代表一笔资料,而每一栏代表一笔资料的一部份。举例来说,如果我们有一个记载顾客资料的表格,那栏位就有可能包括姓、名、地址、城市、国家、生日...等等。当我们对表格下定义时,我们需要注明栏位的标题,以及那个栏位的资料种类。

那,资料种类是什么呢?资料可能是以许多不同的形式存在的。它可能是一个整数 (例如 1),、一个实数(例如 0.55)、一个字串 (例如 'sql')、一个日期/时间 (例如 '2000-JAN-25 03:22:22')、或甚至是 以二进法 (binary) 的状态存在。当我们在对一个表格下定义时,我们需要对每一个栏位的资料种类下定义。(例如 '姓' 这个栏位的资料种类是 char(50)━━代表这是一个 50 个字符的字串)。我们需要注意的一点是不同的数据库有不同的资料种类,所以在对表格做出定义之前最好先参考一下数据库本身的说明。

CREATE TABLE 的语法是:

CREATE TABLE "表格名"
("栏位 1" "栏位 1 资料种类",
"栏位 2" "栏位 2 资料种类",
... )

若我们要建立我们上面提过的顾客表格,我们就打入以下的 SQL:

CREATE TABLE customer
(First_Name char(50),
Last_Name char(50),
Address char(50),
City char(50),
Country char(25),
Birth_Date date)


Drop Table

DROP TABLE "表格名"

有时候我们会决定我们需要从数据库中清除一个表格。事实上,如果我们不能这样做的话,那将会是一个很大的问题,因为数据库管理师 (Database Administrator -- DBA) 势必无法对数据库做有效率的管理。还好,SQL 有提供一个 DROP TABLE的语法来让我们清除表格。 DROP TABLE 的语法是:

DROP TABLE "表格名"

我们如果要清除在SQL CREATE 中建立的顾客表格,我们就打入:

DROP TABLE customer.

Truncate Table

TRUNCATE TABLE "表格名"

有时候我们会需要清除一个表格中的所有资料。要达到者个目的,一种方式是我们在 SQL DROP 那一页 看到的 DROP TABLE 指令。不过这样整个表格就消失,而无法再被用了。另一种方式就是运用 TRUNCATE TABLE 的指令。在这个指令之下,表格中的资料会完全消失,可是表格本身会继续存在。 TRUNCATE TABLE 的语法为下:

TRUNCATE TABLE "表格名"

所以,我们如果要清除在 SQL Create 那一页建立的顾客表格之内的资料,我们就打入:

TRUNCATE TABLE customer.

Insert Into

INSERT INTO "表格名" ("栏位1", "栏位2", ...)
VALUES ("值1", "值2", ...)

到目前为止,我们学到了将如何把资料由表格中取出。但是这些资料是如果进入这些表格的呢? 这就是这一页 (INSERT INTO) 和下一页 (UPDATE) 要讨论的。

基本上,我们有两种作法可以将资料输入表格中内。一种是一次输入一笔,另一种是一次输入好几笔。 我们先来看一次输入一笔的方式。

依照惯例,我们先介绍语法。一次输入一笔资料的语法如下:

INSERT INTO "表格名" ("栏位1", "栏位2", ...)
VALUES ("值1", "值2", ...)

假设我们有一个架构如下的表格:

Store_Information 表格

Column Name
Data Type
store_name
char(50)
Sales
float
Date
datetime

而我们要加以下的这一笔资料进去这个表格:在 January 10, 1999,Los Angeles 店有 $900 的营业额。我们就打入以下的 SQL 语句:

INSERT INTO Store_Information (store_name, Sales, Date)
VALUES ('Los Angeles', 900, 'Jan-10-1999')

第二种 INSERT INTO 能够让我们一次输入多笔的资料。跟上面刚的例子不同的是,现在我们要用 SELECT 指令来指明要输入表格的资料。如果您想说,这是不是说资料是从另一个表格来的,那您就想对了。一次输入多笔的资料的语法是:

INSERT INTO "表格1" ("栏位1", "栏位2", ...)
SELECT "栏位3", "栏位4", ...
FROM "表格2"

以上的语法是最基本的。这整句 SQL 也可以含有 WHEREGROUP BY、 及 HAVING 等子句,以及表格连接及别名等等。

举例来说,若我们想要将 1998 年的营业额资料放入 Store_Information 表格,而我们知道资料的来源是可以由 Sales_Information 表格取得的话,那我们就可以打入以下的 SQL:

INSERT INTO Store_Information (store_name, Sales, Date)
SELECT store_name, Sales, Date
FROM Sales_Information
WHERE Year(Date) = 1998

在这里,我用了 SQL Server 中的函数来由日期中找出年。不同的数据库会有不同的语法。 举个例来说,在 Oracle 上,您将会使用 WHERE to_char(date,'yyyy')=1998。

Update
UPDATE "表格名"
SET "栏位1" = [新值]
WHERE {条件}

我们有时候可能会需要修改表格中的资料。在这个时候,我们就需要用到 UPDATE 指令。这个指令的语法是:

UPDATE "表格名"
SET "栏位1" = [新值]
WHERE {条件}

最容易了解这个语法的方式是透过一个例子。假设我们有以下的表格:

Store_Information 表格

store_name
Sales
Date
Los Angeles
$1500
Jan-05-1999
San Diego
$250
Jan-07-1999
Los Angeles
$300
Jan-08-1999
Boston
$700
Jan-08-1999

我们发现说 Los Angeles 在 01/08/1999 的营业额实际上是 $500,而不是表格中所储存的 $300,因此我们用以下的 SQL 来修改那一笔资料:

UPDATE Store_Information
SET Sales = 500
WHERE store_name = "Los Angeles"
AND Date = "Jan-08-1999"

现在表格的内容变成:

Store_Information 表格

store_name
Sales
Date
Los Angeles
$1500
Jan-05-1999
San Diego
$250
Jan-07-1999
Los Angeles
$500
Jan-08-1999
Boston
$700
Jan-08-1999

在这个例子中,只有一笔资料符合 WHERE 子句中的条件。如果有多笔资料符合条件的话,每一笔符合条件的资料都会被修改的。

我们也可以同时修改好几个栏位。这语法如下:

UPDATE "表格"
SET "栏位1" = [值1], "栏位2" = [值2]
WHERE {条件}


Delete From

DELETE FROM "表格名"
WHERE {条件}

在某些情况下,我们会需要直接由数据库中去除一些资料。这可以藉由 DELETE FROM 指令来达成。它的语法是:

DELETE FROM "表格名"
WHERE {条件}

以下我们用个实例说明。假设我们有以下这个表格:

Store_Information 表格

store_name
Sales
Date
Los Angeles
$1500
Jan-05-1999
San Diego
$250
Jan-07-1999
Los Angeles
$300
Jan-08-1999
Boston
$700
Jan-08-1999

而我们需要将有关 Los Angeles 的资料全部去除。在这里我们可以用以下的 SQL 来达到这个目的:

DELETE FROM Store_Information
WHERE store_name = "Los Angeles"

现在表格的内容变成:

Store_Information 表格

store_name
Sales
Date
San Diego
$250
Jan-07-1999
Boston
$700
Jan-08-1999

 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
liugang 当前离线

128

主题

0

广播

0

粉丝
添加关注
级别:一年级

用户积分:31 分
登录次数:11 次
注册时间:2010/6/29
最后登录:2010/8/30
liugang 发表于:2010/6/29 17:56:37   | 只看该作者 查看该作者主题 99楼 
科汛在线考试系统(NET)
真好,科讯太棒了,狂支持!!
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
xiaolajiao8863 当前离线

42

主题

0

广播

0

粉丝
添加关注
级别:学前班

用户积分:26 分
登录次数:4 次
注册时间:2010/6/30
最后登录:2010/7/2
xiaolajiao8863 发表于:2010/7/2 9:36:10   | 只看该作者 查看该作者主题 100楼 
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
<上一主题 | 下一主题 >
Powered By KesionCMS Version X1
厦门科汛软件有限公司 © 2006-2016 页面执行0.83203秒 powered by KesionCMS 9.0