zoukankan      html  css  js  c++  java
  • 简单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;
     
  • 相关阅读:
    nowcoderD Xieldy And His Password
    Codeforces681D Gifts by the List
    nowcoder80D applese的生日
    Codeforces961E Tufurama
    Codeforces957 Mahmoud and Ehab and yet another xor task
    nowcoder82E 无向图中的最短距离
    nowcoder82B 区间的连续段
    Codeforces903E Swapping Characters
    Codeforces614C Peter and Snow Blower
    Codeforces614D Skills
  • 原文地址:https://www.cnblogs.com/darklights/p/9602495.html
Copyright © 2011-2022 走看看