账号通
    

账号  

密码  

275095

查看

195

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

6496

主题

191

广播

251

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

用户积分:46050 分
登录次数:4182 次
注册时间:2006/4/26
最后登录:2024/11/21
任我行 发表于:2008/1/12 20:57:00   | 显示全部帖子 查看该作者主题 楼主 

大家好!应很多网友的要求,为了将功能强大的科汛系统应用的更自如,打造出更多有特色的网站,官方决定从头开始带大家一起学习SQL,我们会在这个过程中举实例,从最基础的sql语句,语法开始,让每一个科汛爱好者都可以做出最有特色的网站。此教程不断更新中,在教程中,如果您有什么疑问欢迎跟帖,我们会尽全力解答......


 


 



发贴心情

[高级基础教程]--官方带您学习SQL,第一节基础知识


 


[分享]新手学习SQL必看,SQL基础知识一


 


http://bbs.kesion.com/dispbbs.asp?boardid=42&id=63838&star=1&page=1


 


[分享]新手学习SQL必看,SQL基础知识二


 


http://bbs.kesion.com/dispbbs.asp?boardid=42&id=63839&star=1&page=1


 


[分享]新手学习SQL必看,数据库语句说明


 


http://bbs.kesion.com/dispbbs.asp?boardid=42&id=63840&star=1&page=1


 


新手学习SQL必看,数据库语句功能一览


 


http://bbs.kesion.com/dispbbs.asp?BoardID=42&ID=63841&replyID=&skin=1


 


SQL的详细语法介绍——对于学习数据库最基础知识Select之一


 


http://bbs.kesion.com/dispbbs.asp?boardid=42&id=63833&star=1&page=1


 


 


SQL的详细语法介绍——对于学习数据库最基础知识Where


 


http://bbs.kesion.com/dispbbs.asp?boardid=42&id=63832&star=1&page=1


 


SQL的详细语法介绍——对于学习数据库最基础知识Order by & Group by


 


http://bbs.kesion.com/dispbbs.asp?boardid=42&id=63829&star=1&page=1


 


SQL的详细语法介绍——对于学习数据库最基础知识Between…And Distinct


 


 http://bbs.kesion.com/dispbbs.asp?boardid=42&id=63830&star=1&page=1


 


SQL的详细语法介绍——对于学习数据库最基础知识And & Or  


 


http://bbs.kesion.com/dispbbs.asp?boardid=42&id=63831&star=1&page=1


 


 


SQL的详细语法介绍——对于学习数据库最基础知识Delete


 


http://bbs.kesion.com/dispbbs.asp?boardid=42&id=63835&star=1&page=1


 


SQL的详细语法介绍——对于学习数据库最基础知识Update


 


http://bbs.kesion.com/dispbbs.asp?boardid=42&id=63836&star=1&page=1


 


零度冰凌老师数据库实例代码一览


 


http://bbs.kesion.com/dispbbs.asp?boardid=42&id=63837&star=1&page=1


 



 


 


 



发贴心情

高级实例教程--举例带你一起学习自定义SQL函数标签打造自己想要的效果


 


 


科汛新手切记,当调用自定义sql标签时,提示内存不够  


 


http://bbs.kesion.com/dispbbs.asp?boardid=42&Id=59643


 


 


[分享]新手必看,自定义SQL函数标签使用技巧


 


http://bbs.kesion.com/dispbbs.asp?boardid=42&Id=36139


 


 


[V5.X高级教程]教你用自定义SQL函数标签实现连续滚动文章效果


 


http://bbs.kesion.com/dispbbs.asp?boardid=42&Id=60217


 


[高级进阶教程]教你用科汛自定义sql标签打造有特色的终级下载分页列表效果


 


http://bbs.kesion.com/dispbbs.asp?boardid=42&Id=60177


 


[V5.x高级教程一]自定义表单+自定义sql标签打造万能报名系统


 


http://bbs.kesion.com/dispbbs.asp?boardid=41&Id=51906


 


●SQL新手必看.(SQL新手进来看下就通)  


http://bbs.kesion.com/dispbbs.asp?boardid=42&Id=43960


 


SQL如何调用两个栏目里的内容,使用{$Param(0)}参数


 


http://bbs.kesion.com/dispbbs.asp?boardid=41&Id=60102


 


[V5.x高级教程之二]V5.0文章权限标签[KS_Charge][/KS_Charge]说明


 


http://bbs.kesion.com/dispbbs.asp?boardid=41&Id=52455


 


[高级教程三]自定义sql标签嵌套sql标签实现循环栏目列表效果


 


http://bbs.kesion.com/dispbbs.asp?boardid=41&Id=54008


 


[V5.01高级教程]自定义SQL标签支持条件判断


 


