MySQL数据库的详解(1)

1、DDL(数据库操作)

查询

  • 查询所有数据库:show databases;
  • 当前数据库:select database();

创建

  • 创建数据库:create database [ if not exists] 数据库名 ;

使用

  • 使用数据库:use 数据库名 ;

删除

  • 删除数据库:drop database [ if exists ] 数据库名 ;

2、DDL(表操作)

ddl

MySQL数据类型

MySQL数据类型文件下载查看

查询

  • 查询当前数据库所有表:show tables;
  • 查询表结构:desc 表名;
  • 查询建表语句:show create table 表名;

修改

  • 添加字段:alter table 表名 add 字段名 类型(长度) [comment 注释] [约束];
  • 修改字段类型:alter table 表名 modify 字段名 新数据类型(长度);
  • 修改字段名和字段类型:alter table 表名 change 旧字段名 新字段名 类型 (长度) [comment 注释] [约束];
  • 删除字段:alter table 表名 drop column 字段名;
  • 修改表名: rename table 表名 to 新表名;

删除

  • 删除表:drop table [ if exists ] 表名;
    (注:在删除表时,先把建表语句给备份一下,不然表中的全部数据也会被删除。)

3、DML(INSERT:插入)(重点)

insert语法

  • 指定字段添加数据:insert into 表名 (字段名1, 字段名2) values (值1, 值2);
  • 全部字段添加数据:insert into 表名 values (值1, 值2, …);
  • 批量添加数据(指定字段):insert into 表名 (字段名1, 字段名2) values (值1, 值2), (值1, 值2);
  • 批量添加数据(全部字段):insert into 表名 values (值1, 值2, …), (值1, 值2, …);

注意事项

  • 插入数据时,指定的字段顺序需要与值的顺序是一一对应的。
  • 字符串和日期型数据应该包含在引号中。
  • 插入的数据大小,应该在字段的规定范围内。

4、DML(UPDATE:修改)(重点)

update语法

  • 修改数据:update 表名 set 字段名1 = 值1 , 字段名2 = 值2 , …. [ where 条件 ] ;

注意事项

  • 修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。

5、DML(DELETE:删除)(重要)

delete语法

  • 删除数据:delete from 表名 [ where 条件 ];

注意事项

  • DELETE 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。
  • DELETE 语句不能删除某一个字段的值(如果要操作,可以使用UPDATE,将该字段的值置为NULL)。

6、数据库操作-DQL

DQL英文全称是Data Query Language(数据查询语言),用来查询数据库表中的记录。

基本查询

语法

  • 查询多个字段:select 字段1, 字段2, 字段3 from 表名;
  • 查询所有字段(通配符):*select from** 表名;(不常用)
  • 设置别名:select 字段1 [ as 别名1 ] , 字段2 [ as 别名2 ] from 表名; (as可省略)
  • 去除重复记录:select distinct 字段列表 from 表名;
  • (注意事项:* 号代表查询所有字段,在实际开发中尽量少用(不直观、影响效率)。)
--  =================== 基本查询 ======================
-- 1. 查询指定字段 name,entrydate 并返回
select name,entrydate from emp ;

-- 2. 查询返回所有字段
-- 方式一:  推荐 , 效率高 . 更直观
select id, username, password, name, gender, image, job, entrydate, create_time, update_time from emp;

-- 方式二:
select * from emp;

-- 3. 查询所有员工的 name,entrydate, 并起别名(姓名、入职日期)  --- as 关键字可以省略
select name as '姓名' ,entrydate as '入职日期' from emp ;

select name '姓名' ,entrydate '入职日期' from emp ;

-- 4. 查询员工有哪几种职位(不要重复) -- distinct
select distinct job from emp;

条件查询(where)

语法

条件查询:select 字段列表 from 表名 where 条件列表 ;

dql1

dql2

--  =================== 条件查询 ======================
-- 1. 查询 姓名 为 杨逍 的员工
select * from emp where name = '杨逍';

-- 2. 查询在 id小于等于5 的员工信息
select * from emp where id <= 5;

-- 3. 查询 没有分配职位 的员工信息  -- 判断 null , 用 is null
select * from emp where job is null;

-- 4. 查询 有职位 的员工信息  -- 判断 不是null , 用 is not null
select * from emp where job is not null ;

-- 5. 查询 密码不等于 '123456' 的员工信息
select * from emp where password <> '123456';
select * from emp where password != '123456';

-- 6. 查询入职日期 在 '2000-01-01' (包含) 到 '2010-01-01'(包含) 之间的员工信息
select * from emp where entrydate between '2000-01-01' and '2010-01-01' ;

-- 7. 查询 入职时间 在 '2000-01-01' (包含) 到 '2010-01-01'(包含) 之间 且 性别为女 的员工信息
select * from emp where (entrydate between '2000-01-01' and '2010-01-01') and  gender = 2;

-- 8. 查询 职位是 2 (讲师), 3 (学工主管), 4 (教研主管) 的员工信息
select * from emp where job = 2 or job = 3 or job = 4;

