• SQL语句


    SQL语句

    SQL SELECT 语句

    SQL SELECT

    SELECT column_name,column_name FROM table_name

    SELECT * FROM table_name

    SQL SELECT DISTINCT

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

    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;

    WHERE子句中的运算符(operator)

    运算符

    描述

    =

    等于

    <>

    不等于

    >

    大于

    <

    小于

    >=

    大于等于

    <=

    小于等于

    BETWEEN

    在某个范围内

    LIKE

    搜索某种模式

    IN

    指定针对某个列的多个可能值

    文本字段 vs 数值字段

    SQL使用单引号来环绕文本值(大部分数据库系统也接受双引号)

    如果是数值字段,请不要使用引号

    SELECT * FROM Websites WHERE country='CN'

    SELECT * FROM Websites WHERE id=1

    SQL AND & OR 运算符

    SELECT * FROM Websites WHERE country='CN' AND alexa>50

    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;

    ORDER BY多列的时候,先按照第一个column name排序,再按照第二个column name排序

    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;

     

    注意

    在更新记录时要格外小心!在上面的实例中,如果我们省略了 WHERE 子句,如下所示:

    UPDATE Websites
    SET alexa='5000', country='USA'

    执行以上代码会将 Websites 表中所有数据的 alexa 改为 5000,country 改为 USA。

    执行没有 WHERE 子句的 UPDATE 要慎重,再慎重。

    SQL DELETE语句

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

    SQL DELETE

    DELETE FROM table_name
    WHERE some_column=some_value;

     

    注意

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

    SQL LIMIT子句

    MySQL 支持 LIMIT 语句来选取指定的条数数据

    SQL LIMIT

    SELECT column_name(s)
    FROM table_name
    LIMIT number;

    SQL LIKE操作

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

    SQL LIKE

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

     

    实例

    SELECT * FROM Websites
    WHERE name LIKE 'G%';

    "%" 符号用于在模式的前后定义通配符(默认字母)。

     

    通过使用 NOT 关键字,您可以选取不匹配模式的记录。

    下面的 SQL 语句选取 name 不包含模式 "oo" 的所有客户:

    SELECT * FROM Websites
    WHERE name NOT LIKE '%oo%';

    SQL 通配符

    在 SQL 中,通配符与 SQL LIKE 操作符一起使用。

    SQL 通配符用于搜索表中的数据。

    在 SQL 中,可使用以下通配符:

    实例

    选取 url 以字母 "https" 开始的所有网站

    SELECT * FROM Websites
    WHERE url LIKE 'https%';

     

    选取 name 以一个任意字符开始,然后是 "oogle" 的所有客户:

    SELECT * FROM Websites
    WHERE name LIKE '_oogle';

     

    MySQL 中使用 REGEXPNOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式。

    下面的 SQL 语句选取 name 以 "G"、"F" 或 "s" 开始的所有网站:

    SELECT * FROM Websites
    WHERE name REGEXP '^[GFs]';

     

    下面的 SQL 语句选取 name 以 A 到 H 字母开头的网站:

    SELECT * FROM Websites
    WHERE name REGEXP '^[A-H]';

     

    下面的 SQL 语句选取 name 不以 A 到 H 字母开头的网站:

    SELECT * FROM Websites
    WHERE name REGEXP '^[^A-H]';

    SQL IN操作符

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

    SQL IN

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

     

    SQL BETWEEN操作符

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

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

     

    SQL 别名

    通过使用 SQL,可以为表名称或列名称指定别名。

    基本上,创建别名是为了让列名称的可读性更强。

    列的SQL别名语法

    SELECT column_name AS alias_name
    FROM table_name;

    表的SQL别名语法

    SELECT column_name(s)
    FROM table_name AS alias_name;

     

    在下面的情况下,使用别名很有用:

    • 在查询中涉及超过一个表
    • 在查询中使用了函数
    • 列名称很长或者可读性差
    • 需要把两个列或者多个列结合在一起

     

    SQL 连接

    SQL join 用于把来自两个或多个表的行结合起来。

    下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。

     

    INNER JOIN 关键字

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

    SELECT column_name(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 是相同的。

    LEFT JOIN 关键字

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

    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 UNION操作符

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

    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;

    注释:UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

     

    实例

    SQLINSERT INTO SELECT语句

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

    INSERT INTO table2
    SELECT * FROM table1;

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

     

    数据库创建相关语句

    CREATE DATABASE dbname;

     

    CREATE TABLE Persons
    (
    PersonID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
    );

     

    NOT NULL约束

     

     

     

    主键约束

    数据库索引

    CREATE INDEX index_name
    ON table_name (column_name)

     

    SQL 聚合函数

    SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。

    有用的 Aggregate 函数:

    • AVG() - 返回平均值
    • COUNT() - 返回行数
    • MAX() - 返回最大值
    • MIN() - 返回最小值
    • SUM() - 返回总和

    SELECT AVG(column_name) FROM table_name

    COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):

    SELECT COUNT(column_name) FROM table_name;

    COUNT(*) 函数返回表中的记录数:

    SELECT COUNT(*) FROM table_name;

    COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目:

    SELECT COUNT(DISTINCT column_name) FROM table_name;

     

    SQL GROUP BY语句

    GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。

     

    SELECT column_name, aggregate_function(column_name)
    FROM table_name
    WHERE column_name operator value
    GROUP BY column_name;

     

    SQL HAVING子句

    在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。

    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;

     

     

    快速参考

    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

    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_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

    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

  • 相关阅读:
    django.db.utils.OperationalError: no such table: auth_user
    Python 爬虫 去掉网页注释,去掉网页注释
    Python 爬虫实例(6)—— 爬取蚂蚁免费代理
    HTTPSConnectionPool(host='xxxxx', port=443): Max retries exceeded with url:xxxxxxxx (Caused by NewConnectionError('<urllib3.connect,Max retries exceeded with ,(Caused by NewConnectionError
    requests.exceptions.MissingSchema: Invalid URL 'xxxxxxxxxxxxx': No schema supplied. Perhaps you meant xxxxxxxxxxxxx
    redis安装和配置(一)
    Python 统计代码的行数,Python脚本 统计代码
    Python 实现根据不同的程序运行环境存放日志目录,Python实现Linux和windows系统日志的存放
    Changing SID Server 2012
    [转]VMware Workstation网络连接的三种模式
  • 原文地址:https://www.cnblogs.com/kexinxin/p/11622454.html
Copyright © 2020-2023  润新知