SQL基础知识(持续更新中)

2023-11-10

## SQL通用语法

1.单行多行书写,分号结尾;

2.可用空格、缩进来增强语句可读性

3.不区分大小写、建议关键字大写

4.注释是–或者# 多行/* */

分类

  • DDL 数据定义语言,定义数据库对象

  • DML 数据操作语言,用来对表中数据进行增删改

  • DQL 数据查询语言,用来查询数据库中表的记录

  • DCL 数据控制语言,用来创建数据库用户、控制数据库的访问权限

DDL

主要用来操作数据库的定义

DDL-数据库操作

查询所有数据库

SHOW DATABAESS

查询当前数据库

SELECT DATABASE()

创建数据库

CREATE DATABASE[IF NOT EXISTS] 数据库名[DEFAULT CHARSET 字符集][COLLATE 排序规则]
字符集用utf8md4

删除数据库

DROP DATABASE[IF EXISTS] 数据库名

使用

USER 数据库名

查询当前数据库中所有表

SHOW TABLES

查询表结构

DESC 表名

查询指定表的建表语句

SHOW CREATE TABLE 表名

表操作-创建表

CREATE TABLE 表名(
	字段1 字段1类型 COMMENT '字段1注释',
	字段2 字段2类型 COMMENT '字段2注释',
	字段3 字段3类型 COMMENT '字段3注释',
	……
	字段n 字段n类型 COMMENT '字段n注释'
)[COMMENT 表注释]

注意,如果是varchar要加上长度varchat(255)

数据类型

在这里插入图片描述

定义时候注意:

age TINYINT UNSINGED 定成无符号

score double(4,1)

字符串类型

在这里插入图片描述

char固定10位,varchar可变的,但是varchar的性能更好

性别 gender char(1)

时间类型

DDL-表操作-修改

添加字段(ADD)

ALTER TABLE 表明 ADD 字段 类型(长度) COMMENT '注释';

修改数据类型(MODIFY)

ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度)

修改字段名和类型 (CHANGE)

ALTER TABLE 表名 CHANGE 旧字段 新字段 类型(长度) COMMENT '注释';

删除字段 (DROP)

ALTER TABLE 表名 DROP 字段名

修改表名 (RENAME)

ALTER TABLE 表名 RENAME TO 新表名

删除表 (DROP)

DROP TABLE[IF EXISTS] 表名

删除指定表,并且重新创建该表 (TRUNCATE)

TRUNCATE TABLE 表名

总结

1.DDL对数据库的操作是定义数据库的;

2.DDL对于表的操作是定义表的;

DML

数据库操作语言 也就是

INSERT

UPDATE

DELETE

DML-添加数据

1.给指定字段添加数据

INSERT IN TO 表名(字段1,字段2...) VALUES(1,值2...)

2.给全部字段添加数据

INSET INTO 表名 VALUES(值1,值2,...)

这样添加是依次添加按照顺序添加到表的字段

3.批量添加数据

INSERT INTO 表名(字段1,字段2,...)VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);

INSERT INTO 表名VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);

注意:

  • 插入数据时,指定的字段顺序与值的顺序是一一对应的

  • 字符串和日期类型数据应该包含在引号中

  • 插入的数据大小,应该在字段的范围之内

DML-修改数据

UPDATE 表名 SET 字段名1=1,字段名2=2,...[WHERE 条件]

注意

  • 如果修改语句中的条件没有的话,则会修改整张表的所有数据

DML-删除数据

DELETE FROM 表名 [WHERE 条件]

注意

  • delete语句的条件也可以没有,如果没有条件的话则删除的是整张表的所有数据
  • delete没办法删除某一字段的值,他删除的是整条记录,如果想删除某一字段,只能用更新的方法

总结

DML主要处理的是表数据的操作,也就是添加数据,修改数据,删除数据

DQL

数据查询语言 关键词 SELECT

DQL相关语法

SELECT
	字段列表
FROM
	表名列表
WHERE
	条件列表
GROUP BY
	分组字段列表
HAVING
	分组后条件列表
ORDER BY
	排序字段列表
LIMIT
	分页参数
  • 基本查询(SELECT)
  • 条件查询(WHERE)
  • 聚合函数(COUNT MAX MIN AVG SUM)
  • 分组查询(GROUP BY)
  • 排序查询(ORDER BY)
  • 分页查询(LIMIT)

**注意:**分组通常伴随着聚合查询

DQL-基本查询

1.查询多个字段

SELECT 字段1,字段2,…… FROM 表名;

2.设置别名

SELECT 字段1 AS 别名1,字段2 AS 别名2,…… FROM 表名;

3.去除重复记录

SELECT DISTINCT 字段列表 FROM 表名

DQL-条件查询

基础知识

1.语法

SELECT 字段列表 FROM 表名 WHERE 条件列表

