MySQL执行顺序
- from组装来自不同数据源的数据
- where指定条件对记录进行筛选
- group by将数据划分为多个分组
- 使用聚合函数进行计算
- 使用having筛选分组
- select字段
- order by对结果进行排序
- limit指定返回的数据条数
一.基本的增删查改
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);
INSERT INTO 表名 VALUES (值1, 值2, ...);
//添加数据
UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , .... [ WHERE 条件 ] ;
//修改数据
DELETE FROM 表名 [ WHERE 条件 ] ;
//删除数据
SELECT DISTINCT 字段列表 FROM 表名;
// 去除重复记录
SELECT * FROM teachers WHERE country IN ('CN', 'UK');
SELECT * FROM teachers WHERE country NOT IN ('CN', 'UK');
SELECT * FROM teachers WHERE age between 20 and 40;
//查询多个条件
SELECT * FROM terchers WHERE country like ' '
//模糊查询 %代替多个字符 _代替一个字符
SELECT * from emp order by age asc , entrydate desc;
//升降序排序,ASC升序,DESC降序
SELECT 字段 FROM 表名 LIMIT 起始索引, 查询记录数;
//查询多少条的数据
二.基本的函数
SELECT AVG(字段) AS(重命名) FROM ();
SELECT MAX(字段) AS(重命名) FROM ();
SELECT SUM(字段) AS(重命名) FROM ();
SELECT COUNT(字段) AS(重命名) FROM (); //统计数量
SELECT ROUND(字段,保留的位数) FROM (); //将函数值四舍五入
SELECT ISNULL(字段) FROM (); //判断字段是否为NULL,空为1,不空为0
SELECT ISFULL(字段,n) FROM (); //空为n,不空返回对应内容
SELECT NOW(精确的秒位数)/CURDATE()/CURTIME AS (重命名) //获取时间
INSERT INTO (表名) VALUES(NOW(精确的秒位数)/CURDATE()/CURTIME AS (重命名));//表中插入时间
SELECT DATA(字段) as '日期' TIME(字段) as '时间' FROM(); //提取已有时间的日期和具体时间
SELECT DATE_FORMAT(字段,'%Y-%m-%d %H:%i:%s') as (重命名) FROM();
//得到表创建的 %Y 年份,%m 月份,%d 日期,%w 表示星期 His为时分秒.
三.约束
create table 表名(
字段 int not null,
primary key(字段)
); //创建表时 给字段添加唯一主键约束
alter table 表名 add primary key(字段); //给已创建的表字段添加主键约束
alter table 表名 drop primary key; //给已创建的表 去除主键约束
---------------------------------
外键:就是表1某列和表2某列 一样但是字段名不一样。
主键:也称“主键约束”,其值能唯一地标识表中的每一行。
CREATE TABLE 外键表(
字段 int NOT NULL,
primary key (字段),
foreign key (字段1) REFERENCES 主键表(字段2)
//创建表格时创建外键约束
);
alter table 表1
add foreign key(字段1)
references 表2(字段2); //添加外键约束
---------------------------------
//检查约束
create table 表1(
字段 定义,
check(字段的约束 and 字段的约束)
);
alter table 表1 add check(字段的约束); //表已存在,添加约束
alter table 表1 drop check;
---------------------------------
//默认约束
create table 表1(
字段 int default(默认值)
);
alter table 表1 alter 字段 set default;
alter table 表1 alter 字段 drop default;
四.多表联结
内连接:取两个表的交集,返回的结果就是连接的两张表中都满足条件的部分。
select 字段
FROM table1 t1
JOIN table2 t2
ON table1.common_field = table2.common_field
where 条件;
-----------------------------------------
外连接:左外连接,右外连接,全外连接
SELECT 字段1,字段2 ...
FROM table1
LEFT | RIGHT | FULL (OUTER) JOIN table2
ON 条件
where 条件;
五.分组查询
SELECT 字段 FROM 表名 WHERE 条件 GROUP BY 字段;
SELECT 字段 FROM 表名 WHERE 条件 GROUP BY 字段 having 条件;
//having是在分组之后,where是在分组之前
例子:查询年龄小于45的员工 , 并根据工作地址分组 , 获取员工数量大于等于3的工作地址
select workaddress, count(*) address_count
from emp
where age < 45 group by workaddress
having address_count >= 3;