大数据开发之前期准备----SQL语句(1)

1,数据类型

char  字符,varchar  也是字符,int 整型,float  单精度浮点型,double  双精度浮点型,date 日期(年月日),timestamp  年月日时分秒。其中,char和varchar后面可以接一个括号,里面填入一个数字表示多少个字符,而char是定长的,一旦确定在数据库中存储时就占这么多个字符,varchar是动态的当你的输入没有满足最大字符数时就按实际的字符数来存储。

2,结构

分为数据库,表,视图,索引。后三个都是数据库之下的。

3,语法

SQL语法又分为DML和DDL这两种,前者是增删改查的操作,如:insert update delete select。而后者是对数据库和表,视图的操作,如:use db   create db  等。

这里是创建一个表的语句:create table ruoze(id int,name varchar(20),age int,......createtime timestamp,creaateuser varchar(20),updatetime timestamp,updateuser varchar(20)) ENGINE=Innodb  

然后我们可以插入一条记录 insert into ruoze(id,name,age) values(1,'doudou',18),我们在这里指定了要插入值的字段,你也可以不指定,但是就要将所有字段的值都明文写出来。

当我们要更新数据时:update ruoze set age=20 where id = 1;  这里需要指定要更新的表和更新的字段,以及我还添加了where语句作为过滤,后面我们将会学习到这些语法

最后是删除:delete from ruoze where id = 1;  这里的删除是删除记录,如果你没有使用where语句进行筛选的话将会删除整个表格中的所有记录

这里我给出完整的创建表格的格式,初学的小伙伴可以照抄一份

create table ruozedata_prod(

id int auto_increment primary key,

.....

create_time timestamp default current_timestamp,

update_time timestamp default current_timestamp on update current_timestamp,

.....

) defualt charset=utf8;

4,语法中的细节

4.1 大于 小于 等于

select * from ruoze where age > 18

select * from ruoze where age < 18

select * from ruoze where age <> 18 或者 != 都是表示不等于

4.2 模糊查询 like 根据模式进行匹配

select * from zuore where name like '%abc%'  这个句法表示的是查询name这个字段中带有abc三格英文字母的记录

select * from zuore where name like '%s' 匹配name这个字段中结尾为s的记录

select * from zuore where name like '_o%' 匹配那么这个字段中第二个字母是o的记录,_在这里是占位符的意思,代表一个字符

4.3 排序 order by 根据某个指定的字段以某种顺序的方式进行排序,在没指定的时候为升序

select * from ruoze order by name asc;  如果你没有输入asc就默认是升序,asc也是升序,如果是降序的话就输入desc

select * from ruoze order by name asc,age desc;这里指的是在按照name升序的同时,当name相同时对age进行降序排列

4.4 限制多少行

select * from ruoze limit 2;    限制了输入为2行

4.5 聚合和聚合函数  所谓的聚合就是对数据进行一些分组

我们一般使用group by依据某个字段进行分组,这个字段的值相同的被放到同一个租里面,因为使用了group by 我们就不在group by后面使用where进行条件过滤了,我们使用having,对那些满足条件的组就行保留。Ps:having是对组进行条件筛选,字段是group by的字段,而where需要你自己指定字段,是对记录进行筛选。

而聚合函数是对已经分好的组使用一个函数,将一组的数据以一条记录显示出来,如:max sum count min avg

select name,avg(age) from ruoze group by name having avg(age) > 18;

这里我们根据名字分组,显示该组内年龄的平均值,同时将平均年龄小于18的组过滤掉

4.6 别名 我们在linux中也学习到别名,这里我们会对某些操作起一个别名,比如上面的avg(age) 这个操作在字段中是没有的,如果显示的话就是avg(age),这个名称不太好,我们可以给个别名他。

如:select name,avg(age)  as age_mean from ruoze group by name having avg(age) > 18;

4.7 上下合并两个表,这个时候表的字段类型最好相同,名称不一样的时候以第一个表为准 

union和union all 第一个操作会将两个表当中相同的记录去重,而union all则保留

select  name,age from a union select mingzi,nianling from b  这里的name和mingzi的数据类型最好一样,而age和nianling的数据类型也最好一样。两个合并表的字段总数也最好一样。

5,正常的格式

select depto,job,sum(sal) as sum_sal

from emp

where job is not 'SALEMEN'

group by depto,job

having sum_sal > 3000

order by sum_sal asc

limit 100;

猜你喜欢

转载自blog.csdn.net/weixin_39702831/article/details/82756321