MySql 语法笔记
选择语句
Use语句
用于选择数据库
1 | Use [数据库名] |
Select语句
用于选择某个表中的某些列
1 | Select [列名1, 列名2, ...] |
如果要选择目标表中的所有列, 使用Select *
可以对查询后的数值显示进行更改(这里假设此列类型为数值)
1 | Select [列名 * 10 + 1] |
还可以在查询后的显示中将列重命名
1 | Select [列名 As 显示的名字] |
Where语句
用于选择表中的某些行
1 | Where [条件] |
可以结合Select
语句使用, 从满足条件的行中提取列
1 | Select [] |
And, Or, Not运算符
记不清优先级就加括号
当要查询哪些行中的制定列是或不是Null
时, 使用is (Not) Null
而不是= Null
In运算符
1 | 列名1 = 1 Or 列名1 = 2 Or 列名1 = 3 Or ... |
等价于
1 | 列名1 In [1, 2, ...] |
Regexp运算符
正则表达式
Order By子句
常用于Select
语句后, 将查询得到的行按某种顺序排序
1 | Select [] |
Limit语句
1 | Limit [偏移量, 指定量] |
跳过前偏移量的行并选择剩下的前制定量的行
连接
内连接
合并两张表的信息, 如果是多表连接, 就紧接着再写一个Join [] On[]
就行了
1 | Select [] |
自连接
一个表和自己合并, 起两个别名就可以了
外连接
假设我们有两张表, 一张表的信息是哪些学生选了那些课, 另一张表是每个课程的详细信息, 现在我们要查询每个学生选的课以及课程的详细信息, 那么我们需要把两张表连接, 但是有的学生并没有选课, 那么使用内连接的话这些学生就不会被显示, 这时候就要使用外连接
1 | Select [] |
如果是Left Join
那么就表示表1的条件可以为空值, Right Join
则表示表2的条件可以为空值, 同样可以多表连接, 建议使用Left Join
隐式连接
可以得到两张表(或多张表)的笛卡尔积
1 | Select [] |
Using字句
当两张表存在相同的列名字并且条件为这两列的值相等时可以用, 也可以指定多列值相同
1 | Select [] |
自然连接
1 | Select [] |
当两张表中有且仅有一列的名字相同时课根据此列进行连接
交叉连接
笛卡尔积的另一种写法
1 | Select [] |
联合
将多行放在一起显示, 这些行的列数必须相同, 在两个Select
语句中间加入Union
即可
1 | Select [] |
插入, 删除, 更新数据
插入单行
每一列都插入
1 | Insert Into [表名] |
只插入指定列
1 | Insert Into [表名] (列名1, 列名2, ...) |
插入多行
1 | Insert Into [表名] (列名1, 列名2, ...) |
插入分层行
使用内置函数Last_Insert_id
创建表复制
将已存在的表的某些行或列复制到一张新表里
1 | Create Table [新表名] As |
更新单行
1 | Update [表名] |
这里的Where
语句用来选定我们要更改的那一行
也可以将Where
语句改为Select
语句
1 | Update [表名] |
删除行
1 | Delete From [表名] |
汇总数据
聚合函数
1 | Max([列名]); |
其中Count()
默认不计算键值为Null
的列, 想要算上空值的话写Count(*)
, 并且重复键值会被重复计算, 想要不重复就要使用Distinct
关键字
1 | Count(Distinct [列名]) |
Group By字句
将查询的数据按指定的某一列或多列键值分组,
1 | Select [] |
Having字句
对分组后的数据进行筛选
筛选方法如Where
一致, 但是条件中只能出现Select
选中的列(聚合函数可以无视这个条件)
1 | Select [] |
Rollup运算符
用With
跟在Group By
之后, 用于汇总聚合函数
1 | Group By [] With Rollup |
编写复杂查询
All关键字
用于子查询前, 表示所有子查询
Any关键字
用于子查询前, 表示任意一个子查询
Exists运算符
不好解释