SQL分类及通用语法数据类型(超详细版)

news2024/9/24 18:40:15

一、SQL分类

  • DDL: 数据定义语言,用来定义数据库对象(数据库、表、字段)
  • DML: 数据操作语言,用来对数据库表中的数据进行增删改
  • DQL: 数据查询语言,用来查询数据库中表的记录
  • DCL: 数据控制语言,用来创建数据库用户、控制数据库的控制权限

二、DDL-数据定于语言

2.1  DDL-数据库操作

查询所有数据库:
  SHOW DATABASES;
查询当前数据库:
  SELECT DATABASE();
创建数据库:
  CREATE DATABASE [ IF NOT EXISTS ] 数据库名 [ DEFAULT CHARSET 字符集] [COLLATE 排序规则 ];
删除数据库:
  DROP DATABASE [ IF EXISTS ] 数据库名;
使用数据库:
  USE 数据库名;

注意事项
  • UTF8字符集长度为3字节,有些符号占4字节,所以推荐用utf8mb4字符集

2.2  DDL-表操作 

 查询当前数据库所有表:
  SHOW TABLES;
查询表结构:
  DESC 表名;
查询指定表的建表语句:
  SHOW CREATE TABLE 表名;

 创建表:

        CREATE TABLE 表名 (
            字段1 数据类型 约束,
            字段2 数据类型 约束,
            字段3 数据类型 约束,
            ...
        );

添加字段:
    ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];
例:ALTER TABLE emp ADD nickname varchar(20) COMMENT '昵称';

修改数据类型:
    ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
修改字段名和字段类型:
    ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
例:将emp表的nickname字段修改为username,类型为varchar(30)
    ALTER TABLE emp CHANGE nickname username varchar(30) COMMENT '昵称';

删除字段:
    ALTER TABLE 表名 DROP 字段名;

修改表名:
    ALTER TABLE 表名 RENAME TO 新表名

删除表:
    DROP TABLE [IF EXISTS] 表名;
删除表,并重新创建该表:
    TRUNCATE TABLE 表名;

 三、补充:数据类型

3.1  整型

类型名称取值范围大小
TINYINT-128〜1271个字节
SMALLINT-32768〜327672个宇节
MEDIUMINT-8388608〜83886073个字节
INT (INTEGHR)-2147483648〜21474836474个字节
BIGINT-9223372036854775808〜92233720368547758078个字节

无符号在数据类型后加 unsigned 关键字。

3.2  浮点型

类型名称说明存储需求
FLOAT单精度浮点数4 个字节
DOUBLE双精度浮点数8 个字节
DECIMAL (M, D),DEC压缩的“严格”定点数M+2 个字节

3.3  日期和时间

类型名称日期格式日期范围存储需求
YEARYYYY1901 ~ 21551 个字节
TIMEHH:MM:SS-838:59:59 ~ 838:59:593 个字节
DATEYYYY-MM-DD1000-01-01 ~ 9999-12-33 个字节
DATETIMEYYYY-MM-DD HH:MM:SS1000-01-01 00:00:00 ~ 9999-12-31 23:59:598 个字节
TIMESTAMPYYYY-MM-DD HH:MM:SS1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC4 个字节

3.4  字符串

类型名称说明存储需求
CHAR(M)固定长度非二进制字符串(性能好)M 字节,1<=M<=255
VARCHAR(M)变长非二进制字符串 (性能较差)L+1字节,在此,L< = M和 1<=M<=255
TINYTEXT非常小的非二进制字符串L+1字节,在此,L<2^8
TEXT小的非二进制字符串L+2字节,在此,L<2^16
MEDIUMTEXT中等大小的非二进制字符串L+3字节,在此,L<2^24
LONGTEXT大的非二进制字符串L+4字节,在此,L<2^32
ENUM枚举类型,只能有一个枚举字符串值1或2个字节,取决于枚举值的数目 (最大值为65535)
SET一个设置,字符串对象可以有零个或 多个SET成员1、2、3、4或8个字节,取决于集合 成员的数量(最多64个成员)

3.5  二进制类型

类型名称说明存储需求
BIT(M)位字段类型大约 (M+7)/8 字节
BINARY(M)固定长度二进制字符串M 字节
VARBINARY (M)可变长度二进制字符串M+1 字节
TINYBLOB (M)非常小的BLOBL+1 字节,在此,L<2^8
BLOB (M)小 BLOBL+2 字节,在此,L<2^16
MEDIUMBLOB (M)中等大小的BLOBL+3 字节,在此,L<2^24
LONGBLOB (M)非常大的BLOBL+4 字节,在此,L<2^32

四、DML- 数据操作语言

4.1 添加数据

指定字段:
  INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);
全部字段:
  INSERT INTO 表名 VALUES (值1, 值2, ...);

