mysql数据库

一、sql规范
1.sql语句不区分大小写
2.以分号结尾
3.单行注释 – 多行注释/* /
二、数据库操作
1.创建数据库 create datebase name1
2.查看数据库有哪些 show datebases
3.创建一个数据库就相当于在磁盘创建了一个文件夹,在磁盘相应位置创建文件夹,等同于创建了一个数据库,创建文件夹位置 mysql安装目录的data文件夹下
4.查看某个数据库的详细信息 show create datebase name1
在这里插入图片描述
CREATE DATABASE ds1 /
!40100 DEFAULT CHARACTER SET utf8 / /!80016 DEFAULT ENCRYPTION=‘N’ /
5.修改某个数据库的详细信息
修改数据库的编码格式 alter datebase name1 character set utf8;
6.主键非空且唯一
7.float(4,2) 表示该浮点类型一共有四位数,有两位小数,例如96.32
8.char(3) 定长,必须3个字节
9.varchar(20) 非定长,最长20个字节,定长比非定长效率高
10.创建表
要求:ID,员工姓名,性别,年龄,部门,薪水
create table employee(
id tinyint primary key auto_increment, 主键,自增
name varchar(20),
gender boolean,
age int,
department varchar(20),
salaray double(7,2)
)
11.查看有哪些表 show tables
12.查看表的详细信息 desc table_nsme
在这里插入图片描述13.给数据库的表增加一个字段
alter table employee add is-married tinyint(1);
alter table employee add entry_date date not null;
alter table employee add A int,
add B varchar(20),
add C double(7,2);
14.删除数据库中表的字段
alter table employee drop A
alter table employee drop A,drop B;
15.修改数据库中表的字段
alter table employee modify age smallint not null default 18 after name;
在这里插入图片描述
16.修改字段名称
alter table employee change column address address1 varchar(30)
alter table employee department depart;
17.修改表的名称
rename table employee to emp;
18.删除表
drop table emp;
三、数据操作
1.插入数据
insert into emp (ID,name,age,gender,department,salary) values (1,“Tom”,18,0,“教育部”,1200) /
insert into emp (ID,name,age,gender,department,salary) values
(1,“Tom”,18,0,“教育部”,1200),
(2,“Bob”,18,0,“教育部”,1200),
(3,“Tomy”,18,0,“教育部”,1400);//多条数据插入
insert into emp (name,deparment,salary) values (“Aily”,“产品部”,3900) ///单条数据插入可以不写全字段,例如自增的ID等,但是如果是不写字段直接插入,那么values中的字段要全部写全,如下所示
insert into emp values (10,“boni”,19,1,“数据部”,2900)
如果表中的ID从1,2,3开始排序,一共有三条数据,然后直接插入ID=7,那么表再继续增加数据的时候,会从8开始
2.修改数据
update emp set salary =salary+2000 where ID=“10” 修改ID为10的人员,薪水+2000
update emp set salary =salary+2000 表中所有人员,薪水+2000
update emp set salary=salary+2000 ,name=“lily” where ID=“10”
3.删除数据
delete from emp;//清空emp中的数据(一条一条的删除),表emp还存在
truncate table emp;//把表emp销毁掉,然后重新创建一个emp的空表
当表中数据过多,高达十几万的时候,truncate比较快
4.创建表以供查询使用,这是一个成绩表
这是一个成绩表在这里插入图片描述
(1)去重查询 select distinct name from ExamResult,查询结果如下
在这里插入图片描述
(2)查询多个字段
select id,name,js from ExamResult
(3)查询js成绩全部加10分后的显示,注意只是显示变了,实际数据没变
select ID,name,js+10 from ExamResult
(4)查询数据并使显示字段变更名称显示
select ID as “学生ID”,name as “学生姓名”,js+10 as “js加10分后的成绩” from ExamResult
在这里插入图片描述
(5)使用where语句进行过滤时,用法如下
运算符 < > >= <= !=
值在10到20之间 where js between 10 and 20
值是10或20 where js in (10,20)
模糊查询 where name like ‘yuan%’
// %表示0到多个字符,_表示一个字符,例如姓李,名字为3个字表示为‘李 _ _’
逻辑运算符 or and
(6)查询为空的数据
select * from ExamResult where js is null;
5.排序
asc 升序,默认排序方式
desc 降序
根据学生总分降序排序
select name,js+django+openstack as 总成绩 from ExamResult order by 总成绩 desc
6.分组 group by
注意,按照分组条件分组后,每一组只会显示第一条记录
原有数据如下
在这里插入图片描述
根据name分组后
select * from ExamResult GROUP BY name;
在这里插入图片描述
注意:如果使用group的过程中报错1055 - Expression #1 of SELECT list is not in GROUP BY……
查看下SQL的模式 SHOW VARIABLES LIKE ‘%sql_mode%’;
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION。 如果存在 ONLY_FULL_GROUP_BY.
那就修改sql_mode的值
set sql_mode = ‘’;
set sql_mode = ‘NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES’;
求每一组的js总和
select id,name,sum(js) from ExamResult GROUP BY name
运行结果如下(name为yuan的人员已经合并求值了)
在这里插入图片描述
求django总和大于150的组的名称和Django总和
select id,name,sum(django) from ExamResult GROUP BY name HAVING sum(django)>150
注意:
having 和 where两者都可以对查询结果进行进一步的过滤,差别有:
<1>where语句只能用在分组之前的筛选,having可以用在分组之后的筛选;
<2>使用where语句的地方都可以用having进行替换,但是由于where性能比having好, 所以能用where的一般不用having
<3>having中可以用聚合函数,例如sum,average等等,where中就不行。
7.聚合函数
(1)统计行的个数 count
统计一个班级共有多少学生?
select count(
) from ExamResult;
统计JS成绩大于70的学生有多少个?
select count(JS) from ExamResult where JS>70;
注意:count(*)统计所有行; count(字段)不统计null值
(2)统计满足条件的行的内容和 sum
统计一个班js的总成绩
select sum(js) as js总成绩 from ExamResult
(3)统计平均分
请一个班js的平均分
select avg(js) as js总成绩 from ExamResult
更高级使用方法:
select avg(ifnull(js,0)) as js总成绩 from ExamResult
ifnull(js,0)的使用方式,ifnull是一个函数,如果js中有null值得,把null当做0来处理
(4)求最高分和最低分 max ,min
求班级的最高分和最低分
select max(ifnull(js,0)+ifnull(django,0)+ifnull(database,0)) as 最高分 from ExamResult
select min(ifnull(js,0)+ifnull(django,0)+ifnull(database,0)) as 最低分 from ExamResult
8.数据条数查询 limit
两种用方法:limit 1 和 limit 1,2
select * from ExamResult LIMIT 1 只取表中的第一条数据显示
select * from ExamResult LIMIT 1,4 从第二条数据开始取值,一共取四条
在这里插入图片描述
9.查询操作的语法排序
SELECT *|field1,filed2 … FROM tab_name
WHERE 条件
GROUP BY field
HAVING 筛选
ORDER BY field
LIMIT 限制条数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

果果的小尾巴呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值