SQL 分为两个部分:数据操作语言(DML)和 数据定义语言(DDL)。
增删改查(CRUD)构成了 SQL 的 DML 部分。

  • SELECT - 从数据库表中获取数据

    • SELECT 列名 FROM 表名
    • SELECT * FROM 表名
      • SELECT COUNT(*) FROM 表名
    • SELECT DISTINCT 列名 FROM 表名  (只显示结果不同的项)
    • SELECT 列名 FROM 表名 WHERE 列 运算符 值
      • 一些特别的操作符

        操作符 描述
        <> 不等于
        BETWEEN 在某个范围内
        LIKE 搜索某种模式
      • LIKENOT LIKE 搜索的模式:
        • % 表示一个或多个字符
        • _ 表示一个字符
        • [charlist] 表示字符列中的任何单一字符
        • [^charlist] 或者 [!charlist] 表示不在字符列中的任何单一字符
      • WHERE 列名 IS NULL
        • 查找空字段不能用 =NULL !
      • IN 允许在 WHERE 子句中规定多个值。
        • WHERE 列名 IN (值1, 值2, ...)
          这种方法比 WHERE 列名 = 值1 OR 列名 = 值2 效率高
      • 操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围,这些值可以是数值、文本或者日期。
        • SELECT 列名 FROM 表名 WHERE 列名 (NOT) BETWEEN 值1 AND 值2
        • 不同的数据库对 BETWEEN AND 操作符的区间处理有差异,有开区间、闭区间、左闭右开。
      • AND 和 OR 可在 WHERE 子语句中把多个条件结合起来,可以使用圆括号来组成复杂的表达式。
      • WHERE 列名=(SELECT ……)
        • e.g. SELECT …… WHERE birthday=(SELECT MIN(birthday) FROM ……)
    • ORDER BY 语句用于根据指定的列对结果集进行排序(默认升序)。
      • e.g. SELECT …… ORDER BY 列1 DESC, 列2 ASC
    • 分组查询 GROUP BY
      • GROUP BY 列名

        • 根据分组字段的值将一个数据集划分成各个不同的小组,然后分别按照各个组别进行相应的查询。
          SELECT * …… GROUP BY 列名    将只会返回各个分组的第一条数据,这种查询通常没什么意义。
          因此常与 COUNT(),MAX()  等统计函数结合使用。
      • HAVING 用于对统计函数进行条件判断
        • 由于 “ SELECT COUNT(*) FROM 表名 WHERE COUNT(*) GROUP BY 列名 ” 语句中 WHERE 关键字无法与统计函数一起使用,该语句错误!
        • e.g. GROUP BY 列名 HAVING 统计函数(列名2) 运算符 值
      • GROUP BY 列名1, 列名2, ....
        • 首先根据列名1的字段值分组,再在每个分组里根据列名2的字段值分组
    • 规定要返回的记录的数目
      • SQL Server:

        • SELECT TOP 3 列名 FROM 表名
        • SELECT TOP 50 PERCENT 列名 FROM 表名
      • MySQL:
        • SELECT 列名 FROM 表名 LIMIT 3
      • Oracle:
        • SELECT 列名 FROM 表名 WHERE ROWNUM <= 3
    • AS 为列名或表名指定别名(AS 可以省略,但建议加上以增加语句可读性)
      • 表名的别名

        • SELECT 列名 FROM 表名1 AS 别名1, 表名2 AS 别名2
        • 表名的别名使查询程序的 WHERE 语句更易阅读和书写
      • 列名的别名
        • SELECT 列名1 AS 别名1, 列名2 AS 别名2 FROM 表名
    • JOIN
      • JOIN / INNER JOIN

        • 内连接返回左右两表中匹配的行
        • SELECT .... FROM 表1, 表2, 表3, .... WHERE 表1.列=表2.列 and 表2.列=表3.列 ....
          这种传统跨表查询可替换为
          SELECT .... FROM 表1 [INNER] JOIN 表2 ON 表1.列=表2.列 JOIN 表3 ON 表2.列=表3.列 .... WHERE ....
      • LEFT JOIN
        • 将左边的表设置为主表来连接右边的表,即使左表中的数据在右表中没有匹配,会自动使用 NULL 替代
      • RIGHT JOIN
        • 将右边的表设置为主表来连接左边的表,即使右表中的数据在左表中没有匹配,会自动使用 NULL 替代
  • UPDATE - 更新数据库表中的数据
    • UPDATE 表名 SET 列1 = 值1, 列2 = 值2 WHERE ……
  • DELETE - 从数据库表中删除数据
    • DELETE FROM 表名 WHERE ……
    • DELETE FROM 表名 或 DELETE * FROM 表名
  • INSERT INTO - 向数据库表中插入数据
    • INSERT INTO 表名 VALUES (值1, 值2, ....)  -- 不写列名必须写出所有字段值!
    • INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ....)
    • 插入另一个表中的多行数据:
      INSERT INTO 表名1 (列1, 列2,...)
          SELECT (列1', 列2', ...) FROM 表名2 WHERE 条件

