oracle竖列的数据怎么变成一行
294
2022-09-18
MySQL数据库基础(数据表的SELECT操作)
文章目录
数据表的操作
1、创建成绩表2、select表达式3、查询4、修改(AS)5、筛选(WHERE)6、排序(ORDER)7、分组(GROUP)8、过滤(HAVING)9、聚合函数10、限制取值(LIMIT)
本篇是延续上一篇文章的内容,依旧是关于数据表操作方面的内容,这方面内容相对较多,毕竟操作数据表才是学习数据库的核心。
数据表的操作
1、创建成绩表
--创建成绩表CREATE TABLE ExamResult( id INT PRIMARY KEY auto_increment, name VARCHAR (20), JavaScript DOUBLE , jQuery DOUBLE , C_language DOUBLE);--添加数据到表中INSERT INTO ExamResult VALUES (1,"Luffy",98,98,98), (2,"Nami",35,98,67), (3,"Zoro",59,59,62), (4,"Chopper",88,89,82), (5,"ViewIn",88,98,67), (6,"ZaHuw",86,100,55);
2、select表达式
select查询:SELECT *|field1,filed2 … FROM tab_namewhere筛选:WHERE 条件分组:GROUP BY fieldhaving过滤:HAVING 筛选排序:ORDER BY field限制个数:LIMIT 限制条数注意:select只是一个显示效果,不会真正去除或者删除数据库中的数据
3、查询
其中from指定从哪张表筛选,*表示查找所有列,也可以指定一个列; distinct用来剔除重复行。
--只查所有名字select name from ExamResult;--看名字和JavaScript的成绩select name, JavaScript from ExamResult;--去除重复的内容:去除所有重复的的name,只留一个select distinct name from ExamResult;
4、修改(AS)
UPDATE语法可以用新值更新原有表行中的各列。 SET子句指示要修改哪些列和要给予哪些值。
--修改数据来显示:将成绩分别加10,20,30select name, JavaScript+10, jQuery+20, C_language+30 FROM ExamResult;--用as来修改显示:修改name和科目名称select name as "NAME", JavaScript as JS, jQuery as JQ, C_language as CC from ExamResult;
5、筛选(WHERE)
WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。
多个条件逻辑运算符:and or not关系运算:> < >=(大等于) <=(小等于) !=(不等于) in运算:表示在某些数据中任选一个 like运算:以某字符开头的字段
--筛选语句:--将JS成绩大于85的name和JS成绩显示出来SELECT name, JavaScript from examresult where JavaScript>85;--筛选JS成绩在70到100之间的name和JS成绩SELECT name, JavaScript from ExamResult where JavaScript between 70 and 100;--筛选JS成绩不是88的name和JS成绩select name, JavaScript from ExamResult where JavaScript!=88;--筛选JS成绩是88和98的name和JS成绩select name, JavaScript from ExamResult where JavaScript in(88,98);--筛选name是z开头的name与JS成绩select name, JavaScript from examresult where name like "z%";--只添加名字,不添加成绩insert into ExamResult (name) values ( "new_one" );--删除JS成绩为空的nameselect name from ExamResult where JavaScript is null;
6、排序(ORDER)
--排序(默认升序):按照JS成绩高低排序select name, JavaScript from ExamResult order by JavaScript;--过滤之后再排序(desc降序):JS成绩大于70的name按JS成绩从低到高排序select name, JavaScript from ExamResult where JavaScript>70 order by JavaScript desc;--对总分进行排序:总成绩从高到低排序SELECT name, JavaScript+jQuery+C_language as SUM from ExamResult order by SUM desc;--精确定位:对name为ZaHuw且JS成绩在50分以上的总成绩进行从高到低排序SELECT name, JavaScript+jQuery+C_language as SUM from ExamResult where name="ZaHuw" and JavaScript>=50 order by SUM desc;
7、分组(GROUP)
--按照name来分组,实际上就是分成了6组,同一个名字为一组select * from ExamResult group by name;--按照JS成绩来分,同一个成绩为一组select * from ExamResult group by JavaScript;--分组之后进行操作(函数):通过name分组之后对每一组的JS成绩进行求和操作select name, sum(JavaScript) from ExamResult group by name;
这是原数据表:
分组求和过后的表:
8、过滤(HAVING)
having和where的区别: having对分组过后的数据进行过滤(而where是分组之前的),不过能用where的地方都可以用having替换
--用name分组过后,求每一组jquery的成绩总和,最后筛选jQuery成绩总和大于150的成绩对应的nameselect name, sum(jQuery) from ExamResult group by name having sum(jQuery)>150;--统计JS成绩大于80的name的个数select count(name) from ExamResult where JavaScript>80;--计算所有name的JS平均分:JavaScript总分/name个数select sum(JavaScript)/count(name) from ExamResult;
9、聚合函数
--简单化的求平均分:AVGselect AVG(JavaScript) FROM ExamResult;--最大值:MAXselect MAX(JavaScript) from ExamResult;--最小值:MIN,排除null用ifnull(JavaScript,0),意思是如果JS成绩是null,则当做0select MIN(ifnull(JavaScript,0)) FROM ExamResult;--求总成绩的最大值select MAX(JavaScript+jQuery+C_language) from ExamResult;--求分组过后总成绩的最大值和组名select name, MAX(JavaScript+jQuery+C_language) from ExamResult group by name;
10、限制取值(LIMIT)
--只取id排序前三的数据select * from ExamResult limit 3;--从第二个开始,取5个(类似索引一样,从0开始算的)select * from ExamResult limit 1,4;
本篇结束,谢谢大家! 所有select的基本操作都介绍完了,不过学习这种事情主要还是需要自己去练习,得出结果才印象深刻,效果才好。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~