http://bbs.kesion.com/dispbbs.asp?boardid=41&Id=52002


 


[高级教程三]自定义sql标签嵌套sql标签实现循环栏目列表效果


 


http://bbs.kesion.com/dispbbs.asp?boardid=41&Id=54008


 


科汛教你利用自定义SQL标签打造竖向栏目导航显示菜单


 


http://bbs.kesion.com/dispbbs.asp?boardid=42&Id=58787


 


用SQL标签实现通用文章列表分页效果


 


http://bbs.kesion.com/dispbbs.asp?boardid=42&Id=42366


 


用SQL标签实现通用文章列表 


 


http://bbs.kesion.com/dispbbs.asp?boardid=42&Id=42260


 


自定义SQL函数标签实现分页式的图片文章列表


 


http://bbs.kesion.com/dispbbs.asp?boardid=42&Id=42290


 


用SQL标签实现文章列表  


http://bbs.kesion.com/dispbbs.asp?boardid=42&Id=42261&page=2


 


SQL教程之打造分页显示所有图片文章图片列表 


http://bbs.kesion.com/dispbbs.asp?boardid=42&Id=56926&page=2


 


SQL商品分页标签


http://bbs.kesion.com/dispbbs.asp?boardid=42&Id=49609&page=4


 


自定义SQL轻松实现,文章栏目图片分行分列 


http://bbs.kesion.com/dispbbs.asp?boardid=42&Id=42291&page=4


 


科汛自定义SQL标签教程(初级教程)手把手教你实现人才招聘效果


 


http://bbs.kesion.com/dispbbs.asp?boardID=41&ID=26169&page=1


 


[原创]科汛自定义SQL标签灵活运用,手把手教您打造chinaz首页导航


 


http://bbs.kesion.com/dispbbs.asp?BoardID=42&ID=70434&replyID=&skin=1


 


 


科汛自定义SQL标签教程轻松打造一些头条类效果


 


http://bbs.kesion.com/dispbbs.asp?boardID=41&ID=35253&page=1


 


SQL标签——按栏目显示终级文章列表导读效果


http://bbs.kesion.com/dispbbs.asp?boardID=41&ID=36801&page=1


 


[分享]V5.5新增标签-通用循环标签(2008-12-10整理更新)


 


http://bbs.kesion.com/dispbbs.asp?boardid=41&Id=61805


 


[经典教程]利用SQL标签制作幻灯特效(2008-12-19科汛论坛首发) 


 


http://bbs.kesion.com/dispbbs.asp?boardid=41&Id=62665


 


使用sql标签调用小论坛新帖(适合V5.5版本) 


 


http://bbs.kesion.com/dispbbs.asp?BoardID=41&ID=62732&replyID=&skin=1


 


利用自定义SQL函数标签调用地区供求信息


 


http://bbs.kesion.com/dispbbs.asp?BoardID=42&ID=63897&replyID=&skin=1


 


自定义SQL函数标签调用最新加盟的公司名称


 


http://bbs.kesion.com/dispbbs.asp?boardid=42&id=63898&star=1&page=1


 


SQL灵活设置NEW字样的显示时间.或其它与文章时间有关的效果 (cngothic提供)


http://bbs.kesion.com/dispbbs.asp?BoardID=41&replyID=66055&ID=62557&skin=1


 


用SQL嵌套实现树型菜单!!(三级,前两极为栏目,最后显示每个二级栏目下的文章)(zhangwlx提供)


http://bbs.kesion.com/dispbbs.asp?boardid=41&id=68939


 


 


 


 



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

6496

主题

191

广播

251

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

用户积分:46050 分
登录次数:4182 次
注册时间:2006/4/26
最后登录:2024/11/21
任我行 发表于:2008/1/12 22:39:00   | 显示全部帖子 查看该作者主题 沙发 
科汛在线网校系统

第二节 实例:用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

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

用户积分:46050 分
登录次数:4182 次
注册时间:2006/4/26
最后登录:2024/11/21
任我行 发表于:2008/1/14 20:17:00   | 显示全部帖子 查看该作者主题 藤椅 
科汛在线网校系统

今晚我们接着上面两节课来讲一下利用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) 回到顶部顶端 回到底部底部
任我行 当前离线

6496

主题

191

广播

251

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

用户积分:46050 分
登录次数:4182 次
注册时间:2006/4/26
最后登录:2024/11/21
任我行 发表于:2008/1/12 20:57:00   | 显示全部帖子 查看该作者主题 板凳 
科汛智能建站系统

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) 回到顶部顶端 回到底部底部
<上一主题 | 下一主题 >
Powered By KesionCMS Version X1
厦门科汛软件有限公司 © 2006-2016 页面执行3.22266秒 powered by KesionCMS 9.0