Day02 学习MySQL的数据操作语言(DML)和数据查询语言(DQL)

一.先复习之前学的DDL的

数据库操作(创建,查询,删除,使用数据库),表操作(创建,查询,修改,删除表)。

数据库操作:

create database[if not exist] +数据库名;          //创建,中括号内可省略;

show databases;       //查询所有数据库

select database();     //查询当前数据库

drop  database[if not exist] +数据库名;          //删除,中括号内可省略;

表操作:

create table +表名(   //创建表

字段名 字段类型 comment  '注释',

.....

.....)

comment '用户表';

show tables;        //查询当前数据库的所有表

desc +表名;        //查询表的结构

show create table+表明:   //查询建表sql语句

alter table+表名 add +字段名  类型(长度) [comment];   //在表中添加字段

alter table+表名 change 旧字段名 新字段名 类型(长度) [comment];//修改字段名

alter table+表名 modify 字段名 新数据类型;       //修改字段类型

alter  table+表名 rename to+新表名;                 //修改表名

alter  table+表名 drop+字段名;                  //删除字段名

drop table [if exist]+表名;//删除表

truncate table +表名;//删除指定表并重新创建该表

二.DML(数据操作语言):

对数据库表的数据记录进行增删改操作

我建立一张表格叫做emp,以下都是对此表格进行操作:

1.添加

insert  into 表名 (字段名1,字段名2,....)values(值1,值2....)  //字段名和值一一对应

insert  into 表名 values(值1,值2....)     //给全部字段名添加数据

insert  into 表名 (字段名1,字段名2,....)values(值1,值2....) (值1,值2....) (值1,值2....) ..;              //批量添加数据

insert  into 表名 values(值1,值2....) (值1,值2....) (值1,值2....) .. ;     //批量添加数据

2.修改

update 表名 set 字段名1=值1,字段名2=值2,...[where 条件];  //where条件可有可无,若无,会修改整张表的所有数据

3.删除

delete from 表名 [where 条件];    //where条件可有可无,若无,会删除整张表的所有数据,delete语句不能删除某个字段的值(可使用update)

DML实操datagrip代码(添加,修改,删除):

#truncate  table emp;
#添加
insert into emp(id,name,workno,gender,age,idcard,entrydate) values(1,'周公','1','男',18,'12345678','2005-1-1');   #给指定字段添加数据
select * from emp;  #展示表
insert into emp values(2,'张无忌','2','男',88,1738462,'2009-1-1');  #给全部字段添加数据
select * from emp;  #展示表
select distinct  name from emp;
select * from emp;  #展示表
insert into emp(id,name,workno,gender,age,idcard,entrydate) values(3,'赵敏','3','女',23,'1839272x','2009-1-1'),(4,'赵小','4','女',22,'1839272x','2099-1-1');#批量添加数据
select * from emp;  #展示表
insert into emp values(5,'敏儿','5','女',29,'1839272x','2001-1-1'),(6,'周芷若','6','女',44,'1839272x','2022-1-1');#批量添加数据
select * from emp;  #展示表
#修改
update emp set name='钓鱼' where id=1;  #修改id=1的name为'钓鱼'
select * from emp;  #展示表
update emp set name='钓鱼',gender='女' where id=1;   #修改id=1的name和gender
select * from emp;  #展示表
update emp set entrydate='2010-1-1';  #修改所有员工的入职时间
select * from emp;  #展示表
#删除
delete from emp where gender='女';     #删除gender='女'的数据
select * from emp;  #展示表
delete from emp; #删除所有员工数据
select * from emp;  #展示表

三.DQL(数据查询语言):

1.基本查询

--查询多个字段

select 字段1,字段2,....from  表名;

select *from +表名;

--设置别名

select 字段1[as 别名1],字段2[as 别名2]...from 表名; //中括号内可省略

--去除重复记录

select distinct 字段列表 from 表名:

代码:

