目录
一、DML语句的基本基本用法
1、添加语句INSERT
2、修改语句UPDATE
3、删除语句DELETE
二、DQL语句的使用
1、查询所有
2、查询部分列
3、别名查询(就是查询出来的列名由自己定义)
4、条件查询
5、模糊查询
6、排序查询
7、去重查询
8、聚合查询(也成为统计查询)
9、分组查询
10、分页查询
11、链接查询
12、子查询
内容介绍:
本章接上一篇文章
本章主要讲解MySQL 增、删、改、查语句的介绍和相关案例,对数据库基础知识和相 关概念不太了解的小伙伴可以看我的上一篇文章,希望大家可以一起学习进步,坚持下去,努力提升自己,早日在自己的领域创造属于自己的傲人成绩!!!
一、DML语句的基本基本用法
DML(Data Manipulation Langue) :数据库操作语言,主要用于对表中的数据进行添加,修改和删除操作,代表的关键字为insert ,update ,delete
1、添加语句INSERT
insert into 表名(列1,列2...)values(值1,值2,...)
INSERT INTO employee_info(id,name,sex,age,eDate,eMessage) VALUES (0,'玉皇大帝','男',4000,'1980-02-15','天庭的老大')
insert into 表名 values(值1,值2,...)
INSERT INTO employee_info VALUES (0,'玉皇大帝','男',4000,'1980-02-15','天庭的老大')
insert into 表名 values(值1,值2,...),(值1,值2,...),(值1,值2,...),...
INSERT INTO employee_info VALUES (0,'玉皇大帝','男',4000,'1980-02-15','天庭的老大'),(0,'王母娘娘','女',4000,'1980-02-15','天庭的老大的老婆'),(0,'玉兔','女',400,'1999-02-15','美丽的仙女')
使用now()函数获取当前系统日期
INSERT INTO employee_info VALUES (0,'太白星君','男',2000,NOW(),'天庭的小仙')
2、修改语句UPDATE
update 表名 set 列1=值1,列2=值2,...where 条件
注意!!!:一般情况下,update语句都需要添加where条件,否则可能造成数据的丢失 (如果不加where条件,那么该语句会把整个表的所有列名相同的数据都修改)
UPDATE employee_info SET NAME='神马',eMessage='神马玩意' -- 不加where,整个列的所有数据被修改
UPDATE employee_info SET NAME='神马',eMessage='神马玩意' WHERE id=1001 -- 加where,只修改id=1001对应的数据
3、删除语句DELETE
基本语法:delete from 表明 where 条件
DELETE FROM employee_info WHERE id=1001 -- 删除一行数据
DELETE FROM employee_info WHERE age>100 AND age <500 -- 删除符合条件的多条数据
DELETE FROM employee_info WHERE id=1001 OR id=1002 OR id=1003 -- 删除三条数据
DELETE FROM employee_info -- 适合少量数据的清空操作(delete删除每条数据都需要写日志)
TRUNCATE TABLE employee_indo -- 适合海量数据的清空操作(不是每条都写日志)
二、DQL语句的使用
DQL(Data Query Language) :是数据库查询语言的简称,主要用于实现表中数据的查询 关键字:select
1、查询所有
select * from 表名
SELECT * FROM employee_info
2、查询部分列
select 列1,列2,...from 表名
SELECT name,sex,age FROM employee_info
3、别名查询(就是查询出来的列名由自己定义)
基本语法:select 列名 as 别名 ,....from 表名
SELECT age AS 年龄 FROM employee_info
4、条件查询
基本语法:select * from 表 where 条件
SELECT * FROM employee_info WHERE sex='男';
SELECT * FROM employee_info WHERE eDate>'2023-1-1';
SELECT * FROM employee_info WHERE NAME<>'孙悟空';
SELECT * FROM employee_info WHERE NAME<>'孙悟空' AND sex!='男';
SELECT * FROM employee_info WHERE NAME IN('孙悟空','猪八戒','沙和尚');
SELECT * FROM employee_info WHERE id IN(1001,1002,1005);
5、模糊查询
通过 like 关键字和通配符配合实现模糊查询:
% 表示任意个字符(0个或多个)
_ 表示任意一个字符(1个)
SELECT * FROM employee_info WHERE name LIKE '孙%'
SELECT * FROM employee_info WHERE name LIKE '孙_'
SELECT * FROM employee_info WHERE name LIKE '孙__'
SELECT * FROM employee_info WHERE name LIKE '%孙%'
SELECT * FROM employee_info WHERE name LIKE '%_%' -- 名字至少一个字
SELECT * FROM employee_info WHERE name LIKE '_%_%' -- 名字至少两个字
SELECT * FROM employee_info WHERE name LIKE '孙' -- 等价于 stu_name='李'
6、排序查询
select * from 表 order by 列 asc或desc
SELECT *FROM employee_info ORDER BY age; -- 默认升序
SELECT *FROM employee_info ORDER BY age ASC; -- 升序
SELECT *FROM employee_info ORDER BY age DESC;-- 降序
-- 优先根据年龄的升序排序,如果年龄相同再根据入职日期的降序排序
SELECT *FROM employee_info ORDER BY age,eDate DESC;
7、去重查询
基本语法:select distinct 列 from 表
SELECT DISTINCT age FROM employee_info
8、聚合查询(也成为统计查询)
总行数 count、最值max和min、均值avg、和sum
基本语句:select 关键字(列名) from 表名
-- 求总行数(总记录数):不统计值为null的列
SELECT COUNT(*) FROM employee_info;
SELECT COUNT(id) FROM employee_info;
SELECT COUNT(age) FROM employee_info;
-- 去重统计
SELECT COUNT(DISTINCT stu_major) FROM employee_info
-- 求最大值
SELECT MAX(age) FROM employee_info;
-- 求最小值
SELECT MIN(age) AS '最小年龄' FROM employee_info;
-- 求均值
SELECT AVG(age) FROM employee_info;
-- 求和
SELECT SUM(age) FROM employee_info;
9、分组查询
一般需要结合聚合查询一起使用
基本语法:select 分组列,聚合函数 from 表 group by 分组列 having 过滤条件
-- 根据性别分组
SELECT sex,COUNT(id) FROM employee_info GROUP BY sex
SELECT sex,MAX(age) AS '最大年龄' FROM employee_info GROUP BY sex
-- 根据性别进行分组统计
SELECT sex,COUNT(*) AS '人数' FROM employee_info GROUP BY sex
SELECT sex,COUNT(*) AS '人数' FROM employee_info GROUP BY sex HAVING COUNT(*)>5
-- 分组结合where,group by,order by的顺序
SELECT sex,COUNT(id) FROM employee_info WHERE age>20 GROUP BY sex ORDER BY id
10、分页查询
MySQL主要通过limit关键字来限制查询的记录数,limit用法如下:
select * from 表 limit N
select * from 表 limit N,M (N从0开始的)
SELECT * FROM employee_info LIMIT 5;
SELECT * FROM employee_info LIMIT 2,4;
select * from 表 limit size*(page-1),size(其中page表示当前页数
size表示每页的记录数)
-- page表示页,size表示每页的行数
SELECT * FROM employee_info LIMIT size*(page-1),size
-- page=1,size=5
SELECT * FROM employee_info LIMIT 0,5
-- page=2,size=5
SELECT * FROM employee_info LIMIT 5,5
-- page=3,size=5
SELECT * FROM employee_info LIMIT 10,5
-- page=4,size=5
SELECT * FROM employee_info LIMIT 15,5
11、链接查询
主要应用在"主外键关系"的表上,根据功能分为内连接和外连接:
内连接:查询两个表的公共部分
基本语法:select * from 主表 inner join 子表 on 主表.主键=子表.子键
SELECT * FROM emp AS e INNER JOIN dept d ON e.dept_no=e.dept_no
SELECT emp_on,emp_name,salary,dept_name FROM emp e INNER JOIN dept d ON e.dept_no=d.dept_no;
外连接:查询两个表的公共数据+主表有子表没有的数据,如果子表中没有匹配,则结果NULL
(1):右外链接:select * from 子表 right join 主表 on 主表.主键=子表.外键
(2):左外链接:select * from 主表 left join 子表 on 主表.主键=子表.外键
-- 左外连接
SELECT * FROM dept d LEFT JOIN emp e ON d.dept_no=e.dept_no
-- 右外连接
SELECT * FROM emp e RIGHT JOIN dept d ON d.dept_no=e.dept_no
-- 需求:统计每个部门的人数
SELECT d.dept_name AS '部门',COUNT(e.dept_no) AS '人数' FROM emp e RIGHT JOIN dept d ON e.dept_no=d.dept_no GROUP BY d.dept_name
SELECT d.dept_name AS '部门',COUNT(e.dept_no) AS '人数' FROM dept d LEFT JOIN emp e ON e.dept_no=d.dept_no GROUP BY d.dept_name
12、子查询
一个查询中嵌套另一个查询,外面的称为"父查询",里面的称为"子查询"
-- 子查询:查询和汤姆一个部门的同学
SELECT * FROM emp WHERE dept_no=(SELECT dept_no FROM emp WHERE emp_name='汤姆')
-- 实现连接查询效果
SELECT emp_no,emp_name,salary,(SELECT dept_name FROM dept d WHERE d.dept_no=e.dept_no) AS 'dept_name' FROM emp e;
-- IN子查询
SELECT * FROM emp WHERE dept_no IN(SELECT dept_no FROM emp WHERE emp_name='张国荣')