【学习总结】SQL学习总结之SQL语法

【学习总结】SQL学习总结-总

================================================

二、SQL语法

SQL SELECT 语句

  • 介绍

    • SELECT 语句用于从数据库中选取数据。
    • 结果被存储在一个结果表中,称为结果集。
  • SQL SELECT 语法

    • 选取特定列组成新表返回:SELECT column_name,column_name FROM table_name;
      • 例如:SELECT name,country FROM Websites;
    • 选取所有列即原表返回:SELECT * FROM table_name;
      • 例如:SELECT * FROM Websites;

SQL SELECT DISTINCT 语句

  • 介绍

    • 在表中,一个列可能会包含多个重复值,有时仅希望列出不同(distinct)的值。
    • DISTINCT 关键词用于返回唯一不同的值。
  • SQL SELECT DISTINCT 语法

    • 默认去掉所选取列的重复值并返回新表:
      • SELECT DISTINCT column_name,column_name FROM table_name;
    • 例如:SELECT DISTINCT country FROM Websites;

SQL WHERE 子句

  • 介绍

    • WHERE 子句用于过滤记录,提取那些满足指定条件的记录。
  • SQL WHERE 语法

    • 选取列并返回符合指定条件的新表:
      • SELECT column_name,column_name FROM table_name WHERE column_name operator value; -- “列名+操作符+值”
    • 例如:从 "Websites" 表中选取国家为 "CN" 的所有网站:
      • SELECT * FROM Websites WHERE country='CN';
    • 例如:从 "Websites" 表中选取id为1的所有网站:
      • SELECT * FROM Websites WHERE id=1;
  • 文本字段 vs. 数值字段

    • SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。-- ( 'CN' )
    • 如果是数值字段,请不要使用引号。-- (id=1)
  • WHERE 子句中的运算符



SQL AND & OR 运算符

  • 介绍

    • AND & OR 运算符用于基于一个以上的条件对记录进行过滤。
    • 如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
    • 如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
  • AND 运算符语法

    • 选取同时满足两个条件的列并返回新表:
      • SELECT * FROM tablename WHERE column_name operator value AND column_name operator value;
    • 例如:从 "Websites" 表中选取国家为 "CN" 且alexa排名大于 "50" 的所有网站:
      • SELECT * FROM Websites WHERE country='CN' AND alexa > 50;
  • OR 运算符语法

    • 选取满足任一条件的列并返回新表:
      • SELECT * FROM Websites WHERE column_name operator value OR column_name operator value
    • 例如:从 "Websites" 表中选取国家为 "USA" 或者 "CN" 的所有客户:
      • SELECT * FROM Websites WHERE country='USA' OR country='CN';
  • AND & OR 结合

    • 例如:从 "Websites" 表中选取 alexa 排名大于 "15" 且国家为 "CN" 或 "USA" 的所有网站:
      • SELECT * FROM Websites WHERE alexa>15 AND (country='CN' OR country='USA');

SQL ORDER BY 关键字

  • 介绍

    • ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。
    • ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字(descent下降); ASC(ascent上升)。
  • SQL ORDER BY 语法

    • 根据某列或某几列按照升序或降序排列后返回新表:
      • SELECT column_name, column_name FROM table_name ORDER BY column_name, column_name ASC | DESC
    • 例如:从 "Websites" 表中选取所有网站,并按照 "alexa" 列排序:
      • SELECT * FROM Website ORDER BY alexa;
    • 例如:从 "Websites" 表中选取所有网站,并按照 "alexa" 列降序排序:
      • SELECT * FROM Websites ORDER BY alexa DESC;
    • 例如:从 "Websites" 表中选取所有网站,并按照 "country" 和 "alexa" 列排序:
      • SELECT * FROM Websites ORDER BY country, alexa;
  • 注意

    • ORDER BY 多列的时候,先按照第一个column name排序,在按照第二个column name排序;
      • 1)先将country值这一列排序,同为CN的排前面,同属USA的排后面;
      • 2)然后在同属CN的这些多行数据中,再根据alexa值的大小排列。
      • 3)ORDER BY 排列时,不写明ASC DESC的时候,默认是ASC。
    • 多列时,desc 或者 asc 只对它紧跟着的第一个列名有效,其他列不受影响,仍然是默认的升序。

SQL INSERT INTO 语句

  • 介绍

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

    • 无需指定要插入数据的列名,只需提供被插入的值:
      • INSERT INTO table_name VALUE (value1, value2, ....);
    • 需要指定列名及被插入的值:
      • INSERT INTO table_name (column1, column2, ...) VALUE (value1, value2, ...);
    • 例如:插入一个新行,但是只在 "name"、"url" 和 "country" 列插入数据(id 字段会自动更新):
      • NSERT INTO Websites (name, url, country) VALUES ('stackoverflow', 'http://stackoverflow.com/', 'IND');
  • 注意:

    • id字段会自动更新;
    • 如果不是插入全部字段,则未指定数值的字段自动填充默认值,比如0.
    • 没有指定要插入数据的列名的形式需要列出插入行的每一列数据;
    • insert into select 和select into from 的区别:
      • `insert into scorebak select * from socre where neza='neza' : 插入一行,要求表scorebak 必须存在;
      • `select * into scorebak from score where neza='neza' : 也是插入一行,要求表scorebak 不存在;

SQL UPDATE 语句

  • 介绍

    • 更新表中已存在的记录。
  • SQL UPDATE 语法

    • 根据set设置更新指定列或整个表的相关数值:
      • UPDATE table_name SET column1=value1, columa2=value2,.. WHERE some_column=some_value;
    • 例如:把 "菜鸟教程" 的 alexa 排名更新为 5000,country 改为 USA。
      • UPDATE Websites SET alexa=’5000‘, country='USA' WHERE name='菜鸟教程';
  • 注:

    • 执行没有 WHERE 子句的 UPDATE 要慎重,再慎重。
      • 如果上述例子中没有WHERE,则会把表中所有数据的alexa改为5000,country改为USA;
    • 在 MySQL 中可以通过设置 sql_safe_updates 这个自带的参数来解决,当该参数开启的情况下,你必须在update 语句后携带 where 条件,否则就会报错。
      • set sql_safe_updates=1; 表示开启该参数

SQL DELETE 语句

  • 介绍

    • 删除表中的记录。
  • SQL DELETE 语法

    • 从指定表中删除符合条件的行:
      • DELETE FROM table_name WHERE some_column=some_value;
    • 例如:从 "Websites" 表中删除网站名为 "百度" 且国家为 CN 的网站的所在行:
      • DELETE FROM Websites WHERE name='百度' AND country='CN;
  • 注意

    • 可以在不删除表的情况下,删除表中所有的行。这意味着表结构、属性、索引将保持不变:
    • 语句:
      • DELETE FROM table_name;
      • DELETE * FROM table_name;
  • SQL关于删除的三个语句:DROP、TRUNCATE、 DELETE

    • 相同点:drop、delete、truncate 都是删除表的内容。
    • 不同点:
      • delete:删除表的内容,表的结构还存在,不释放空间,可以回滚恢复;
      • drop:删除表内容和结构,释放空间,没有备份表之前要慎用;
      • truncate:删除表的内容,表的结构存在,可以释放空间,没有备份表之前要慎用;
    • 执行速度:drop > truncate > delete
  • mysql安全设置

    • mysql 中可以通过参数 sql_safe_updates 来限制 update/delete,防止全表更新或删除。

END

posted @ 2020-03-22 19:00  anliux  阅读(450)  评论(0编辑  收藏  举报