SQL教程基础

本教程需要的数据库和表

注意: 本文章不是给什么都不会的菜鸟看的必须有接触过数据库才行会一些常规数据库的操作

SQL 是用于访问和处理数据库的标准的计算机语言。

在本教程中,您将学到如何使用 SQL 访问和处理数据系统中的数据,这类数据库包括:MySQL、SQL Server、Access、Oracle、Sybase、DB2 等等。

本教程的 SQL 在 MySQL 中测试通过。 而且我们演示的SQL都是通用的,在各大支持SQL数据库里都能使用

本教程使用到的 数据库 voidme 名称 (自行创建)

本教程使用到的 websites 表 SQL 文件:websites.sql

/*
 Navicat MySQL Data Transfer

 Source Server         : 127.0.0.1
 Source Server Version : 50621
 Source Host           : localhost
 Source Database       : RUNOOB

 Target Server Version : 50621
 File Encoding         : utf-8

 Date: 05/18/2016 11:44:07 AM
*/

SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
--  Table structure for `websites`
-- ----------------------------
DROP TABLE IF EXISTS `websites`;
CREATE TABLE `websites` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` char(20) NOT NULL DEFAULT '' COMMENT '站点名称',
  `url` varchar(255) NOT NULL DEFAULT '',
  `alexa` int(11) NOT NULL DEFAULT '0' COMMENT 'Alexa 排名',
  `country` char(10) NOT NULL DEFAULT '' COMMENT '国家',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

-- ----------------------------
--  Records of `websites`
-- ----------------------------
BEGIN;
INSERT INTO `websites` VALUES ('1', 'Google', 'https://www.google.cm/', '1', 'USA'), ('2', '淘宝', 'https://www.taobao/', '13', 'CN'), ('3', '菜鸟教程', 'http://www.runoob/', '4689', 'CN'), ('4', '微博', 'http://weibo/', '20', 'CN'), ('5', 'Facebook', 'https://www.facebook/', '3', 'USA');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;

本教程使用到的 access_log 表 SQL 文件:access_log.sql

/*
 Navicat Premium Data Transfer

 Source Server         : 本地mysql
 Source Server Type    : MySQL
 Source Server Version : 50733
 Source Host           : localhost:3306
 Source Schema         : voidme

 Target Server Type    : MySQL
 Target Server Version : 50733
 File Encoding         : 65001

 Date: 04/04/2021 14:57:35
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for access_log
-- ----------------------------
DROP TABLE IF EXISTS `access_log`;
CREATE TABLE `access_log`  (
  `aid` int(11) NOT NULL AUTO_INCREMENT,
  `site_id` int(11) NOT NULL DEFAULT 0 COMMENT '网站id',
  `count` int(11) NOT NULL DEFAULT 0 COMMENT '访问次数',
  `date` date NOT NULL,
  PRIMARY KEY (`aid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of access_log
-- ----------------------------
INSERT INTO `access_log` VALUES (1, 1, 45, '2016-05-10');
INSERT INTO `access_log` VALUES (2, 3, 100, '2016-05-13');
INSERT INTO `access_log` VALUES (3, 1, 230, '2016-05-14');
INSERT INTO `access_log` VALUES (4, 2, 10, '2016-05-14');
INSERT INTO `access_log` VALUES (5, 5, 205, '2016-05-14');
INSERT INTO `access_log` VALUES (6, 4, 13, '2016-05-15');
INSERT INTO `access_log` VALUES (7, 3, 220, '2016-05-15');
INSERT INTO `access_log` VALUES (8, 5, 545, '2016-05-16');
INSERT INTO `access_log` VALUES (9, 3, 201, '2016-05-17');

SET FOREIGN_KEY_CHECKS = 1;

本教程使用到的 apps 表 SQL 文件:apps.sql

/*
 Navicat MySQL Data Transfer

 Source Server         : 127.0.0.1
 Source Server Version : 50621
 Source Host           : localhost
 Source Database       : RUNOOB

 Target Server Version : 50621
 File Encoding         : utf-8

 Date: 05/18/2016 15:52:17 PM
*/

SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
--  Table structure for `apps`
-- ----------------------------
DROP TABLE IF EXISTS `apps`;
CREATE TABLE `apps` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `app_name` char(20) NOT NULL DEFAULT '' COMMENT '站点名称',
  `url` varchar(255) NOT NULL DEFAULT '',
  `country` char(10) NOT NULL DEFAULT '' COMMENT '国家',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

-- ----------------------------
--  Records of `apps`
-- ----------------------------
BEGIN;
INSERT INTO `apps` VALUES ('1', 'QQ APP', 'http://im.qq/', 'CN'), ('2', '微博 APP', 'http://weibo/', 'CN'), ('3', '淘宝 APP', 'https://www.taobao/', 'CN');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;

介绍

SQL 是什么?

  • SQL,指结构化查询语言,全称是 Structured Query Language。
  • SQL 让您可以访问和处理数据库。
  • SQL 是一种 ANSI(American National Standards Institute 美国国家标准化组织)标准的计算机语言。

SQL 能做什么?

  • SQL 面向数据库执行查询
  • SQL 可从数据库取回数据
  • SQL 可在数据库中插入新的记录
  • SQL 可更新数据库中的数据
  • SQL 可从数据库删除记录
  • SQL 可创建新数据库
  • SQL 可在数据库中创建新表
  • SQL 可在数据库中创建存储过程
  • SQL 可在数据库中创建视图
  • SQL 可以设置表、存储过程和视图的权限

SQL 是一种标准 - 但是…

虽然 SQL 是一门 ANSI(American National Standards Institute 美国国家标准化组织)标准的计算机语言,但是仍然存在着多种不同版本的 SQL 语言。

然而,为了与 ANSI 标准相兼容,它们必须以相似的方式共同地来支持一些主要的命令(比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等)。

注释:除了 SQL 标准之外,大部分 SQL 数据库程序都拥有它们自己的专有扩展!

在您的网站中使用 SQL

要创建一个显示数据库中数据的网站,您需要:

  • RDBMS 数据库程序(比如 MS Access、SQL Server、MySQL)
  • 使用服务器端脚本语言,比如 PHP 或 JSP
  • 使用 SQL 来获取您想要的数据
  • 使用 HTML / CSS

RDBMS

RDBMS 指关系型数据库管理系统,全称 Relational Database Management System。

RDBMS 是 SQL 的基础,同样也是所有现代数据库系统的基础,比如 SQL Server、IBM DB2、Oracle、MySQL 以及 Microsoft Access。

RDBMS 中的数据存储在,被称为表的数据库的对象中。

表是相关的数据项的集合,它由列和行组成。

SQL 语法

数据库表

一个数据库通常包含一个或多个表。每个表有一个名字标识(例如:“Websites”),表包含带有数据的记录(行)。

在本教程中,我们在 MySQL 的 VOIDME 数据库中创建了 Websites 表,用于存储网站记录。(在上面介绍里有创建sql)

我们可以通过以下命令查看 “Websites” 表的数据:

mysql> use voidme;
Database changed

mysql> set names utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM websites;
+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘宝          | https://www.taobao/   | 13    | CN      |
| 3  | 小白教程      | http://www.voidme/    | 4689  | CN      |
| 4  | 微博          | http://weibo/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook/ | 3     | USA     |
+----+--------------+---------------------------+-------+---------+
5 rows in set (0.01 sec)

解析

  • use voidme; 命令用于选择数据库。
  • set names utf8; 命令用于设置使用的字符集。
  • **SELECT * FROM websites; **读取数据表的信息。
  • 上面的表包含五条记录(每一条对应一个网站信息)和5个列(id、name、url、alexa 和country)。

SQL 语句

您需要在数据库上执行的大部分工作都由 SQL 语句完成。

下面的 SQL 语句从 “Websites” 表中选取所有记录:

实例

SELECT * FROM Websites ;

在本教程中,我们将为您讲解各种不同的 SQL 语句

请记住…

  • SQL 对大小写不敏感:SELECT 与 select 是相同的。

SQL 语句后面的分号?

某些数据库系统要求在每条 SQL 语句的末端使用分号。

分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上的 SQL 语句。

在本教程中,我们将在每条 SQL 语句的末端使用分号。

