Sql(Structured Query Language)语句笔记

目录

一、检索数据

1、SQL SELECT 语法

1、检索单个列数据

2、检索多个列数据

3、检索所有列

4、检索不同的值(去除重复值)DISTINCT 关键词用于返回唯一不同的值。

5、限制检索结果

SQL WHERE 语法

常用查看命令

SQL WHERE 子句

INSERT INTO SQL语句

MySQL UPDATE 更新

SQL UPDATE 语句:



本篇文章会在之后将部分内容更新完善!!!

一、检索数据

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 的结果是升序排列,而使用关键字ASCDESC 可指定为升序或降序排序。

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 函数,该函数返回日期和时间。

posted on 2022-10-31 22:31  skywide  阅读(33)  评论(0)    收藏  举报  来源