一.mysql基本结构
-简介 最流行的关系型数据库管理软件(开源的,免费的),web应用 -数据结构
1.库+表的形式
2.所有的操作都是围绕表中的数据
3.表中的数据都是有严格规则和关系的,所以关系型数据库
二.mysql库级和表级的操作
控制台,虚拟环境 -命令行; 进入数据库 mysql -u用户名 -p密码 (不能随便输 root qwe123)
-库级命令:
1.显示所有的库:show databases;
2.创建库:create database db_name; create database if not exists db_name; 如果存在会报错
3.删除库:drop datebase db_name; drop database if exists db_name;
4.进入数据库:use db_name; ****** 数据库名有大小写之分
-表级命令:
1.显示所有的表:show tables;
2.创建表: create table student (id int, name varchar(128), age int, male enum('男','女'));
3.显示创建信息:show create table tb_name;
4.删除表:drop table if exists tb_name;
-mysql表中数据的操作(重点) CRUD操作(增删改查操作)
1.插入数据:
1. 1指定字段插入 insert into student (name, age) values ('wuhongcheng', 18);
1.2全字段插入 insert into student values (2,'hengxu', 19, 'male' );
1.3多行插入
insert into student values (2, 'liukui', 16, 'male'),(3, 'zhuoda', 20, 'male'),(4, 'houyingying',16, 'female'),(5, 'liuying', 16, 'female');
2.删除数据:
2.1 删除所有数据 delete from student; (切记,不要用)
2.2删除指定数据 delete from student where conditions; delete from student where male is null; ****** 一定要加上where 不然就全删了
3修改数据:
3.1修改一个字段的所有数据 update student set male='female';
3.2修改多个字段的数据 update student set id=1,age=22 where name='hexu';
3.3修改满足条件的数据 update student set age=18 where id=2; ****** 一定要加上where 不然就全改了
4.查询数据
4.1全字段查询 select * from tb_name;
4.2指定字段查询 select name, age from student;
4.3带条件查询
查询所有年龄大于17的数据 select * from student where age>17;
查询所有女性的数据 select * from student where male='female';
-字段类型(了解) 表中每列数据必须指定类型 大致分为3类:
1.数值型
2.日期时间型
3.字符串类型
三.Mysql高级查询
1.筛选条件
1.1比较运算符
1.1.1等于:=(注意,不是==) select * from student where sex = 'male';
1.1.2不等于:!= 或则 <> select * from student where age != 18;
1.1.3大于:>
1.1.4小于:<
1.1.5大于等于:>= select * from student where age >= 18;
1.1.6小于等于:<=
1.1.7空:is null select * from student where sex is null;
1.1.8不为空:is not null select * from student where sex is not nULL;
1.2逻辑运算符
1.2.1 and 与 男性里面年龄大于18的数据 select * from student where sex='male' and age>18;
1.2.2 or 或 报名python_all 或者 python_web的学员 select * from enroll where course='python_all' or course='python_web';
1.2.3 其他操作
排序:order by 字段名 按照年龄排序 正序:select * from student order by age asc; # asc可以省略 默认 倒序:select * from student order by age desc;
限制:limit
只要三条: select * from student order by id limit 3; 从第二条开始: select * from student order by id limit 1, 3;
去重:distinct 查出表中所有的不同名字 select distinct student from enroll;
模糊查询:like
-任意多个字符:% 查询名字中包含'l':
select * from enroll where student like '%l%';
查询名字中一'l'开头的:
select * from enroll where student like 'l%';
-任意一个字符: _ 查询名字是四个字符的: select * from enroll where student like '____'; **like如果不和 % 或 _ 就和= 一样的效果
范围查询
1.连续范围:between a and b 包含a和b 查询年龄介于17到20之间的学生: select * from student where age between 17 and 20;
*** 一般用数值,日期时间,字符串理论是可以的,但是一般不用
2.间隔范围:in in (10, 20, ....) 查询 报名python_all 或者 python_web的学员
select * from enroll where course in ('python_web', 'python_all', 'abc');
2.聚合与分组(重点,难点)
2.1聚合(统计):
2.1.1统计个数:count(字段)
年龄大于18的有几个人:
select count(id) from student where age>18; ***如果字段里有null 不会计算
2.1.2求和:sum(字段)
报名python课程的支付总金额:
select sum(pay) from enroll where course like '%python%';
2.1.3平均值:avg(字段)
学生年龄平均值:
select avg(age) from student;
2.1.4最大值:max(字段)
学生年龄的最大值:
select max(age) from student;
2.1.5最小值:min(字段)
学生年龄的最小值:
select min(age) from student;
2.2分组:
2.2.1group py 按照课程分组查询 报名的总金额:
select course, sum(pay) from enroll group by course;
按照学生分组查询报名的总金额:
*** 别名:select student, sum(pay) as total_pay from enroll group by student;
-having 子句 (因为:where关键字无法和统计函数用在一起)
--按照学生分组,查询总金额大于5000的数据
select student, sum(pay) as total_pay from enroll group by student having sum(pay) > 5000;
-按照学生分组,查询总金额大于2000,报名python课程的数据
select student, sum(pay) as total_pay from enroll where course like '%python%' group by student having sum(pay) > 2000;
*** where 条件 要写到 group by 前面 -执行顺序。 一个查询语句同时包含了 别名,聚合函数,where 和 having 执行顺序:
1.最先执行 where ;2.然后执行聚合函数和别名 ;3.最后再执行having。
3.子查询(了解)
查询年龄小于平均年龄的学生数据 3.1先查出平均年龄 select avg(age) from student;
3.2在根据平均年龄查询 select * from student where age < 平均值; 子查询:select * from student where age < (select avg(age) from student); 要求: 1.嵌套在查询语句内 2.必须用括号包裹