一些最重要的 SQL 命令

  • SELECT - 从数据库中提取数据
  • UPDATE - 更新数据库中的数据
  • DELETE - 从数据库中删除数据
  • INSERT INTO - 向数据库中插入新数据
  • CREATE DATABASE - 创建新数据库
  • ALTER DATABASE - 修改数据库
  • CREATE TABLE - 创建新表
  • ALTER TABLE - 变更(改变)数据库表
  • DROP TABLE - 删除表
  • CREATE INDEX - 创建索引(搜索键)
  • DROP INDEX - 删除索引

SELECT 语句

在讲SQL前我们必须知道SQL语句的语法的排列顺序

-- 单表查询结构

SELECT   列名   FROM  表名
WHERE  赛选条件     
GROUP BY   分组列    
HAVING  赛选条件     
ORDER BY 排序列      
LIMIT   分页  


--  多表查询  JOIN


SELECT   列名   FROM  表名
关联方式(JOIN)    关联表     ON  关联条件
WHERE  赛选条件     
GROUP BY   分组列   
HAVING  赛选条件    
ORDER BY 排序列    
LIMIT   分页   

以上语句是按照MYSQL的查询SQL语句进行排列 ,能省略,但是格式的排列顺序不能写错

其他数据库的查询sql语法都是类似以上进行结构排列的

SELECT 语句用于从数据库中选取数据。

结果被存储在一个结果表中,称为结果集。

SQL SELECT 语法格式

SELECT column_name, column_name FROM table_name;

SELECT * FROM table_name; 

SELECT Column 实例

下面的 SQL 语句从 “Websites” 表中选取 “name” 和 “country” 列:

mysql> SELECT name , country FROM Websites ;
+----------+---------+
| name     | country |
+----------+---------+
| Google   | USA     |
| 淘宝     | CN      |
| 菜鸟教程 | CN      |
| 微博     | CN      |
| Facebook | USA     |
+----------+---------+
5 rows in set (0.06 sec)

SELECT * 实例

下面的 SQL 语句从 “Websites” 表中选取所有列:

mysql> SELECT * FROM Websites ;
+----+----------+---------------------------+-------+---------+
| id | name     | url                       | alexa | country |
+----+----------+---------------------------+-------+---------+
|  1 | Google   | https://www.google.cm/    |     1 | USA     |
|  2 | 淘宝     | https://www.taobao/   |    13 | CN      |
|  3 | 菜鸟教程 | http://www.runoob/    |  4689 | CN      |
|  4 | 微博     | http://weibo/         |    20 | CN      |
|  5 | Facebook | https://www.facebook/ |     3 | USA     |
+----+----------+---------------------------+-------+---------+
5 rows in set (0.06 sec)

SELECT DISTINCT 语句

在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。

DISTINCT 关键词用于返回唯一不同的值。

SQL SELECT DISTINCT 语法

SELECT DISTINCT   column_name, column_name  FROM   table_name;  

SELECT DISTINCT 实例

下面的 SQL 语句仅从 “Websites” 表的 “country” 列中选取唯一不同的值,也就是去掉 “country” 列重复值:

mysql> SELECT DISTINCT country FROM Websites ;
+---------+
| country |
+---------+
| USA     |
| CN      |
+---------+
2 rows in set (0.06 sec)

多个字段去重

mysql> SELECT DISTINCT country ,url FROM websites;
+---------+---------------------------+
| country | url                       |
+---------+---------------------------+
| USA     | https://www.google.cm/    |
| CN      | https://www.taobao/   |
| CN      | http://www.runoob/    |
| CN      | http://weibo/         |
| USA     | https://www.facebook/ |
+---------+---------------------------+

从结果可以发现并没有去重这是因为,按照二个字段进行去除.

WHERE 子句

WHERE 子句用于提取那些满足指定条件的记录。 (过滤)

SQL WHERE 语法

SELECT column_name, column_name  FROM table_name   WHERE column_name operator value; 

WHERE 子句实例

下面的 SQL 语句从 “Websites” 表中选取国家为 “CN” 的所有网站:

mysql> SELECT * FROM Websites WHERE country = 'CN' ;
+----+----------+-------------------------+-------+---------+
| id | name     | url                     | alexa | country |
+----+----------+-------------------------+-------+---------+
|  2 | 淘宝     | https://www.taobao/ |    13 | CN      |
|  3 | 菜鸟教程 | http://www.runoob/  |  4689 | CN      |
|  4 | 微博     | http://weibo/       |    20 | CN      |
+----+----------+-------------------------+-------+---------+
3 rows in set (0.05 sec)