DDL 部分使我们有能力创建或删除表格,也可以定义索引(键),规定表之间的链接,以及施加表间的约束。

  • CREATE DATABASE - 创建新数据库

    • CREATE DATABASE 数据库名
  • ALTER DATABASE - 修改数据库
  • CREATE TABLE - 创建新表
    • CREATE TABLE 表名
      (
      列名1 数据类型,
      列名2 数据类型,
      列名3 数据类型,
      ....
      )

    • 常用数据类型
      数据类型 描述

      integer(size)
      int(size)
      smallint(size)
      tinyint(size)

      仅容纳整数。在括号内规定数字的最大位数。

      decimal(size,d)
      numeric(size,d)

      容纳带有小数的数字。
      "size" 规定数字的最大位数。"d" 规定小数点右侧的最大位数。

      char(size)

      容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。
      在括号中规定字符串的长度。

      varchar(size)

      容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。
      在括号中规定字符串的最大长度。

      date(yyyymmdd) 容纳日期。日期字段需要加引号,如 '1994-07-04'。
    • CREATE TABLE 或 ALTER TABLE 时可以规定约束,用于限制加入表的数据的类型。
      • NOT NULL

        • 强制列不接受 NULL 值。如果不向字段添加值,就无法插入新记录或者更新记录。
        • CREATE TABLE 表名
          (
          列名1 数据类型 NOT NULL,
          ....
          )
      • UNIQUE
        • 唯一标识数据库表中的每条记录。
        • 表创建时创建 UNIQUE 约束:
          CREATE TABLE 表名
          (
          列名1 数据类型 UNIQUE,
          ....
          )
        • 命名 UNIQUE 约束,以及为多个列定义 UNIQUE 约束:
          CREATE TABLE 表名
          (
          列名1 数据类型,
          列名2 数据类型,
          ....
          CONSTRAINT 别名 UNIQUE (列名1, 列名2)
          )
        • 对已创建的表中的列创建 UNIQUE 约束:
          ALTER TABLE 表名
          ADD UNIQUE (列名)

          ALTER TABLE 表名
          ADD CONSTRAINT 别名 UNIQUE (列名1, 列名2)

        • 撤销 UNIQUE 约束
          ……
      • PRIMARY KEY
        • PRIMARY KEY 约束唯一标识数据库表中的每条记录,其拥有自动定义的 UNIQUE 约束。每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
          主键列不能包含 NULL 值。
          每个表必须有且只有一个主键。
        • 表创建时创建 PRIMARY KEY 约束:
          CREATE TABLE 表名
          (
          列名1 数据类型 NOT NULL PRIMARY KEY,
          ....
          )
      • FOREIGN KEY
        • 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
        • 表创建时创建 FOREIGN KEY 约束:
          CREATE TABLE 表名
          (
          ....
          列名 数据类型 FOREIGN KEY REFERENCES 另一表名(其主键名),
          ....
          )
      • CHECK
        • CHECK 约束用于限制列中的值的范围。
        • 表创建时创建 CHECK 约束:
          CREATE TABLE 表名
          (
          ....
          列名 int CHECK (列名 > 0),
          ....
          )
      • DEFAULT
        • DEFAULT 约束用于向列中插入默认值。
        • 表创建时创建 DEFAULT 约束:
          CREATE TABLE 表名
          (
          ....
          列名 date DEFAULT GETDATE(),
          ....
          )
      • AUTO INCREMENT
        • AUTO INCREMENT 允许在每次插入新记录时,自动地创建主键字段的值,可以规定起始值和递增值。
  • ALTER TABLE - 变更数据库表
  • DROP TABLE - 删除表
  • CREATE INDEX - 创建索引(搜索键)
    • 在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
    • CREATE [UNIQUE] INDEX 索引名 ON 表名 (列名1 [DESC], 列名2)
      UNIQUE 在表上创建一个唯一的索引,意味着两个行不能拥有相同的索引值。
      如果希望以降序索引某个列中的值,可以在列名之后添加保留字 DESC。

  • DROP INDEX - 删除索引
  • TRUNCATE TABLE - 清空表
    • TRUNCATE TABLE 用于删除表中的所有行,而不记录单个行删除操作。不同于 DELETE * ,TRUNCATE 会使自动递增的标识还原。
    • TRUNCATE TABLE 表名

转载于:https://www.cnblogs.com/wayne793377164/p/7218710.html

