登陆
进入MySQL的bin目录下
1 | mysql -hlocalhost -uroot -p |
数据库
数据库是一个二维表,每行是一个实体,列叫字段
decimal小数更精确
Varchar:变长字符串
date:YYYY-MM-DD
time:HH:MM:SS
datetime:YYYY-MM-DD HH:MM:SS
整型 int
不是很精确的 double
时间 datetime
字符串 varchar
表的约束:主键,非空,自增
主键唯一(内容不能重复),不能为空,一个表只能有一个主键
数据库不区分大小写
增删改查语句
–(空格) :注释
增
1 | INSERT INTO 表名 VALUS(不指定列名按照表的顺序写); |
指定列名,可以省略自增的列名,可以实行添加多条,逗号隔开
改
1 | SELECT * FROM stu; |
可以更新主键(一般不要更新),要保证更新后不会出现重复
*代表所有列
删
1 | DELETE FROM stu WHERE stuid=1001; |
where后面一般是主键
查
单表查询
1 | SELECT 列名 FROM 表名; |
列名之间用 ,
*代表所有列
DISTINCT:对查询结果去重
1
SELECT DISTINCT cid FROM student;
可以进行+ - * /
给列起别名,(as和 )之后只能用换后的名字:
1
SELECT socre as 加分前的成绩, socre+5 加分后的成绩 FROM score;
select五种子句
| 子句 | 描述 |
| ——– | ——– |
| WHERE | 条件查询 |
| group by | 分组 |
| having | 筛选 |
| order by | 排序 |
| limit | 截取 |where
=,>,<,<=,>=,
between…and… 包含边界,日期加‘ ’
in(集合),满足集合中一个值即可
not 取反 ,
like 模糊查询 ‘%字符%’,_代表一个字符,%代表多个字符
is NULL
聚合函数
AVG()平均值
1
SELECT AVG(socre) 平均成绩 FROM score WHERE subid=1;
COUNT() 数据的数量
1
SELECT COUNT(*) FROM score WHERE subid=1;
SUM()求和
1
SELECT SUM(socre) FROM score;
MAX()MIN()
1
SELECT MAX(socre) from score;
分组group by
每 各 要分组
带聚合函数 一般都要分组
SELECT...FROM....WHERE...GRUP BY 列名
1 | SELECT AVG(socre) FROM score GROUP BY subid; |
having
where 针对表中真正存在的列
having 针对查询结果,但是在group by
之后执行
1 | -- where (✕) |
order by
asc
升序,默认
desc
降序
在select语句结尾
1 | SELECT * FROM student ORDER BY 字段1,字段2, ... ASC; |
根据字段一进行排,排完基础上根据字段2进行排……
limit
limit 数据的坐标,显示的条数;
数据的坐标从0开始
常用在分页
多表查询
等值连接
两个表有相同字段
eg:查询李四所在班级,显示班级编号,姓名,班级名
把两个表连成一个大表
1
SELECT * FROM student,classinfo;
确定连接条件(用表名加以区分)
1
student.cid=classinfo.cid
确定其他筛选条件
1
AND name="李四";
内连接
查询李四所考科目的平均成绩,显示姓名,平均成绩
把两个表连成一个大表
1
SELECT * FROM student INNER JOIN score
连接条件
1
ON student.stuid=score.stuid
可以多次重复上述两步以实现多张表相连
筛选条件
1
WHERE `name`='李四';
左外连接
以左表为主,去右表找匹配数据,如果找不到就用null填充,也就是说,左表的数据必须被查询
1 | SELECT student.stuid,`name`,sex,subid,socre FROM student LEFT JOIN score |
右外连接
与左外连接相反
1 | SELECT student.stuid,`name`,sex,subid,socre FROM score LEFT JOIN student |
左外和右外例子效果相同
尽量使用左外连接替代右外连接(大型数据库DB2只支持左外连接,不支持右外连接)