MySql数据库
名称解释
|名称|简述|
|-:-|:–|
|关系|一个关系通常说的是一张表|
|元组|表中的一行即为一个元组。|
|属性|表中的一列即为一个属性;每个属性都有一个名称,称为属性名。|
|候选码|表中的每个属性组,它可以唯一确定一个元组。|
|主码|一个关系又多个候选码,选定其中一个为主码|
|域|属性的取值范围|
|分量|元组中的一个属性值|
SQL语句
基础语句:
- select - 从数据库中提取数据
- update - 更新数据库中的数据
- delete - 从数据库中删除数据
- insert into - 向数据库中插入新数据
- create table - 创建新表
- alert table - 修改数据库表
- drop table - 删除表
- create index - 创建索引
- drop index - 删除索引
常用语句:
show databases
显示所有数据库 。use database_name
进入某个数据库 , databases_name 为某个数据库名。select * from table_name
查询某个表的所有数据 ,table_name 为表名。create database database_name
创建数据库,其中database_name 为数据库名称desc table_name
查看一个表的结构show create table table_name
查看创建表的SQL语句exit
退出数据库 (仅仅断开了客户端和服务器的连接)
查询语句
条件语句
OR
: 或者AND
: 并且NOT
:不符合该条件=
:判断相等>
:判断大于>=
:判断大于或者等于<
:判断小于<=
:判断小于或者等于<>
:判断不相等LIKE
:判断相似
练习:
- where 关键字后面的 score >= 80 是条件。
select * from students where score >= 80;
- 条件表达式用<条件1> AND <条件2>表达满足条件1并且满足条件2.符合条件“分数在80分或以上”,并且还符合条件“男生” , 就可以写:
select * from students where score >= 80 AND gender = 'M';
- 条件表达式用<条件1> OR <条件2>表达满足条件1或者满足条件2。分数在80分或以上”或者“男生” , 可以写:
select * from students where score >= 80 OR gender = 'M';
- 不是2班的学生
select * from students where NOT class_id = 2;
也可以写成:select * from students where class_id <> 2;
- 查询分数在60分(含)~90分(含)之间的学生
select * from students where score >= 60 AND score <= 90;
select * from students where score between 60 and 90;
投影查询
用SELECT 列1, 列2, 列3 FROM ...
,让结果集仅包含指定列。这种操作称为投影查询。
还可以给每一个列名起别名,它的语法是:SELECT 列1 别名1, 列2 别名2, 列3 别名3 FROM...
练习:
- 从students表中返回id、score和name这三列
select id,score,name from students;
- SELECT语句将列名score重命名为points,而id和name列名保持不变
select id,score points,name from students;
排序
关键字:ORDER BY
默认是正序:ASC
如果有WHERE子句,那么ORDER BY子句要放到WHERE子句后面。
练习:
- 按照成绩从低到高进行排序。正序 ASC
select id,score,name from students order by score;
- 按照成绩从高到低进行排序。倒序 DESC
select id,score,name from students order by score desc;
- 先按score列倒序,如果有相同分数的,再按gender列排序
select id ,score ,name,gender from students order by score desc , gender;
- 查询一班的学生成绩,并按照倒序排序
select * from students where class_id = 1 order by score desc;
聚合查询
|函数|说明|
|-:-|-:-|
|COUNT|统计数量|
|SUM|计算某一列的合计值,该列必须为数值类型|
|AVG|计算某一列的平均值,该列必须为数值类型|
|MAX|计算某一列的最大值|
|MIN|计算某一列的最小值|
注意:如果聚合查询的where条件没有匹配到任何行,COUNT()会返回0,
而SUM()、AVG()、MAX()、MIN()会返回NULL;
练习:
- 查询students表中的一共有多少记录
select COUNT(*) from students;
可以给列名起个别名select COUNT(*) num from students;
- 统计有多少男生
select COUNT(*) boys from students where gender = 'M';
- 统计男生的平均成绩
select AVG(score) from students where gender = 'M';
分组聚合
练习:
- 统计各班级人数
select class_id,COUNT(*) num from students group by class_id;
- 统计各班的男生和女生人数
select class_id,gender,COUNT(*) num from students group by class_id,gender;
- 用一条SELECT查询查出每个班级的平均分
select class_id,AVG(score) from students group by class_id;
- 用一条SELECT查询查出每个班级的平均分 保留两位小数
select class_id,round(AVG(score),2) from students group by class_id;
- 查出每个班级男生和女生的平均分
select class_id,gender,round(avg(score),2) from students group by class_id,gender;
连接查询
内连接:
- 先确定主表,仍然使用
from <表1>
的语法; - 再确定需要连接的表,使用
inner join <表2>
的语法; - 然后确定连接条件,使用
ON <条件...>
,这里的条件是students.class_id = classes.id
,表示students表的class_id列与classes表的id列相同的行需要连接; - 可选:加上where子句,order by 等子句。
练习:
- 把每位学生对应的班级名称列出来.
1
2
3
4select s.id,s.name,s.class_id,c.name class_name,s.gender,s.score
from students s
inner join classes c
ON s.class_id = c.id;
插入语句
语法: INSERT INTO <表名> (字段1, 字段2, ...) VALUES (值1, 值2, ...);
也可以一次性添加多条记录,只需在VALUES
子句中指定多个记录值,每个记录用括号
例如:
1 | INSERT INTO students (class_id, name, gender, score) VALUES |
练习:
- 向students表插入一条新记录
INSERT INTO test_database.students (id, class_id, name, gender, score) VALUES (11, 3, '小丽2', 'M', 85);
更新语句
语法:UPDATE <表名> SET 字段1=值1, 字段2=值2, ... WHERE ...;
练习:
- 更新id为1的学生的姓名和分数两个字段
update students set name ='大牛',score=66 where id = 1;
- 更新id = 5,6,7的记录
update students set name ='大牛',score=66 where id >=5 AND id <=7;
- 把所有80分以下的同学的成绩加10分
update students set score = score + 10 where score < 80;
注意:执行这句遇到了 1175 问题,执行SET SQL_SAFE_UPDATES = 0
解决;
注意:UPDATE语句可以没有WHERE条件,假设执行update students SET score=60;
,会使整个表所有的记录都被更新。最好先用select语句来测试where条件是否筛选出了期望的记录,然后再用update更新。
删除语句
语法:DELETE FROM <表名> WHERE ...;
练习:
- 删除id=1的记录
delete from students where id=1;
注意:delete和update类似,不带where条件也可以执行。如果执行delete from students
会删除整个表的数据
笔记参考