常见的SQL
1.数据定义语言DDL
1.1 创建(create)
- 建库
Create database 库名;
- 建表
create table 表名(定义表内容);
- 定义表节结:
create Table 表名(
列字段1 数据类型(长度) 限制条件,
列字段2 数据类型(长度) 限制条件,
...
-- 设置主键
primary Key(列字段1,列字段n);
-- 设置外键
foreign key foregin_name(设置外键的列字段) references 主表名(外键关联字段)
);
- 限制条件:
- not null 值不为空
- auto_increment 自动增长
- unique 唯一
- primary key 主键
- foreign key 外键
- check 检查数据是否符合设置的条件
CHECK(列字段的限制表这式)
1.2 删除(drop)
- 语法: drop database/table 库名/表名;
2.常见的数据操作语言(DML)
2.1 增加(insert)
- 语法: insert into 表名(列字段1,…,列字段n) values(值1,…,值 n)
- 注意:
- 列名列表和值列表要匹配( 个 数 、 类 型 \color{#ff0036}{个数、类型} 个数、类型要匹配)。
- 列名列表可以省略
- 如果有自增(auto_increment)的字段,需要用null占位
2.2 删除(Delete)
- 语法: Delete from 表名 [where 条件] [ ] 里 面 的 表 示 可 选 \color{#ff0036}{[]里面的表示可选} []里面的表示可选
- 注意:
- 如果不加条件的就认为是清空表(但不会对表初始化);
- 如果清空表后,再添加数据的时候自增的数字还会接着加不会从0开始。
- Trunable 清空表
- 语法: Trunable table 表名;
- 彻底请空表,不会写系统日志
- 区别: Delete 会写系统日志,短时间内的操作可以 回 滚 \color{#ff0036}{回滚} 回滚;Trunable 不会写系统日志删了就删了。
2.3 修改(update)
- 语法: Update 表 set 列=值,…,列n=值n [where 条件];
- 如果不加条件就是修改所有。
2.4 查询(select)
- 语法: select 展示的列字段1 [ as 别名] ,…,展示的列字段n [ as 别名] from 表 [where 条件表达式]
条件查询
- 展示符合条件的数据
- 语法:
select 列字段… from 表 where 条件;
排序 (order by)
- 将数据进行升/降序然展示
- 语法 :
select 列字段… from 表 where 条件 order by 列名1[asc升/desc降],列2[asc/desc];
默 认 升 序 \color{#ff0036}{默认升序} 默认升序
分组[ 用 来 作 统 计 \color{#ff0036}{用来作统计} 用来作统计]
- 常见函数:
- Count(列名) 计数 列有多少数据(行)
- Sum(列名) 求和 列内所有值求和
- avg(列名) 平均数 列内的值求平均数
- Max(列名) 最大值
- Min(列名) 最小值
- Lower(列名) 转成小写
- upper(列名) 转成大写
- 分组(group by)
- 语法:
select 列名 from 表 group by 列 [having 条件];
- h a v i n g \color{#ff0036}{having} having: 分组统计之后再跟据having条件输出;
分页(limit)
- 将数据分割展示,根据页数不同显示不同的数据;
- 语法:
select 列 from 表 limit 参数1,参数2;
- 参数1 : 本页第一条数据的启始位置 从0开始
- 计算公式: 参数1= (页数-1)×每页的条数
- 参数2 : 每页有几条数据
- 参数1 : 本页第一条数据的启始位置 从0开始
select 列 From表 where 条件 Group by 分组 having 条件(分组后筛选) Order by 列 [asc/desc] limit 参数1,参数2;
2.5 表联接查询
类型 | 语法 | 备注 |
---|---|---|
内联接 | Inner join | 两表公共部分 |
左联接(外) | Left join | 左侧表的所有数据全展示出来,如果在右侧表中没有对应的就用null占位 |
右联接 | right join | 右侧表全展示,如果左侧没有对应的用null占位 |
交叉联接 | Cross join | 笛卡尔积 两表的乘积输出 |
- 语法:
select 表1.列,表2.列 from 表1 联接关键字 表2 on 条件(比如相同的部分);
2.6 Union 多表联合
- 将两张表的结果合拼到一起输出
注意:两张表的列数必须相同否则会报错
2.7 模糊查询
- 用来检索某个范围内的所有记录,比如:输出所有姓王的人。
2.7.1 like
- 查询字符串用的比较多;
- 语法:
Select 列名 from 表 where 模糊查询的列名 like “模糊查询的条件”;
- 模糊查询的条件:
- %:表示还有其他字符;
- 例如:
Select * from Student where Sname like “王%”
输出姓王的学生的所有信息 - a%:表示已a开头的字符串;
- %a%:表示包含a的字符串;
- %a:表示以a结尾的字符串;
- 例如:
- _下划线:表示站位;
- 例如:
Select * from Student where Sname like “王_”
输出姓王,并且长度是2的学生信息 - a__:a开头长度是3
- _a_ _:字符串的第二位是a且长度是4
- 例如:
- %:表示还有其他字符;
2.7.2 Between…and
- 查询某个范围时使用;
- 语法:
Select 列 from 表 where 查询字段 between 值1 and 值2;
2.7.3 binary区分大小写
- MySQL本身默认是不区分大小写的,如果非要区分 就要使用 binary查询
- 语法:
Select 列名 from 表 where binpary 列字段 ="A"
查询 包含大写A的数据
2.7.4 in(not in)
- 输出值在(不在)这个范围内的信息;
- 语法:
Select 列 from 表 where 列 in(not in)(值1,值2…,值n)
2.7.5 Exists (not exists):检查行的存在
- Exists里面的语句有返回结果,前面的select就正常运行,如果为null,则不返回结果
- 语法:
Select 列 from 表 where exists (查询结果)
2.7.6 其他
- 其他:
空 (NULL) is null ( is not null)和 “” 的查询(=’’ !=’’ <>不等于’’): and or not 等
2.8 正则使用
- 正则是一种字符匹配一种方式; 比如要检索表中满足 (哪些用户名是a开头的? 哪些用户名是以m结尾的? ‘%m’ )
- 这个正则教程不错点击跳转
- 语法:
Select 列 from 表 where 列 regexp ‘正则基本语法’