用来操做表中的数据. 对表中记录的建立, 修改和删除sql
1,插入单条数据
语法:insert into 表名称(column1,column2,...)values(value1,value1,...);数据库
代码:insert into student(id, name)values(1,'tom');函数
2.在有参数都提供, 能够忽略列名
2.1插入单条数据spa
insert into student values(2,‘coco’);blog
2.2插入多条数据排序
insert into student values(2,‘coco’), (3,'bobo') , (4,'vivi');ip
1.单条数据修改
语法:update 表名称 set 列名1=列值, 列名2=列值2 where 列名=列值it
代码:update student set name=‘tom’ , age=12 where id=1;io
2.批量数据修改
2.1:将学生全部的age改成18基础
update student set age =18;
2.2:将学生全部的age+1
update student set age=age +1;
1,删除一列
语法:delete from 表名称 where 列名=列值;
代码:delete from student where id=1;
2.删除表中全部的记录
delete from student;
执行DQL语句不会改变数据库原始数据, 而是让数据库发送结果集给客户端查询返回的结果集是一张虚拟表
关键字:select
SELECT 要查询的列 FROM 表名
WHERE 行条件
GROUP BY 对结果分组
HAVING 分组后的行条件
ORDER BY 对结果排序
LIMIT 结果限定
1 基础查询
查询students表中全部数据:SELECT * FROM students;
查询指定列:SELECT id , gender FROM students ;
2 条件查询
概述:在查询时经过 WHERE 子句给出查询条件, WHERE子句可使用到的运算符:
关系运算:
=, !=, <>, <, <=, >, >= (<>和!=用法相同)。
BETWEEN 20 AND 40 20<=值<=40。
IN('a', 'b', 'c') 值包含在集合中。
NULL判断:IS NULL, IS NOT NULL 判断是否为NULL
逻辑运算:AND, OR, NOT 与, 或, 非
案例1:查询年龄在15岁至20岁之间的学生:
SELECT * FROM student WHERE age BETWEEN 15 AND 20;
案列2:查询年龄不等于3和年龄不等于11的学生(and,或not in分别实现)
select * from student where age!=3 and age !=11;
select * from student where age not in(3,11);案列3:查询年龄大于10的学生
select * from student where age>10;
3 模糊查询
关键字:like
使用的通配符: _ 匹配任意一个字符 _b
% 匹配任意0~n个字符
案例1:查询名字中包含字母A的学生: SELECT * FROM students WHERE name LIKE '%A%' ;
案列2:查询名字字母B开头的学生: SELECT * FROM students WHERE name LIKE 'B%' ;
案列3:查询名字为Cxxxx的学生: SELECT * FROM students WHERE name LIKE 'C_%' ;
4 字段控制
关键字: DISTINCT(去重), AS(别名) 函数: IFNULL()
案例:
1、查询雇员薪资, 使用DISTINCT去除重复记录
SELECT DISTINCT salary FROM employee;
二、查询雇员薪资和奖金之和
SELECT *, salary+bonus FROM employee;
三、bonus为NULL时, 任何值和NULL相加仍是NULL,须要使用 IFNULL() 函数将NULL转换成数值0
SELECT *, salary+IFNULL(bonus, 0) FROM employee;
四、此时列名出现了 salary+IFNULL(bonus, 0), 很不美观,能够用 AS 关键字取一个别名
SELECT *, salary+IFNULL(bonus, 0) AS total FROM employee;
5 排序和聚合
1、 排序:使用关键字能够给查询结果排序, 有两种排序方式
关键字:ORDER BY
结果:asc 升序(默认) 从小到大
desc 降序 从大到小
案例:查询全部学生, 按年龄降序排列:SELECT * FROM students ORDER BY age DESC;
二、聚合
概述,聚合函数用来作纵向运算,
分类:
计数 — COUNT
最大值 — MAX
最小值 — MIN
求和 — SUM
求平均值 — AVG
案例:
一、查询工资+奖金大于2500的员工人数:
SELECT COUNT(*) FROM employee WHERE salary+IFNULL(bonus, 0) > 2500;
二、查询员工最高工资和最低工资
SELECT MAX(salary), MIN(salary) FROM employee;
3、 查询员工总工资和平均工资
SELECT SUM(salary), AVG(salary) FROM employee;
6 分组查询
概述:使用 GROUP BY 子句作分组查询, 分组查询通常和聚合函数一块儿使用
案例:
1.将查询结果根据年龄分组
Select age from students group by age;
2.或者指定分组条件的位置
Select age from students group by 1;
Select id,age from students group by 2;
3.查询全部年龄大于15 的人的总数
Select age count(*) from students where age>15 group by age;
7HAVING子句
概述:HAVING子句也是用来过滤查询条件的
案例:查询总工资大于9000的全部部门, 部门总工资, 和部门总员工数
SELECT department, SUM(salary), COUNT(*)
FROM employee
GROUP BY department
HAVING SUM(salary)>9000;
注意 having后面能够添加聚合函数或者属性字段 若是添加字段,name字段必须在语句中出现
WHERE和HAVING的区别:
1.WHERE是在分组(GROUP BY)前过滤数据; HAVING是在分组( GROUP BY)后过滤数据
2.WHERE子句不可使用聚合函数; HAVING子句可使用聚合函数
3.WHERE条件查询,针对于本地文件,不能够查询结果集;HAVING条件查询能够查询结果集
8分页查询
概述:使用 LIMIT 关键字能够用来限定查询结果的起始行和总行数
案例1:从第一行开始, 查询5条记录
SELECT * FROM employee LIMIT 0, 5;(参数一:从几行开始;参数二:查询几条数据)
分页查询: 可使用LIMIT实现分页功能, 例如一页10条记录, 则有
SELECT * FROM employee LIMIT 0, 10; -- 第一页数据
SELECT * FROM employee LIMIT 10, 10; -- 第二页数据
SELECT * FROM employee LIMIT 20, 10; -- 第三页数据
案列2:查询前5条记录
SELECT * FROM employee LIMIT 0, 5;(LIMIT n 等价于 LIMIT 0,n)
注意: LIMIT不属于标准的SQL语法, MySQL支持, 其它DBMS不必定支持.
where ,group by , having , order by, limit
union查询:就是把多条sql语句的查询结果合并成结果集;
注意:
1.若是 两张表查询出来的数据,有彻底同样的,那么union会默认的把他合并成一条数据;能够用union all 解决
2.使用union查询的时候,两个sql的列数必须一致,可是列名能够不同,若是列名不同,以第一条sql为准
3.在union字句中不须要用order by排序,可直接在最后进行排序
子查询:将一条sql语句的结果,做为另外一个sql语句的查询条件 或者查询中间表
案列1:查询出最新一行商品(以商品编号最大为最新,用子查询实现)
select * from goods where goods_id =(select max(goods_id) from goods);
案列2:查询出编号为19的商品的栏目名称(用左链接查询和子查询分别)
select cat_name from category where cat_id=(select cat_id from goods where goods_id =19);
案列3:用where型子查询把goods表中的每一个栏目下面最新的商品取出来
select *from goods where goods_id in(select max(goods_id) from goods group by cat_id);
案列4:用from型子查询把goods表中的每一个栏目下面最新的商品取出来(用from型子查询必须取别名)
select *from (select * from goods ORDER BY goods_id DESC) as temp GROUP BY cat_id;