目录
4、检索不同的值(去除重复值)DISTINCT 关键词用于返回唯一不同的值。
本篇文章会在之后将部分内容更新完善!!!
一、检索数据
1、SQL SELECT 语法
SELECT 语句用于从数据库中选取数据。
结果被存储在一个结果表中,称为结果集。
SELECT语句的基本格式为:
SELECT 要查询的列名 FROM 表名 WHERE 限制条件
SELECT * FROM table_name;//直接查询table表的所有数据;
SELECT column_name,column_name FROM table_name; //查询table的column_name,column_name列的数据;
1、检索单个列数据
select prod_name from products;
2、检索多个列数据
select prod_id,prod_name,prod_pricew from products;
3、检索所有列
select * from products;
4、检索不同的值(去除重复值)DISTINCT 关键词用于返回唯一不同的值。
SELECT DISTINCT column_name,column_name FROM table_name;//查询table表的列的不同值;
下面的 SQL 语句仅从 "Websites" 表的 "country" 列中选取唯一不同的值,也就是去掉 "country" 列重复值:
SELECT DISTINCT country FROM Websites;
select distinct vend_id from products;
5、限制检索结果
在SQL Server中使用SELECT时,可以用TOP关键字来限制最多返回多少行,top 5只检索前5行。
select top 1 prod_name from products;
SQL WHERE 语法
WHERE 子句用于过滤记录。
SQL WHERE 子句WHERE 子句用于提取那些满足指定条件的记录。
SELECT column_name,column_name FROM table_name WHERE column_name operator value;
where后面可以加的限制条件:
限制条件可以有数字符号(=,< , > , >= , <=)
WHERE 后面可以跟多条限制条件,根据条件之间的逻辑关系,可以用AND 或OR 连接。
关键词IN 和NOT IN 用于筛选‘在’或 ‘不在’某个范围内的结果。
关键字LIKE (like)在SQL语句中和通配符(_ 和 %)一起使用。
通配符代表未知字符,**_代表一个未指定字符,%代表不定个未指定字符。
运算符描述
= 等于
<> 不等于。注释:在 SQL 的一些版本中,该操作符可被写成 !=
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式
IN 指定针对某个列的多个可能值
Select name,age from table order by age desc;
对结果按照某一列来排序,要用关键字ORDER BY(order by)排序关键字。默认情况下,ORDER BY 的结果是升序排列,而使用关键字ASC 和 DESC 可指定为升序或降序排序。

