共计 4663 个字符,预计需要花费 12 分钟才能阅读完成。
基本概念与根底操作
- 基本概念
- 单表查问
- 多表查问
1 基本概念
- 数据类型
- 完整性束缚
- 根底语句
1.1 数据类型
-
字符串
数据类型 大小 形容 char(n),character(n) 0~255 byte 定长为 n 的字符串 varchar(n),charactervarying(n) 0~65535 byte 最大长度为 n 的字符串 tinyblob 0~255 byte 二进制短字符串 blob 0~65535(64K) byte 二进制长文本数据 mediumblob 0~16777215(8M) byte 二进制中等长度文本数据 longblob 0~4294967295(4G) byte 二进制大文本数据 clob 0~65535(64K) byte 字符串大对象 tinytext 0~255 byte 短文本字符串 text 0~65535(64K) byte 长文本字符串 mediumtext 0~16777215(8M) byte 中长文本字符串 longtext 0~4294967295(4G) byte 大文本字符串 -
数字
数据类型 大小 形容 tinyint 1byte (Byte)-127~128 / 0~255 smallint 2byte (Short)-32768~32767 / 0~65535 mediumint 3byte (Integer)-8388608~8388607 / 0 ~ 16777215 int,integer 4byte (Integer)-2147483648~2147483647 / 0~4294967295 bigint 8byte (Long)-9223372036854775808~9223372036854775807 / 0~18446744073709551615 numeric(p,d),decimal(p,d),dec(p,d) —– 定点数,p 位数,d 位小数 float 4byte float(p,d)同定点数 double 8byte double(p,d)同定点数 -
日期
数据类型 大小 格局 形容 date 3byte YYYY-MM-DD 1000-01-01~9999-12-31 time 3byte HH:MM:SS -838:59:59~838:59:59 timestamp 4byte YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:00/2038 datetime 8byte YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~9999-12-31 23:59:59 year —– —– —–
1.2 完整性束缚
-
列完整性约束条件
列规定,限度退出表的数据,保证数据的有效性、正确性和完整性# 可对约束条件命名 [CONSTRAINT < 束缚名 >] < 束缚类型 >
束缚名称 形容 关键字 其余 主键束缚 每行数据的惟一标识,非空且惟一 PRIMARY KEY auto_increment 自增长(数字 惟一) 外键束缚 用来让两个表建设连贯,保证数据的一致性和参照完整性 FOREING KEY REFERENCES 指明参照哪些表的主键 非空束缚 该列数据不能为 null NOT NULL —– 惟一束缚 该列数据各不相同 UNIQUE —– 查看束缚 该列的值满足对立的条件 CHECK —– 默认束缚 默认值 DEFAULT —–
外键束缚
建表时:[CONSTRAINT 束缚名] FOREING KEY(<column_name>) REFERENCES 主表名(<column_name>);
建表后:
ALTER TABLE <table_name> ADD [CONSTRAINT 束缚名] FOREING KEY(<column_name>) REFERENCES 主表名(<column_name>);
删除束缚:
ALTER TABLE 从表名 DROP FOREING KEY 束缚名;
1.3 根底语句
-
数据库
# 查看所有 show databases; # 创立 create database <name>; # 进入 use <name>; # 查看以后 select database(); # 删除 drop database <name>
-
表
DDL
# 查看所有 show tables; # 创立 create table <name>(<column_name1> <data_type> [列完整性约束条件], ..., [表完整性约束条件] ); # 查看所有列 show columns form <name>; # 批改 alter table <table_name> rename to <new_talbe_name>; # 批改表名 alter table <table_name> add <column_name> <data_type>; # 增加一列 alter table <table_name> modify <column_name> <new_data_type>; 批改数据类型 alter table <table_name> change <column_name> <new_column_name> <new_column_type>; #批改数据类型与表名 alter table <table_name> drop <column_name>; # 删除一列 # 删除 drop table <name> [cascade|restrict]; drop table if exists <name>; # 如果表存在 则删除
-
表 数据
DML
# 增加 insert into <table_name>(column1,colum2...) values(value1,value2...); # 指定列 insert into <table_name>(column1,colum2...) values(value1,value2...),(value1,value2...); # 指定列 批量增加 insert into <table_name> values(value1,value2...); # 全部列 insert into <table_name> values(value1,value2...),(value1,value2...); # 全部列 批量增加 # 批改 update <table_name> set column1=value1,column2=value2,... [where 条件]; # 删除 delete from <table_name> [where 条件];
2 单表查问
- 根底查问
- 条件查问
- 排序查问
- 分组查问
- 分页查问
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组后条件
order by
排序字段
limit
分页限定
2.1 根底查问
# 查问多个字段
select <column_name1,column_name2...> from <table_name>;
select * from <table_name>; # 查问所有数据
# 查问去重
select distinct <column_name1,column_name2...> from <table_name>;
# 别名 能够省略 空格隔开
column_name as alias_column_name
2.2 条件查问
# 条件查问
select
<column_name1,column_name2...>
from
<table_name>
where
<condition1,condition2...>
条件列表
符号 | 含意 |
---|---|
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
= | 等于 |
<> 或 != | 不等于 |
between … and … | 闭区间内 |
in(…) | 多选一 |
like 占位符 | 含糊查问 _ 单个任意字符 % 多个任意字符 |
is null | 是 null |
is not null | 不是 null |
and 或 && | 单元 4 |
or 或 || | 或 |
not 或 ! | 非 |
# 含糊查问
select * from student
where address like "% 江 %";
# 区间查问
select * from student
where math_score between 60 and 80;
# 多选一
select * from student
where address not in("北京","上海","天津","重庆");
2.3 排序查问
select
<column_name1,column_name2...>
from
<table_name>
order by
<column_name1> [order_type],
<column_name2> [order_type];
符号 | 含意 |
---|---|
ASC | 升序(默认) |
DESC | 降序 |
以后判断条件相等时,启用后续排序条件
2.4 分组查问
select 聚合函数(column_name) from <table_name>;
聚合函数: 将一列数据作为一个整体,进行纵向计算。
函数 | 含意 |
---|---|
count | 统计数量 |
max | 最大值 |
min | 最小值 |
sum | 求和 |
avg | 平局值 |
select
<column_name1,column_name2>
from
<table_name>
where
<condition1,condition2...> # 分组前的条件限定
group by
<column_name1,column_name2...> [having 分组后条件过滤];
分组之后,查问的字段为
聚合函数
和分组字段
where > 聚合函数 > having
where 过滤分组前所有数据,且不能应用聚合函数
having 过滤分组后的数据,能够应用聚合函数
2.5 分页查问
select
<column_name1,column_name2...>
from
<table_name>
limit
<start_index>,<query_num>;
start_index(起始索引)从 0 开始
query_num(查问条数) 个别是固定值
个别咱们会固定每页数量 而后查问第几页的数据,start_index = (页码 -1)* 每页条数
3 多表查问
- 连贯查问
- 子查问(嵌套查问)
- 汇合查问
# 多表查问
select * from <table_name1>,<table_name2>
# 后果为两张表的笛卡尔积 全组合
3.1 连贯查问
- 内连贯
表的交加
## 隐式内连贯
select 字段列表 from 表 1, 表 2... where 条件
## 显式内连贯
select 字段列表 from 表 1 [inner] join 表 2 on 条件
- 外连贯
左外连贯:交加 + 右表补集
右外连贯:交加 + 左表补集
一张表的所有数据 + 交加的数据
# 左外连贯 以左表为准
select 字段列表 from 表 1 left [outer] join 表 2 on 条件
# 右外连贯 以右表为准
select 字段列表 from 表 1 right [outer] join 表 2 on 条件
3.2 子查问 / 嵌套查问
在一条查问中 将 一条或多条 查问后果
作为 条件
或者 表
应用
子查问后果 | 应用 | 操作 |
---|---|---|
单行单列 | 值 | 比拟 |
多行单列 | 汇合 | in/ 通过谓词做比拟 |
多行单列 | 虚构表 | select |
- 谓词
-
any(some)
# 子查问为 多行单列时 与局部查问后果做比拟 满足一个即可 select 字段列表 from <table_name> where < 比拟运算符 >any(子查问)
=any 等价于 in
# 子查问为 多行单列时 与全副查问后果做比拟 须要满足全副 select 字段列表 from <table_name> where < 比拟运算符 >all(子查问)
-
exists
# 存在 判断子查问是否有查问后果 返回逻辑真与逻辑假 select * from <table_name> where exists(子查问)
3.3 汇合查问
-
并 UNION
# 查问后果的并集 默认去掉反复元组 UNION ALL 保留所有数据 (查问 1) UNION [ALL] (查问 2)
查问的列数保持一致
-
交 INTERSECT
# 查问后果的交加 (查问 1) INTERSECT (查问 2)
-
差 EXCEPT
# 查问后果的差集 (查问 1) EXCEPT (查问 2)
其实就是 查问 1 和 查问 2 的补集 的 并集
正文完