美文网首页
SQL(W3C笔记)

SQL(W3C笔记)

作者: 大头鬼w | 来源:发表于2017-04-13 10:17 被阅读0次

    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,可以从一个表复制信息到另一个表。

    相关文章

      网友评论

          本文标题:SQL(W3C笔记)

          本文链接:https://www.haomeiwen.com/subject/lixbattx.html