SQL 教程

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

实例

SELECT * FROM Websites;

1. SQL 简介

SQL (Structured Query Language:结构化查询语言) 是用于管理关系数据库管理系统(RDBMS)。 SQL 的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。

1.1 SQL 是什么?

  • SQL 指结构化查询语言,全称是 Structured Query Language。
  • SQL 让您可以访问和处理数据库,包括数据插入、查询、更新和删除。
  • SQL 在1986年成为 ANSI(American National Standards Institute 美国国家标准化组织)的一项标准,在 1987 年成为国际标准化组织(ISO)标准。

1.2 SQL 能做什么?

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

1.3SQL 是一种标准

虽然 SQL 是一门 ANSI(American National Standards Institute 美国国家标准化组织)标准的计算机语言,但是仍然存在着多种不同版本的 SQL 语言。
然而,为了与 ANSI 标准相兼容,它们必须以相似的方式共同地来支持一些主要的命令(比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等)。

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

2. SQL 语法

2.1 数据库表

一个数据库通常包含一个或多个表。每个表有一个名字标识(例如:“Websites”),表包含带有数据的记录(行)。
在本教程中,我们在 MySQL 的 RUNOOB 数据库中创建了 Websites 表,用于存储网站记录。
我们可以通过以下命令查看 “Websites” 表的数据:

mysql> use RUNOOB;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

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.com/   |    13 | CN      |
|  3 | 菜鸟教程     | http://www.runoob.com/    |  4689 | CN      |
|  4 | 微博         | http://weibo.com/         |    20 | CN      |
|  5 | Facebook     | https://www.facebook.com/ |     3 | USA     |
+----+--------------+---------------------------+-------+---------+
5 rows in set (0.00 sec)

解析

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

2.2 SQL 语句

您需要在数据库上执行的大部分工作都由 SQL 语句完成。
下面的 SQL 语句从 “Websites” 表中选取所有记录:
实例

SELECT * FROM Websites;

在本教程中,我们将为您讲解各种不同的 SQL 语句。
请记住,SQL 对大小写不敏感:SELECT 与 select 是相同的。
SQL 语句后面的分号?

2.3 一些最重要的 SQL 命令

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

3. SELECT 语句

SELECT 语句用于从数据库中选取数据。
结果被存储在一个结果表中,称为结果集。

SQL SELECT 语法

SELECT column1, column2, ...
FROM table_name;SELECT * FROM table_name;

参数说明

  • column1, column2, …:要选择的字段名称,可以为多个字段。如果不指定字段名称,则会选择所有字段。
  • 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.00 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.com/   |    13 | CN      |
|  3 | 菜鸟教程     | http://www.runoob.com/    |  4689 | CN      |
|  4 | 微博         | http://weibo.com/         |    20 | CN      |
|  5 | Facebook     | https://www.facebook.com/ |     3 | USA     |
+----+--------------+---------------------------+-------+---------+
5 rows in set (0.00 sec)

4. SELECT DISTINCT 语句

在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。
DISTINCT 关键词用于返回唯一不同的值。

SELECT DISTINCT 语法

SELECT DISTINCT column1, column2, ...
FROM table_name;

SELECT DISTINCT 实例

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

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

5. WHERE 子句

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

SQL WHERE 语法

SELECT column1, column2, ...
FROM table_name
WHERE condition;

WHERE 子句实例

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

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

文本字段 vs. 数值字段

SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。
在上个实例中 ‘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.00 sec)

5.1 WHERE 子句中的运算符

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

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

6. 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.com/ |  4689 | CN      |
+----+--------------+------------------------+-------+---------+
1 row in set (0.00 sec)

OR 运算符实例

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

mysql> SELECT * FROM websites
    -> WHERE country='USA'
    -> OR country='CN';
+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
|  1 | Google       | https://www.google.cm/    |     1 | USA     |
|  2 | 淘宝         | https://www.taobao.com/   |    13 | CN      |
|  3 | 菜鸟教程     | http://www.runoob.com/    |  4689 | CN      |
|  4 | 微博         | http://weibo.com/         |    20 | CN      |
|  5 | Facebook     | https://www.facebook.com/ |     3 | USA     |
+----+--------------+---------------------------+-------+---------+
5 rows in set (0.00 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.com/ |  4689 | CN      |
|  4 | 微博         | http://weibo.com/      |    20 | CN      |
+----+--------------+------------------------+-------+---------+
2 rows in set (0.00 sec)

7. ORDER BY 关键字

ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。
ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。
SQL ORDER BY 语法

SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
  • column1, column2, …:要排序的字段名称,可以为多个字段。
  • 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.com/ |     3 | USA     |
|  2 | 淘宝         | https://www.taobao.com/   |    13 | CN      |
|  4 | 微博         | http://weibo.com/         |    20 | CN      |
|  3 | 菜鸟教程     | http://www.runoob.com/    |  4689 | CN      |
+----+--------------+---------------------------+-------+---------+
5 rows in set (0.00 sec)

ORDER BY DESC 实例

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

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

ORDER BY 多列

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

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

8. 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,...);

参数说明:

  • table_name:需要插入新记录的表名。
  • column1, column2, …:需要插入的字段名。
  • value1, value2, …:需要插入的字段值。

INSERT INTO 实例

假设我们要向 “Websites” 表中插入一个新行。
我们可以使用下面的 SQL 语句:

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

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

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

在指定的列插入数据

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

mysql> INSERT INTO websites (name, url, country)
    -> VALUES ('stackoverflow', 'http://stackoverflow.com/', 'IND');
Query OK, 1 row affected (0.02 sec)

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

—————————————————————————————————————————————————

—————————————————————————————————————————————————

—————————————————————————————————————————————————

—————————————————————————————————————————————————
—————————————————————————————————————————————————
—————————————————————————————————————————————————

设置使用的字符集

set names utf8;

单行注释符,快捷键Ctrl+K Ctrl+C

--use RUNOOB;

多行注释符

/*
--use RUNOOB;
*/

选择数据库

use RUNOOB;

读取数据表的信息

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值