批量添加数据:
  INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...);
  INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...);

注意事项
  • 字符串和日期类型数据应该包含在引号中
  • 插入的数据大小应该在字段的规定范围内

4.2 更新和删除数据

 

修改数据:
  UPDATE 表名 SET 字段名1 = 值1, 字段名2 = 值2, ... [ WHERE 条件 ];
例:
  UPDATE emp SET name = 'Jack' WHERE id = 1;

删除数据:
  DELETE FROM 表名 [ WHERE 条件 ];

五、DQL- 数据查询语言 

 

5.1 基础查询 

查询多个字段:
  SELECT 字段1, 字段2, 字段3, ... FROM 表名;
  SELECT * FROM 表名;

设置别名:
  SELECT 字段1 [ AS 别名1 ], 字段2 [ AS 别名2 ], 字段3 [ AS 别名3 ], ... FROM 表名;
  SELECT 字段1 [ 别名1 ], 字段2 [ 别名2 ], 字段3 [ 别名3 ], ... FROM 表名;

去除重复记录:
  SELECT DISTINCT 字段列表 FROM 表名;

5.2 条件查询 

条件查询:
  SELECT 字段列表 FROM 表名 WHERE 条件列表;

例子: 

  1. -- 年龄等于30
  2. select * from employee where age = 30;
  3. -- 年龄小于30
  4. select * from employee where age < 30;
  5. -- 小于等于
  6. select * from employee where age <= 30;
  7. -- 没有身份证
  8. select * from employee where idcard is null or idcard = '';
  9. -- 有身份证
  10. select * from employee where idcard;
  11. select * from employee where idcard is not null;
  12. -- 不等于
  13. select * from employee where age != 30;
  14. -- 年龄在20到30之间
  15. select * from employee where age between 20 and 30;
  16. select * from employee where age >= 20 and age <= 30;
  17. -- 下面语句不报错,但查不到任何信息
  18. select * from employee where age between 30 and 20;
  19. -- 性别为女且年龄小于30
  20. select * from employee where age < 30 and gender = '女';
  21. -- 年龄等于25或30或35
  22. select * from employee where age = 25 or age = 30 or age = 35;
  23. select * from employee where age in (25, 30, 35);
  24. -- 姓名为两个字
  25. select * from employee where name like '__';
  26. -- 身份证最后为X
  27. select * from employee where idcard like '%X';

5.3  聚合函数

 语法:
  SELECT 聚合函数(字段列表) FROM 表名;
例:
  SELECT count(id) from employee where workaddress = "广东省";

5.4  分组查询 

语法:
  SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组后的过滤条件 ]; 

where 和 having 的区别:

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

例子: 

  1. -- 根据性别分组,统计男性和女性数量(只显示分组数量,不显示哪个是男哪个是女)
  2. select count(*) from employee group by gender;
  3. -- 根据性别分组,统计男性和女性数量
  4. select gender, count(*) from employee group by gender;
  5. -- 根据性别分组,统计男性和女性的平均年龄
  6. select gender, avg(age) from employee group by gender;
  7. -- 年龄小于45,并根据工作地址分组
  8. select workaddress, count(*) from employee where age < 45 group by workaddress;
  9. -- 年龄小于45,并根据工作地址分组,获取员工数量大于等于3的工作地址
  10. select workaddress, count(*) address_count from employee where age < 45 group by workaddress having address_count >= 3;
注意事项
  • 执行顺序:where > 聚合函数 > having
  • 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义

5.5  排序查询

语法:
  SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2;

排序方式:

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

例子:

  1. -- 根据年龄升序排序
  2. SELECT * FROM employee ORDER BY age ASC;
  3. SELECT * FROM employee ORDER BY age;
  4. -- 两字段排序,根据年龄升序排序,入职时间降序排序
  5. SELECT * FROM employee ORDER BY age ASC, entrydate DESC;
注意事项:

如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序

5.6  分页查询

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

例子:

  1. -- 查询第一页数据,展示10条
  2. SELECT * FROM employee LIMIT 0, 10;
  3. -- 查询第二页
  4. SELECT * FROM employee LIMIT 10, 10;
注意事项
  • 起始索引从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数
  • 分页查询是数据库的方言,不同数据库有不同实现,MySQL是LIMIT
  • 如果查询的是第一页数据,起始索引可以省略,直接简写 LIMIT 10

 六、DQL-执行顺序

DQL执行顺序

FROM -> WHERE -> GROUP BY -> SELECT -> ORDER BY -> LIMIT

七、DCL-数据控制语言 (开发人员操作较少)

7.1  管理用户

查询用户:

  1. USE mysql;
  2. SELECT * FROM user;

创建用户:
  CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';

修改用户密码:
  ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';

