【数据库】SQL语句

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400455.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【51单片机快速入门指南】3.3:USART 串口通信

目录快速使用硬知识串行口相关寄存器串行口控制寄存器SCON和PCON串行口数据缓冲寄存器SBUF从机地址控制寄存器SADEN和SADDR与串行口中断相关的寄存器IE和IPH、IP串行口工作模式串行口工作模式0&#xff1a;同步移位寄存器串行口工作模式1&#xff1a;8位UART&#xff0c;波特率…

Spring JTA应用JOTM Atomikos II JOTM

上节建立了一个简单的Java Application以及所需要的数据库和数据表&#xff0c;本节将介绍JOTM在Spring中的配置。 JOTM(Java Open Transaction Manager)是ObjectWeb的一个开源JTA实现&#xff0c;本身也是开源应用程序服务器JOnAS(Java Open Application Server)的一部分&…

从包中构建瓦片服务器

SWITCH2OSM 切换到OPENSTREETMAP 丰富的数据 OpenStreetMap数据丰富而详细&#xff0c;包含与实地人相关的大量数据 - 收集的数据。 功能包括&#xff1a; 道路&#xff0c;铁路&#xff0c;水路等餐厅&#xff0c;商店&#xff0c;车站&#xff0c;自动取款机等。步行和自行车…

树根

树根 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u SubmitStatus Practice HDU 1013Appoint description:System Crawler (2015-04-27)Description The digital root of a positive integer is found by summing the digits of the int…

Scrapy 1.4 文档 01 初窥 Scrapy

初窥 Scrapy Scrapy 是用于抓取网站并提取结构化数据的应用程序框架&#xff0c;其应用非常广泛&#xff0c;如数据挖掘&#xff0c;信息处理或历史存档。 尽管 Scrapy 最初设计用于网络数据采集&#xff08;web scraping&#xff09;&#xff0c;但它也可用于使用 API&#xf…

【51单片机快速入门指南】4: 软件 I2C

目录硬知识I2C 介绍I2C 物理层I2C 协议层数据有效性规定起始和停止信号应答响应总线的寻址方式数据传输示例程序Soft_I2C.cSoft_I2C.h普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 硬知识 摘自《普中 51 单片机开发攻略》 I2…

C# TextBox 换行 滚动到最后一行

1、要让一个Windows Form的TextBox显示多行文本就得把它的Multiline属性设置为true。 这个大家都知道&#xff0c;可是当你要在代码中为Text属性设置多行文本的时候可能会遇到点麻烦&#xff1a;&#xff09;你往往会想到直接付给一个含有换行符"\n"的字符串给Text属…

this的用法this.name=name 这个什么意思

public Employee(string name, string alias){ // Use this to qualify the fields, name and alias: this.name name; this.alias alias;}this的用法this.namename 这个什么意思啊 具体点我有点狠难理解 这是个构造函数&#xff0c;this.name指当前类的属性&#x…

【51单片机快速入门指南】4.1: I2C 与 AT24C02 (EEPROM) 的跨页连续读写

目录硬知识AT24Cxx 介绍引脚排列引脚说明存储结构器件寻址器件操作待机模式存储复位写操作字节写页写应答查询读操作当前地址读随机读顺序读示例程序24C02.c24C02.h测试程序main.c实验现象通讯波形写入部分读取部分普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof…

nyist oj 37 回文字符串 (动态规划经典)

回文字符串 时间限制&#xff1a;3000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;4描写叙述所谓回文字符串&#xff0c;就是一个字符串。从左到右读和从右到左读是全然一样的。比方"aba"。当然&#xff0c;我们给你的问题不会再简单到推断一个字符串是不是…

iOS Application Security

文章分A,B,C,D 4个部分。 A) iOS Application Security 下面介绍iOS应用安全&#xff0c;如何分析和动态修改app。 1&#xff09;iOS Application security Part 1 – Setting up a mobile pentesting platform Part1介绍如何在越狱的设备上搭建用来测试iOS安全的环境。 2&…

openlayers基础系列教程(一)

openlayers基础系列教程(一) http://www.openlayers.cn/portal.php?modview&aid19

【51单片机快速入门指南】4.2: SSD1306 OLED屏(0.96寸、1.3寸)的I2C控制详解

目录硬知识SSD1306简介I2C 接口从机地址位&#xff08;SA0&#xff09;I2C 总线写数据命令解码器晶振电路和显示时间发生器复位图形显示数据RAM (GDDRAM)命令表基本命令表部分指令详解为 BANK0 设置对比度控制&#xff08;81h&#xff09;全部显示开启&#xff08;A4h/A5h&…

使用GNS3和Cisco IOU搭建路由交换实验-安装篇

如何使用GNS3和Cisco IOU搭建路由交换实验-安装篇GNS3软件的安装建议大家从官网直接下载最新版本的GNS3&#xff0c;官网连接http://www.gns3.com/根据系统类型选择相应的版本&#xff0c;这里我选择的是Windwos系统的最新版本1.3.2下载好安装包后直接运行安装包&#xff0c;在…

符号代码写法大全

摘自&#xff1a;http://www.w3schools.com/tags/ref_symbols.asp Math Symbols Supported by HTML CharacterEntity NumberEntity NameDescription∀&forall;for all∂&part;part∃&exist;exists∅&empty;empty∇&nabla;nabla∈&isin;isin∉&noti…

解决问题E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录,

在用sudo apt-get install kmymoney2安装软件kmymoney2时&#xff0c;由于速度太慢&#xff0c;想换个软件源&#xff0c;直接关闭了终端&#xff0c;apt&#xff0d;get但进程没有结束&#xff0c;结果终端提示 &#xff1a;“E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资…

1787: [Ahoi2008]Meet 紧急集合

1787: [Ahoi2008]Meet 紧急集合 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 1482 Solved: 652[Submit][Status][Discuss]Description Input Output Sample Input 6 4 1 2 2 3 2 4 4 5 5 6 4 5 6 6 3 1 2 4 4 6 6 6 Sample Output 5 2 2 5 4 1 6 0 HINT Sou…

一步一步学Vue(四)

接上篇。上篇中给出了代码框架&#xff0c;没有具体实现&#xff0c;这一篇会对上篇定义的几个组件进行分别介绍和完善&#xff1a; 1、TodoContainer组件 TodoContainer组件&#xff0c;用来组织其它组件&#xff0c;这是react中推荐的方式&#xff0c;也是redux中高阶组件一般…

【51单片机快速入门指南】4.3: I2C读取MPU6050陀螺仪的原始数据

目录硬知识特性参数MPU6050 简介模块重要寄存器简介电源管理寄存器 1陀螺仪配置寄存器加速度传感器配置寄存器FIFO 使能寄存器陀螺仪采样率分频寄存器配置寄存器电源管理寄存器 2陀螺仪数据输出寄存器加速度传感器数据输出寄存器温度传感器示例程序MPU6050.cMPU6050.hmain.c实验…