sql常用操作

创建数据库:CREATE DATABASE database_name

使用数据库:use database_name


创建数据表:
    CREATE TABLE table_name
    (
        column_name1 data_type,
        column_name2 data_type,
        column_name2 data_type,
        ...
    )

    约束(CONSTRAINT):
        NOT NULL - 指示某列不能存储 NULL 值。
            where条件判断
                IS NULL
                IS NOT NULL
            ISNULL(column_name, value)、NVL()、IFNULL(column_name, value) 和 COALESCE(column_name, value) 函数
                计算时若值为null时,取值为value

        UNIQUE - 保证某列的每行必须有唯一的值。

        CHECK - 保证列中的值符合指定的条件。
            P_Id int NOT NULL CHECK (P_Id>0),

        DEFAULT - 规定没有给列赋值时的默认值。
            City varchar(255) DEFAULT 'Sandnes'

        PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
            CONSTRAINT connstarint_name PRIMARY KEY (column1,column2,...)

        FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
            CONSTRAINT 外键约束名 FOREIGN KEY  (column1,column2,... column_n) 
            REFERENCES 外键依赖的表 (column1,column2,...column_n)
            ON DELETE CASCADE--级联删除
        


创建索引:
    CREATE INDEX index_name
    ON table_name (column_name)

    CREATE UNIQUE INDEX index_name
    ON table_name (column_name)


创建视图:
    CREATE VIEW view_name AS
    SELECT column_name(s)
    FROM table_name
    WHERE condition
更新视图:
    CREATE OR REPLACE VIEW view_name AS
    SELECT column_name(s)
    FROM table_name
    WHERE condition
撤销视图:
    DROP VIEW view_name


删除数据库:DROP DATABASE database_name
删除数据表:DROP TABLE table_name
删除索引:DROP INDEX table_name.index_name(SQL Server)
         DROP INDEX index_name (MySQL)


ALTER TABLE 语句用于在已有的表中添加、删除或修改列。
    添加列:
        ALTER TABLE table_name
        DD column_name datatype
    删除表中的列:
        ALTER TABLE table_name
        DROP COLUMN column_name
    改变表中列的数据类型:
        SQL Server / MS Access:
        ALTER TABLE table_name
        ALTER COLUMN column_name datatype

        My SQL / Oracle:
        ALTER TABLE table_name
        MODIFY COLUMN column_name datatype



查:
    SELECT column_name,column_name
    FROM table_name;

    SELECT * FROM table_name;

 
别名;
    列:SELECT column_name AS alias_name
        FROM table_name;

    表:SELECT column_name(s)
        FROM table_name AS alias_name;


去重:
    SELECT DISTINCT column_name,column_name
    FROM table_name;


WHERE 子句
    SELECT column_name,column_name
    FROM table_name
    WHERE column_name operator value;
    operator:
        =    等于
        <>    不等于。注释:在 SQL 的一些版本中,该操作符可被写成 !=
        >    大于
        <    小于
        >=    大于等于
        <=    小于等于
        BETWEEN    AND 在某个范围内
        LIKE    搜索某种模式:% 表示多个字值,_ 下划线表示一个字符;
        IN    指定针对某个列的多个可能值
        逻辑运算: ()    not        and         or
        空值判断: is null

    LIKE 操作符:
        SELECT column_name(s)
        FROM table_name
        WHERE column_name LIKE pattern;

        SELECT column_name(s) 
        FROM table_name
        WHERE column_name REGEXP '[charlist]';(正则匹配)

        通配符:
            %    替代 0 个或多个字符
            _    替代一个字符
            [charlist]    字符列中的任何单一字符
            [^charlist]或[!charlist]    不在字符列中的任何单一字符

            REGEXP 或 NOT REGEXP 运算符

    IN 操作符
        SELECT column_name(s)
        FROM table_name
        WHERE column_name IN (value1,value2,...);

    BETWEEN 操作符
        SELECT column_name(s)
        FROM table_name
        WHERE column_name BETWEEN value1 AND value2;


排序:
    SELECT column_name,column_name
    FROM table_name
    ORDER BY column_name,column_name ASC|DESC;


插入新记录:
    INSERT INTO table_name
    VALUES (value1,value2,value3,...);

    INSERT INTO table_name (column1,column2,column3,...)
    VALUES (value1,value2,value3,...);


修改数据(更新数据):
    UPDATE table_name
    SET column1=value1,column2=value2,...
    WHERE some_column=some_value;


删除数据:
    DELETE FROM table_name
    WHERE some_column=some_value