删除用户:
  DROP USER '用户名'@'主机名';

 例子:

  1. -- 创建用户test,只能在当前主机localhost访问
  2. create user 'test'@'localhost' identified by '123456';
  3. -- 创建用户test,能在任意主机访问
  4. create user 'test'@'%' identified by '123456';
  5. create user 'test' identified by '123456';
  6. -- 修改密码
  7. alter user 'test'@'localhost' identified with mysql_native_password by '1234';
  8. -- 删除用户
  9. drop user 'test'@'localhost';
注意事项
  • 主机名可以使用 % 通配

7.2  权限控制

常用权限:

权限说明
ALL, ALL PRIVILEGES所有权限
SELECT查询数据
INSERT插入数据
UPDATE修改数据
DELETE删除数据
ALTER修改表
DROP删除数据库/表/视图
CREATE创建数据库/表

查询权限:
  SHOW GRANTS FOR '用户名'@'主机名';

授予权限:
  GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';

撤销权限:
  REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

注意事项
  • 多个权限用逗号分隔
  • 授权时,数据库名和表名可以用 * 进行通配,代表所有

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

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

相关文章

在消费级GPU调试LLM的三种方法:梯度检查点,LoRA和量化

LLM的问题就是权重参数太大&#xff0c;无法在我们本地消费级GPU上进行调试&#xff0c;所以我们将介绍3种在训练过程中减少内存消耗&#xff0c;节省大量时间的方法:梯度检查点&#xff0c;LoRA和量化。 梯度检查点 梯度检查点是一种在神经网络训练过程中使动态计算只存储最…

瞄准产业应用,大模型加持的深兰科技AI虚拟数字人落地业务场景

伴随ChatGPT的问世&#xff0c;在技术与商业运作上都日渐发展成熟的AI数字人产业正持续升温。 目前的AI数字人不仅拥有超高“颜值”&#xff0c;同时还拥有更为丰富的、细腻的表情和动作。更有甚者&#xff0c;AI数字人已经具备自定义构建知识图谱、自主对话、不断学习成长的能…

day3-牛客67道剑指offer-JZ31、JZ32、JZ33、JZ34、JZ35、JZ36、JZ38、JZ39、JZ40、JZ42、链表中倒数第k个

文章目录 1. JZ31 栈的压入、弹出序列辅助栈原地栈 数组模拟 2. JZ32 从上往下打印二叉树迭代递归 3. JZ33 二叉搜索树的后序遍历序列递归迭代 递增栈 4. JZ34 二叉树中和为某一值的路径(二)5. JZ35 复杂链表的复制6. JZ36 二叉搜索树与双向链表递归迭代 7. JZ38 字符串的排列n…

SpringBoot复习:(18)@Value和@Autowired注解配置的属性是怎么注入到bean中的?

Value java doc文档指出&#xff0c;它是由AutowiredAnnotationBeanPostProcessor这个BeanPostProcessor处理的。 AutowiredAnnotationBeanPostProcessor的构造方法如下&#xff1a; 可见AutowiredAnnotationBeanPostProcessor用来处理Autowired和Value这两个注解。 具体的处理…

mongodb-win32-x86_64-2008plus-ssl-3.6.23-signed.msi

Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。C:\Users\Administrator>cd C:\MongoDB\Server\3.6\binC:\MongoDB\Server\3.6\bin> C:\MongoDB\Server\3.6\bin> C:\MongoDB\Server\3.6\bin>mongod --dbpath C:\Mongo…

STM32基础入门学习笔记:开发板 电路原理与驱动编程

文章目录&#xff1a; 一&#xff1a;触摸按键 1.触摸按键驱动程序&#xff08;点击&#xff09; touch_key.h touch_key.c main.c 2.按键双击和长按程序 touch_key.h touch_key.c main.c 3.触摸按键滑动程序 main.c 二&#xff1a;数码管显示 1.数码管RTC时钟LE…

丁香园:2023药品带量采购政策及趋势分析报告(附下载)

关于报告的所有内容&#xff0c;公众【营销人星球】获取下载查看 核心观点 化药&#xff1a;经多次集采&#xff0c;其规则与模式已比较成熟&#xff0c;是药品集采主要品种 中成药&#xff1a;由湖北牵头开展2 个批次&#xff0c;覆盖全国 31 省共 33产品组&#xff0c;此外…

谈谈对Android音视频开发的探究

在日常生活中&#xff0c;视频类应用占据了我们越来越多的时间&#xff0c;各大公司也纷纷杀入这个战场&#xff0c;不管是抖音、快手等短视频类型&#xff0c;虎牙、斗鱼等直播类型&#xff0c;腾讯视频、爱奇艺、优酷等长视频类型&#xff0c;还是Vue、美拍等视频编辑美颜类型…

【RL】Wasserstein距离-GAN背后的直觉

