目录

一、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 条件          

mysql 新增引用 mysql新增数据语句_mysql 新增引用

 

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 主表.主键=子表.子键

mysql 新增引用 mysql新增数据语句_数据库_02

        

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

mysql 新增引用 mysql新增数据语句_数据库_03

mysql 新增引用 mysql新增数据语句_mysql 新增引用_04

 

        (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='张国荣')