day1:Mysql数据库
数据库:
存储数据的仓库,可以进行数据的持久化存储
特点:可以进行持久化存储数据
方便进行数据管理
查询数据的效率特别高
安装:傻瓜式安装
服务:sql server
启动: net start mysql
停止: net stop mysql
SQL:Structured Query Language(结构化查询语句)
分类:
DDL:数据定义语句:用来定义数据库中的库,表,列 关键字:create drop alter
DML:数据操作语言:操作数据表中数据,关键字:insert update delete等
DQL:数据查询语句:查询检索数据库中的数据,关键字:select where group by
DCL:数据控制语句:管理数据库用户的权限:关键字grant revoke
DDL:数据操作语言
1:create创建数据库
CREATE DATABASE DB1;
判断是否存在,如果不存在则创建
CREATE DATABASE IF NOT EXISTS db2;
创建默认的默认的指定字符集
CREATE DATABASE db3 DEFAULT CHARACTER SET utf8;
```
2:retrive检索数据库
```
查询所有数据库
SHOW DATABASES;
查询数据库创建语句
SHOW CREATE DATABASE db1; ``
3: U(Update)更新数据库`
修改数据库默认字符集
ALTER DATABASE DEFAULT CHARACTER SET utf8; `
4:删除数据库
DROP DATABASE db3;``
5. 使用数据库
```mysql
use db1;
DML:数据操作语句
1,插入数据:
插入全面列:INSERT INTO student2 VALUES(1123,'2019',32);
插入部分列:INSERT student2(sno,age)VALUES(123,20);
2,修改数据:
更新列:UPDATE stu2 SET birthday='2018-08-18' ,NAME='学生04' WHERE id=2;
3,删除数据
DELETE FROM stu2 WHERE id=3;
DQL 查询数据库表中的数据
1. 语法
select * from 表名
where 条件
group by 分组字段
having 分组后条件过滤
order by 排序字段 排序类型
limit 起始位置,长度 (分页)
2. 简单查询
* 代表所有列
* SELECT * FROM student;
3. 指定列查询
SELECT id,NAME FROM student;
4. 别名查询
* as
SELECT id,NAME ,math AS 数学 ,english AS 英语 FROM student;
5. 去除重复查询
* distinct
SELECT DISTINCT address FROM student;
6. 查询结果参与计算
* +-*/
SELECT id,NAME ,math+english AS total FROM student;
SELECT id,NAME ,math+IFNULL(english,0) AS total FROM student;
7. 条件过滤
* <>、 <、 >、 =、 <= 、>=
* between and 相当于 >=小值 and <=大值
* in
* is null
-- 查询 math 分数大于 80 分的学生
SELECT * FROM student WHERE math>80;
-- 查询 english 分数小于或等于 80 分的学生
SELECT * FROM student WHERE english <= 80;
-- 查询 age 等于 20 岁的学生
SELECT * FROM student WHERE age=20;
-- 查询 age 不等于 20 岁的学生,注:不等于有两种写法
SELECT * FROM student WHERE age <> 20;
SELECT * FROM student WHERE age != 20;
SELECT * FROM student WHERE math>80;
SELECT * FROM student WHERE math=99;
SELECT * FROM student WHERE math>=76 AND math<=90;
SELECT * FROM student WHERE math BETWEEN 76 AND 90;
SELECT * FROM student WHERE id <>1;
SELECT * FROM student WHERE english IS NULL;
逻辑 and or not
*
-- 查询 age 大于 35 且性别为男的学生(两个条件同时满足)
SELECT * FROM student WHERE age>35 AND sex='男';
-- 查询 age 大于 35 或性别为男的学生(两个条件其中一个满足)
SELECT * FROM student WHERE age>35 OR sex='男';
-- 查询 id 是 1 或 3 或 5 的学生
SELECT * FROM student WHERE id=1 OR id=3 OR id=5;
SELECT * FROM student WHERE id IN(1,3,5);
-- 查询 id 不是 1 或 3 或 5 的学生
SELECT * FROM student WHERE id NOT IN(1,3,5);
SELECT * FROM student WHERE id =1 OR id=3;
SELECT * FROM student WHERE math>=76 AND math<=90;
SELECT * FROM student WHERE english IS NOT NULL;
* 模糊 like 通配符 % _
-- 查询姓马的学生
SELECT * FROM student WHERE NAME LIKE '马%';
-- 查询姓名中包含'德'字的学生
SELECT * FROM student WHERE NAME LIKE '%德%';
-- 查询姓马,且姓名有两个字的学生
SELECT * FROM student WHERE NAME LIKE '马_';
8. 排序
-- 查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩升序排序
SELECT * FROM student ORDER BY math DESC;
SELECT * FROM student ORDER BY math ; -- 默认 ASC
SELECT * FROM student ORDER BY math ASC;
SELECT * FROM student ORDER BY math ASC,english ASC;
9. 聚合函数
将一列作为整体进行计算
COUNT -- 计算数量的
MAX -- 计算最大值
MIN -- 计算最小值
AVG -- 计算平均值
SUM -- 计算总和
-- 查询学生总数
SELECT COUNT(id) FROM student;
SELECT COUNT(*) FROM student;
SELECT COUNT(english) FROM student; -- null 不计算
-- 查询年龄大于 20 的总数
SELECT COUNT(id) FROM student WHERE age>20;
-- 查询数学成绩总分
SELECT SUM(math) FROM student;
-- 查询数学成绩平均分
SELECT AVG(math) FROM student;
-- 查询数学成绩最高分
SELECT MAX(math) FROM student;
-- 查询数学成绩最低分
SELECT MIN(math) FROM student;
10. 分组
-- 按性别进行分组,求男生和女生数学的平均分
SELECT sex,AVG(math) AS 平均分 FROM student GROUP BY sex ;
-- 查询男女各多少人
SELECT sex,COUNT(*) FROM student GROUP BY sex;
-- 查询年龄大于 25 岁的人,按性别分组,统计每组的人数
SELECT sex,COUNT(*) FROM student WHERE age>25 GROUP BY sex ;
-- 查询年龄大于 25 岁的人,按性别分组,统计每组的人数,并只显示性别人数大于 2 的数据
SELECT sex,COUNT(*) FROM student WHERE age>25 GROUP BY sex HAVING COUNT(*)>2;
11. 分页
limit
-- 查询学生表中数据,从第 3 条开始显示,显示 6 条。
--每页显示 5 条记录的方式来分页
-- limit offset,length -- offset起始从0开始
SELECT * FROM student LIMIT 0,3;
SELECT * FROM student LIMIT 3;
SELECT * FROM student LIMIT 5,5;
-- 查询学生表中数据,从第 3 条开始显示,显示 6 条。
SELECT * FROM student LIMIT 2,6;
-- 每页显示 5 条记录的方式来分页
SELECT * FROM student LIMIT 0,5;
SELECT * FROM student LIMIT 5,5;
SELECT * FROM student LIMIT 10,5;
-- offset= (页号-1)* 页大小