SQL(W3C笔记)
RDBMS
RDBMS 指关系型数据库管理系统,全称 Relational Database Management System。
RDBMS 是 SQL 的基础,同样也是所有现代数据库系统的基础,比如 MS SQL Server、IBM DB2、Oracle、MySQL 以及 Microsoft Access。
RDBMS 中的数据存储在被称为表的数据库对象中。
表是相关的数据项的集合,它由列和行组成。
SQL语句
您需要在数据库上执行的大部分工作都由 SQL 语句完成。
SQL 对大小写不敏感:
- SELECT 与 select 是相同的。
SQL 语句后面的分号?
某些数据库系统要求在每条 SQL 语句的末端使用分号。
分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上的 SQL 语句。
一些最重要的 SQL 命令
-
SELECT
- 从数据库中提取数据 -
UPDATE
- 更新数据库中的数据 -
DELETE
- 从数据库中删除数据 -
INSERT INTO
- 向数据库中插入新数据 -
CREATE DATABASE
- 创建新数据库 -
ALTER DATABASE
- 修改数据库 -
CREATE TABLE
- 创建新表 -
ALTER TABLE
- 变更(改变)数据库表 -
DROP TABLE
- 删除表 -
CREATE INDEX
- 创建索引(搜索键) -
DROP INDEX
- 删除索引
SQL 通用数据类型
数据库表中的每个列都要求有名称和数据类型。
SQL 开发人员必须在创建 SQL 表时决定表中的每个列将要存储的数据的类型。数据类型是一个标签,是便于 SQL 了解每个列期望存储什么类型的数据的指南,它也标识了 SQL 如何与存储的数据进行交互。
下面的表格列出了 SQL 中通用的数据类型:
数据类型 | 描述 |
---|---|
CHARACTER(n) | 字符/字符串。固定长度 n。 |
VARCHAR(n) 或CHARACTER VARYING(n) | 字符/字符串。可变长度。最大长度 n。 |
BINARY(n) | 二进制串。固定长度 n。 |
BOOLEAN | 存储 TRUE 或 FALSE 值 |
VARBINARY(n) 或BINARY VARYING(n) | 二进制串。可变长度。最大长度 n。 |
INTEGER(p) | 整数值(没有小数点)。精度 p。 |
SMALLINT | 整数值(没有小数点)。精度 5。 |
INTEGER | 整数值(没有小数点)。精度 10。 |
BIGINT | 整数值(没有小数点)。精度 19。 |
DECIMAL(p,s) | 精确数值,精度 p,小数点后位数 s。例如:decimal(5,2) 是一个小数点前有 3 位数小数点后有 2 位数的数字。 |
NUMERIC(p,s) | 精确数值,精度 p,小数点后位数 s。(与 DECIMAL 相同) |
FLOAT(p) | 近似数值,尾数精度 p。一个采用以 10 为基数的指数计数法的浮点数。该类型的 size 参数由一个指定最小精度的单一数字组成。 |
REAL | 近似数值,尾数精度 7。 |
FLOAT | 近似数值,尾数精度 16。 |
DOUBLE PRECISION | 近似数值,尾数精度 16。 |
DATE | 存储年、月、日的值。 |
TIME | 存储小时、分、秒的值。 |
TIMESTAMP | 存储年、月、日、小时、分、秒的值。 |
INTERVAL | 由一些整数字段组成,代表一段时间,取决于区间的类型。 |
ARRAY | 元素的固定长度的有序集合 |
MULTISET | 元素的可变长度的无序集合 |
XML | 存储 XML 数据 |
然而,不同的数据库对数据类型定义提供不同的选择。
下面的表格显示了各种不同的数据库平台上一些数据类型的通用名称:
数据类型 | Access | SQLServer | Oracle | MySQL | PostgreSQL |
---|---|---|---|---|---|
boolean | Yes/No | Bit | Byte | N/A | Boolean |
integer | Number (integer) | Int | Number | Int Integer |
Int Integer |
float | Number (single) | Float Real |
Number | Float | Numeric |
currency | Currency | Money | N/A | N/A | Money |
string (fixed) | N/A | Char | Char | Char | Char |
string (variable) | Text (<256) Memo (65k+) |
Varchar | Varchar Varchar2 |
Varchar | Varchar |
binary object | OLE Object Memo | Binary (fixed up to 8K) Varbinary (<8K) Image (<2GB) |
Long Raw |
Blob Text |
Binary Varbinary |
来自 W3CSchool 的 SQL 快速参考
SQL 语句 | 语法 | |
---|---|---|
AND / OR | SELECT column_name(s) FROM table_name WHERE condition AND |
OR condition |
ALTER TABLE | ALTER TABLE table_name ADD column_name datatype<bt>or ALTER TABLE table_name DROP COLUMN column_name |
|
AS (alias) | SELECT column_name AS column_alias FROM table_name or SELECT column_name FROM table_name AS table_alias |
|
BETWEEN | SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2 |
|
CREATE DATABASE | CREATE DATABASE database_name | |
CREATE TABLE | CREATE TABLE table_name ( column_name1 data_type, column_name2 data_type, column_name2 data_type, ... ) |
|
CREATE INDEX | CREATE INDEX index_name ON table_name (column_name) or CREATE UNIQUE INDEX index_name ON table_name (column_name) |
|
CREATE VIEW | CREATE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition |
|
DELETE | DELETE FROM table_name WHERE some_column=some_value or DELETE FROM table_name (Note:Deletes the entire table!!) DELETE * FROM table_name (Note:Deletes the entire table!!) |
|
DROP DATABASE | DROP DATABASE database_name | |
DROP INDEX | DROP INDEX table_name.index_name (SQL Server) DROP INDEX index_name ON table_name (MS Access) DROP INDEX index_name (DB2/Oracle) ALTER TABLE table_name DROP INDEX index_name (MySQL) |
|
DROP TABLE | DROP TABLE table_name GROUP BY SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name |
|
HAVING | SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name HAVING aggregate_function(column_name) operator value |
|
IN | SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,..) |
|
INSERT INTO | INSERT INTO table_name VALUES (value1, value2, value3,....) OR INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, value2, value3,....) |
|
INNER JOIN | SELECT column_name(s) FROM table_name1 INNER JOIN table_name2 ON table_name1.column_name=table_name2.column_name | |
LEFT JOIN | SELECT column_name(s) FROM table_name1 LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name | |
RIGHT JOIN | SELECT column_name(s) FROM table_name1 RIGHT JOIN table_name2 ON table_name1.column_name=table_name2.column_name | |
FULL JOIN | SELECT column_name(s) FROM table_name1 FULL JOIN table_name2 ON table_name1.column_name=table_name2.column_name | |
LIKE | SELECT column_name(s) FROM table_name WHERE column_nameLIKE pattern ORDER BY SELECT column_name(s) FROM table_name ORDER BY column_name [ASC | DESC] |
SELECT | SELECT column_name(s) FROM table_name | |
SELECT * | SELECT * FROM table_name | |
SELECT DISTINCT | SELECT DISTINCT column_name(s) FROM table_name | |
SELECT INTO | SELECT * INTO new_table_name [IN externaldatabase] FROM old_table_name OR SELECT column_name(s) INTO new_table_name [IN externaldatabase] FROM old_table_name |
|
SELECT TOP | SELECT TOP number | percent column_name(s) FROM table_name |
TRUNCATE TABLE | TRUNCATE TABLE table_name | |
UNION | SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2 | |
UNION ALL | SELECT column_name(s) FROM table_name1 UNION ALL SELECT column_name(s) FROM table_name2 | |
UPDATE | UPDATE table_name SET column1=value, column2=value,... WHERE some_column=some_value | |
WHERE | SELECT column_name(s) FROM table_name WHERE column_name operator value |
SQL SELECT 语句
SELECT 语句用于从数据库中选取数据。
结果被存储在一个结果表中,称为结果集。
SQL SELECT 语法
SELECT column_name, column_name FROM table_name;
与
SELECT * FROM table_name;
SQL SELECT DISTINCT 语句
在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。
DISTINCT 关键词用于返回唯一不同的值。
SQL SELECT DISTINCT 语法
SELECT DISTINCT column_name, column_name FROM table_name;
SQL WHERE 子句
WHERE 子句用于提取那些满足指定标准的记录。
SQL WHERE 语法
SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;
文本字段 vs. 数值字段
SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。
如果是数值字段,请不要使用引号。
WHERE 子句中的运算符
下面的运算符可以在 WHERE 子句中使用:
运算符 | 描述 |
---|---|
= | 等于 |
<> | 在 SQL 的一些版本中,该操作符可被写成 != |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
IN | 指定针对某个列的多个可能值 |
SQL AND & OR 运算符
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
SQL 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;
SQL 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,...);
SQL UPDATE 语句
UPDATE 语句用于更新表中已存在的记录。
SQL UPDATE 语法
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
请注意 SQL UPDATE 语句中的 WHERE 子句!
WHERE 子句规定哪条记录或者哪些记录需要更新。如果您省略了 WHERE 子句,所有的记录都将被更新!
SQL DELETE 语句
DELETE 语句用于删除表中的行。
SQL DELETE 语法
DELETE FROM table_name
WHERE some_column=some_value;
请注意 SQL DELETE 语句中的 WHERE 子句!
WHERE 子句规定哪条记录或者哪些记录需要删除。如果您省略了 WHERE 子句,所有的记录都将被删除!
删除所有数据
您可以在不删除表的情况下,删除表中所有的行。这意味着表结构、属性、索引将保持不变:
DELETE FROM table_name;
or
DELETE * FROM table_name;
注释:在删除记录时要格外小心!因为您不能重来!
SQL SELECT TOP 子句
SELECT TOP 子句用于规定要返回的记录的数目。
SELECT TOP 子句对于拥有数千条记录的大型表来说,是非常有用的。
并非所有的数据库系统都支持 SELECT TOP 子句。
SQL Server / MS Access 语法
SELECT TOP number|percent column_name(s)
FROM table_name;
MySQL 和 Oracle 中的 SQL SELECT TOP 是等价的
MySQL 语法
SELECT column_name(s)
FROM table_name
LIMIT number;
Oracle 语法
SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number;
SQL LIKE 操作符
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
SQL LIKE 语法
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
通过使用 NOT 关键字,您可以选取不匹配模式的记录。
SQL 通配符
在 SQL 中,通配符与 SQL LIKE 操作符一起使用。
SQL 通配符用于搜索表中的数据。
在 SQL 中,可使用一下通配符:
通配符 | 描述 |
---|---|
% | 替代 0 个或多个字符 |
_ | 替代一个字符 |
[charlist] | 字符列中的任何单一字符 |
^[charlist] or ![charlist] |
不在字符列中的任何单一字符 |
IN 操作符
IN 操作符允许您在 WHERE 子句中规定多个值。
SQL IN 语法
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);
SQL IN SELECT语法
SELECT column_name(s)
FROM table_name
WHERE column_name IN (select column from table_w3c where ...);
SQL BETWEEN操作符
BETWWN操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
SQL BETWEEN 语法
SELECT column_name(s)
FROM table_name
WHERE colnumn_name BETWEEN value1 AND value2;
** 注意: 在不同的数据库中,BETWEEN操作符会产生不同的结果**!因此,请检查使用的数据库是如何处理BETWEEN操作符的。
SQL 连接(Joins)
SQL Join 用于把两个或多个表的行结合起来。
SQL JOIN
SQL JOIN 子句用于把两个或多个表的行结合起来,基于这些表之间的共同字段。
最常见的JOIN类型:SQL INNER JOIN(简单的JOIN)。SQL INNER JOIN 从多个表中返回满足JOIN条件的所有行。
不同的SQL JOIN
- INNER JOIN:如果表中有至少一个匹配,则返回行
- LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
- RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
- FULL JOIN: 只要其中一个表中存在匹配,则返回行
SQL INNER JOIN关键字
INNER JOIN关键字在表中** 存在至少一个匹配 **时返回行。
SQL INNER JOIN语法
SELECT column_nmae(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
或
SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name = table2.column_name;
** 注释: **INNER JOIN与JOIN是相同的
SQL LEFT JOIN关键字
LEFT JOIN关键字从左表(table1)返回所有的行,即使** 右表(table2)中没有匹配 **。如果有右表中没有匹配,则结果为NULL。
SQL LEFT JOIN 语法
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
或
SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name =table2.column_name;
** 注释: **在某些数据库中,LEFT JOIN称为LEFT OUTER JOIN。
SQL RIGHT JOIN关键字
RIGHT JOIN关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为** NULL **。
SQL RIGHT JOIN 语法
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
或
SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name = table2.column_name;
** 注释: **在某些数据库中,RIGHT JOIN称为RIGHT OUTER JOIN。
SQL FULL OUTER JOIN 关键字
FULL OUTER JOIN 关键字只有左表(table1)和右表(table2)其中一个表中存在匹配,则返回行。
FULL OUTER JOIN 关键字结合了LEFT JOIN 和 RIGHT JOIN 的结果。
SQL FULL OUTER JOIN 语法
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name;
SQL UNION操作符
UNION操作符用于** 合并两个或多个SELECT语句的结果集 。
请注意,UNION内部的每个SELECT语句 必须拥有相同数量的列 。 列也必须拥有相似的数据类型 。同时, 每个SELECT语句的列的顺序必须相同 **。
SQL UNION 语法
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
** 注释: **默认地,UNION操作符选取不同的值。如果允许重复的值,请使用UNION ALL。
SQL UNION ALL 语法
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
** 注释: **UNION结果集中的列名总等于UNION中第一个SELECT语句中的列名。
## SQL SELECT INTO 语句
通过 SQL,可以从一个表复制信息到另一个表。
SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。
SQL SELECT INTO 语法
SQL INSERT INTO SELECT 语句
通过SQL,可以从一个表复制信息到另一个表。