MySQL的基本使用
- 数据库就是一种特殊的文件,其中存储着需要的数据
一、命令行脚本
1.1.命令行连接
mysql -uroot -p 回车后输入密码
1.2.退出登录
quit 和 exit 或 ctrl+d
1.3.数据库操作
- 查询所有数据库
show databases;
- 使用数据库
use 数据库名字
- 查看当前使用的数据库
select database();
- 创建数据库
create database 数据库名 charset=utf8;
- 删除数据库
drop database 数据库名;
1.4.数据表操作
- 查询数据库中所有表
show tables;
- 查看表结构
desc 表名;
- 修改表–添加字段
alter table 表名 add 列名 类型;
- 修改表–修改字段:重命名版
alter table 表名 change 原名 新名 类型及约束;
- 修改表–修改字段:不重命名版
alter table 表名 modify 列名 类型及约束
- 修改表–删除字段
alter table 表名 drop 列名
- 删除表
drop table 表名;
- 查询表的创建语句
show create table 表名;
二、MySQL-查询
2.1.向表中插入数据
insert into 表名 values()
- 查询所有字段
select * from 表名;
- 查询指定字段
select name from students;
- 使用as起别名
select id as 序号,name as 名字 from students;
- 消除重复行
select distinct age from students;
2.2.条件
使用where子句对表中的数据筛选,结果为true的行会出现在结果集中
- 语法
select * from students where id=1;
- where后面支持多种运算符,进行条件的处理
比较运算符
逻辑运算符
模糊查询
范围查询
空判断
比较运算符
- 等于: =
- 大于: >
- 大于等于: >=
- 小于: <
- 小于等于: <=
- 不等于: != 或 <>
例:
select * from students where id > 3;
逻辑运算符
- and,or,not
例:
select * from students where id > 3 and gender=0;
select * from students where id < 4 or is_delete=0;
模糊查询
- like
- % 表示任意多个字符
- _表示一个任意字符
例:查询姓黄的学生
select * from students where name like "黄%";
select * from students where name like "黄_";
范围查询
- in 表示在一个非连续的范围内
例:查询编号是1或3或8的学生
select * from students where id in(1,3,8);
- between …and …表示在一个连续的范围内
例:查询编号为3至8的学生
select * from studnets where id between 3 and 8;
空判断
- is null
例:查询没有填写身高的学生
select * from students where height is null;
- 判断非空 is not null
例:差询填写了身高的学生
select * from students where height is not null;
优先级
- 优先级由高到低的顺序为:小括号,not,比较运算符,逻辑运算符
- and比or先运算,如果同时出现并希望先算or,需要结合()适应
2.3.排序
为了方便查看数据,可以对数据进行排序
语法:
select * from 表名 order by 列1 asc|desc [,列2 asc|desc,...]
说明:
- 将行数据按照列1进行排序,如果某些行列1的值相同,则按照列2排序,以此类推
- 默认按照列值从小到大排序(asc)
- asc从小到大排列,即升序
- desc从大到小排序,即降序
例:查询未删除男生信息,按学号降序
select * from students where gender=1 and is_delete=0 order by id desc;
2.4.聚合函数
- 总数:count(*)表示计算总数,括号中写星与列名,结果是相同的
例:查询学生总数
select count(*) from students;
- 最大值:max(列)表示求此列的最大值
例:查询女生的编号最大值
select max(id) from students where gender=2;
- 最小值:min(列)表示求此列的最大值
例:查询未删除的学生最小编号
select min(id) from students where is_delete=0;
- 求和:sum(列)表示求此列的和
例:查询男生总年龄
select sum(age) from students where gender=1;
--平均年龄
select sum(age)/count(*) from students where gender=1;
- 平均值:avg(列)表示求此列的平均值
例:查询未删除女生的编号平均值
select avg(id) from students where is_delete=0 and gender=2;
2.5.分组
group by
- 1.group by的含义:将查询结果按照1个或多个字段进行分组,字段值相同的为一组
- 2.group by可用于单个字段分组,也可用于多个字段分组
select gender from students group by gender;
group by + group_concat()
- 1.group_concat(字段名)可以作为一个输出字段来使用
- 2.表示分组之后,根据分组结果,使用group_concat()来放置每一组的某字段的值的集合
select gender,group_concat(name) from students group by gender;
group by + 集合函数
- 1.通过group_concat()的启发,我们既然可以统计出每个分组的某字段的值的集合,那么我们也可以通过集合函数来对这个值的集合做一些操作
select gender,avg(age) from students group by gender;
group by + having
- 1.having条件表达式:用来分组查询后指定一些条件来输出查询结果
- 2.having作用和where一样,但having只能用于group_by
select gender,count(*) from students group by gender having count(*)>2;
2.6.分页
语法:
select * from 表名 limit start,count
说明:
- 查询前3行男生信息
select * from students where gender=1 limit 0,3;
2.7.连接查询
- 内连接查询:查询的结果为两个表匹配到的数据
- 右连接查询:查询的结果为两个匹配到的数据,右表特有的数据,对于左表中不存在的数据使用null填充
- 左连接查询:查询的结果为两个表匹配到的数据,左表特有的数据,对于右表中不存在的数据使用null填充
语法
select * from 表1 inner或left或right join 表2 on 表1.列 = 表2.列
例:使用内连接查询班级表与学生表
select * from students inner join classes on students.cls_id = classes.id;
例:使用左连接查询班级表与学生表
select * from students as s left join classes as c on s.cls_id = c.id;
例:使用右连接查询班级表与学生表
select * from students as s right join classes as c on s.cls_id = c.id;
例:查询学生姓名及班级名称
select s.name,c.name from students as s inner join classes as c on s.cls_id = c.id;
2.8.子查询
在一个select 语句中,嵌入了另外一个select语句,那么嵌入的select语句称之为子查询语句
主查询
主要查询的对象,第一条select语句
主查询和子查询的关系
- 标量子查询:子查询返回的结果是一个数据(一行一列)
- 列子查询:返回的结果是一列(一列多行)
- 行子查询:放回的结果是一行(一行多列)
标量查询
- 查询班级学生平均年龄
- 查询大于平均年龄的学生
查询班级学生的平均身高
select * from students where age > (select avg(age) from students);
列级子查询
- 查询还有学生在班的所有班级名字
- 1.找出学生表中所有的班级 id
2.找出班级表中对应的名字
select name from classes where id in (select cls_id from students);
行级子查询
- 需求: 查找班级年龄最大,身高最高的学生
- 行元素: 将多个字段合成一个行元素,在行级子查询中会使用到行元素
select * from students where (height,age) = (select max(height),max(age) from students);
子查询中特定关键字使用
- in 范围
格式:主查询 where 条件 in(列子查询)