SQL
SQL图形化界面
Datatrip
- 新建项目
- 新建链接mysql(要下载驱动文件)
- 创建数据库
- 创建表
- 表
- cirl+shift+q使用命令界面
SQL通用语法及分类
通用语法
- 分号结尾
- 可缩进增加可读性
- 不区分大小写 关键词建议大写
- 注释 -- or # /多行/
数据类型
Text
| CHAR(size) | 保存固定长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的长度。最多 255 个字符。 |
|---|---|
| VARCHAR(size) | 保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。注释:如果值的长度大于 255,则被转换为 TEXT 类型。 |
| TINYTEXT | 存放最大长度为 255 个字符的字符串。 |
| TEXT | 存放最大长度为 65,535 个字符的字符串。 |
| BLOB | 用于 BLOBs (Binary Large OBjects)。存放最多 65,535 字节的数据。 |
| MEDIUMTEXT | 存放最大长度为 16,777,215 个字符的字符串。 |
| MEDIUMBLOB | 用于 BLOBs (Binary Large OBjects)。存放最多 16,777,215 字节的数据。 |
| LONGTEXT | 存放最大长度为 4,294,967,295 个字符的字符串。 |
| LONGBLOB | 用于 BLOBs (Binary Large OBjects)。存放最多 4,294,967,295 字节的数据。 |
| ENUM(x,y,z,etc.) | 允许你输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值。如果列表中不存在插入的值,则插入空值。注释:这些值是按照你输入的顺序存储的。可以按照此格式输入可能的值:ENUM('X','Y','Z') |
| SET | 与 ENUM 类似,SET 最多只能包含 64 个列表项,不过 SET 可存储一个以上的值。 |
Number
| 数据类型 | 描述 |
|---|---|
| TINYINT(size) | -128 到 127 常规。0 到 255 无符号*。在括号中规定最大位数。 |
| SMALLINT(size) | -32768 到 32767 常规。0 到 65535 无符号*。在括号中规定最大位数。 |
| MEDIUMINT(size) | -8388608 到 8388607 普通。0 to 16777215 无符号*。在括号中规定最大位数。 |
| INT(size) | -2147483648 到 2147483647 常规。0 到 4294967295 无符号*。在括号中规定最大位数。 |
| BIGINT(size) | -9223372036854775808 到 9223372036854775807 常规。0 到 18446744073709551615 无符号*。在括号中规定最大位数。 |
| FLOAT(size,d) | 带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。 |
| DOUBLE(size,d) | 带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。 |
| DECIMAL(size,d) | 作为字符串存储的 DOUBLE 类型,允许固定的小数点。 |
这些整数类型拥有额外的选项 UNSIGNED。通常,整数可以是负数或正数。如果添加 UNSIGNED 属性,那么范围将从 0 开始,而不是某个负数。
Data
| 数据类型 | 描述 |
|---|---|
| DATE() | 日期。格式:YYYY-MM-DD注释:支持的范围是从 '1000-01-01' 到 '9999-12-31' |
| DATETIME() | *日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS注释:支持的范围是从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59' |
| TIMESTAMP() | *时间戳。TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的描述来存储。格式:YYYY-MM-DD HH:MM:SS注释:支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC |
| TIME() | 时间。格式:HH:MM:SS注释:支持的范围是从 '-838:59:59' 到 '838:59:59' |
| YEAR() | 2 位或 4 位格式的年。注释:4 位格式所允许的值:1901 到 2155。2 位格式所允许的值:70 到 69,表示从 1970 到 2069。 |
- 即便 DATETIME 和 TIMESTAMP 返回相同的格式,它们的工作方式很不同。在 INSERT 或 UPDATE 查询中,TIMESTAMP 自动把自身设置为当前的日期和时间。TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD。
分类
| 分类 | 说明 |
|---|---|
| DDL | 数据定义语言,用来定义数据库对象 |
| DML | 数据操作语言,用来对数据库种表的数据进行增添删改 |
| DQL | 数据查询语言,用来查询数据库种表的记录 |
| DCL | 数据控制语言,用来创建库用户,控制数据库的访问权限 |
DDl
数据定义语言,用来定义数据库对象
数据库操作
查询
查询所有数据库 show databases;
查询当前数据库 select databse();
创建
create [if not exists] name [default charset 字符集] [collate 排序规则];
删除
drop database [if exists] name;
使用
use name;
操作
查询
查询当前数据库所有表 show tables;
查询表结构 desc name;
查询表的指定建表语句 show create table name;
创建表
create name(
字段1 类型 [comment 字段1 注释],
字段2 类型 [comment 字段2 注释],
字段3 类型 [comment 字段3 注释],
......
字段n 类型 [comment 字段n 注释]
)[comment 表注释];
修改表
添加字段 alert table table_name add 类型(长度) [comment 注释] [约束];
修改数据类型 alert table_name modify 字段名 新数据类型(长度);
修改字段名和字段类型 alert table_name 旧字段名 新字段名 类型(len) [comment 注释] [约束];
删除字段 alert table table_name drop 字段名;
修改表名 alert table table_name rename to 新表名;
删除表
删除表 drop table [if exists] name;
删除指定表并重新创建 truncate table name;
DML
数据操作语言,用来对数据库种表的数据进行增添删改
- 添加数据 INSERT
- 修改数据 UPDATE
- 删除数据 DELETE
添加数据
-
给指定字段添加数据
insert table_name (字段名1,字段名2...) values (值1,值2...);
给全部字段添加数据
insert into table_name values(值1,值2...);
批量添加数据
insert into table_name (字段名1,字段名2,...) values (值1,值2,...),(值1,值2...);
insert table_name values(值1,值2,...),(值1,值2,...),(值1,值2,...);
修改数据
修改数据
update table_name set 字段名1=值1,字段名2=值2,字段名3=值3,...[where 条件];
##### 删除数据
删除数据
delete from table_name [where 条件];
#### DQL
数据查询语言,用来查询数据库种表的记录
关键字:SELECT
DQL-语法
#基本查询 SELECT 字段列表 FROM 表名列表 #条件查询 WHERE 条件列表 #分组查询 GROUP BY 分组字段列表 HAVING 分组后条件列表 #排序字段列表 ORDER BY 排序字段列表 #分页查询 LIMIT 分页参数
##### 基本查询
查询多个字段
select 字段1,字段2,... from table_name;
![image-20230515171424206]()
select *from table_name;
设置别名
select 字段1[as 别名1],字段2[as 别名2]...from table_name;
![image-20230515171802673]()
去除重复记录
select distinct 字段列表 from table_name;
![image-20230515172115592]()
##### 条件查询
语法 select 字段列表 from 表名 where 条件列表;
条件:
![image-20230515172832779]()
![image-20230515172840124]()
eg:
select * from table_name where name like'__';#查询名字为两个字的人(两个下划线代表两个字) select * from table_name where idcard like'%x';#查询身份证为x的人
##### 分组查询
###### 聚合函数
将一列数据作为一个整体,进行纵向计算
语法: select 聚合函数(字段列表) from table_name; 常见聚合 count max min avg sum
![image-20230515175024821]()
###### 分组查询
语法
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤];
分组之前进行过滤,不满足where不分组,having是分组后对结果过滤
where不能对聚合函数判断,而having可以