条件查询

![在这里插入图片描述](https://img-blog.csdnimg.cn/23e74e29bb6f43bdac82ca4638f8c2bf.png在这里插入图片描述

当查询年龄为18或19或20时候,可以用in,这样就代表满足其中一个就可以了
SELECT * FROM PEOPLE WHERE AGE IN (18,19,20)

聚合函数

介绍

​ 聚合函数实际上就是将一列数据作为整体,进行纵向的计算

常见的聚合函数

在这里插入图片描述

语法

聚合函数直接作用于字段就可以

SELECT 聚合函数(字段列表) FROM 表名

null是不参与所有的聚合函数运算的

分组查询

语法

SELECT 字段列表 FROM 表名 WHERE 条件 GROUP BY 分组字段名 HAVING 分组过滤后的条件

WHER和HAVING的区别

  • 执行时机不同,where是分组之前进行过滤,不满足where条件不参与分组,having是分组后对结果进行过滤
  • 判断条件不同,where不能对聚合函数进行判断,但是having可以

举例:查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址

SELECT 
WORKADDRESS,COUNT(*) AS NUM 
FROM WORKER 
WHERE AGE > 45 
GROUP BY WORKADDRESS 
HAVING NUM > 3

注意

  • 执行顺序:where > 聚合函数 > having
  • 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段没有任何意义(切记)

排序查询

1.语法

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排列方式1,字段2 排列方式2……;

可以指定多字段排序

2.排序方式

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

注意:如果是多字段排序,当第一个字段相同时候,才会根据第二个字段排序

举例:根据年龄对公司员工员工年龄进行升序排序,年龄相同,再按照入职时间进行降序排序

SELECT * FROM WORKER ORDER BY AGE ASC, ENTERDATE DESC;

分页查询

1.语法

SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数量;

注意

  • 起始索引从0开始,起始索引=(查询页码-1)*每页显示的记录数;
  • 分月查询在不同的数据库中有不同的实现方式,MySQL是LIMIT
  • 如果查询的是第一页的数据,那么起始索引可以省略,直接简写成LIMIT10(查询数量)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL基础知识(持续更新中) 的相关文章

  • 显示和随机化 php 数组

    我有一个显示结果的数组 如下所示 Array 0 gt 71 1 gt 56 2 gt 64 3 gt 82 4 gt 90 5 gt 80 6 gt 65 7 gt 62 8 gt 14 9 gt 3 我的代码是 while row my
  • 将IP保存到数据库中

    当用户登录时 我想将他们的 IP 保存在数据库中 我该怎么做呢 MySQL 字段最适合使用哪种类型 获取IP的PHP代码是什么样的 我正在考虑将其用作登录 会话内容的额外安全功能 我正在考虑使用用户现在拥有的 IP 检查用户从数据库登录的
  • SQL Server 查询中 UNION ALL 与 OR 条件

    我必须根据表上不存在的条件选择一些行 如果我使用如下的 union all 它会在不到 1 秒的时间内执行 SELECT 1 FROM dummyTable WHERE NOT EXISTS SELECT 1 FROM TABLE t WH
  • jdbc4.MySQLSyntaxErrorException:数据库中不存在表

    我正在使用 SpringBoot 开发一个网络应用程序 这是我的application properties文件来指定访问数据库的凭据 spring datasource driverClassName com mysql jdbc Dri
  • 是否可以从子查询中获取多个值?

    有没有办法让子查询在oracle db中返回多列 我知道这个特定的sql会导致错误 但它很好地总结了我想要的 select a x select b y b z from b where b v a v from a 我想要这样的结果 a
  • Tomcat 6找不到mysql驱动

    这里有一个类似的问题 但关于类路径 ClassNotFoundException com mysql jdbc Driver https stackoverflow com questions 1585811 classnotfoundex
  • 使用用户定义函数 MySql 时出错

    您好 请帮我解决这个问题 提前致谢 我在数据库中定义了这些函数 CREATE FUNCTION levenshtein s1 VARCHAR 255 s2 VARCHAR 255 RETURNS INT DETERMINISTIC BEGI
  • 需要在 SQL Server 中透视字符串值

    我有一个包含值的表 描述为 Occupation String Name String Developer A Developer B Designer X Coder Y Coder Z 我需要数据透视格式的值 Designer Deve
  • 总和和不同不会改变结果?

    我是一个新手 试图在这里解决这个问题 到目前为止还没有运气 非常感谢任何帮助 Select Distinct AB agency no ab branch no AS AGENCY BRANCH count AB agency no ab
  • 如何为 MySQL 中的字段或列添加别名?

    我正在尝试做这样的事情 但我收到未知的列错误 SELECT SUM field1 field2 AS col1 col1 field3 AS col3 from core 基本上 我只想使用别名 这样我就不需要执行之前执行的操作 这在mys
  • SQL Server 2005 是否有与 MySql 的 ENUM 数据类型等效的数据类型?

    我正在开发一个项目 我想在表中存储一些容易枚举的信息 MySql 的枚举数据类型正是我想要的 http dev mysql com doc refman 5 0 en enum html http dev mysql com doc ref
  • 如何将今天的日期返回到 Oracle 中的变量

    我想做这个 DECLARE today as smalldatetime SELECT today GetDate 但我需要一个oracle翻译 甲骨文使用SYSDATE 还有 ANSI 标准CURRENT TIMESTAMP 除其他外 S
  • 随着时间的推移累积(不重叠)——技术?

    我正在尝试找到一种更好的方法来制作水晶报告 其他人的 按组添加不重叠的时间 这显然是一个古老的问题 有没有一种技术可以得到 调整每条记录的 开始 结束 时间 以消除共同 重叠时间 亚组内 使用直接 SQL 尽管我发现我可以执行 CTE 假设
  • SKIP加锁和nowait的区别

    pl sql 中 SKIP 锁定游标和 nowait 游标之间的区别 我认为我找到的这张图片是描述差异的最佳例子 详细说明 http viralpatel net blogs oracle skip locked
  • 在 plpgsql 函数中使用 quote_ident()

    我是创建 plpgsql 函数的新手 我需要一些有关在函数内部执行的动态命令上使用 quote ident 甚至 quote literal 的说明 希望有人能给我一个关于它们如何在函数内部工作的具体解释 TIA 这是一个例子 EXECUT
  • 重写 URL,将 ID 替换为查询字符串中的标题

    我对 mod rewrite 很陌生 但我做了一些搜索 但找不到这个问题的答案 我有一个网站 它只有一个 PHP 页面 根据查询字符串中传递给它的 ID 提供数十页内容 我想重写 URL 以便此 ID消失并替换为从数据库中提取的页面标题 例
  • 在 Yii 的标准中如何获得计数 (*)

    我正在尝试构建一个具有以下内容的查询group by属性 我正在尝试得到id和count它一直告诉我count is invalid列名 我怎样才能得到count来自group by询问 工作有别名 伊伊 1 1 11 其他不及格 crit
  • 基本的多对多sql选择查询

    我认为这应该很容易 但它却在逃避我 我的帐户和帐户组之间存在多对多关系 一个帐户可以位于零个或多个组中 因此我使用标准连接表 Accounts ID BankName AcctNumber Balance AccountGroups ID
  • 默认情况下在sql日期时间列中插入null/空值

    如何在 SQL Server 中创建一个表 默认日期时间为空 而不是1900 01 01 00 00 00 000我得到了 我的意思是 如果没有插入值 则默认值应该为 null 空等 如果没有插入值 默认值应该是null empty 在表定
  • 使用函数的 SQL 查询 - 如何获取列表的最大计数

    如何查询 MAXIMUM COUNT 交易次数 我的代码如下 SELECT customer id COUNT customer id FROM rental GROUP BY customer id HAVING MAX COUNT cu

随机推荐

  • 1015 德才论 (25分)

    1015 德才论 25分 宋代史学家司马光在 资治通鉴 中有一段著名的 德才论 是故才德全尽谓之圣人 才德兼亡谓之愚人 德胜才谓之君子 才胜德谓之小人 凡取人之术 苟不得圣人 君子而与之 与其得小人 不若得愚人 现给出一批考生的德才分数 请
  • 【数模】时间序列分析

    时间序列也称动态序列 是指将某种现象的指标数值按照时间顺序排列而成的数值序列 时间序列分析大致可分成三大部分 分别是描述过去 分析规律和预测未来 本讲将主要介绍时间序列分析中 预测未来 常用的三种模型 并将结合Spss软件对时间序列数据进行
  • Docker - 实现本地镜像的导出、导入(export、import、save、load)

    目录 一 使用 export 和 import 1 查看本机的容器 2 导出镜像 3 导入镜像 二 使用 save 和 load 1 查看本机的容器 2 保存镜像 附 两种方案的差别 1 文件大小不同 2 是否可以对镜像重命名 3 是否可以
  • STM32实战项目—停车计费系统

    文章目录 一 任务要求 1 1 概述 1 2 串口收发 1 2 1 串口输出内容 1 2 2 串口接收内容 1 3 说明 二 实现思路 2 1 指令判别 2 1 车辆进入 2 2 车辆驶出 2 3 费率调整 三 程序设计 3 1 串口接收消
  • 强化学习算法实现自动炒股

    强化学习算法自动炒股 本文利用强化学习算法 PG 来对股票市场的指数进行交易研究 感兴趣的朋友可以在这个基础上导入其他市场的数据 添加 observation 的维度 本文仅使用了 当天收盘价 和 与前一天收盘价的差值 两个维度 操作 ac
  • linux当前目录作用,详解linux下mnt目录作用

    linux下mnt目录的作用 mount 英文解释 登上 爬上 攀登 骑上 乘上 跨上 可直接理解为 挂载 挂接光驱 USB设备的目录 加载后 会在mnt里多出相应设备的目录 mnt是mount的缩写 Mount命令 需要注意的 1 挂载点
  • 打印工资条怎么做到每个人都有表头明细_这两种工资条制作技巧,HR们不能不知道!...

    每月一到发薪日 给员工发送工资条的时候 HR们都被一大堆的数据和表格弄得焦头烂额 如何快速整理数据 制作工资条是每个HR都想得到的答案 本文就手把手地教大家如何利用excel或工资条生成器 快速地制作工资条 一起来看看吧 第一种 传统方式
  • 基于SpringBoot的网络海鲜市场系统的设计与实现

    网络海鲜市场系统管理数据的工具是MySQL 编码的语言是Java 运用的框架是Spring Boot框架 该系统可以实现对商品的购买 对论坛帖子的发布与回复论坛帖子 查看商品资讯 修改或删除购物车商品 对订单信息进行管理等功能 网络海鲜市场
  • 几种常用发布方式 平滑发布、灰度发布、蓝绿发布

    发布方式 1 平滑发布 在发布的过程中不影响用户的使用 系统不会因发布而暂停对外服务 不会造成用户短暂性无法访问 保障服务一直可以持续使用 在单机模式下 启动多端口 如有 upstream myapp server 服务1 8080 app
  • JAVA开发管理(敏捷诞生的历史背景)

    诞生背景 随着软件规模的发展和商业化 软件开发模式的管理显得尤为重要 在软件规模较小时 一个人就可以单独完成软件的编写 测试和发布 当软件规模和复杂度越来越高时 我们不得不进行协调工作 多人完成一个软件的开发 在没有管理的背景下 软件的编写
  • #pragma once和#ifndef

    pragma once用法总结 1 pragma once这个宏有什么作用 为了避免同一个头文件被包含 include 多次 C C 中有两种宏实现方式 一种是 ifndef方式 另一种是 pragma once方式 在能够支持这两种方式的
  • 英语写作神器Quillbot---如何使用免费的Premium功能

    英语写作神器Quillbot 如何使用免费的Premium功能 本文主要记录如何在国内免费使用Quillbot的Premium功能 也就是在Google Chrome中安装相应的插件 目录 英语写作神器Quillbot 如何使用免费的Pre
  • C语言:void的用法即解析

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 一 void是否可以定义变量 为什么 二 void修饰函数的返回值和参数 1 void用来作为函数返回值 2 void作为函数参数 三 void指针 总结 提示 以
  • 苹果手机点击输入框时页面自动放大

    一 问题描述 点击input搜索框时 苹果手机页面会自动放大 二 解决问题 user scalable no是 禁止手动缩放 添加此属性后便不可手动控制页面大小
  • Matlab查看像素坐标

    在matlab弹出的figure中随鼠标移动实时显示该处坐标和像素值 在command window中输入impixelinfo即可 在当前图像中查看信息
  • 成本高、落地难、见效慢,开源安全怎么办?

    作者 彭慧中 责编 屠敏 出品 CSDN ID CSDNnews 2021年底 Log4j漏洞引发全球信息安全大地震 世界各国政府 非营利基金会 智库都在高度关注开源安全领域 然而许多公司尽管害怕被开源安全问题所波及 但仍未采取相应的策略
  • 遥感影像语义分割:数据集制作

    遥感影像语义分割 数据集制作 一 标签标注工具及注意事项 二 影像分块及代码 目前已经有一些已经关于遥感影像解译的公开数据集 我们可以拿这些数据来做深度学习模型训练 但是在实际业务中 我们需要针对特定的需求制作自己的数据集 在这里记录一下做
  • vue 获取用户位置 高德_vue引入高德地图获取经纬度地址

    1 在index html引入高德地图 key找个适合例如 160cab8ad6c50752175d76e61ef92c50 2 在webpack base conf js 配置引入 externals AMap AMap 3 在vue文件
  • Android平台GB28181设备接入端如何调节实时音量?

    我们在对接Android平台GB28181设备接入端的时候 有开发者提出这样的疑惑 如何调整设备接入端的实时音量 实际上 这块我们前几年在做RTMP直播推送模块的时候 已经发布了相关的接口 这里再回顾下 SmartPublisherJniV
  • SQL基础知识(持续更新中)

    SQL通用语法 1 单行多行书写 分号结尾 2 可用空格 缩进来增强语句可读性 3 不区分大小写 建议关键字大写 4 注释是 或者 多行 分类 DDL 数据定义语言 定义数据库对象 DML 数据操作语言 用来对表中数据进行增删改 DQL 数