文本字段 vs 数值字段

SQL 使用单引号来环绕文本值也就是字符串(大部分数据库系统也接受双引号在mysql中是单引号)。

在上个实例中 ‘CN’ 文本字段使用了单引号。

如果是数值字段 , 请不要使用引号。

mysql> SELECT * FROM Websites WHERE id = 1 ;
+----+--------+------------------------+-------+---------+
| id | name   | url                    | alexa | country |
+----+--------+------------------------+-------+---------+
|  1 | Google | https://www.google.cm/ |     1 | USA     |
+----+--------+------------------------+-------+---------+
1 row in set (0.04 sec)

WHERE 子句中的运算符

下面的运算符可以在 WHERE 子句中使用:

运算符描述
=等于
<>不等于。**注释:**在 SQL 的一些版本中,该操作符可被写成 !=
>大于
<小于
>=大于等于
<=小于等于
BETWEEN在某个范围内
LIKE搜索某种模式
IN指定针对某个列的多个可能值

AND & OR 运算符

如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。

如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。

AND 运算符实例

下面的 SQL 语句从 “Websites” 表中选取国家为 “CN” 且alexa排名大于 “50” 的所有网站:

mysql> SELECT * FROM Websites WHERE country = 'CN' AND alexa > 50 ;
+----+----------+------------------------+-------+---------+
| id | name     | url                    | alexa | country |
+----+----------+------------------------+-------+---------+
|  3 | 菜鸟教程 | http://www.runoob/ |  4689 | CN      |
+----+----------+------------------------+-------+---------+
1 row in set (0.05 sec)

OR 运算符实例

下面的 SQL 语句从 “Websites” 表中选取国家为 “USA” 或者 “CN” 的所有客户:

mysql> SELECT * FROM Websites WHERE country = ' USA ' OR country = 'CN' ;
+----+----------+-------------------------+-------+---------+
| id | name     | url                     | alexa | country |
+----+----------+-------------------------+-------+---------+
|  2 | 淘宝     | https://www.taobao/ |    13 | CN      |
|  3 | 菜鸟教程 | http://www.runoob/  |  4689 | CN      |
|  4 | 微博     | http://weibo/       |    20 | CN      |
+----+----------+-------------------------+-------+---------+
3 rows in set (0.05 sec)

结合 AND & OR

您也可以把 AND 和 OR 结合起来(使用圆括号来组成复杂的表达式)。

下面的 SQL 语句从 “Websites” 表中选取 alexa 排名大于 “15” 且国家为 “CN” 或 “USA” 的所有网站:

mysql> SELECT * FROM Websites WHERE alexa > 15 AND ( country = 'CN' OR country = 'USA' ) ;
+----+----------+------------------------+-------+---------+
| id | name     | url                    | alexa | country |
+----+----------+------------------------+-------+---------+
|  3 | 菜鸟教程 | http://www.runoob/ |  4689 | CN      |
|  4 | 微博     | http://weibo/      |    20 | CN      |
+----+----------+------------------------+-------+---------+
2 rows in set (0.05 sec)

ORDER BY 关键字

ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。

ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。

SQL ORDER BY 语法

SELECT column_name, column_name FROM table_name  ORDER BY column_name, column_name ASC|DESC; 

ORDER BY 实例

下面的 SQL 语句从 “Websites” 表中选取所有网站,并按照 “alexa” 列排序:

mysql> SELECT * FROM Websites ORDER BY alexa ;
+----+----------+---------------------------+-------+---------+
| id | name     | url                       | alexa | country |
+----+----------+---------------------------+-------+---------+
|  1 | Google   | https://www.google.cm/    |     1 | USA     |
|  5 | Facebook | https://www.facebook/ |     3 | USA     |
|  2 | 淘宝     | https://www.taobao/   |    13 | CN      |
|  4 | 微博     | http://weibo/         |    20 | CN      |
|  3 | 菜鸟教程 | http://www.runoob/    |  4689 | CN      |
+----+----------+---------------------------+-------+---------+
5 rows in set (0.07 sec)

ORDER BY DESC 实例

下面的 SQL 语句从 “Websites” 表中选取所有网站,并按照 “alexa” 列降序排序:

