查询
简单查询
select 字段 from 表名;
限定查询
select 列名 from 表名 {where 条件}
is not null is null
WHERE 列名 [NOT] BETWEEN 取值1 AND 取值2
WHERE {条件} [OR|AND] {条件}
SELECT * FROM user WHERE uid [NOT] IN (2,3,5)
模糊查询
[NOT] LIKE '%字符串_' // %表示任意字符,_表示单个字符,?表示单个字符
!= > <
排序
SELECT 列名 FROM 表名 {WHERE 条件} ORDER BY 排序字段 ASC|DESC // 排序放在最后
分组
// 配合聚合函数使用,根据一个或多个列对结果集进行分组;例如对同一类别的字段进行求和操作
select 列名1, sum() as 数量之和 from 表名 group by 列名1
// 过滤:where 是在分组前过滤数据,where条件不能包含聚组函数 having 在分组之后过滤数据,条件中经常包含聚组函数
select 列名 from 表名 having num > 10;
多表查询
SELECT 列名1 别名1, 列名2 别名2 FROM 表名1 别名1, 表名2 别名2 {WHERE 连接条件 and 普通条件} {ORDER BY 排序字段 ASC|DESC}
// 能使用join...on 直接连接的都可以使用普通关联查询where,反之不行
select a.ename, b.deptno from emp e, dept b where e.deptno = b.deptno;
select a.ename, d.deptno from emp e join dept d on e.deptno = d.deptno;
//直接连接 join...on = 内连接 inner join...on
//交叉连接,例如查询两张表,同时保留相同字段
SELECT * FROM emp CROSS JOIN dept;
//自然连接 NATURAL JOIN去掉重列
SELECT * FROM emp NATURAL JOIN dept;
//USING用于指定两个表之间的连接字段
SELECT * FROM emp JOIN dept USING(deptno);
//不等连接
select a.ename, d.deptno from emp e inner join dept d on e.deptno <> d.deptno;
//左连接 left join...on
//右连接 right join...on
//外连接 left outer join...on right outer join...on
//全连接:合并两张表的查询结果
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
//自连接:将一个表当成两个表进行连接查询
SELECT e1.Name AS employee_name FROM Employee AS e1, Employee AS e2 WHERE e1.ManagerId=e2.Id AND e1.Salary>e2.Salary
子查询
// 将查询结果当作一张表作为另一张表的查询
select e.ename, e.sal, b.deptno from emp as e , (select deptno, avg(sal) as sal from emp group by deptno) as b where e.deptno = b.deptno and e.sal > b.sal;
分页
//LIMIT [位置偏移量] <行数>
SELECT * FROM students_info LIMIT 4; //查询前四条数据
SELECT * FROM students_info LIMIT 3,5; //从第四条开始查询5条数据
分组函数
Count():计数
Max():求最大值
Min():求最小值
Avg():求平均值
Sum():求和
SELECT avg(sal),sum(sal) FROM emp WHERE deptno=20 // 例如查询部门编号为20的平均薪资及求和
执行过程
select from where group by having union order by limit
其他
alter table 表名 change id id int primary key auto_increment; // id设置为自动增长
ALTER TABLE `table_name` MODIFY COLUMN `CreateTime` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' ; // 插入数据时自动填充时间
ALTER TABLE `table_name` MODIFY COLUMN `UpdateTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' ; // 更新数据时自动填充时间