一、MySql的语法规范
- 不区分大小写,但建议关键字大写,表名、列名小写
- 每条命令最好用分号结尾
二、注释
- #注释文字(单行注释)
- — 注释文字(单行注释)
- /* 注释文字 */(多行注释)
三、查询
1 2 3 4 5 6 7
| # 分组查询推荐尽可能使用分组前筛选,即在group by前使用where SELECT [字段名,...] FROM [表名,...] WHERE [条件] GROUP BY [字段名] HAVING [条件] ORDER BY ASC/DESC
|
3.1 连接查询
3.1.1 内连接
1 2 3 4 5 6 7 8 9 10 11 12
|
SELECT [字段名,...] FROM 表1 别名1 inner join 表2 别名2 on 连接条件 WHERE [条件] GROUP BY [字段名] HAVING [条件] ORDER BY ASC/DESC
|
3.1.2 外连接
1 2 3 4 5 6 7
| SELECT [字段名,...] FROM 表1 别名1 left/right/full join 表2 别名2 on 连接条件 WHERE [条件] GROUP BY [字段名] HAVING [条件] ORDER BY ASC/DESC
|
3.1.3 内连接与外连接的区别
内连接:内连接匹配的是两个表符合连接条件的交集,不存在匹配的内容为NULL的情况
外连接:外连接分为左外连接与右外连接,左连接表示左表中记录全部查询出来,右表只显示符合条件的数据,没有匹配到右表的数据,则右表数据显示为NULL;右连接则反之。以以下示例做下说明:
a_id |
a_name |
1 |
路飞 |
2 |
索隆 |
3 |
香吉士 |
b_id |
b_name |
2 |
索隆 |
3 |
香吉士 |
4 |
乔巴 |
- 内连接语句:select * from a a inner join a a on a.a_id = b.b_id
a_id |
a_name |
b_id |
b_name |
2 |
索隆 |
2 |
索隆 |
3 |
香吉士 |
3 |
香吉士 |
- 左外连接语句:select * from A A left outer join B B on a.a_id = b.b_id
a_id |
a_name |
b_id |
b_name |
1 |
路飞 |
NULL |
NULL |
2 |
索隆 |
2 |
索隆 |
3 |
香吉士 |
3 |
香吉士 |
3.1.4 交叉连接(笛卡尔积)
1 2 3 4 5 6 7
| SELECT [字段名,...] FROM 表1 别名1 cross join 表2 别名2 WHERE [条件] GROUP BY [字段名] HAVING [条件] ORDER BY ASC/DESC
|
3.1.5 子查询
3.1.6 分页查询
- offset要显示条目的起始索引(起始索引从0开始)
- size要显示的条目个数
- 网页的分页显示数据需要对数据库进行分页查询
1 2 3 4 5 6 7 8
| SELECT [字段名,...] FROM 表1 别名1 cross join 表2 别名2 WHERE [条件] GROUP BY [字段名] HAVING [条件] ORDER BY ASC/DESC LIMIT offset,size;
|
3.1.7 联合查询
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
查询语句1 union 查询语句2
# 示例 SELECT id,cname,csex FROM t_ca UNION SELECT t_id,tName,tGender FROM WHERE tGender='male';
# 加ALL表示会包含重复的内容 SELECT id,cname,csex FROM t_ca UNION ALL SELECT t_id,tName,tGender FROM WHERE tGender='male';
|
3.2 示例
3.2.1 查询前五条员工信息
1 2 3
| SELECT * FROM employees LIMIT 0,5; #或者 SELECT * FROM employees LIMIT 5;
|
3.2.2 分页查询规律
- page表示第几页,(page-1)*size表示每一页的起始查询位置
1 2 3
| SELECT 查询列表 FROM 表 LIMIT (page-1)*size,size;
|
四、增删改
4.1 插入数据
1 2 3 4 5 6
| INSERT INTO 表名 VALUES(元组值); INSERT INTO 表名(列名序列) VALUES(元组值); INSERT INTO 表名(列名序列) VALUES(元组值),(元组值),...; INSERT INTO 表名 SET 列名=值,列名=值,... #用的少 INSERT INTO 表名(列名序列) SELECT 查询语句; INSERT INTO 表名(列名序列) TABLE 表名2;
|
4.2 删除数据
1
| DELETE FROM 表名 WHERE 条件表达式
|
4.3 修改数据
1 2
| UPDATE 表名 SET 列名=值表达式,列名=值表达式,... WHERE 条件表达式 UPDATE 表名 SET ROW=元组 WHERE 条件表达式
|
五、视图
5.1 视图的创建
1
| CREATE VIEW 视图名(列名序列) AS SELECT查询语句
|
5.2 视图的撤销
六、Mysql数据类型
6.1 数值型
类型 |
大小 |
范围(有符号) |
范围(无符号) |
TINYINT |
1 byte |
(-128,127) |
(0,255) |
SMALLINT |
2 bytes |
(-32 768,32 767) |
(0,65 535) |
MEDIUMINT |
3 bytes |
(-8 388 608,8 388 607) |
(0,16 777 215) |
INT或INTEGER |
4 bytes |
(-2 147 483 648,2 147 483 647) |
(0,4 294 967 295) |
BIGINT |
8 bytes |
|
|
FLOAT |
4 bytes |
|
|
DOUBLE |
8 bytes |
|
|
DECIMAL |
对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 |
|
6.2 日期型
6.3 字符型