3.6 检索记录
除非最终检索它们并利用它们来做点事情,否则将记录放入数据库没什么好处。这就是select 语句的用途,即帮助取出数据。select 大概是sql 语言中最常用的语句,而且怎样使用它也最为讲究;用它来选择记录可能相当复杂,可能会涉及许多表中列之间的比较。select 语句的语法如下:
除了词“ s e l e c t”和说明希望检索什么的column_list 部分外,语法中的每样东西都是可选的。有的数据库还需要from 子句。mysql 有所不同,它允许对表达式求值而不引用任何表:
在第1章中,我们对select 语句下了很大的功夫,主要集中介绍了列选择的列表和where、group by、order by、h aving 以及limit 子句。本章中,我们将主要精力放在select 语句中最可能令人搞不清的方面,即连接( j o i n)上。我们将介绍mysql 支持的连接类型、它们的含义、怎样指定它们等。这样做将有助于更有效地使用m y s q l,因为在许多情况下,解决怎样编写查询的关键是确定怎样将表恰当地连接在一起。还应该参阅一下本章后面3 . 8节“解决方案随笔”。在那一节中将会找到解决几个sql 问题的方案,它们多数
都涉及select 语句这样或那样的功能。
使用select 的一个问题是,在第一次遇到一种新的问题时,并不总是能够知道怎样编写select 查询来解决它。但在解决以后,再遇到类似的问题时,可利用其中的经验。select 大概是过去的经验在能够有效地使用中起很大作用的语句,这是因为使用它的方法太多的原故。
在有了一定的经验后,可将这些经验用于新问题,您会发现自己思考问题类似于,“噢,是的,它就是一个left join 问题。”或者,“啊哈,这就是一个受各对索引列制约的三路线连接。”(指出这一点,实际上我也感到有点不愿意。听到经验有帮助,您可能受到一定的鼓舞。另外,考虑到您最终能那样思考问题也会令自己有点惊讶。)下几节中介绍怎样利用mysql 支持的连接操作的格式,多数例子使用了下面的两个表。它们很小,很简单,足以很清楚地看出每种连接的效果。
3.6.1 平凡连接
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器