﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-workspace-随笔分类-数据库</title><link>http://www.blogjava.net/babymouse/category/37258.html</link><description>努力奋斗——I believe I can fly</description><language>zh-cn</language><lastBuildDate>Sun, 26 Jul 2009 11:44:02 GMT</lastBuildDate><pubDate>Sun, 26 Jul 2009 11:44:02 GMT</pubDate><ttl>60</ttl><item><title>SQL外链接操作学习备忘</title><link>http://www.blogjava.net/babymouse/archive/2009/07/26/288447.html</link><dc:creator>Robert Su</dc:creator><author>Robert Su</author><pubDate>Sun, 26 Jul 2009 08:12:00 GMT</pubDate><guid>http://www.blogjava.net/babymouse/archive/2009/07/26/288447.html</guid><wfw:comment>http://www.blogjava.net/babymouse/comments/288447.html</wfw:comment><comments>http://www.blogjava.net/babymouse/archive/2009/07/26/288447.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/babymouse/comments/commentRss/288447.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/babymouse/services/trackbacks/288447.html</trackback:ping><description><![CDATA[SELECT b.id, b.name, a. COUNT<br />
FROM (SELECT adminlevel, COUNT(*) AS [count]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM hrdc.i_ins_info<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GROUP BY adminlevel) a, hrdc.b_adminlevel b<br />
WHERE a.adminlevel =* b.id<br />
<br />
或者写成<br />
<br />
SELECT b.id, b.name, a. COUNT<br />
FROM (SELECT gdfield, COUNT(*) AS [count]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM hrdc.i_ins_info<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GROUP BY gdfield) a RIGHT JOIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hrdc.b_field b ON a.gdfield = b.id<br />
<br />
<br />
这是右连接的一个例子<br />
<br />
inner join(等值连接) 只返回两个表中联结字段相等的行<br />
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录<br />
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录<br />
on 指定表间联结字段及其关系的等号 "=" 表达式, 返回 true 或 false. 当表达式返回 true 时, 则查询中包含该记录. <br />
<br />
<br />
<br />
<p>7.5.2</p>
<p>&nbsp;程序代码<br />
Update (ctarticle AS a LEFT JOIN ctclass AS c ON a.classid = c.classid) LEFT JOIN cttag AS b ON a.articleid = b.articleid <br />
SET tag=tag+' ', b.articleid=a.articleid, b.classid=a.classid, b.nclassid=a.nclassid <br />
Where a.classid=23 AND a.nclassid=0 AND tagid is not null</p>
<p><br />
7.5.1 </p>
<p>&nbsp;程序代码<br />
Update (ctarticle AS a LEFT JOIN (ctnclass AS c LEFT JOIN
ctclass AS d ON c.classid = d.classid) ON a.nclassid = c.nclassid AND
a.classid = c.classid) LEFT JOIN cttag AS b ON a.articleid =
b.articleid SET tag=d.class+' '+c.nclass, b.articleid=a.articleid,
b.classid=a.classid, b.nclassid=a.nclassid Where a.classid=23 AND
a.nclassid=197;</p>
<p><br />
7.5 更新操作</p>
<p>74.5 左连接中数据的筛选</p>
<p>&nbsp;程序代码<br />
Insert INTO cttag(articleid,classid,nclassid) Select
a.articleid,a.classid,a.nclassid from ctarticle a left join cttag b on
a.articleid=b.articleid where b.articleid is null</p>
<p>//本语句功能为, 显示主表的全部内容, 插入数据到副表中没有的数据<br />
//主要作用为: 让数据减少冗余</p>
<p>7.4.4.1 上例中的延续</p>
<p>&nbsp;程序代码<br />
Select a.*, b.*, c.*, d.*<br />
FROM cttag as d left join
((ctarticle AS a LEFT JOIN ctclass AS b ON a.classid=b.classid) LEFT
JOIN ctnclass AS c ON a.nclassid=c.nclassid) on d.articleid=a.articleid;</p>
<p><br />
7.4.4 显示文章表中的全部, 调用类别表中的栏目</p>
<p>&nbsp;程序代码<br />
select a.*, b.*, c.* from (ctarticle a left join ctclass b on a.classid=b.classid) left join ctnclass c on a.nclassid=c.nclassid</p>
<p>//作用, 有时在文章表中包含了在个别类别表中没有的数据, 用这个语法可以读出文章表的全部数据<br />
//a 为 文章表, b 为主类别, c 为子类别</p>
<p>7.4.3 同上例, 选择追加数据时加上空格</p>
<p>&nbsp;程序代码<br />
Insert INTO cttag(articleid,classid,nclassid,tag)<br />
Select a.articleid,a.classid,a.nclassid,d.class+' '+c.nclass<br />
FROM
(ctarticle AS a left join (ctnclass c left join ctclass d on
c.classid=d.classid) on a.classid=c.classid and a.nclassid=c.nclassid)
LEFT JOIN cttag AS b ON a.articleid = b.articleid where a.classid=4 and
a.nclassid=154;</p>
<p><br />
7.4.2 连接N个表, 并追加数据到其中一个表, N=4</p>
<p>&nbsp;程序代码<br />
Insert INTO cttag(articleid,classid,nclassid,tag)<br />
Select a.articleid,a.classid,a.nclassid,d.class+c.nclass<br />
FROM
(ctarticle AS a left join (ctnclass c left join ctclass d on
c.classid=d.classid) on a.classid=c.classid and a.nclassid=c.nclassid)
LEFT JOIN cttag AS b ON a.articleid = b.articleid where a.classid=1 and
a.nclassid=1;</p>
<p>//解读<br />
插入到 表2(栏1,栏2,栏3,栏4)<br />
选择 别名a.栏1, 别名a.栏2, 别名a.栏3, 别名d.栏4 加上 别名c.栏5<br />
从
(表1 别名a 左连接 (表3 别名c 左连接 表4 别名d 在 别名c.栏2 等于 别名d.栏2) 在 别名a.栏2 等于 别名c.栏2 和
别名a.栏3=别名c.栏3) 左连接 表2 别名b 在 别名a.栏1 等于 别名b.栏1 在那里 别名a.栏2=1 和 别名a.栏3=1</p>
<p>7.4.1 连接两个表, 并追加数据到其中一个表</p>
<p>&nbsp;程序代码<br />
Insert INTO cttag(articleid,classid,nclassid)<br />
Select a.articleid,a.classid,a.nclassid<br />
FROM ctarticle AS a LEFT JOIN cttag AS b ON a.articleid = b.articleid where a.classid=1 and a.nclassid=1;</p>
<p>//解读<br />
插入到 表2(栏1,栏2,栏3)<br />
选择 别名a.栏1, 别名a.栏2, 别名a.栏3<br />
从 表1 别名a 左连接 表2 别名b 在 别名a.栏1 等于 别名b.栏1 在那里 别名a.栏4=1 和 别名a.栏5=1</p>
<p>7.4. 左连接</p>
<p>7.3.1 同步两表的数据</p>
<p>&nbsp;程序代码<br />
Update ctarticle a INNER JOIN cttag b ON a.articleid = b.articleid SET b.classid=a.classid, b.nclassid=a.nclassid;</p>
<p>//解读<br />
更新 表1 别名a 联接 表2 别名2 在 别名a.栏1 等于 别名b.栏1 设置 别名b.栏2 更新为 别名a.栏2, 别名b.栏3 更新为 别名a.栏3 </p>
<p>7.3 <span class="__mozilla-findbar-search" style="padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;">右外连接</span></p>
<p>&nbsp;程序代码<br />
select a.*, b.* from bunclass a right join ctclass b on a.classid=b.classid where a.nclassid=20</p>
<p>查询别名 a,b 表, 只匹配 b 表中的内容.</p>
<p>7.2.3 添加数据到连接表之一</p>
<p>&nbsp;程序代码<br />
Insert INTO cttag ( tag, articleid ) Select top 1 b.tag,
a.articleid FROM ctarticle AS a left JOIN cttag AS b ON a.articleid =
b.articleid Where a.articleid order by a.articleid desc;</p>
<p><br />
7.2.2 变通中的用法二</p>
<p>&nbsp;程序代码<br />
Insert INTO bureply <br />
Select b.*, a.classid, a.nclassid<br />
FROM article AS a INNER JOIN reply AS b ON a.articleid = b.articleid<br />
Where classid=50;</p>
<p><br />
7.2.1 实际应用中的变通</p>
<p>&nbsp;程序代码<br />
Insert INTO butag ( tag, articleid, classid, nclassid)<br />
Select b.tag, a.articleid, a.classid, a.nclassid<br />
FROM article AS a INNER JOIN tag AS b ON a.articleid = b.articleid<br />
Where classid=24;</p>
<p><br />
7.2 添加数据到其他表</p>
<p>&nbsp;程序代码<br />
Insert INTO butag ( tag, articleid )<br />
Select b.tag, a.articleid<br />
FROM article AS a INNER JOIN tag AS b ON a.articleid = b.articleid<br />
Where a.articleid&lt;&gt;False;</p>
<p>//解读<br />
添加到 接收表(列1,列2)<br />
选择 别名b.列1, 别名a.列2<br />
从 表1 表名a 联接 表2 表名b 在 别名a.列c 等于 别名b.列c<br />
在哪里 别名a.列c 不等于 没有</p>
<p>7.1.1 实际应用中的变通</p>
<p>&nbsp;程序代码<br />
Select b.tag, a.articleid, a.classid, a.nclassid<br />
FROM article AS a INNER JOIN tag AS b ON a.articleid = b.articleid<br />
Where a.classid=24;</p>
<p><br />
7.1 查询</p>
<p>&nbsp;程序代码<br />
Select b.tag, a.articleid<br />
FROM article AS a INNER JOIN tag AS b ON a.articleid = b.articleid<br />
Where a.articleid&lt;&gt;False;</p>
<p>//解读<br />
选择 别名b.列, 别名a.列<br />
从 表1 别名a 联接 表2 别名b 在 别名a.列c = 别名b.列c<br />
在哪里 别名a.列c 不等于 没有<br />
注: as 不是必要</p>
7. 外连接——交叉查询<br />
<br />
<img src ="http://www.blogjava.net/babymouse/aggbug/288447.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/babymouse/" target="_blank">Robert Su</a> 2009-07-26 16:12 <a href="http://www.blogjava.net/babymouse/archive/2009/07/26/288447.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle ：做数量统计的视图 &amp; 更新的存储过程</title><link>http://www.blogjava.net/babymouse/archive/2009/01/17/251664.html</link><dc:creator>Robert Su</dc:creator><author>Robert Su</author><pubDate>Sat, 17 Jan 2009 02:56:00 GMT</pubDate><guid>http://www.blogjava.net/babymouse/archive/2009/01/17/251664.html</guid><wfw:comment>http://www.blogjava.net/babymouse/comments/251664.html</wfw:comment><comments>http://www.blogjava.net/babymouse/archive/2009/01/17/251664.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/babymouse/comments/commentRss/251664.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/babymouse/services/trackbacks/251664.html</trackback:ping><description><![CDATA[create or replace view v_allinfo_stat_by_site as <br />
select a.*,b.BLACK_COUNT,b.WHITE_COUNT,b.GRAY_COUNT,b.AUTHOR_COUNT,group_count,audit_count,vblog_org_count,valbum_count from v_video_stat_by_site a,<br />
v_vblogger_stat_by_site b,<br />
(select count(*) group_count,site_id from vblogger_group group by site_id) c , <br />
(select count(*) audit_count,site_id from audit_web_video group by site_id) d , <br />
(select count(*) vblog_org_count,site_id from vblogger_org group by site_id) e , <br />
(select count(*) valbum_count,site_id from valbum group by site_id) f<br />
&nbsp;where a.site_id = b.site_id(+) and<br />
&nbsp;a.site_id = c.site_id(+) and<br />
&nbsp;a.site_id = d.site_id(+) and<br />
&nbsp;a.site_id = e.site_id(+) and<br />
&nbsp;a.site_id = f.site_id(+) <br />
&nbsp;order by a.all_count desc;<br />
<br />
<br />
c，d，e也是相当于视图<br />
a、b本身就是视图<br />
<br />
<br />
<span style="color: #0817ff;">存储过程</span>：<br />
create or replace procedure UPDATE_VBLOGGER_MONTHLY_WEEKLY as<br />
&nbsp; v_now_date&nbsp; NUMBER;<br />
begin<br />
--按月统计 <br />
&nbsp;&nbsp; SELECT TO_NUMBER(TO_CHAR(sysdate,'YYYYMM'))INTO v_now_date FROM dual;<br />
&nbsp;&nbsp; update vblogger v set v.monthly_video_count=0;<br />
&nbsp;&nbsp; update vblogger v set v.weekly_video_count=0;<br />
COMMIT;&nbsp; &nbsp;<br />
&nbsp;&nbsp; update vblogger v set v.monthly_video_count=(select count(*) from web_video w where GET_TIME_FORMAT(1,w.video_day)=v_now_date and v.site_id=w.site_id and v.name=w.video_author group by w.site_id,w.video_author) ;<br />
--按周统计<br />
&nbsp;&nbsp;&nbsp;&nbsp; SELECT TO_NUMBER(TO_CHAR(sysdate,'YYYYFMWW'))INTO v_now_date FROM dual;<br />
&nbsp;&nbsp;&nbsp;&nbsp; update vblogger v set v.weekly_video_count=(select count(*) from web_video w where GET_TIME_FORMAT(3,w.video_day)=v_now_date and v.site_id=w.site_id and v.name=w.video_author group by w.site_id,w.video_author) ;<br />
COMMIT;<br />
end;<br />
<img src ="http://www.blogjava.net/babymouse/aggbug/251664.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/babymouse/" target="_blank">Robert Su</a> 2009-01-17 10:56 <a href="http://www.blogjava.net/babymouse/archive/2009/01/17/251664.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>当日最热查询之SQL语句</title><link>http://www.blogjava.net/babymouse/archive/2009/01/12/251025.html</link><dc:creator>Robert Su</dc:creator><author>Robert Su</author><pubDate>Mon, 12 Jan 2009 13:55:00 GMT</pubDate><guid>http://www.blogjava.net/babymouse/archive/2009/01/12/251025.html</guid><wfw:comment>http://www.blogjava.net/babymouse/comments/251025.html</wfw:comment><comments>http://www.blogjava.net/babymouse/archive/2009/01/12/251025.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/babymouse/comments/commentRss/251025.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/babymouse/services/trackbacks/251025.html</trackback:ping><description><![CDATA[之前做联合查询很慢也很麻烦；需要对web_video表跟webvideo _day视图做联合查询，但是速度奇慢<br />
select a.* from web_video a&nbsp;&nbsp;webvideo b where a.id=b.id and a.site_id=?<br />
<br />
换成这种方式之后就快多了<br />
select a.* from web_video a where a.site_id=? and a.video_day=to_number(to_char(sysdate, 'yyyymmdd')); <br />
<br />
video_day是一个物化视图 MATERIALIZED VIEW——可以大大提高数据库查询的速度。
<img src ="http://www.blogjava.net/babymouse/aggbug/251025.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/babymouse/" target="_blank">Robert Su</a> 2009-01-12 21:55 <a href="http://www.blogjava.net/babymouse/archive/2009/01/12/251025.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>