详解用SELECT命令在MySQL执行查询操作的教程
SQLSELECT命令被用来获取数据从MySQL数据库。可以使用此命令在mysql>提示符下或使用脚本,如PHP。
语法:
下面是通用的SQLSELECT命令的语法来从MySQL表提取数据:
SELECTfield1,field2,...fieldNtable_name1,table_name2... [WHEREClause] [OFFSETM][LIMITN]
- 可以使用一个或多个以逗号分隔的表,包括各种使用WHERE子句条件。但是WHERE子句的SELECT命令是一个可选部分。
- 可以在一个单一的SELECT命令读取一个或多个字段。
- 可以指定星号(*)的字段的地方。在这种情况下,SELECT将返回所有的字段
- 可以使用WHERE子句指定任何条件。
- 可以指定偏移用SELECT将开始返回记录的偏移量。默认情况下,偏移量为0
- 可以限制返回的使用LIMIT属性的数量。
从命令提示符获取数据:
这将使用SQLSELECT命令来从MySQL表tutorials_tbl获取数据
例子:
下面的例子将返回所有记录tutorials_tbl表:
root@host#mysql-uroot-ppassword; Enterpassword:******* mysql>useTUTORIALS; Databasechanged mysql>SELECT*fromtutorials_tbl +-------------+----------------+-----------------+-----------------+ |tutorial_id|tutorial_title|tutorial_author|submission_date| +-------------+----------------+-----------------+-----------------+ |1|LearnPHP|JohnPoul|2007-05-21| |2|LearnMySQL|AbdulS|2007-05-21| |3|JAVATutorial|Sanjay|2007-05-21| +-------------+----------------+-----------------+-----------------+ 3rowsinset(0.01sec) mysql>
使用PHP脚本获取数据:
您可以使用相同的SQLSELECT命令进入PHP函数mysql_query()。这个函数是用来执行SQL命令后,另一个PHP函数mysql_fetch_array()可以用来获取所有选定的数据。这个函数返回的行作为一个关联数组/数字数组或两者。如果没有更多的行这个函数返回FALSE。
下面是一个简单的例子,获取记录tutorials_tbl表。
例子:
试试下面的例子显示tutorials_tbl表的所有记录。
<?php $dbhost='localhost:3036'; $dbuser='root'; $dbpass='rootpassword'; $conn=mysql_connect($dbhost,$dbuser,$dbpass); if(!$conn) { die('Couldnotconnect:'.mysql_error()); } $sql='SELECTtutorial_id,tutorial_title, tutorial_author,submission_date FROMtutorials_tbl'; mysql_select_db('TUTORIALS'); $retval=mysql_query($sql,$conn); if(!$retval) { die('Couldnotgetdata:'.mysql_error()); } while($row=mysql_fetch_array($retval,MYSQL_ASSOC)) { echo"TutorialID:{$row['tutorial_id']}<br>". "Title:{$row['tutorial_title']}<br>". "Author:{$row['tutorial_author']}<br>". "SubmissionDate:{$row['submission_date']}<br>". "--------------------------------<br>"; } echo"Fetcheddatasuccessfully\n"; mysql_close($conn); ?>
这些行的内容被分配到变量$row,行中的值,然后打印。
注:一定要记住,当要插入到一个字符串数组的值直接用花括号。
在上面的例子中不断MYSQL_ASSOC作为PHP函数mysql_fetch_array()第二个参数,以便它返回一个关联数组的行为。一个关联数组,可以使用他们的名字,而不是使用索引访问字段。
PHP提供了另一种称为mysql_fetch_assoc()函数也返回该行作为关联数组。
实例:
试试下面的例子显示从tutorial_tbl表的所有记录,使用mysql_fetch_assoc()函数。
<?php $dbhost='localhost:3036'; $dbuser='root'; $dbpass='rootpassword'; $conn=mysql_connect($dbhost,$dbuser,$dbpass); if(!$conn) { die('Couldnotconnect:'.mysql_error()); } $sql='SELECTtutorial_id,tutorial_title, tutorial_author,submission_date FROMtutorials_tbl'; mysql_select_db('TUTORIALS'); $retval=mysql_query($sql,$conn); if(!$retval) { die('Couldnotgetdata:'.mysql_error()); } while($row=mysql_fetch_assoc($retval)) { echo"TutorialID:{$row['tutorial_id']}<br>". "Title:{$row['tutorial_title']}<br>". "Author:{$row['tutorial_author']}<br>". "SubmissionDate:{$row['submission_date']}<br>". "--------------------------------<br>"; } echo"Fetcheddatasuccessfully\n"; mysql_close($conn); ?>
也可以使用常量MYSQL_NUM,作为第二个参数的PHP函数mysql_fetch_array()。这将导致该函数返回一个数字索引的数组。
实例:
试试下面的例子显示使用MYSQL_NUM参数tutorials_tbl表中的所有记录。
<?php $dbhost='localhost:3036'; $dbuser='root'; $dbpass='rootpassword'; $conn=mysql_connect($dbhost,$dbuser,$dbpass); if(!$conn) { die('Couldnotconnect:'.mysql_error()); } $sql='SELECTtutorial_id,tutorial_title, tutorial_author,submission_date FROMtutorials_tbl'; mysql_select_db('TUTORIALS'); $retval=mysql_query($sql,$conn); if(!$retval) { die('Couldnotgetdata:'.mysql_error()); } while($row=mysql_fetch_array($retval,MYSQL_NUM)) { echo"TutorialID:{$row[0]}<br>". "Title:{$row[1]}<br>". "Author:{$row[2]}<br>". "SubmissionDate:{$row[3]}<br>". "--------------------------------<br>"; } echo"Fetcheddatasuccessfully\n"; mysql_close($conn); ?>
所有上述三个例子,将产生相同的结果。
释放内存:
它是一种很好的做法,在每一个SELECT语句释放游标内存。这可以通过使用PHP函数了mysql_free_result()。下面的例子来说明它是如何被使用的。
实例:
试试下面的例子
<?php $dbhost='localhost:3036'; $dbuser='root'; $dbpass='rootpassword'; $conn=mysql_connect($dbhost,$dbuser,$dbpass); if(!$conn) { die('Couldnotconnect:'.mysql_error()); } $sql='SELECTtutorial_id,tutorial_title, tutorial_author,submission_date FROMtutorials_tbl'; mysql_select_db('TUTORIALS'); $retval=mysql_query($sql,$conn); if(!$retval) { die('Couldnotgetdata:'.mysql_error()); } while($row=mysql_fetch_array($retval,MYSQL_NUM)) { echo"TutorialID:{$row[0]}<br>". "Title:{$row[1]}<br>". "Author:{$row[2]}<br>". "SubmissionDate:{$row[3]}<br>". "--------------------------------<br>"; } mysql_free_result($retval); echo"Fetcheddatasuccessfully\n"; mysql_close($conn); ?>
在获取数据的同时可以编写复杂的SQL,只要喜欢。程序将保持与上述相同。