COUNT函数可用于任何数据类型(因为它只是计数);
SUM、AVG**函数只能对**数字类数据类型**做计算;
MAX 和 MIN 可用于**数值、字符串、日期时间数据类型**。
关键字AS可以给值重命名
如果需要显示两个表或多个表中的数据,必须使用连接(join)操作。
SELECT DISTINCT 语句用于返回唯一不同的值。
SQL SELECT DISTINCT 语句在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。
常用查看命令
show databases; --查看所有数据库,
use bookstore; --选择使用数据库,
show tables;--查看数据表,
desc skywide_tbl;--查看表中的字段的属性;
select * from table 查看的为一个数据表,所有字段中的内容都显现出来,但是字段属性没有显示。
desc table 是查看的一个表中的字段的属性,
Type:设置的数据类型,
Null:是否可以设置为空值,
Key:是否有约束或约束类别,
Default:是否设置了默认值,
Extra:额外的信息说明。
CREATE TABLE IF NOT EXISTS `**skywide_tbl`(**
`skywide_id` INT UNSIGNED AUTO_INCREMENT,
`skywide_title` VARCHAR(100) NOT NULL,
`skywide_author` VARCHAR(40) NOT NULL,
submission_date DATE,
PRIMARY KEY ( skywide_id )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
PHP脚本来获取数据
使用 PHP 函数的 mysqli_query() 及 SQL SELECT 命令来获取数据。
该函数用于执行 SQL 命令,然后通过 PHP 函数 mysqli_fetch_array() 来使用或输出所有查询的数据。
mysqli_fetch_array() 函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有 返回根据从结果集取得的行生成的数组,如果没有更多行则返回 false。
显示数据表 skywide_tbl 的所有记录。
使用 mysqli_fetch_array MYSQLI_ASSOC 参数获取数据:
<?php
$dbhost = 'localhost'; // mysql服务器主机地址
$dbuser = 'root'; // mysql用户名
$dbpass = '123456'; // mysql用户名密码
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('连接失败: ' . mysqli_error($conn));
}
// 设置编码,防止中文乱码
mysqli_query($conn , "set names utf8");
$sql = 'SELECT skywdie_id, skywide_title,
skywdie_author, submission_date
FROM skywdie_tbl';
mysqli_select_db( $conn, 'skywide' );
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
die('无法读取数据: ' . mysqli_error($conn));
}
echo '<h2>mysqli_fetch_array 测试</h2>';
echo '<table border="1"><tr><td>教程 ID</td><td>标题</td><td>作者</td><td>提交日期</td></tr>';
while($row = mysqli_fetch_array($retval, MYSQLI_ASSOC))
{
echo "<tr><td> {$row['skywide_id']}</td> ".
"<td>{$row['skywide_title']} </td> ".
"<td>{$row['skywide_author']} </td> ".
"<td>{$row['submission_date']} </td> ".
"</tr>";
}
echo '</table>';
mysqli_close($conn);
?>
SQL WHERE 子句
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2..... // SQL SELECT 语句使用 WHERE 子句从数据表中读取数据的通用语法
Where 子句搜索 empno 等于 7900 的数据:
Select * from emp where empno=7900;
Where +条件(筛选行)条件:
列,比较运算符,值比较运算符包涵:
= > < >= ,<=, !=,<> 表示(不等于)
Select * from emp where ename='SMITH';
例子中的 SMITH 用单引号引起来,表示是字符串,字符串要区分大小写。
逻辑运算
And:与 同时满足两个条件的值。
Select * from emp where sal > 2000 and sal < 3000;
查询 EMP 表中 SAL 列中大于 2000 小于 3000 的值。
Or:或 满足其中一个条件的值Select * from emp where sal > 2000 or comm > 500;
查询 emp 表中 SAL 大于 2000 或 COMM 大于500的值。
Not:非 满足不包含该条件的值。select * from emp where not sal > 1500;
查询EMP表中 sal 小于等于 1500 的值。
逻辑运算的优先级:
() not and or特殊条件
1.空值判断: is nullSelect * from emp where comm is null;
查询 emp 表中 comm 列中的空值。
2.between and (在 之间的值)Select * from emp where sal between 1500 and 3000;
查询 emp 表中 SAL 列中大于 1500 的小于 3000 的值。
注意:大于等于 1500 且小于等于 3000, 1500 为下限,3000 为上限,下限在前,上限在后,查询的范围包涵有上下限的值。
3.InSelect * from emp where sal in (5000,3000,1500);
查询 EMP 表 SAL 列中等于 5000,3000,1500 的值。
4.likeLike模糊查询
Select * from emp where ename like 'M%';
查询 EMP 表中 Ename 列中有 M 的值,M 为要查询内容中的模糊信息。
% 表示多个字值,_ 下划线表示一个字符;
M% : 为能配符,正则表达式,表示的意思为模糊查询信息为 M 开头的。
%M% : 表示查询包含M的所有内容。
%M_ : 表示查询以M在倒数第二位的所有内容。
不带比较运算符的 WHERE 子句:
WHERE 子句并不一定带比较运算符,当不带运算符时,会执行一个隐式转换。
当 0 时转化为 false,1 转化为 true。
例如:
SELECT studentNO FROM student WHERE 0则会返回一个空集,因为每一行记录 WHERE 都返回 false。
SELECT studentNO FROM student WHERE 1返回 student 表所有行中 studentNO 列的值。
因为每一行记录 WHERE 都返回 true。
INSERT INTO SQL语句
数据是字符型,必须使用单引号或者双引号,如:"value"
INSERT INTO table_name ( field1, field2,...fieldN )
VALUES ( value1, value2,...valueN );
PHP脚本插入数据
使用PHP 的 mysqli_query() 函数来执行 SQL INSERT INTO命令来插入数据。
该函数有两个参数,在执行成功时返回 TRUE,否则返回 FALSE。
语法
mysqli_query(connection,query,resultmode);
参数 描述
connection 必需。规定要使用的 MySQL 连接。
query 必需,规定查询字符串。
resultmode 可选。一个常量。可以是下列值中的任意一个:MYSQLI_USE_RESULT(如果需要检索大量数据,请使用这个)MYSQLI_STORE_RESULT(默认)
以下实例中程序接收用户输入的三个字段数据,并插入数据表中:
添加数据
<?php
$dbhost = 'localhost'; // mysql服务器主机地址
$dbuser = 'root'; // mysql用户名
$dbpass = '123456'; // mysql用户名密码
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('连接失败: ' . mysqli_error($conn));
}
echo '连接成功 ';
// 设置编码,防止中文乱码
mysqli_query($conn , "set names utf8");
$skywdie_title = '学习 Python';
$skywdie_author = 'skywdie.COM';
$submission_date = '2016-03-06';
$sql = "INSERT INTO skywdie_tbl ".
"(skywdie_title,skywdie_author, submission_date) ".
"VALUES ".
"('$skywdie_title','$skywdie_author','$submission_date')";
mysqli_select_db( $conn, 'skywdie' );
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
die('无法插入数据: ' . mysqli_error($conn));
}
echo "数据插入成功\n";
mysqli_close($conn);
?>
含有中文的数据插入,需要添加 mysqli_query($conn , "set names utf8"); 语句。
MySQL UPDATE 更新
需要修改或更新 MySQL 中的数据,我们可以使用 SQL UPDATE 命令来操作。
语法
以下是 UPDATE 命令修改 MySQL 数据表数据的通用 SQL 语法:
UPDATE table_name SET field1=new-value1, field2=new-value2
可以同时更新一个或多个字段。
可以在 WHERE 子句中指定任何条件。
可以在一个单独表中同时更新数据。
当你需要更新数据表中指定行的数据时 WHERE 子句是非常有用的。
通过命令提示符更新数据
以下我们将在 SQL UPDATE 命令使用 WHERE 子句来更新 skywdie_tbl 表中指定的数据:
以下实例将更新数据表中 skywdie_id 为 3 的 skywdie_title 字段值:
SQL UPDATE 语句:
mysql> UPDATE skywdie_tbl SET skywdie_title='学习 C++' WHERE skywdie_id=3;
Query OK, 1 rows affected (0.01 sec)
mysql> SELECT * from skywdie_tbl WHERE skywdie_id=3;
+-----------+--------------+---------------+-----------------+
| skywdie_id | skywdie_title | skywdie_author | submission_date |
+-----------+--------------+---------------+-----------------+
| 3 | 学习 C++ | skywdie.COM | 2016-05-06 |
+-----------+--------------+---------------+-----------------+
1 rows in set (0.01 sec)
从结果上看,skywdie_id 为 3 的 skywdie_title 已被修改。
使用PHP脚本更新数据PHP 中使用函数 mysqli_query() 来执行 SQL 语句,你可以在 SQL UPDATE 语句中使用或者不使用 WHERE 子句。
注意:不使用 WHERE 子句将数据表的全部数据进行更新,所以要慎重。
该函数与在 mysql> 命令提示符中执行 SQL 语句的效果是一样的。
以下实例将更新 skywdie_id 为 3 的 skywdie_title 字段的数据。
MySQL UPDATE 语句测试:
<?php
$dbhost = 'localhost'; // mysql服务器主机地址
$dbuser = 'root'; // mysql用户名
$dbpass = '123456'; // mysql用户名密码
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('连接失败: ' . mysqli_error($conn));
}
// 设置编码,防止中文乱码
mysqli_query($conn , "set names utf8");
$sql = 'UPDATE skywdie_tbl
SET skywdie_title="学习 Python"
WHERE skywdie_id=3';
mysqli_select_db( $conn, 'skywdie' );
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
die('无法更新数据: ' . mysqli_error($conn));
}
echo '数据更新成功!';
mysqli_close($conn);
?>
MySQL WHERE 子句MySQL DELETE 语句
update 语句可用来修改表中的数据, 简单来说基本的使用形式为:
update 表名称 set 列名称=新值 where 更新条件;
以下是在表 students 中的:
将 id 为 5 的手机号改为默认的 - : update students settel=default where id=5;
将所有人的年龄增加 1: update students set age=age+1;
UPDATE替换某个字段中的某个字符
当我们需要将字段中的特定字符串批量修改为其他字符串时,可已使用以下操作:
UPDATE table_name SET field=REPLACE(field, 'old-string', 'new-string')
将更新 skywdie_id 为 3 的skywdie_title 字段值的 "C++" 替换为 "Python":
UPDATE skywdie_tbl SET skywdie_title = REPLACE(skywdie_title, 'C++', 'Python') where
skywdie_id = 3;
我们并没有提供 skywdie_id 的数据,因为该字段我们在创建表的时候已经设置它为 AUTO_INCREMENT(自动增加) 属性。 所以,该字段会自动递增而不需要我们去设置。实例中 NOW() 是一个 MySQL 函数,该函数返回日期和时间。
浙公网安备 33010602011771号