mysql> SELECT * FROM Websites ORDER BY alexa DESC ;
+----+----------+---------------------------+-------+---------+
| id | name     | url                       | alexa | country |
+----+----------+---------------------------+-------+---------+
|  3 | 菜鸟教程 | http://www.runoob/    |  4689 | CN      |
|  4 | 微博     | http://weibo/         |    20 | CN      |
|  2 | 淘宝     | https://www.taobao/   |    13 | CN      |
|  5 | Facebook | https://www.facebook/ |     3 | USA     |
|  1 | Google   | https://www.google.cm/    |     1 | USA     |
+----+----------+---------------------------+-------+---------+
5 rows in set (0.06 sec)

ORDER BY 多列

下面的 SQL 语句从 “Websites” 表中选取所有网站,并按照 “country” 和 “alexa” 列排序:

mysql> SELECT * FROM Websites ORDER BY country , alexa ;
+----+----------+---------------------------+-------+---------+
| id | name     | url                       | alexa | country |
+----+----------+---------------------------+-------+---------+
|  2 | 淘宝     | https://www.taobao/   |    13 | CN      |
|  4 | 微博     | http://weibo/         |    20 | CN      |
|  3 | 菜鸟教程 | http://www.runoob/    |  4689 | CN      |
|  1 | Google   | https://www.google.cm/    |     1 | USA     |
|  5 | Facebook | https://www.facebook/ |     3 | USA     |
+----+----------+---------------------------+-------+---------+
5 rows in set (0.07 sec)

INSERT INTO 语句

INSERT INTO 语句用于向表中插入新记录。

SQL INSERT INTO 语法

INSERT INTO 语句可以有两种编写形式。

第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:

INSERT INTO table_name  VALUES ( value1, value2, value3,...); 

第二种形式需要指定列名及被插入的值:

INSERT INTO table_name ( column1, column2, column3,...) VALUES ( value1, value2, value3,...); 

INSERT INTO 实例

假设我们要向 “Websites” 表中插入一个新行。

我们可以使用下面的 SQL 语句:

mysql> INSERT INTO Websites ( name , url , alexa , country ) VALUES ( '百度' , 'https://www.baidu/' , 4 , 'CN' ) ;
Query OK, 1 row affected (0.00 sec)

然后我们在查询下Websites表数据

mysql> SELECT * FROM   Websites;
+----+----------+---------------------------+-------+---------+
| id | name     | url                       | alexa | country |
+----+----------+---------------------------+-------+---------+
|  1 | Google   | https://www.google.cm/    |     1 | USA     |
|  2 | 淘宝     | https://www.taobao/   |    13 | CN      |
|  3 | 菜鸟教程 | http://www.runoob/    |  4689 | CN      |
|  4 | 微博     | http://weibo/         |    20 | CN      |
|  5 | Facebook | https://www.facebook/ |     3 | USA     |
|  6 | 百度     | https://www.baidu/    |     4 | CN      |
+----+----------+---------------------------+-------+---------+
6 rows in set (0.07 sec)

您是否注意到,我们没有向 id 字段插入任何数字?
id 列是自动更新的,表中的每条记录都有一个唯一的数字。

在指定的列插入数据

我们也可以在指定的列插入数据。

下面的 SQL 语句将插入一个新行,但是只在 “name”、“url” 和 “country” 列插入数据(id 字段会自动更新):

mysql> INSERT INTO Websites ( name , url , country ) VALUES ( 'stackoverflow' , 'http://stackoverflow/' , 'IND' ) ;
Query OK, 1 row affected (0.00 sec)

然后我们在查询下Websites表数据

mysql> SELECT * FROM   Websites;
+----+---------------+---------------------------+-------+---------+
| id | name          | url                       | alexa | country |
+----+---------------+---------------------------+-------+---------+
|  1 | Google        | https://www.google.cm/    |     1 | USA     |
|  2 | 淘宝          | https://www.taobao/   |    13 | CN      |
|  3 | 菜鸟教程      | http://www.runoob/    |  4689 | CN      |
|  4 | 微博          | http://weibo/         |    20 | CN      |
|  5 | Facebook      | https://www.facebook/ |     3 | USA     |
|  6 | 百度          | https://www.baidu/    |     4 | CN      |
|  7 | stackoverflow | http://stackoverflow/ |     0 | IND     |
+----+---------------+---------------------------+-------+---------+
7 rows in set (0.06 sec)

