• 简单SQL语句


    一、基础

    模式定义了数据如何存储、存储什么样的数据以及数据如何分解等信息,数据库和表都有模式。

    主键的值不允许修改,也不允许复用(不能使用已经删除的主键值赋给新数据行的主键)。

    SQL 语句不区分大小写,但是数据库表名、列名和值是否区分依赖于具体的 DBMS 以及配置。

    SQL 支持以下三种注释:

    # 注释
    SELECT *
    FROM mytable; -- 注释
    /* 注释1
       注释2 */

    数据库创建与使用:

    CREATE DATABASE test;
    USE test;

    二、创建表

    CREATE TABLE mytable (
      id INT NOT NULL AUTO_INCREMENT,
      col1 INT NOT NULL DEFAULT 1,
      col2 VARCHAR(45) NULL,
      col3 DATE NULL,
      PRIMARY KEY (`id`));

    三、修改表

    添加列

    ALTER TABLE mytable
    ADD col CHAR(20);

    删除列

    ALTER TABLE mytable
    DROP COLUMN col;

    删除表

    DROP TABLE mytable;

    四、插入

    普通插入

    INSERT INTO mytable(col1, col2)
    VALUES(val1, val2);

    插入检索出来的数据

    INSERT INTO mytable1(col1, col2)
    SELECT col1, col2
    FROM mytable2;

    将一个表的内容插入到一个新表

    CREATE TABLE newtable AS
    SELECT * FROM mytable;

    五、更新

    UPDATE mytable
    SET col = val
    WHERE id = 1;

    六、删除

    DELETE FROM mytable
    WHERE id = 1;

    TRUNCATE TABLE 可以清空表,也就是删除所有行。

    TRUNCATE TABLE mytable;

    使用更新和删除操作时一定要用 WHERE 子句,不然会把整张表的数据都破坏。可以先用 SELECT 语句进行测试,防止错误删除。

    七、查询

    DISTINCT

    相同值只会出现一次。它作用于所有列,也就是说所有列的值都相同才算相同。

    SELECT DISTINCT col1, col2
    FROM mytable;

    LIMIT

    限制返回的行数。可以有两个参数,第一个参数为起始行,从 0 开始;第二个参数为返回的总行数。

    返回前 5 行:

    SELECT *
    FROM mytable
    LIMIT 5;
    SELECT *
    FROM mytable
    LIMIT 0, 5;

    返回第 3 ~ 5 行:

    SELECT *
    FROM mytable
    LIMIT 2, 3;

    八、排序

    • ASC :升序(默认)
    • DESC :降序

    可以按多个列进行排序,并且为每个列指定不同的排序方式:

    SELECT *
    FROM mytable
    ORDER BY col1 DESC, col2 ASC;

    九、过滤

    不进行过滤的数据非常大,导致通过网络传输了多余的数据,从而浪费了网络带宽。因此尽量使用 SQL 语句来过滤不必要的数据,而不是传输所有的数据到客户端中然后由客户端进行过滤。

    SELECT *
    FROM mytable
    WHERE col IS NULL;

    十、子查询

    子查询中只能返回一个字段的数据。

    可以将子查询的结果作为 WHRER 语句的过滤条件:

    SELECT *
    FROM mytable1
    WHERE col1 IN (SELECT col2
                   FROM mytable2);

    下面的语句可以检索出客户的订单数量,子查询语句会对第一个查询检索出的每个客户执行一次:

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

    十一、连接

    连接用于连接多个表,使用 JOIN 关键字,并且条件语句使用 ON 而不是 WHERE。

    连接可以替换子查询,并且比子查询的效率一般会更快。

    可以用 AS 给列名、计算字段和表名取别名,给表名取别名是为了简化 SQL 语句以及连接相同表。

    内连接

    内连接又称等值连接,使用 INNER JOIN 关键字。

    SELECT A.value, B.value
    FROM tablea AS A INNER JOIN tableb AS B
    ON A.key = B.key;

    可以不明确使用 INNER JOIN,而使用普通查询并在 WHERE 中将两个表中要连接的列用等值方法连接起来。

    SELECT A.value, B.value
    FROM tablea AS A, tableb AS B
    WHERE A.key = B.key;

    在没有条件语句的情况下返回笛卡尔积。

    自连接

    自连接可以看成内连接的一种,只是连接的表是自身而已。

    一张员工表,包含员工姓名和员工所属部门,要找出与 Jim 处在同一部门的所有员工姓名。

    子查询版本

    SELECT name
    FROM employee
    WHERE department = (
          SELECT department
          FROM employee
          WHERE name = "Jim");

    自连接版本

    SELECT e1.name
    FROM employee AS e1 INNER JOIN employee AS e2
    ON e1.department = e2.department
          AND e2.name = "Jim";

    自然连接

    自然连接是把同名列通过等值测试连接起来的,同名列可以有多个。

    内连接和自然连接的区别:内连接提供连接的列,而自然连接自动连接所有同名列。

    SELECT A.value, B.value
    FROM tablea AS A NATURAL JOIN tableb AS B;

    外连接

    外连接保留了没有关联的那些行。分为左外连接,右外连接以及全外连接,左外连接就是保留左表没有关联的行。

    检索所有顾客的订单信息,包括还没有订单信息的顾客。

    SELECT Customers.cust_id, Orders.order_num
    FROM Customers LEFT OUTER JOIN Orders
    ON Customers.cust_id = Orders.cust_id;

    十二、组合查询

    使用 UNION 来组合两个查询,如果第一个查询返回 M 行,第二个查询返回 N 行,那么组合查询的结果一般为 M+N 行。

    每个查询必须包含相同的列、表达式和聚集函数。

    默认会去除相同行,如果需要保留相同行,使用 UNION ALL。

    只能包含一个 ORDER BY 子句,并且必须位于语句的最后。

    SELECT col
    FROM mytable
    WHERE col = 1
    UNION
    SELECT col
    FROM mytable
    WHERE col =2;
     
  • 相关阅读:
    qt自定义的串口类判断断开
    ubuntu16.04永久修改有线接口名称(enp0s3->eth0)
    记录一下读过的书
    Qt 主界面卡死
    Mysql5.7及版本以上导入sql提示Incorrect date value: '0000-00-00' for column
    webpack打包css
    ant-design-vue中的a-directory-tree更换图标
    解决php-fpm占用内存过高问题
    centos,解压源代码安装,没有configure文件
    OSS存储上遇到The difference between the request time and the current time is too large
  • 原文地址:https://www.cnblogs.com/darklights/p/9602495.html
Copyright © 2020-2023  润新知