目录
列的 SQL 别名语法(如果列名称包含空格,要求使用双引号或方括号:)
SQL简介:
SQL (Structured Query Language:结构化查询语言) 是用于管理关系数据库管理系统(RDBMS)。
SQL 通过一系列的语句和命令来执行数据定义、数据查询、数据操作和数据控制等功能,包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。
SELECT语句
SELECT column1, column2, ... FROM table_name;
SELECT * FROM table_name;
参数说明:
- column1, column2, ...:要选择的字段名称,可以为多个字段。如果不指定字段名称,则会选择所有字段。
- table_name:要查询的表名称。
*
: 通配符,表示选择表中的所有列。
SELECT DISTINCT
DISTINCT 关键词用于返回唯一不同的值。
SELECT DISTINCT column1, column2, ... FROM table_name;
- column1, column2, ...:要选择的字段名称,可以为多个字段。如果不指定字段名称,则会选择所有字段。
- table_name:要查询的表名称。
例子:
+----+--------------+---------------------------+-------+---------+ | 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 | +----+--------------+---------------------------+-------+---------+
SELECT DISTINCT country FROM Websites;
输出结果:
WHERE语句
WHERE 子句用于提取那些满足指定条件的记录
SELECT column1, column2, ... FROM table_name WHERE condition;
参数说明:
- column1, column2, ...:要选择的字段名称,可以为多个字段。如果不指定字段名称,则会选择所有字段。
- table_name:要查询的表名称。
例子:SELECT * FROM Websites WHERE country='CN';
文本字段 vs. 数值字段
SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。
在上个实例中 'CN' 文本字段使用了单引号。
如果是数值字段,请不要使用引号。
WHERE子句中到的运算符
运算符 | 描述 |
= | 等于 |
<> | 不等于。注释:在 SQL 的一些版本中,该操作符可被写成 != |
> | 大于 |
< | 大于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
IN | 指定针对某个列的多个可能值 |
AND & OR 运算符
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
ORDER BY 关键字
ORDER BY 关键字用于对结果集进行排序。
ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。
ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字
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 (name, url, country) VALUES ('stackoverflow', 'http://stackoverflow.com/', 'IND');
UPDATE 语句
UPDATE 语句用于更新表中已存在的记录。
SQL UPDATE 语法
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
参数说明:
- table_name:要修改的表名称。
- column1, column2, ...:要修改的字段名称,可以为多个字段。
- value1, value2, ...:要修改的值,可以为多个值。
- condition:修改条件,用于指定哪些数据要修改。
例子:把 "菜鸟教程" 的 alexa 排名更新为 5000,country 改为 USA。
UPDATE Websites SET alexa='5000', country='USA' WHERE name='菜鸟教程';
(WHERE子句!!!)
DELETE 语句
DELETE 语句用于删除表中的行。
SQL DELETE 语法
DELETE FROM table_name WHERE condition;
参数说明:
- table_name:要删除的表名称。
- condition:删除条件,用于指定哪些数据要删除。
例子:从 "Websites" 表中删除网站名为 "Facebook" 且国家为 USA 的网站。
DELETE FROM Websites WHERE name='Facebook' AND country='USA';
删除所有数据
您可以在不删除表的情况下,删除表中所有的行。这意味着表结构、属性、索引将保持不变:
DELETE FROM table_name;
注释:在删除记录时要格外小心!因为您不能重来!
SELECT TOP 子句
SELECT TOP 语句用于在 SQL 中限制返回的结果集中的行数, 它通常用于只需要查询前几行数据的情况,尤其在数据集非常大时,可以显著提高查询性能。
SELECT TOP 子句对于拥有数千条记录的大型表来说,是非常有用的。
说明:
SELECT TOP
在 SQL Server 和 MS Access 中使用,而在 MySQL 和 PostgreSQL 中使用LIMIT
关键字。- Oracle 在 12c 版本之前没有直接等效的关键字,可以通过
ROWNUM
实现类似功能,但在 12c 及以上版本中引入了FETCH FIRST
。 - 当使用
TOP
或LIMIT
时,最好结合ORDER BY
子句,以确保返回的行是特定顺序的前几行。
SQL Server / MS Access 语法
SELECT TOP number|percent column1, column2, ... FROM table_name;
number|percent:指定返回的行数或百分比。
number
:具体的行数。percent
:数据集的百分比。
MySQL 语法
SELECT column1, column2, ... FROM table_name LIMIT number;
Oracle 语法
SELECT column1, column2, ... FROM table_name FETCH FIRST number ROWS ONLY;
PostgreSQL 语法
SELECT column1, column2, ... FROM table_name LIMIT number;
--前5行
select top 5 * from table--后5行
select top 5 * from table order by id desc --desc 表示降序排列 asc 表示升序
LIKE 操作符
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
LIKE
操作符是 SQL 中用于在 WHERE
子句中进行模糊查询的关键字,它允许我们根据模式匹配来选择数据,通常与 %
和 _
通配符一起使用。
SQL LIKE 语法
SELECT column1, column2, ... FROM table_name WHERE column_name LIKE pattern;
参数说明:
- column1, column2, ...:要选择的字段名称,可以为多个字段。如果不指定字段名称,则会选择所有字段。
- table_name:要查询的表名称。
- column:要搜索的字段名称。
- pattern:搜索模式。
通配符
%
:匹配任意字符(包括零个字符)。_
:匹配单个字符。
例子:使用 % 通配符找出所有以 "iPhone" 开头的产品:
SELECT ProductName, Category FROM Products WHERE ProductName LIKE 'iPhone%';
SQL 通配符
在 SQL 中,通配符与 SQL LIKE 操作符一起使用。
SQL 通配符用于搜索表中的数据。
在 SQL 中,可使用以下通配符:
通配符 | 描述 |
---|---|
% | 替代 0 个或多个字符 |
_ | 替代一个字符 |
[charlist] | 字符列中的任何单一字符 |
[^charlist] 或 [!charlist] | 不在字符列中的任何单一字符 |
[charlist] 通配符用于指定一个字符列表,用于匹配该列表中的任何一个字符。
它通常与 LIKE 操作符一起使用,用于模式匹配,比如在 WHERE 子句中。
下面的 SQL 语句选取 name 以 "G"、"F" 或 "s" 开始的所有网站:
IN 操作符
IN 操作符允许您在 WHERE 子句中规定多个值。
SQL IN 语法
SELECT column1, column2, ... FROM table_name WHERE column IN (value1, value2, ...);
参数说明:
- column1, column2, ...:要选择的字段名称,可以为多个字段。如果不指定字段名称,则会选择所有字段。
- table_name:要查询的表名称。
- column:要查询的字段名称。
- value1, value2, ...:要查询的值,可以为多个值。
BETWEEN
BETWEEN 操作符选取介于两个值之间的数据范围内的值,这些值可以是数值、文本或者日期。
SELECT column1, column2, ... FROM table_name WHERE column BETWEEN value1 AND value2;
参数说明:
- column1, column2, ...:要选择的字段名称,可以为多个字段。如果不指定字段名称,则会选择所有字段。
- table_name:要查询的表名称。
- column:要查询的字段名称。
- value1:范围的起始值。
- value2:范围的结束值。
NOT BETWEEN
如需显示不在上面实例范围内的网站,请使用 NOT BETWEEN:
实例
SELECT * FROM Websites
WHERE alexa NOT BETWEEN 1 AND 20;
带有 IN 的 BETWEEN 操作符
下面的 SQL 语句选取 alexa 介于 1 和 20 之间但 country 不为 USA 和 IND 的所有网站:
实例
SELECT * FROM Websites
WHERE (alexa BETWEEN 1 AND 20)
AND country NOT IN ('USA', 'IND');
SQL 别名
通过使用 SQL,可以为表名称或列名称指定别名。
基本上,创建别名是为了让列名称的可读性更强。
列的 SQL 别名语法(如果列名称包含空格,要求使用双引号或方括号:)
SELECT column_name AS alias_name FROM table_name;
表的 SQL 别名语法
SELECT column_name(s) FROM table_name AS alias_name;
表的别名实例
下面的 SQL 语句选取 "菜鸟教程" 的所有访问记录。我们使用 "Websites" 和 "access_log" 表,并分别为它们指定表别名 "w" 和 "a"(通过使用别名让 SQL 更简短):
实例
SELECT w.name, w.url, a.count, a.date
FROM Websites AS w, access_log AS a
WHERE a.site_id=w.id and w.name="菜鸟教程";