zoukankan      html  css  js  c++  java
  • SQL语法语句总结(《SQL必知必会》读书笔记)

    一.SQL语句语法

    ALTER TABLE

      ALTER TABLE 用来更新已存在表的结构。

    ALTER TABLE tablename
    (ADD|DROP     column     datatype     [NULL|NOT NULL]    [CONSTRAINTS],
    ...
     );
     

    COMMIT

      COMMIT 用来将事物写入数据库。

    COMMIT [TRANSACTION];

    CREATE INDEX

      CREATE INDEX 用于在一个或多个列上创建索引。

    CREATE INDEX indexname
    ON    tableanme (column,...);

    CREATE PROCEDURE

      CREATE PROCEDURE 用于创建存储过程。

    CREATE PROCEDURE
    AS
    SQL statement;

    CREATE TABLE

      CREATE TABLE 用于创建新数据库表。更新已经存在的表的结构,使用ALTER TABLE。

    CREATE TABLE tablename
    (
            column      datatype      [NULL|NOT  NULL]    [CONSTRAINS],   
            column      datatype      [NULL|NOT  NULL]    [CONSTRAINS],                
    
             ... 
     );         

    CREATE VIEW

      CREATTE VIEW 用于创建一个或多个表上的新视图。

    CREATE    VIEW    viewname    AS
    SELECT    columns, ...
    FROM    tables, ...
    [WHERE ...]
    [GROUP    BY ...]
    [HAVING ...];

    DELETE

      DELETE 从表中删除一行多多行。

    DELETE    FROM    tablename
    [WHERE ...];

    DROP

      DROP 永久删除数据库对象(表,视图,索引等)。

    DROP    INDEX|PROCEDURE|TABLE|VIEW
    indexname|procedurename|tablename|viewname;

    INSERT

      INSERT 为表添加一行。

    INSERT    INTO    tablename[(columns, ...)]
    VALUES (values, ...);

    INSERT SELECT

      INSERT SELECTT 将SELECT结果插入到一个表。

    INSERT     INTO    tablename    [(columns, ...)]
    SELECT    columns, ...    FROM    tablename, ...
    [WHERE ...];

    ROLLBACK

      ROLLBACK 用于撤销一个事物块。

    ROLLBACK    [TO    savepointname];

    SELECT

      SELECT 用于从一个或多个表(视图)中检索数据。

    SELECT    columnname, ...
    FROM    tablename, ...
    [WHERE ...]
    [UNION ...]
    [GROUP    BY ...]
    [HAVING ...]
    [ORDER    BY ...];

    UPDATE

      UPDATE 更新表中的一行或多行。

    UPDATE    tablename
    SET    columnname = value, ...
    [WHERE ...];

     二.SQL常用语句

    检索数据

      SELECT语句后面跟要检索的列,FROM后跟要检索的表,WHERE用于过滤需要的条件。ORDER BY用于排序(DESC用于降序,ASC用于升序)。SELECT *表示检索所有的列。

    SELECT colunmname_1, columnname_2, clunmname_3, ...
    FROM    tablename
    [WHERE ...]
    [ORDER BY ... ASC|DESC];

    过滤数据

      WHERE用于过滤数据,后面可跟字句操作符,后跟 NOT 用于否定,后跟AND、OR和IN(完成与OR相同的功能)用于过滤多个条件,后跟LIKE用于通配符过滤(%表示任意字符出现任意次数,_表示匹配单个字符,[]用来指定一个字符集)。例如:

    SELECT    prod_id, prod_name, prod_price
    FROM    Products
    WHERE  NOT  prod_price BETWEN 3.44 AND 5.88    AND    prod_name LIKE '[JM]%';

      下表为WHERE字句操作符:

      

    拼接字段

      MySQL数据库中用Concat来进行拼接字段。AS来取一个别名。RTRIM()来去掉字符串右边的空格,LTRIM()来去掉字符串左边的空格,TRIM()来去掉字符串左右两边的空格。例如:

    SELECT    Concat( vend_name, '(' ,RTRIM(vend_country), ')' )
                    AS    vend_title
    FROM    Vendors
    ORDER BY  vend_name;

    数据函数

      常用数据的处理、汇总函数如下:

      例如:

    SELECT    COUNT(*)    AS    num_cust
    FROM    Customers;

    子查询

       子查询,即嵌套在其他查询中的查询。例如:

    SELECT    cust_name,cust_state,
                    (SELECT    COUNT(*)
                        FROM        Orders
                        WHERE    Orders.cust_id=Customer.cust_id)    AS    orders 
    FROM    Customers
    ORDER    BY    cust_name;

      

    联结表

       SQL最强大的功能之一就是能在数据查询的执行中联结(join)表。联结是利用SQL的SELECT能执行的最重要的操作,很好的理解联结及其语法是学习SQL的极为重要的部分。创建联结表非常简单,指定要联结的所有表及关联它们的方式即可。例如:

    SELECT    vend_name,prod_name,prod_price
    FROM    Vendors, Products
    WHERE    Vendors.vend_id=Products.vend_id;

      以上使用的联结称为内联结,也称为等值联结,它基于两个表之间的相等测试。下面的SELECT语句返回与前面例子完全相同的数据:

    SELECT    vend_name,prod_name,prod_price
    FROM    Vendor    INNER    JOIN    Products
    ON    Vendor.vend_id=Products.vend_id;

    组合查询

       可用UNION操作符来组合多条SQL语句,在各条语句之间放上关键字UNION。UNION从查询结果集中自动去除重复的行,如果显示所有可用UNION  ALL表示返回所有的匹配行。例如:

    SELECT cust_name, cust_contact,cust_email
    FROM        Customers
    WHERE    cust_state    IN('IL', 'IN' ,'MI')
    UNION
    SELECT cust_name, cust_contact,cust_email
    FROM        Customers
    WHERE    cust_name ='JACK';

    插入数据

      可用INSERT操作符对标进行插入操作,后面的INTO是可选的(建议加上)。例如:

    INSERT INTO Students(id,name,age,tel)
    VALUES(
      '001',
      'JACK' ,  
      '21' ,
      '8612345';
    )

      

    三.主键与外键

      主键是一种特殊的约束,用来保证一列(或一组列)中的值是唯一的,而且永远不改动。换句话说,表中的一列或多个列的唯一标识表中的每一行。这方便了直接或交互处理表中的行。没有主键,要安全的进行UPDATE和DELETE特定行而不影响其他行会非常困难。一种定义主键的方法是创建它,例如下面声明vend_id为主键:

    CREATE    TABLE    Vendors
    (
        vend_id    CHAR(10)    NOT NULL     PRIMARY  KEY,
        vend_name    CHAR(50)    NOT  NULL,
        vend_addr    CHAR(50)    NULL
    );

      外键是表中的一列,其值必须列在另一表的主键中。外键是保证引用完整性的及其重要的部分。例如:

    CREATE    TABLE    Orders
    (
        order_num    INTEGER    NOT  NULL    PRIMARY    KEY,
        order_data    DATATIME    NOT  NULL,
        cust_id    CHAR(10)    NOT  NULL    REFERENCES    Customers(cust_id)
    );

      上面语句定义使用了REFERENCES关键字,它表示cust_id中的任何都必须是Customers表的cust_id中的值。

      相同的工作也可以在ALTER  TABLE语句中用CONSTRAINT语法来完成:

    ALTER    TABLE    Orders
    ADD    CONSTRAINT
    FROEIGN    KEY    (cust_id)    REFERENCES    Customers    (cust_id)

    四.数据类型

                                      表4.1 字符串数字类型

      

    表4.2 数值数据类型

     

    表4.3 日期和时间数据类型

    表4.4 二进制数据类型

     

      以上是SQL相关的常用语法及语句结构,详情可查看SQL及DBMS相关文档。

    参考文献

    《SQL必知必会》,Ben Forta ,人民邮电出版社。

  • 相关阅读:
    .NetCore Grpc 客服端 工厂模式配置授权
    DOCKER 拉取 dotnet 镜像太慢 docker pull mcr.microsoft.com too slow
    Introducing .NET 5
    VSCode 出现错误 System.IO.IOException: The configured user limit (128) on the number of inotify instances has been reached.
    Omnisharp VsCode Attaching to remote processes
    zookeeper3.5.5 centos7 完全分布式 搭建随记
    Hadoop2.7.7 centos7 完全分布式 配置与问题随记
    MySQL索引 索引分类 最左前缀原则 覆盖索引 索引下推 联合索引顺序
    SQL基础随记3 范式 键
    MySQL调优 优化需要考虑哪些方面
  • 原文地址:https://www.cnblogs.com/maluning/p/8042343.html
Copyright © 2011-2022 走看看