总结MySQL语句
MySQL的总结 核心(增删改查)
1增:Insert into表名 values(字段值1,字段值2,…..)
2.删:Delete from 表名 where 字段=“字段值”
3.改:Update 表名 set 字段=“字段值” where 字段=“字段值”;
例:update user set name=‘hxzy’ where id =1;
4.查:Select *from 表名;
5.过滤查询
Where 语句,进行“条件”筛选
“条件”
>,>=,<,<=,!=,<>(不等于)
And(&&),or(||), not(!=)
模糊查询like
通配符 ‘%’, ’_’
Like 前面需要字段,这样知道你是根据什么查询
6.结果查询
order by 语句 ASC(升序) DESC(降序)
对前面的结果进行排序
7.分页查询
limit 起始行号n,要取的行数m;
注意:n是从0开始算起
8.字段控制查询(去重复)
Select distinct 字段 from表名
9.分组查询
group by 语句
对前面的结果进行分组
having 跟where一样进行条件筛选,但having一般与group by使用
10.聚合函数
Count(字段) 数量Max(字段) 最大值Min(字段) 最小值Sum(字段)总和
Avg(字段)平均值
聚合函数一般和group by一起使用
一般的用法 select 单位名称, count(id),sum(工资)from 表名 group by 单位名称
11.添加外键
Alter table表名1 add foreign key 当前表名(字段1)references 关联的表(字段2);
12.多表查询
内连接
1) select*from 表1 inner join 表2 on 表1.字段1=表2.字段2;
2) select*from 表1,表2 where 表1.字段1=表2.字段2;
外连接
左连接:select *from 表1 left join 表2 on 表1.字段1=表2.字段2;
右连接:select *from 表1 right join 表2 on 表1.字段1=表2.字段2;
三张表:Select *from 表1,表2,表3 where 表1.字段1 = 表2.字段2 and 表2.字段2=表3.字段3;
子查询
当一个查询是另一个查询的条件时,称之为子查询
查询的内容需要另个查询的结果
Select *from 表where字段 >(select *from 表 where 条件)
13.整个select语句的总结
select [all | distinct] 字段或表达式列表
[from子句]
[where子句]
[group by子句]
[having子句]
[order by子句]
[limit子句];
基本上,
1,select语句中,各个组成部分,都有其明确的顺序;
2,虽然理论上,除了select部分,其他部分都可以省略,但也有2个细节依赖:
where子句依赖于from子句,没有from就不能有where;
having子句通常与group by子句用,没有group by子句,having的行为与 where子句一样;
3,如果出现某些子句,但不能打乱他们在整个select语句中的原始相对顺序。
4,除了select子句,其余每一个子句,都可以看做是:按其位置先后顺序“依次执行”;
运行流程图
综合练习
表student 表teacher
表sco
表course
查询1课程比2课程成绩高的所有学生的学号
SELECT sid,score FROM sco WHERE cid=1;
SELECT sid,score FROM sco WHERE cid=2;
SELECT a.sid 学号 FROM (SELECT sid,score FROM sco WHERE cid=1) a,(SELECTsid,score FROM sco WHERE cid=2) b WHERE a.score>b.score &&a.sid=b.sid;
查询平均成绩大于60分的同学的学号和平均成绩
SELECT sid 学号,AVG(score)平均成绩 FROM sco GROUP BY 学号 HAVING 平均成绩>60;
查询所有同学的学号、姓名、选课数、总成绩
SELECT s.sid 学号,s.sname 姓名 ,COUNT(cid) 选课数,SUM(score) 总成绩 FROM student s, sco f WHERE s.sid = f.sid GROUP BY 学号;
查询姓“刘”的老师的个数;
SELECT tname,COUNT(*) FROM teacher GROUP BY tname HAVING tname LIKE '刘%';
查询没学过“叶平”老师课的同学的学号、姓名;
1.SELECT s.sid 学号, s.sname 姓名 ,f.cid 课程 FROM student s,sco f WHERE s.sid = f.sid GROUP BY s.sid HAVINGf.cid!=1;
2.SELECT s.sid ,s.sname FROM student s WHERE sid NOT IN(SELECT f.sid FROM sco f,Course c ,Teacher t WHERE f.cid=c.cid AND t.tid=c.tid AND t.tname='叶平');
查询学过1课程并且也学过编号2课程的同学的学号、姓名;
1.SELECT s.sname 姓名,s.sid 学号,c.cname 课程 ,c.cid 课程ID FROM sco f,course c,student s WHERE f.cid=c.cid AND s.sid= f.sid AND(c.cid=1 OR c.cid =2 ) GROUP BY s.sidHAVING COUNT(课程)>1;
2.SELECTstudent.sid,student.sname FROM student,sco WHERE student.sid=sco.sid ANDsco.cid=1 AND sco.cid=1 AND EXISTS(SELECT * FROM sco AS sc2 WHERE sc2.sid=sco.sid AND sc2.cid= 2 );
查询任何一门课程成绩在70分以上的姓名、课程名称和分数
SELECT s.sname ,c.cname ,f.score FROM student s,course c,sco f WHERE f.cid = c.cid AND s.sid =f.sid AND f.score>70;
查询各个课程及相应的选修人数
SELECT COUNT(cid)FROM sco GROUP BY cid;