• mysql学习笔记—常用sql语句


    sql注意事项:

    • SQL 对大小写不敏感:SELECT 与 select 是相同的
    • 某些数据库系统要求在每条 SQL 语句的末端使用分号。

    CREATE DATABASE

    CREATE DATABASE 语句用于创建数据库。

    CREATE DATABASE dbname;

    CREATE TABLE

    CREATE TABLE 语句用于创建数据库中的表。

    表由行和列组成,每个表都必须有个表名。

    CREATE TABLE table_name
    (
    column_name1 data_type(size),
    column_name2 data_type(size),
    column_name3 data_type(size),
    ....
    );

    column_name 参数规定表中列的名称。

    data_type 参数规定列的数据类型(例如 varchar、integer、decimal、date 等等)。

    size 参数规定表中列的最大长度。

    CREATE INDEX

    在表上创建一个简单的索引。允许使用重复的值:

    CREATE INDEX index_name
    ON table_name (column_name)

    在表上创建一个唯一的索引。不允许使用重复的值:

    CREATE UNIQUE INDEX index_name
    ON table_name (column_name)

    您可以在表中创建索引,以便更加快速高效地查询数据。

    用户无法看到索引,它们只能被用来加速搜索/查询。

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

    ALTER TABLE

    ALTER TABLE 语句用于在已有的表中添加、删除或修改列。

    添加列:

    ALTER TABLE table_name
    ADD column_name datatype

    删除列:

    ALTER TABLE table_name
    DROP COLUMN column_name

    修改列:

    ALTER TABLE table_name
    MODIFY COLUMN column_name datatype

    DROP 和 TRUNCATE

    通过使用 DROP 语句,可以轻松地删除索引、表和数据库。

    删除数据库:

    DROP DATABASE database_name

    删除索引(mysql):

    ALTER TABLE table_name DROP INDEX index_name

    删除表:

    DROP TABLE table_name

    如果我们仅仅需要删除表内的数据,但并不删除表本身,那么我们该如何做呢?

    请使用 TRUNCATE TABLE 语句:

    TRUNCATE TABLE table_name

    TRUNCATE TABLE语句同时能清空主键。

    SELECT

    SELECT 语句用于从数据库中选取数据。

    SELECT column_name,column_name
    FROM table_name;
    与
    SELECT * FROM table_name;

    INSERT INTO

    INSERT INTO 语句用于向表中插入新记录。

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

    从一个表复制数据,然后把数据插入到一个已存在的表:

    Insert into Table2(field1,field2,…) select value1,value2,… from Table1 where condition;

    如果两个表的表结构一样,可以省略为:

    Insert into Table2 select * from Table1;

    UPDATE

    UPDATE 语句用于更新表中已存在的记录。

    UPDATE table_name
    SET column1=value1,column2=value2,...
    WHERE some_column=some_value;

    请注意 SQL UPDATE 语句中的 WHERE 子句!
    WHERE 子句规定哪条记录或者哪些记录需要更新。如果您省略了 WHERE 子句,所有的记录都将被更新!

    按指定条件update:

    UPDATE table_name
    SET COLUMN = (
        CASE
        WHEN 条件 THEN 结果
        WHEN 条件 THEN 结果
    ...
        ELSE 结果
        END
    )
    WHERE
        some_column = some_value;

    更新字段部分内容:

    UPDATE 表名 SET 字段名 = REPLACE(object, 'search', 'replace');
     
    update info set name = REPLACE(name,'Beijing','BJ') where name like 'Beijing%';
     
    扩展:update `news` set `content`=replace(`content`,' ','');//清除news表中content字段中的空格

    DELETE

    DELETE 语句用于删除表中的行。

    DELETE FROM table_name
    WHERE some_column=some_value;

    请注意 SQL DELETE 语句中的 WHERE 子句!
    WHERE 子句规定哪条记录或者哪些记录需要删除。如果您省略了 WHERE 子句,所有的记录都将被删除!

    SELECT DISTINCT 

    在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。

    DISTINCT 关键词用于返回唯一不同的值。

    SELECT DISTINCT column_name,column_name
    FROM table_name;

    ORDER BY 

    ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。

    ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。

    SELECT column_name,column_name
    FROM table_name
    ORDER BY column_name,column_name ASC|DESC;

    如果要按照指定顺序排序,则使用 ORDER BY FIELD,例:

    --id字段按照5,3,7,1排序
    ORDER BY FIELD(`id`, 5, 3, 7, 1)

    LIMIT

    LIMIT 关键字用于规定要返回的记录的数目。

    SELECT column_name(s)
    FROM table_name
    LIMIT number;

    LIMIT关键字用于msyql数据库,oracle数据库使用ROWNUM关键字,用法:

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

    LIKE 

    LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。

    SELECT column_name(s)
    FROM table_name
    WHERE column_name LIKE pattern;

    pattern为指定的模式,通常使用通配符来表示:

    • %:替代0个或多个字符
    • _:替代一个字符

    IN 和 NOT IN

    IN 操作符允许您在 WHERE 子句中规定多个值。

    NOT IN 操作符允许您在 WHERE 子句中排除多个值。

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

    BETWEEN 和 NOT BETWEEN

    BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。

    NOT BETWEEN 操作符选取不介于两个值之间的数据范围内的值

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

    JOIN 和 INNER JOIN

    JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。

    INNER JOIN 关键字在表中存在至少一个匹配时返回行。

    注释:INNER JOIN 与 JOIN 是相同的。

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

    LEFT JOIN

    LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。

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

    两表关联,查询左表独有的数据:

    select * from t1 left join t2 on t1.id = t2.id where t2.id is null;

    RIGHT JOIN

    RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。

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

    两表关联,查询右表独有的数据: 

    select * from t1 right join t2 on t1.id = t2.id where t1.id is null;

    FULL JOIN

    只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。

    oracle里面有full join,但是在mysql中没有full join。我们可以使用union来达到目的。

    select * from t1 left join t2 on t1.id = t2.id
    union 
    select * from t1 right join t2 on t1.id = t2.id;

    UNION 和 UNION ALL

    UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

    请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。

    SELECT column_name(s) FROM table1
    UNION
    SELECT column_name(s) FROM table2;

    注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

    SELECT column_name(s) FROM table1
    UNION ALL
    SELECT column_name(s) FROM table2;

    INSERT INTO SELECT

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

    我们可以从一个表中复制所有的列插入到另一个已存在的表中:

    INSERT INTO table2
    SELECT * FROM table1;

    或者我们可以只复制希望的列插入到另一个已存在的表中:

    INSERT INTO table2
    (column_name(s))
    SELECT column_name(s)
    FROM table1;

    IS NULL 和 IS NOT NULL

    IS NULL操作符用于选取某一列的值为NULL的记录:

    SELECT * FROM table WHERE column IS NULL

    IS NOT NULL操作符用于选取某一列的值不为NULL的记录:

    SELECT * FROM table WHERE column IS NOT NULL

    参考:

    菜鸟教程:sql教程

  • 相关阅读:
    【BZOJ1831】[AHOI2008]逆序对(动态规划)
    【agc030f】Permutation and Minimum(动态规划)
    【BZOJ3167】[HEOI2013]SAO(动态规划)
    【CF802C】Heidi and Library(网络流)
    【CF671D】Roads in Yusland(贪心,左偏树)
    对偶问题
    【BZOJ2324】[ZJOI2011]营救皮卡丘(网络流,费用流)
    【BZOJ3691】游行(网络流)
    【CF908G】New Year and Original Order(动态规划)
    【CF809C】Find a car(动态规划)
  • 原文地址:https://www.cnblogs.com/Jason-Xiang/p/6704086.html
Copyright © 2020-2023  润新知