MySQL
一个关于SQL的技术问题
deminy 在 周二, 2009-12-08 22:48 提交
目前我还没有发现很好的在线剪贴板工具。通常如果碰到需要零时记录一些事情的时候,我往往会打开Google的notebook网站(该服务已经不对新用户开放了),在里面随手把需要记录的资料贴上去。然后每隔一些日子,清理掉一些过时的临时记录。
今晚清理Google notebook记录的时候,看到下面两段SQL查询语句,是我前几个月在工作时顺手整理的一个问题临时存在了那里,于是贴出来,算是一个技术方面的小问题在网上分享一下:这两个查询语句的区别是什么?
上面两个SQL语句是用MySQL写的。如果需要该问题的数据表结构(和模拟数据),可以在WikiPedia英文网站的“Join (SQL)”一文中找到。
答案我就不更新在网志里了,相信迟早访客回复里面会有正解的。
今晚清理Google notebook记录的时候,看到下面两段SQL查询语句,是我前几个月在工作时顺手整理的一个问题临时存在了那里,于是贴出来,算是一个技术方面的小问题在网上分享一下:这两个查询语句的区别是什么?
SELECT
*
FROM
Employee e
LEFT JOIN Department d
ON e.DepartmentID = d.DepartmentID
WHERE
d.DepartmentName IS NOT NULL
*
FROM
Employee e
LEFT JOIN Department d
ON e.DepartmentID = d.DepartmentID
WHERE
d.DepartmentName IS NOT NULL
SELECT
*
FROM
Employee e
LEFT JOIN Department d
ON e.DepartmentID = d.DepartmentID AND d.DepartmentName IS NOT NULL
*
FROM
Employee e
LEFT JOIN Department d
ON e.DepartmentID = d.DepartmentID AND d.DepartmentName IS NOT NULL
上面两个SQL语句是用MySQL写的。如果需要该问题的数据表结构(和模拟数据),可以在WikiPedia英文网站的“Join (SQL)”一文中找到。
答案我就不更新在网志里了,相信迟早访客回复里面会有正解的。
类别:
Sams - MySQL Database Design and Tuning
deminy 在 周六, 2006-04-22 11:16 提交
Sams出版社 (Sams Publishing,一家非常有名的电脑书籍出版公司) 在2005年6月出了一本书:《MySQL数据库设计和优化》(MySQL Database Design and Tuning)。今天翻了翻,觉得写得不错。
这本书介绍了一些MySQL数据库设计、代码编写、维护方面的技巧,适合数据库管理员和中、高级程序员阅读。
MySQL方面的书籍多如牛毛,不同的书针对不同的目标读者。但就程序员个人能力水平而言,就可以分为初级、中级、高级这几种。对于PHP程序员,如果你懂Smarty,懂adoDB,你可以被认为是一个中级程序员。但这本书不是为(成为)中级程序员准备的,而只是为(成为)高级程序员准备的。
显然,这本书不会介绍MySQL的一些基础知识等等。
数据库设计人员适合阅读第二部分:高级数据库设计概念(Advanced Database Design Concepts);程序员适合阅读该书第三部分:优化应用代码(Optimizing Application Code)。
如果只是想靠一门技术而谋取一份工作的话,这本书没有读的必要;如果是对一门技术有职业兴趣、或者想把一个项目做好或做得出色的话,这本书才有读的必要。
最后说一个小插曲。上学期(2005秋季)我大概曾在520课程和558课程演讲中说到目前MySQL 5虽然已经支持stored procedures(存储过程)等,但还未能支持trigger(触发器)。实际上当时我说错了。从这本书中我们可以看到,MySQL v5.0.2 (2004年12月发布)已经开始对trigger有了初步的支持。
这本书介绍了一些MySQL数据库设计、代码编写、维护方面的技巧,适合数据库管理员和中、高级程序员阅读。
MySQL方面的书籍多如牛毛,不同的书针对不同的目标读者。但就程序员个人能力水平而言,就可以分为初级、中级、高级这几种。对于PHP程序员,如果你懂Smarty,懂adoDB,你可以被认为是一个中级程序员。但这本书不是为(成为)中级程序员准备的,而只是为(成为)高级程序员准备的。
显然,这本书不会介绍MySQL的一些基础知识等等。
数据库设计人员适合阅读第二部分:高级数据库设计概念(Advanced Database Design Concepts);程序员适合阅读该书第三部分:优化应用代码(Optimizing Application Code)。
如果只是想靠一门技术而谋取一份工作的话,这本书没有读的必要;如果是对一门技术有职业兴趣、或者想把一个项目做好或做得出色的话,这本书才有读的必要。
最后说一个小插曲。上学期(2005秋季)我大概曾在520课程和558课程演讲中说到目前MySQL 5虽然已经支持stored procedures(存储过程)等,但还未能支持trigger(触发器)。实际上当时我说错了。从这本书中我们可以看到,MySQL v5.0.2 (2004年12月发布)已经开始对trigger有了初步的支持。
类别:
关于MySQL的中文全文检索技术
deminy 在 周四, 2006-02-23 23:08 提交
昨天有访客提到网志程序senrendipity的站内搜索功能(需要用到MySQL数据库的全文检索技术)对中文的支持很差。我当时的回复是“限于客观原因等,此问题暂无理想的方案”。
后来我进一步地去网上做了相关的调查。根据MySQL数据库产品开发人员的意见,MySQL全文检索技术对东亚文字(包括中文、日文和韩文)的支持很差,是因为对于东亚文字的有效分词很难实现。一个并不完美但可以参考的使用方案是在用数据库存储东亚文字的时候,将两个东亚文字之间都留上空格,这样就可以实现对东亚文字的全文检索了。
当然这个方案只是一个临时的无可奈何之举。
2个著名的免费数据库系统MySQL和PostgreSQL都支持全文检索,但好像都不支持东亚文字的全文检索。而据我所知微软的SQL Server数据库产品是支持针对中文的全文检索的(想必Oracle也应该支持中文的全文检索)。因此,我在想,为什么就没有人去做一下MySQL的中文全文检索的研究工作呢?我们很多的研究生所作的毕业论文涉及各种各样的课题,但其中真正有价值、有意义的也许不是很多,那为什么不能把我们有限的精力拿来做点更有意义的事情呢?
当然我是不会去做这方面的研究的了,但我期望有人能够去解决这个问题。
[补充说明1] 可参考海量科技的MySQL Chinese+产品。该产品(部分)支持中文全文检索。 2006-03-04 04:03:26
后来我进一步地去网上做了相关的调查。根据MySQL数据库产品开发人员的意见,MySQL全文检索技术对东亚文字(包括中文、日文和韩文)的支持很差,是因为对于东亚文字的有效分词很难实现。一个并不完美但可以参考的使用方案是在用数据库存储东亚文字的时候,将两个东亚文字之间都留上空格,这样就可以实现对东亚文字的全文检索了。
当然这个方案只是一个临时的无可奈何之举。
2个著名的免费数据库系统MySQL和PostgreSQL都支持全文检索,但好像都不支持东亚文字的全文检索。而据我所知微软的SQL Server数据库产品是支持针对中文的全文检索的(想必Oracle也应该支持中文的全文检索)。因此,我在想,为什么就没有人去做一下MySQL的中文全文检索的研究工作呢?我们很多的研究生所作的毕业论文涉及各种各样的课题,但其中真正有价值、有意义的也许不是很多,那为什么不能把我们有限的精力拿来做点更有意义的事情呢?
当然我是不会去做这方面的研究的了,但我期望有人能够去解决这个问题。
[补充说明1] 可参考海量科技的MySQL Chinese+产品。该产品(部分)支持中文全文检索。 2006-03-04 04:03:26
类别:
无标题 (4428)
deminy 在 周一, 2004-04-26 16:44 提交
PHP 5 Release Candidate 2 昨天发布了。从现在开始,写PHP应该因循PHP 5来写。PHP + MySQL这对黄金组合还只剩下一件可以期待的重要改进了:MySQL对于存储过程的完全支持。
类别:
无标题 (0913)
deminy 在 周四, 2004-02-26 12:09 提交
下次用PHP+MySQL做项目的话,将尽量全面采用Stored Procedure来处理。MySQL 5已经支持Stored Procedure了。
类别: