详解用SELECT命令在MySQL执行查询操作的教程
sql select命令被用来获取数据从mysql数据库。可以使用此命令在mysql>提示符下或使用脚本,如php。
语法:
下面是通用的sql select命令的语法来从mysql表提取数据:
select field1, field2,...fieldn table_name1, table_name2... [where clause] [offset m ][limit n]
- 可以使用一个或多个以逗号分隔的表,包括各种使用where子句条件。但是where子句的select命令是一个可选部分。
- 可以在一个单一的select命令读取一个或多个字段。
- 可以指定星号(*)的字段的地方。在这种情况下,select将返回所有的字段
- 可以使用where子句指定任何条件。
- 可以指定偏移用select将开始返回记录的偏移量。默认情况下,偏移量为0
- 可以限制返回的使用limit属性的数量。
从命令提示符获取数据:
这将使用sql select命令来从mysql表tutorials_tbl获取数据
例子:
下面的例子将返回所有记录tutorials_tbl表:
root@host# mysql -u root -p password; enter password:******* mysql> use tutorials; database changed mysql> select * from tutorials_tbl +-------------+----------------+-----------------+-----------------+ | tutorial_id | tutorial_title | tutorial_author | submission_date | +-------------+----------------+-----------------+-----------------+ | 1 | learn php | john poul | 2007-05-21 | | 2 | learn mysql | abdul s | 2007-05-21 | | 3 | java tutorial | sanjay | 2007-05-21 | +-------------+----------------+-----------------+-----------------+ 3 rows in set (0.01 sec) mysql>
使用php脚本获取数据:
您可以使用相同的sql select命令进入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('could not connect: ' . mysql_error()); } $sql = 'select tutorial_id, tutorial_title, tutorial_author, submission_date from tutorials_tbl'; mysql_select_db('tutorials'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, mysql_assoc)) { echo "tutorial id :{$row['tutorial_id']} <br> ". "title: {$row['tutorial_title']} <br> ". "author: {$row['tutorial_author']} <br> ". "submission date : {$row['submission_date']} <br> ". "--------------------------------<br>"; } echo "fetched data successfully\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('could not connect: ' . mysql_error()); } $sql = 'select tutorial_id, tutorial_title, tutorial_author, submission_date from tutorials_tbl'; mysql_select_db('tutorials'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('could not get data: ' . mysql_error()); } while($row = mysql_fetch_assoc($retval)) { echo "tutorial id :{$row['tutorial_id']} <br> ". "title: {$row['tutorial_title']} <br> ". "author: {$row['tutorial_author']} <br> ". "submission date : {$row['submission_date']} <br> ". "--------------------------------<br>"; } echo "fetched data successfully\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('could not connect: ' . mysql_error()); } $sql = 'select tutorial_id, tutorial_title, tutorial_author, submission_date from tutorials_tbl'; mysql_select_db('tutorials'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, mysql_num)) { echo "tutorial id :{$row[0]} <br> ". "title: {$row[1]} <br> ". "author: {$row[2]} <br> ". "submission date : {$row[3]} <br> ". "--------------------------------<br>"; } echo "fetched data successfully\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('could not connect: ' . mysql_error()); } $sql = 'select tutorial_id, tutorial_title, tutorial_author, submission_date from tutorials_tbl'; mysql_select_db('tutorials'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, mysql_num)) { echo "tutorial id :{$row[0]} <br> ". "title: {$row[1]} <br> ". "author: {$row[2]} <br> ". "submission date : {$row[3]} <br> ". "--------------------------------<br>"; } mysql_free_result($retval); echo "fetched data successfully\n"; mysql_close($conn); ?>
在获取数据的同时可以编写复杂的sql,只要喜欢。程序将保持与上述相同。
上一篇: 详解在MySQL中创建表的教程