一、说明 在本文中&#xff0c;我们将阅读有关Wasserstein GANs的信息。具体来说&#xff0c;我们将关注以下内容&#xff1a;i&#xff09;什么是瓦瑟斯坦距离&#xff1f;&#xff0c;ii&#xff09;为什么要使用它&#xff1f;iii&#xff09; 我们如何使用它来训练 GAN&…

软件工程专业应该学什么?

昨天&#xff0c;我朋友的孩子报考了软件工程专业&#xff0c;问我软件工程到底学啥&#xff1f;所以我给他开列了一个书单。 现在高校开了一堆花名头的专业&#xff1a; 偏技术类&#xff1a;云计算、大数据、人工智能、物联网 偏应用类&#xff1a;电子商务、信息管理 但我个…

flink1.17 eventWindow不要配置processTrigger

理论上可以eventtime processtime混用,但是下面代码测试发现bug,输入一条数据会一直输出. flink github无法提bug/问题. apache jira账户新建后竟然flink又需要一个账户,放弃 bug复现操作 idea运行代码后 往source kafka发送一条数据 a,1,1690304400000 可以看到无限输出…

.net 6 efcore一个model映射到多张表(非使用IEntityTypeConfiguration)

现在有两张表&#xff0c;结构一模一样&#xff0c;我又不想创建两个一模一样的model&#xff0c;就想一个model映射到两张表 废话不多说直接上代码 安装依赖包 创建model namespace oneModelMultiTable.Model {public class Test{public int id { get; set; }public string…

【C语言进阶】数据的存储----浮点型篇

&#x1f341; 博客主页:江池俊的博客 &#x1f4ab;收录专栏&#xff1a;C语言—探索高效编程的基石 &#x1f4bb; 其他专栏&#xff1a;数据结构探索 ​&#x1f4a1;代码仓库&#xff1a;江池俊的代码仓库 &#x1f3aa; 社区&#xff1a;GeekHub &#x1f341; 如果觉得博…

部分常用CSS样式

目录 1.字体样式 2.文本样式 3.鼠标样式 cursor 4.背景样式 5.列表样式 6.CSS伪类 7.盒子模型 1.字体样式 font-family 字体类型&#xff1a;隶书” “楷体” font-size 字体大小&#xff1a;像素px font-weight 字体粗细&#xff1a;bold 定义粗体字…

8月5日上课内容 nginx的优化和防盗链

全部都是面试题 nginx的优化和防盗链 重点就是优化&#xff1a; 每一个点都是面试题&#xff0c;非常重要&#xff0c;都是面试题 1、隐藏版本号&#xff08;重点&#xff0c;一定要会&#xff09; 备份 cp nginx.conf nginx.conf.bak.2023.0805 方法一&#xff1a;修改配…

拦截器在SpringBoot中使用,HandlerInterceptor,WebMvcConfigurer

拦截器在Controller之前执行。 用于权限校验&#xff0c;日志记录&#xff0c;性能监控 在SpringBoot中使用 创建拦截器类&#xff1a;首先&#xff0c;创建一个Java类来实现拦截器逻辑。拦截器类应该实现Spring提供的HandlerInterceptor接口。实现拦截器方法&#xff1a;拦…

探索PostgreSQL的新功能:最新版本更新解析

PostgreSQL作为一种强大而开源的关系型数据库管理系统&#xff0c;不断在不断进化和改进。每一次的版本更新都带来了更多功能和改进&#xff0c;让用户在处理大规模数据和复杂查询时体验更好的性能和功能。在本文中&#xff0c;我们将深入探索PostgreSQL的最新版本更新&#xf…

进程上下文切换以及应用场景

各个进程之间是共享 CPU 资源的&#xff0c;在不同的时候进程之间需要切换&#xff0c;让不同的进程可以在 CPU 执行&#xff0c;那么这个一个进程切换到另一个进程运行&#xff0c;称为进程的上下文切换。 在详细说进程上下文切换前&#xff0c;我们先来看看 CPU 上下文切换 大…

VX-API-Gateway开源网关技术的使用记录

VX-API-Gateway开源网关技术的使用记录 官网地址 https://mirren.gitee.io/vx-api-gateway-doc/ VX-API-Gateway(以下称为VX-API)是基于Vert.x (java)开发的 API网关, 是一个分布式、全异步、高性能、可扩展、轻量级的可视化配置的API网关服务官网下载程序zip包 访问 https:/…

深入浅出 Typescript

TypeScript 是 JavaScript 的一个超集&#xff0c;支持 ECMAScript 6 标准&#xff08;ES6 教程&#xff09;。 TypeScript 由微软开发的自由和开源的编程语言。 TypeScript 设计目标是开发大型应用&#xff0c;它可以编译成纯 JavaScript&#xff0c;编译出来的 JavaScript …