多条数据一起插入使用逗号分隔

INSERT INTO Websites ( name , url , country ) VALUES 
( 'stackoverflow1' , 'http://stackoverflow/' , 'IND' ), 
( 'stackoverflow2' , 'http://stackoverflow/' , 'CN' ),
( 'stackoverflow3' , 'http://stackoverflow/' , 'IND' ) ;

这就不演示了

UPDATE 语句

UPDATE 语句用于更新表中已存在的记录。

SQL UPDATE 语法

UPDATE table_name SET column1=value1, column2=value2 ... WHERE some_column=some_value; 

请注意 SQL UPDATE 语句中的 WHERE 子句!
WHERE 子句规定哪条记录或者哪些记录需要更新。如果您省略了 WHERE 子句,所有的记录都将被更新!

SQL UPDATE 实例

假设我们要把 “菜鸟教程” 的 alexa 排名更新为 5000,country 改为 USA。

我们使用下面的 SQL 语句:

mysql> UPDATE Websites SET alexa = '5000' , country = 'USA'    WHERE name = '菜鸟教程' ;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

然后我们在查询下Websites表数据

mysql> SELECT * FROM   Websites;
+----+---------------+---------------------------+-------+---------+
| id | name          | url                       | alexa | country |
+----+---------------+---------------------------+-------+---------+
|  1 | Google        | https://www.google.cm/    |     1 | USA     |
|  2 | 淘宝          | https://www.taobao/   |    13 | CN      |
|  3 | 菜鸟教程      | http://www.runoob/    |  5000 | USA     |
|  4 | 微博          | http://weibo/         |    20 | CN      |
|  5 | Facebook      | https://www.facebook/ |     3 | USA     |
|  6 | 百度          | https://www.baidu/    |     4 | CN      |
|  7 | stackoverflow | http://stackoverflow/ |     0 | IND     |
+----+---------------+---------------------------+-------+---------+
7 rows in set (0.08 sec)

Update 警告!

在更新记录时要格外小心!在上面的实例中,如果我们省略了 WHERE 子句,如下所示:

UPDATE Websites
SET alexa='5000', country='USA' 

执行以上代码会将 Websites 表中所有数据的 alexa 改为 5000,country 改为 USA。

执行没有 WHERE 子句的 UPDATE 要慎重,再慎重。

DELETE 语句

DELETE 语句用于删除表中的行。

SQL DELETE 语法

DELETE FROM table_name WHERE some_column= some_value; 

请注意 SQL DELETE 语句中的 WHERE 子句!
WHERE 子句规定哪条记录或者哪些记录需要删除。如果您省略了 WHERE 子句,所有的记录都将被删除!

SQL DELETE 实例

假设我们要从 “Websites” 表中删除网站名为 “Facebook” 且国家为 USA 的网站。

我们使用下面的 SQL 语句:

mysql> DELETE FROM Websites WHERE name = 'Facebook' AND country = 'USA';
Query OK, 1 row affected (0.00 sec)

然后我们在查询下Websites表数据

mysql>  SELECT * FROM   Websites;
+----+---------------+---------------------------+-------+---------+
| id | name          | url                       | alexa | country |
+----+---------------+---------------------------+-------+---------+
|  1 | Google        | https://www.google.cm/    |     1 | USA     |
|  2 | 淘宝          | https://www.taobao/   |    13 | CN      |
|  3 | 菜鸟教程      | http://www.runoob/    |  5000 | USA     |
|  4 | 微博          | http://weibo/         |    20 | CN      |
|  6 | 百度          | https://www.baidu/    |     4 | CN      |
|  7 | stackoverflow | http://stackoverflow/ |     0 | IND     |
+----+---------------+---------------------------+-------+---------+
6 rows in set (0.07 sec)

删除所有数据

您可以在不删除表的情况下,删除表中所有的行。这意味着表结构、属性、索引将保持不变:

DELETE FROM table_name; 

注释:在删除记录时要格外小心!因为您不能重来!

点赞 -收藏加 -关注 -便于以后复习

更多推荐

SQL教程基础