【MySQL】4、Select查询语句
4.Select查询语句
4.1、select语句
<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; // 创建连接 $conn = mysqli_connect($servername, $username, $password, $dbname); // Check connection if (!$conn) { die("连接失败: " . mysqli_connect_error()); } $sql = "SELECT id, firstname, lastname FROM MyGuests"; $result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) > 0) { //判断结果集是否有数据 // 输出数据 while($row = mysqli_fetch_array($result)) { echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; } } else { echo "0 结果"; } mysqli_close($conn); ?>
上面这个例子在 $sql 变量中存放由 mysqli_query() 函数返回的数据。接下来,我们使用 mysqli_fetch_array() 函数以数组的形式从记录集返回第一行。每个随后对 mysqli_fetch_array() 函数的调用都会返回记录集中的下一行。 while loop 语句会循环记录集中的所有记录。为了输出每行的值,我们使用了 PHP 的 $result 变量 ($result[‘FirstName’] 和 $result[‘LastName’])。
4.2、MySQL Where 条件子句
如需选取匹配指定条件的数据,请向 SELECT 语句添加 WHERE 子句。
SELECT * FROM user WHERE id = 1
下面的运算符可与 WHERE 子句一起使用:
运算符 | 说明 |
---|---|
= | 等于 |
!= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于或等于 |
<= | 小于或等于 |
BETWEEN | 介于一个包含范围内 |
LIKE | 搜索匹配的模式 |
注释:SQL 语句对大小写不敏感。WHERE 与 where 等效。
4.3、Order By 排序关键词
ORDER BY 关键词用于对记录集中的数据进行排序。
SELECT column_name(s) FROM table_name ORDER BY column_name
升序或降序的排序
如果您使用 order by 关键词,记录集的排序顺序默认是升序(1 在 9 之前,”a” 在 “p” 之前)。
请使用 DESC 关键词来设定降序排序(9 在 1 之前,”p” 在 “a” 之前):
SELECT column_name(s) FROM table_name ORDER BY column_name DESC
根据两列进行排序
可以根据多个列进行排序。当按照多个列进行排序时,只有第一列相同时才使用第二列:
SELECT column_name(s) FROM table_name ORDER BY column_name1, column_name2
4.4、limit 限定查询语句
limit 关键词用于对指定记录进行查询,常用于分页显示记录。
select * from guestbook limit 4 , 10 //获取从第4条后的10条信息 select * from guestbook order by id desc limit 5 //按降序获取前五条信息
这条语句表示在guestbook表里获取从第5条开始到第14条结束的记录。
4.5、like关键字的模糊查询
1、使用通配符“%”的 where 子句
select * from tb_file where content like '%好%' or content like '%高%';
2、使用通配符“_”的 where 子句
select * from tb_user where regname like '_soft';
4.6、常规多表查询(两个表具有相同的公共字段)
selete * form a,b where a.c=b.c //c为两个表中相同的字段,返回a表和b表条件匹配的所有记录 select * from a left join b where a.c=b.c //效果同第一句,返回a表和b表条件匹配的所有记录
left join左连接显示两个表的数据详解
(两个表具有相同的公共字段)
select 左表名.字段名,右表名.字段名 from 左表名 left join 右表名 on 左表名.字段名=右表名.字段名
“Persons” 表:
Id_P | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Adams | John | Oxford Street | London |
2 | Bush | George | Fifth Avenue | New York |
“Orders” 表:
Id_O | OrderNo | Id_P |
---|---|---|
3 | 22456 | 1 |
4 | 24562 | 1 |
select Persons.LastName, Persons.FirstName, Orders.OrderNo from Persons left join Orders ON Persons.Id_P=Orders.Id_P order by Persons.LastName
结果集:
LastName | FirstName | OrderNo |
---|---|---|
Adams | John | 22456 |
Adams | John | 24562 |
Bush | George |
注意:在使用left jion时,on和where条件的区别如下:
1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉(….left jion…where… 查询多个表的结果 = …. from….where… 查询多个表的结果相同)。
4.7、GROUP BY 语句
举例:我们拥有下面这个 “Orders” 表:
O_Id | OrderDate | OrderPrice | Customer |
---|---|---|---|
1 | 2008/12/29 | 1000 | Bush |
2 | 2008/11/23 | 1600 | Carter |
3 | 2008/10/05 | 700 | Bush |
4 | 2008/09/28 | 300 | Bush |
5 | 2008/08/06 | 2000 | Adams |
6 | 2008/07/21 | 100 | Carter |
现在,我们希望查找每个客户的总金额(总订单)。我们想要使用 GROUP BY 语句对客户进行组合。
我们使用下列 SQL 语句:
SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer //根据客户名字进行统计分组,可同时并存多种分组方式。用逗号隔开
结果集类似这样:
Customer | SUM(OrderPrice) |
---|---|
Bush | 2000 |
Carter | 1700 |
Adams | 2000 |
//having在group by 之后使用 SELECT * from website GROUP BY name HAVING SUM(count) > 200;
4.8、IN子句
//下面语句查询1、3年级的学生: SELECT * FROM student WHERE grade IN ('1','2');