select * from emp where job in (2,3,4);

-- 9. 查询姓名为两个字的员工信息
select * from emp where name like '__';

-- 10. 查询姓 '张' 的员工信息  ---------> 张%
select * from emp where name like '张%';

-- 11. 查询姓名中包含 '三' 的员工信息
select * from emp where name like '%三%';

分组查询(group by)

聚合函数

  • 介绍:将一列数据作为一个整体,进行纵向计算。
  • 语法:select 聚合函数(字段列表) from 表名 ;

dql3

  • 注意事项
    1. null值不参与所有聚合函数运算。
    2. 统计数量可以使用:count(*) count(字段) count(常量),推荐使用count(*)。
-- 聚合函数

-- 1. 统计该企业员工数量 -- count
-- A. count(字段)
select count(id) from emp;
select count(job) from emp; -- null值不参与聚合函数运算

-- B. count(*)
select count(*) from emp;

-- C. count(值)
select count(1) from emp;

-- 2. 统计该企业员工 ID 的平均值
select avg(id) from emp;

-- 3. 统计该企业最早入职的员工的入职日期
select min(entrydate) from emp;

-- 4. 统计该企业最近入职的员工的入职日期
select max(entrydate) from emp;

-- 5. 统计该企业员工的 ID 之和
select sum(id) from emp;

语法

  • 分组查询:select 字段列表 from 表名 [ where 条件 ] group by 分组字段名 [ having 分组后过滤条件 ];
  • where与having区别(面试问题
    1. 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
    2. 判断条件不同:where不能对聚合函数进行判断,而having可以。

注意事项

1. 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
2. 执行顺序: where > 聚合函数 > having 。(where 之后不能使用聚合函数)

-- 分组查询
-- 1. 根据性别分组 , 统计男性和女性员工的数量  -- count
select gender , count(*) from emp group by gender;

-- 2. 先查询入职时间在 '2015-01-01' (包含) 以前的员工 , 并对结果根据职位分组 , 获取员工数量大于等于2的职位 -- count
select job ,count(*)  from emp where entrydate <= '2015-01-01'  group by job having count(*) >= 2;

排序查询(order by)

语法

  • 条件查询:select 字段列表 from 表名 [ where 条件列表 ] [ group by 分组字段 ] order by 字段1 排序方式1 , 字段2 排序方式2

排序方式

  1. ASC:升序(默认值
  2. DESC:降序

注意事项

1. 如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。

--  =================== 排序查询 ======================
-- 1. 根据入职时间, 对员工进行升序排序  -- 排序条件
select * from emp order by entrydate asc ; -- 默认升序, asc可以省略的

select * from emp order by entrydate ;

-- 2. 根据入职时间, 对员工进行降序排序
select * from emp order by entrydate desc;

-- 3. 根据 入职时间 对公司的员工进行 升序排序 , 入职时间相同 , 再按照 ID 进行降序排序
select * from emp order by entrydate asc , id desc ;

分页查询(limit)

语法

分页查询:select 字段列表 from 表名 limit 起始索引, 查询记录数 ;

注意事项

  1. 起始索引从0开始,起始索引 = (查询页码 – 1)* 每页显示记录数。
  2. 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
  3. 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10。
--  =================== 分页查询 ======================
-- 1. 查询第1页员工数据, 每页展示10条记录
select * from emp limit 0,10;

select * from emp limit 10;

-- 2. 查询第2页员工数据, 每页展示10条记录
select * from emp limit 10,10;

-- 公式 : 页码 ---> 起始索引  ------->  起始索引 = (页码 - 1) * 每页记录数

7、案例

根据需求完成员工管理的条件分页查询

-- 根据输入条件查询第1页数据(每页展示10条记录)
-- 输入条件:
   -- 姓名:张 (模糊查询)
   -- 性别:男
   -- 入职时间:2000-01-01 ~ 2015-12-31
-- 分页: 0 , 10
-- 排序: 修改时间  DESC
select id, username, password, name, gender, image, job, entrydate, create_time, update_time
from tb_emp
where name like '张%' and gender = 1 and entrydate between '2000-01-01' and '2015-12-31'
order by update_time desc
limit 0 , 10;

根据需求完成员工信息的统计
员工性别统计:

-- if(条件表达式, true取值 , false取值)
select if(gender=1,'男性员工','女性员工') AS 性别, count(*) AS 人数
from tb_emp
group by gender;

员工职位统计:

-- case 表达式 when 值1 then 结果1  when 值2  then  结果2 ...  else  result  end
select (case job
             when 1 then '班主任'
             when 2 then '讲师'
             when 3 then '学工主管'
             when 4 then '教研主管'
             else '未分配职位'
        end) AS 职位 ,
       count(*) AS 人数
from tb_emp
group by job;
来自上海
博客文章均为Ferryman.原创,转载请注明文章地址及作者
如有需要,可通过RSS订阅文章
有任何问题,可以在评论区留言哦~
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