什么是 SQL?

  • SQL 指结构化查询语言
  • SQL 使我们有能力访问数据库
  • SQL 是一种 ANSI 的标准计算机语言
  • SQL 面向数据库执行查询
  • SQL 可从数据库取回数据
  • SQL 可在数据库中插入新的纪录
  • SQL 可从数据库删除记录
  • SQL 很容易学习

 

SQL 数据操作语言 (DML)

  • SELECT - 从数据库表中获取数据
  • UPDATE - 更新数据库表中的数据
  • DELETE - 从数据库表中删除数据
  • INSERT INTO - 向数据库表中插入数据

     

     

    SQL 数据定义语言 (DDL)

     SQL 中最重要的 DDL 语句:

    • CREATE TABLE - 创建新表
    • ALTER TABLE - 变更(改变)数据库表
    • DROP TABLE - 删除表
    • CREATE INDEX - 创建索引(搜索键)
    • DROP INDEX - 删除索引

     

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

    操作符 描述
    = 等于
    <> 不等于
    > 大于
    < 小于
    >= 大于等于
    <= 小于等于
    BETWEEN 在某个范围内
    LIKE 搜索某种模式

     

    UNION

    UNION 命令用于从两个表中选取相关的信息,很类似 JOIN 命令。不过,当使用 UNION 命令时,所有被选取的列的数据类型应该是相同的。

    注释:如使用 UNION,那么只有不同的值会被选取。

    SQL Statement 1
    UNION
    SQL Statement 2

    UNION ALL

    UNION ALL 命令和 UNION 命令几乎是等效的,不过 UNION ALL 命令会列出所有的值。

    SQL Statement 1
    UNION ALL
    SQL Statement 2
    
    

    创建索引

    索引被创建于已有的表中,它可使对行的定位更快速更有效。可以在表格的一个或者多个列上创建索引,每个索引都会被起个名字。用户无法看到索引,它们只能被用来加速查询。

    注释:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常用于搜索的列上面创建索引。

    唯一的索引 (Unique Index)

    在表格上面创建某个一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。

    CREATE UNIQUE INDEX 索引名称
    ON 表名称 (列名称)
    

    "列名称" 规定你需要索引的列。

    简单的索引

    在表上创建一个简单的索引。当我们省略关键词 UNIQUE 时,就可以使用重复的值。

    CREATE INDEX 索引名称
    ON 表名称 (列名称)
    

    "列名称" 规定你需要索引的列。

  •  

    在 SQL Server 中的合计函数

    函数描述
    AVG(column) 返回某列的行数
    BINARY_CHECKSUM  
    CHECKSUM  
    CHECKSUM_AGG  
    COUNT(column) 返回某列的行数(不包括NULL值)
    COUNT(*) 返回被选行数
    COUNT(DISTINCT column) 返回相异结果的数目
    FIRST(column) 返回在指定的域中第一个记录的值(SQLServer2000 不支持)
    LAST(column) 返回在指定的域中最后一个记录的值(SQLServer2000 不支持)
    MAX(column) 返回某列的最高值
    MIN(column) 返回某列的最低值
    STDEV(column)  
    STDEVP(column)  
    SUM(column) 返回某列的总和
    VAR(column)  
    VARP(column)  

     

     

    GROUP BY...

    把 GROUP BY 加入 SQL 的原因是,合计函数(比如 SUM)在每次被调用后会返回所有列的合计,如果没有 GROUP BY,就无法计算每个单独列值组合的总和。

    GROUP BY 的语法:

    SELECT column,SUM(column) FROM table GROUP BY column

    HAVING...

    把 HAVING 加入 SQL 的原因是,WHERE 无法应用于合计函数,而如果没有 HAVING,就无法测试结果条件。

    HAVING 的语法:

    SELECT column,SUM(column) FROM table
    GROUP BY column
    HAVING SUM(column) condition value

    制作备份复件

    下面的例子会制作 "Persons" 表的备份复件:

    SELECT * INTO Persons_backup FROM Persons

    IN 子句可用于向另一个数据库中拷贝表:

    SELECT Persons.* INTO Persons IN 'Backup.mdb' FROM Persons

    SQL 语句

    语句语法
    AND / OR SELECT column_name(s)
    FROM table_name
    WHERE condition
    AND|OR condition
    ALTER TABLE (add column) ALTER TABLE table_name
    ADD column_name datatype
    ALTER TABLE (drop column) ALTER TABLE table_name
    DROP COLUMN column_name
    AS (alias for column) SELECT column_name AS column_alias
    FROM table_name
    AS (alias for table) 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 INDEX CREATE INDEX index_name
    ON table_name (column_name)
    CREATE TABLE CREATE TABLE table_name
    (
    column_name1 data_type,
    column_name2 data_type,
    .......
    )
    CREATE UNIQUE INDEX 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 FROM DELETE FROM table_name
    (Note: Deletes the entire table!!)

    or

    DELETE FROM table_name
    WHERE condition

    DROP DATABASE DROP DATABASE database_name
    DROP INDEX DROP INDEX table_name.index_name
    DROP TABLE DROP TABLE table_name
    GROUP BY SELECT column_name1,SUM(column_name2)
    FROM table_name
    GROUP BY column_name1
    HAVING SELECT column_name1,SUM(column_name2)
    FROM table_name
    GROUP BY column_name1
    HAVING SUM(column_name2) condition value
    IN SELECT column_name(s)
    FROM table_name
    WHERE column_name
    IN (value1,value2,..)
    INSERT INTO INSERT INTO table_name
    VALUES (value1, value2,....)

    or

    INSERT INTO table_name
    (column_name1, column_name2,...)
    VALUES (value1, value2,....)

    LIKE SELECT column_name(s)
    FROM table_name
    WHERE column_name
    LIKE 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
    (used to create backup copies of tables)
    SELECT *
    INTO new_table_name
    FROM original_table_name

    or

    SELECT column_name(s)
    INTO new_table_name
    FROM original_table_name

    TRUNCATE TABLE
    (deletes only the data inside the table)
    TRUNCATE TABLE table_name
    UPDATE UPDATE table_name
    SET column_name=new_value
    [, column_name=new_value]
    WHERE column_name=some_value
    WHERE SELECT column_name(s)
    FROM table_name
    WHERE condition