规定要返回的记录的数目:
    SELECT TOP number|percent column_name(s)
    FROM table_name;(SQL)

    SELECT column_name(s)
    FROM table_name
    LIMIT number;(MYSQL)

    SELECT column_name(s)
    FROM table_name
    WHERE ROWNUM <= number;(Oracle )


连接(JOIN):
    join 用于把来自两个或多个表的行结合起来。
    INNER JOIN:如果表中有至少一个匹配,则返回行
    LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
    RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
    FULL JOIN:只要其中一个表中存在匹配,则返回行

    INNER JOIN:
        SELECT column_name(s)
        FROM table1
        INNER JOIN table2
        ON table1.column_name=table2.column_name;

    LEFT JOIN:
        SELECT column_name(s)
        FROM table1
        LEFT JOIN table2
        ON table1.column_name=table2.column_name;
    
    RIGHT JOIN:
        SELECT column_name(s)
        FROM table1
        RIGHT JOIN table2
        ON table1.column_name=table2.column_name;

    FULL OUTER JOIN:
        SELECT column_name(s)
        FROM table1
        FULL OUTER JOIN table2
        ON table1.column_name=table2.column_name;


UNION 操作符
    UNION 操作符合并两个或多个 SELECT 语句的结果。
    UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
    UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名

    UNION(选取不同的值):
        SELECT column_name(s) FROM table1
        UNION
        SELECT column_name(s) FROM table2;

    UNION ALL(允许重复的值):
        SELECT column_name(s) FROM table1
        UNION ALL
        SELECT column_name(s) FROM table2;


SELECT INTO 语句
    从一个表复制数据,然后把数据插入到另一个新表中

    SELECT column_name(s)
    INTO newtable [IN externaldb]
    FROM table1;

    MySQL:
        CREATE TABLE 新表
        AS
        SELECT * FROM 旧表 

    SELECT INTO 语句可用于通过另一种模式创建一个新的空表。只需要添加促使查询没有数据返回的 WHERE 子句即可:
        SELECT *
        INTO newtable
        FROM table1
        WHERE 1=0;


INSERT INTO SELECT 语句
    从一个表复制数据,然后把数据插入到一个已存在的表中,目标表中任何已存在的行都不会受影响
    INSERT INTO table2
    SELECT * FROM table1;



MySQL Date 函数
    NOW()            返回当前的日期和时间
    CURDATE()        返回当前的日期
    CURTIME()        返回当前的时间
    DATE()            提取日期或日期/时间表达式的日期部分
    EXTRACT()        返回日期/时间的单独部分
    DATE_ADD()        向日期添加指定的时间间隔
    DATE_SUB()        从日期减去指定的时间间隔
    DATEDIFF()        返回两个日期之间的天数
    DATE_FORMAT()    用不同的格式显示日期/时间


导出数据(MYSQL):
    SELECT ... INTO OUTFILE 
        将数据表 runoob_tbl 数据导出到 /tmp/runoob.txt 
        SELECT * FROM runoob_tbl 
        INTO OUTFILE '/tmp/runoob.txt';

        生成一个文件,各值用逗号隔开:
        SELECT a,b,a+b INTO OUTFILE '/tmp/result.text'
        FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
        LINES TERMINATED BY '\n'
        FROM test_table;

    导出表作为原始数据(不带数据):
        将数据表 runoob_tbl 导出到 /tmp 目录中
        mysqldump -u root -p --no-create-info --tab=/tmp RUNOOB runoob_tbl
        password *****

    导出 SQL 格式的数据(带数据,不带表名时,导出当前数据库所有数据):
        mysqldump -u root -p database_name [table_name] > dump.txt
        password *****


导入数据(MySQL):
    mysql -u用户名    -p密码    <  要导入的数据库数据(runoob.sql)

    source 命令导入
        mysql> create database abc;      # 创建数据库
        mysql> use abc;                  # 使用已创建的数据库 
        mysql> set names utf8;           # 设置编码
        mysql> source /home/abc/abc.sql  # 导入备份数据库


    使用 LOAD DATA 导入数据:
        从当前目录中读取文件 dump.txt ,将该文件中的数据插入到当前数据库的 mytbl 表中。
        mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl;
        如果指定LOCAL关键词,则表明从客户主机上按路径读取文件。如果没有指定,则文件在服务器上按路径读取文件。


        mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl
        -> FIELDS TERMINATED BY ':'
        -> LINES TERMINATED BY '\r\n';

    使用 mysqlimport 导入数据:
        

 

posted @ 2019-02-20 09:24  李小样  阅读(90)  评论(0编辑  收藏  举报