詳解用SELECT命令在MySQL執(zhí)行查詢操作的教程
SQL SELECT命令被用來(lái)獲取數(shù)據(jù)從MySQL數(shù)據(jù)庫(kù)??梢允褂么嗣钤趍ysql>提示符下或使用腳本,如PHP。
語(yǔ)法:
下面是通用的SQL SELECT命令的語(yǔ)法來(lái)從MySQL表提取數(shù)據(jù):
SELECT field1, field2,...fieldN table_name1, table_name2... [WHERE Clause] [OFFSET M ][LIMIT N]
- 可以使用一個(gè)或多個(gè)以逗號(hào)分隔的表,包括各種使用WHERE子句條件。但是WHERE子句的SELECT命令是一個(gè)可選部分。
- 可以在一個(gè)單一的SELECT命令讀取一個(gè)或多個(gè)字段。
- 可以指定星號(hào)(*)的字段的地方。在這種情況下,SELECT將返回所有的字段
- 可以使用WHERE子句指定任何條件。
- 可以指定偏移用SELECT將開(kāi)始返回記錄的偏移量。默認(rèn)情況下,偏移量為0
- 可以限制返回的使用LIMIT屬性的數(shù)量。
從命令提示符獲取數(shù)據(jù):
這將使用SQL SELECT命令來(lái)從MySQL表tutorials_tbl獲取數(shù)據(jù)
例子:
下面的例子將返回所有記錄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腳本獲取數(shù)據(jù):
您可以使用相同的SQL SELECT命令進(jìn)入PHP函數(shù)mysql_query()。這個(gè)函數(shù)是用來(lái)執(zhí)行SQL命令后,另一個(gè)PHP函數(shù)mysql_fetch_array()可以用來(lái)獲取所有選定的數(shù)據(jù)。這個(gè)函數(shù)返回的行作為一個(gè)關(guān)聯(lián)數(shù)組/數(shù)字?jǐn)?shù)組或兩者。如果沒(méi)有更多的行這個(gè)函數(shù)返回FALSE。
下面是一個(gè)簡(jiǎn)單的例子,獲取記錄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);
?>
這些行的內(nèi)容被分配到變量$row,行中的值,然后打印。
注: 一定要記住,當(dāng)要插入到一個(gè)字符串?dāng)?shù)組的值直接用花括號(hào)。
在上面的例子中不斷MYSQL_ASSOC作為PHP函數(shù)mysql_fetch_array()第二個(gè)參數(shù),以便它返回一個(gè)關(guān)聯(lián)數(shù)組的行為。一個(gè)關(guān)聯(lián)數(shù)組,可以使用他們的名字,而不是使用索引訪問(wèn)字段。
PHP提供了另一種稱為mysql_fetch_assoc()函數(shù)也返回該行作為關(guān)聯(lián)數(shù)組。
實(shí)例:
試試下面的例子顯示從tutorial_tbl表的所有記錄,使用mysql_fetch_assoc()函數(shù)。
<?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,作為第二個(gè)參數(shù)的PHP函數(shù)mysql_fetch_array()。這將導(dǎo)致該函數(shù)返回一個(gè)數(shù)字索引的數(shù)組。
實(shí)例:
試試下面的例子顯示使用MYSQL_NUM參數(shù)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);
?>
所有上述三個(gè)例子,將產(chǎn)生相同的結(jié)果。
釋放內(nèi)存:
它是一種很好的做法,在每一個(gè)SELECT語(yǔ)句釋放游標(biāo)內(nèi)存。這可以通過(guò)使用PHP函數(shù)了mysql_free_result()。下面的例子來(lái)說(shuō)明它是如何被使用的。
實(shí)例:
試試下面的例子
<?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);
?>
在獲取數(shù)據(jù)的同時(shí)可以編寫(xiě)復(fù)雜的SQL,只要喜歡。程序?qū)⒈3峙c上述相同。
相關(guān)文章
SQL實(shí)現(xiàn)LeetCode(183.從未下單訂購(gòu)的顧客)
這篇文章主要介紹了SQL實(shí)現(xiàn)LeetCode(182.從未下單訂購(gòu)的顧客),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
真的了解MySQL中的binlog和redolog區(qū)別
MySQL的binlog和redolog都是用于記錄數(shù)據(jù)庫(kù)操作的日志文件,但是它們有不同的作用和特點(diǎn),今天給大家分享MySQL的binlog和redolog區(qū)別,感興趣的朋友一起看看吧2023-11-11
MySQL深分頁(yè)問(wèn)題解決的實(shí)戰(zhàn)記錄
優(yōu)化項(xiàng)目代碼過(guò)程中發(fā)現(xiàn)一個(gè)千萬(wàn)級(jí)數(shù)據(jù)深分頁(yè)問(wèn)題,覺(jué)著有必要給大家總結(jié)整理下,這篇文章主要給大家介紹了關(guān)于解決MySQL深分頁(yè)問(wèn)題的相關(guān)資料,需要的朋友可以參考下2021-09-09
MySQL索引詳解及演進(jìn)過(guò)程及面試題延伸
這篇文章主要介紹了MySQL索引詳解及演進(jìn)過(guò)程以及延申出面試題,索引在關(guān)系型數(shù)據(jù)庫(kù)中,是一種單獨(dú)的、物理的對(duì)數(shù)據(jù)庫(kù)表中的一列或者多列值進(jìn)行排序的一種存儲(chǔ)結(jié)構(gòu)2022-07-07