【数据库】SQL语句相关推荐

  1. oracle数据库----SQL语句的实践(应用实例)

    oracle数据库----SQL语句的实践(应用实例) 创建表工资表salary,包括员工号emp_id,员工名emp_name,员工月基本工资monthsal,员工月总发工资totalsal. cr ...

  2. MySQL删除s表命令_SQLServer数据库sql语句中----删除表数据drop、truncate和delete的用法...

    本文主要向大家介绍了SQLServer数据库sql语句中----删除表数据drop.truncate和delete的用法,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助. 虽 ...

  3. 建立学生选课表 mysql 语句_学生选课数据库SQL语句45道练习题整理及mysql常用函数(20161019)...

    学生选课数据库SQL语句45道练习题: 一.            设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四 ...

  4. mysql sql exists_数据库sql语句的exists总结

    数据库sql语句的exists总结 sql exists in 学习 先来比较下语法: --deals=交易表,areas=地域表,例如香港:我们的目的:查看有交易的地域 select * from ...

  5. 计算机导论sql试题,数据库SQL语句练习题

    一.            设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表( ...

  6. 数据库三级考mysql还是sqlse_计算机三级考试数据库SQL语句整理

    计算机三级考试数据库SQL语句整理 本文是关于计算机三级考试数据库SQL语句整理,包括创建数据库.删除数据库.备份sql server.创建新表等,供同学们参考学习!想了解更多相关信息请持续关注我们应 ...

  7. 数据库SQL语句课堂总结(2)——子查询

    废话引言 我有一个梦想,有一天能跟上单大师敲sql的速度QAQ 本文数据库同数据库SQL语句课堂总结(1) 主要介绍子查询的相关语句 正文开始 子查询介绍 定义: 子查询允许把一个查询嵌套在另一个查询 ...

  8. mysql查询选课程的学生学号和姓名_数据库SQL语句中查询选修了全部课程的学生的学号和姓名理解...

    首先头脑中有三点概念: 1.EXISTS子查询找到的提交 NOTEXISTS子查询中找不到的提交 说明:不要去翻译为存在和不存在,把脑袋搞晕. 2.建立程序循环的概念,这是一个动态的查询过程.如FOR ...

  9. 各数据库SQL语句差异

    因为数据库SQL语句在各大产品中带有"方言性",即SQLSERVER SYBASE都是用了T-SQL,Mysql是用的标准SQL,Oracle有有自己的PL/SQL.由于这种&qu ...

  10. 数据库sql语句的exists总结

    数据库sql语句的exists总结 sql exists in 学习 先来比较下语法: --deals=交易表,areas=地域表,例如香港:我们的目的:查看有交易的地域 select * from ...

最新文章

  1. (一)python3 只需3小时带你轻松入门—— 编程尝试
  2. Vue中生成二维码的一种方式—vue-qr
  3. NLP事件抽取综述(上中下):中文事件抽取、开放域事件抽取、事件数据生成、跨语言事件抽取、小样本事件抽取、零样本事件抽取等类型
  4. Quartz定时调度CronTrigger时间配置格式说明与实例
  5. 【elasticsearch】 document 查询原理
  6. 细说浏览器特性检测(1)-jQuery1.4添加部分
  7. 织梦Cms怎么一直服务器维护中,织梦后台搜索关键词维护中出现大量网址信息的处理办法...
  8. [转载] 用Python进行简单的文本相似度分析
  9. python线性回归做预测_python-线性回归预测
  10. 《OD学hadoop》第二周0703
  11. java 的strip_javastript
  12. 用Scratch制作血量条的方法+源码
  13. ppt计算机实验报告册,PPT实验报告模板
  14. librdkafka安装步骤
  15. ipad创建id显示服务器失败,为什么无法创建苹果id什么原因
  16. 微软梁念坚:六个新潮流推动IT行业发展
  17. java给txt文件写入内容_java代码 如何向TXT文件写入内容?
  18. 【Jetpack篇】LiveData取代EventBus,安卓面试项目
  19. I.Geodetic---(弗洛伊德算法(Floyd)的运用)
  20. 对当前软件行业的一点点感想

热门文章

  1. 30.Android之百度地图简单学习
  2. 从简单的信道预计说起
  3. 初学 Unsupervised feature learning and deep learning--Sparse autoencoder
  4. (转)ASP.NET MVC3默认提供了11种ActionResult的实现
  5. Eclipse 插件开发遇到问题心得总结
  6. GoldenGate 12.3微服务架构与传统架构的区别
  7. opencv 在debian6.0下安装
  8. 关于yield的一些资料
  9. 友元 java_C++ 友元关系详解
  10. vue图片压缩不失真_图片压缩会失真?快试试这几个无损压缩神器。