ER图
语句顺序:SELECT FROM WHERE GROUP BY HAVING ORDER BY
注释:-- 建表语句
语句大小写不敏感,分号;表示一条语句的结束
属性的数据类型: 整型:int()
浮点型:float,double
字符串:char,varchar()
日期:date:年月日,time:时分秒
约束条件: is/not null — 指示某字段是/不是空值
primary key — 主键,有唯一标识
comment — 添加备注 comment"备注"
创建库/表
建表顺序:create database 库名;
use 库名;
create table 表名(
字段名 字段数据类型, [primary key comment"备注"]
);
注意:在建好库之后要使用库了才能建表
查询语句
通配符*:表示全部属性
别名:as 别名
select */(字段名 as 别名) from 表名;
条件查询:where条件语句 条件:> >= < <= != =
例:查询t_student表中成绩不等于100的同学
select s_name,s_score from t_student where s_score != 100;
模糊查询:like/not like
通配符:%:1~多个字符
_:只能表示一个字符
例:查询t_student表中姓名为王的同学
select * from t_student where s_name like '王%';
查询t_student表中姓名两个字的同学
select * from t_student where s_name like '__';
and:表示两边结果都为True才输出
or:两个条件满足一个为True即可
例:查询名字姓张和黄的成绩不及格的同学
select s_name,s_score from t_student where s_score < 70 and (s_name like '张%' or s_name like '黄%' ); —>要考虑题目的优先级
去重关键字:distinct
例:对表中学院去重
select distinct s_college from t_student;
Between And语句
例:查询范围在[80~90]之间的学生
select * from t_student where s_score BETWEEN 80 AND 90;
order by 排序
关键字:ASC:升序(默认),DESC:降序
例:查询学生的成绩,并把t_student表中的成绩按降序排序
select s_name as “姓名”,s_no as “学号”,s_score as “成绩” from t_student order by s_score desc;
group by 排序
count():对非空属性进行判断计数
例:查询每个性别有多少人
select s_sex,count(*) as '个数' from t_student group by s_sex;
注意:语句中select后面有几个字段名,group by后面也要保持一致
having语句
例:显示名字计数小于 2 的所有记录
select * from t_student group by name having count(name) < 2;
Having和where的区别:
用的地方不一样: where可以用于select、update、delete和insert...into语句中
having只能用于select语句中
执行的顺序不一样: where不能放在 GROUP BY 子句之后
having不能放在 GROUP BY 子句之前
条件子句不一样: where子句中的条件表达式having都可以写,而having子句中 的有些表达式where不可以写
having子句可以用聚合函数而where子句不可以
聚合函数
- 求和:sum()函数
select sum(s_score) from t_student; 对成绩进行求和
- 最大值:max()最大值
select max(s_score) from t_student; 求成绩的最大值
- 最小值:min()最小值
select min(s_score) from t_student; 求成绩的最小值
- 平均值:avg()函数
round(a,b):四舍五入,保留小数位
select round(avg(s_score),1) from t_student; 求成绩的平均值并保留一位小数
Limit[1,2]关键字
例:对成绩排序并从第二条开始取4条数据
select * from t_student order by s_score limit 1,4;
插入语句:insert into语句
书写格式:insert into 表名(字段名1,字段名2...) values (属性值1,属性值2...);
例:
insert into T_Class_one(id,name,s_no,s_instructor) values (1,"温福泉",002,"雷老板");
注意:如果表名后面的(字段名...)省略,则values后面的()里面的值要与表里面的字段顺序相同
删除语句:delete语句
书写格式:delete from 表名 where 条件语句;
例:
delete from t_student where t_name = “陈旺”;
注意:如果不写where条件语句,则是删除全部数据
drop语句:drop table 表名;
修改语句:update语句
书写格式:update 表名 set 字段名 = “ ” where 条件语句;
例:
update T_Class_one set id = 1,name = “陈旺”,s_no = 001,s_instructor = "雷老板" where s_no = 002;
注意:如果不写where条件语句,则是修改所有的数据
了解:alter语句
- 增加列
alter table [表名] add [列名] [字段类型];
- 修改列名/列名及字段类型
alter table [表名]change [列名] [新列名] [字段类型];
- 修改列字段类型
alter table [表名]modify [列名] [新字段类型][是否允许非空];
- 修改列字段默认值
alter table [表名] alter column [列名] set default [默认值];
- 查询表的字段信息
desc [表名];
多表联查:inner jion on语句
例:求所有同学三次成绩的平均分(表1:t_java和表2:t_mysql有相同字段属性student_id,表2:t_mysql和表3:t_web有相同字段属性student_id)并把平均分从高到低排序,用inner jion句
select
t1.student_id,t1.student_name,
AVG(t1.score + t2.score + t3.score) / 3 as average_score
from
t_java t1
Inner jion
t_mysql t2 on t1.student_id = t2.student_id
Inner jion
t_web t3 on t2.student_id = t3.student_id
group by
t1.student_id,t2.student_name
order by
average_score desc;