#查询指定字段
select  name from emp;
select name,id,workno from emp;
select* from emp;
#设置别名
select  workaddress as '工作地址' from emp;#将workaddress改名为'工作地址'
#查询员工工作地址不要重复
select  distinct   workaddress '工作地址' from emp;

2.条件查询

语法:

select 字段列表 from 表名 where 条件列表;

条件包括:比较运算符和逻辑运算符两大方面

代码:


#查询年龄<=77
select  * from emp where age<=77;
#查询没有身份证号的员工
select *from emp where idcard is null ;
#查询有身份证号的员工
select *from emp where idcard is not null ;
#查询年龄不等于88的员工
select  * from emp where age!=88;
#查询年龄在15-20(含)之间的员工
select  * from emp where age<=20&&age>=15;
    #另两种做法
    select  * from emp where age<=20 and age>=15;
    select  * from emp where age between 15 and 20;
#查询性别为女,年龄小于25岁的员工
select  * from emp where age<=25&&gender='女';
#查询年龄为18或20或23的员工
select  * from emp where age=18 or age=20 or age=23;
   #另一种做法
   select  * from emp where age in(18,20,23);
#查询姓名只有两个字的员工
select  * from emp where name like '__';
#查询身份证号最后一位是x的员工
select  * from emp where idcard like '%x'; #%是什么意思忘记了,只记得语法

3.聚合函数:一行数据作为一个整体,纵向计算

count,sum(对用户某字段名求和),max,min,avg(求平均)


select count(*) from emp;#利用count计算有多少员工
select count(idcard) from emp;#利用count计算有多少张idcard

select  avg(age) from emp;#求所有员工年龄均值

select sum(age)  age from emp;#求所有员工年龄总和,这里我起了一个别名叫age

select  max(age) from emp;
select  min(age) from emp;

4.分组查询

语法:select 字段列表 from 表名 [where条件] group by 分组字段名 [having 分组后过滤条件];

where和having的区别:

--执行顺序不同:where先进行过滤,不满足where条件的更不用参与后面的分组,group by后利用having再次过滤 

--判断条件不同:where 不能对聚合函数进行判断,而having可以(这里还不太懂)


#分组查询
select  '性别' ,count(*) '数量'  from emp group by gender;#根据性别分组,并统计男女员工数量#这里我犯了一个错误的

select gender '性别' ,count(*) '数量'  from emp group by gender;#根据性别分组,并统计男女员工数量
select gender,avg(age)  from emp  group by gender;#根据性别分组,统计男女员工的平均年龄
#下面这一句注意执行顺序:from->where->group by->select,聚合函数->having
select workaddress ,count(*) count from emp where age<45 group by workaddress  having count>=2; #查询年龄小于45,并根据工作地址分组,获取员工数量大于等于2 的工作地址

5.排序查询

语法:select 字段列表 from 表名 order by 字段1 排序方式1,字段2,排序方式2;

默认排序为升序asc,

#排序查询
select  *from emp order by age asc;  #根据年龄对公司员工升序
select  *from emp order by age desc; #根据年龄对公司员工倒序
select *from emp order by age,entrydate desc;  #根据年龄对公司员工升序,若age相同,则根据entrydate进行倒序

6.分页查询

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

注意:起始索引从0开始,起始索引=(查询页码-1)*每页显示记录数;//这个是索引公式

不同数据库分页查询不同,datagrip用的是limit;

若查询的是第一页数据,起始索引可省略,直接简写为limit 10 ; //展示10条数据

#分页查询,为了方便查询,我向原表格插入多几条数据
select *from emp limit 0,10;   #查询第一页员工数据,展示10条
  #另一种写法
  select *from emp limit 10;
select *from emp limit  10,10;  #查询第二页员工数据每页展示10条,10,10是根据索引公式计算出的

总结DQL练习

 

刚学习DQL需要注意语句的执行顺序,很重要!不然容易搞懵哦

先-------->后:

from->where->group by->select->having->order by->limit

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值