mysql 查询基础知识

来源:互联网 发布:datagridview添加数据 编辑:程序博客网 时间:2024/05/01 23:16

查询数据(重点)select

1.1:查询所有字段

    select * from student;

1.2:查询指定的字段

select id,name  from student;

1.3:查询时指定别名

select id as 别名,name as 别名  from student; //  在这里as是可以不写

1.4:查询时添加常量列

---需求:查询学生数据时添加一个“年级”列,值为“java就业班”

alter table student add column '年级' ;// 在这样的话就时永久的添加到啦student表中,但我们现在的需求是在查询中去添加,并不时真的要去

添加一个列到student表中,动态的加,临时使用

select id '编号',name '姓名',’java就业班‘ ’年级‘ from student;


1.5:查询时合并列:需求:查询两个学生的总分: 

select * from student;

----比如我想合并servlet mysql 这两个列

先:alter table student add column servlet int;

         alter table student add column mysql int;

然后:更新他的值

         update student set servlet=75,mysql=80 where id=1;

         update student set servlet=85,mysql=90 where id=2;

需求:查询两个学生的总分:

select name '姓名',(servlet+mysql)'总分'  from student;

---注意:使用合并列的字段必须是数值类型的字段,非数值类型的合并是没有合并效果的

1.6:查询去除重复记录

alter table student add column addrese  varchar(20); //我们再 去添加字段

update student set addrese='广州天河'  where id=1;

update student set addrese='广州越秀' where id=2;

再添加数据:

insert into student values(3,‘旺旺’, 30,85,89,'广州天河');

----需求:查询出有哪些地区的学生;

select addrese from student;  //查询地区的学生

select distinct addrese from student; //  distance 可以排除有重复记录的这里是用distinct关键字

select distinct(addrese)from student; //也可以这样写,只是这样写的话就是用distinct()函数

1.7:条件查询(where)

----1)逻辑条件:and        or  

需求:查询学生id为1,且姓名为’张三‘的学生

select * from student where id=1 and name='张三';

需求:查询学生的id为1,或姓名为张三的学生

select * from student where id=1or name='张三';


----2)比较条件:大于,小于,大于等于,小于等于,(between and )

需求:查询servlet分数大于80的学生

select * from student where servlet  >80;

需求:查询mysql分小于或等于85的学生

select * from student where mysql<=85;

需求:查询servlet分大于或等于80且小于或等于85

select *from student where servlet>=80 and servlet<=85;

select * from student where servlet between 80 and 85;  //   between and 等价于上面的,包括80 和包括85;

需求:查询年龄不等于30的

select * from student  where age<>30;  // 尖括号为不等。

----3)判空条件:is null, is not null ,

----null :表示没有数据

----空字符:有数据,但他的值是空字符

需求:查询出没有性别数据的学生(在这里有可能是没有性别的,也可能是空字符) 

select * from student where gender is null or gender=' ';

需求: 查出有性别数据的

select * from student where gender is not null and gender<>'  ';

-----模糊查询:like

需求: 查询出李姓的学生

select * from student where name like '李%';

select * from  student where name like ’%四%‘; //  这里是查询出名字中包含有四的

select * from student  where name like ’李_‘;//    这里是表示只有两个字符


1.8:聚合查询

---聚合函数:max(),//最大    min(),// 最小     avg(),// 平均  count() //共计几条记录

select max(servlet) from student;

select min(servlet) from student ;

select avg(servlet) from student;

select count(*) from student; 、、、、..、、// 统计studnet表有几条记录

select count(id)from student;//  统计id这个字段有值的

1.9:分页查询

mysql的分页查询关键字是limit

limit后跟2个数字第一个是起始位置,第二个是查询条数

select * from student limit n-1,数据条数

需求:有20条数据分5页,共计每页4条数据

查询第数据1到4条数据第一页(n为页数)

select * from student limit 0,4;

select * from student limit n-1,4;

1.10:查询后排序order by

desc:降序   asc :升序


1.11:分组查询

需求:查询每个地区有多少人;

假如:预期结果是:

地区有两个:人有4个

广州天河    3

广州越秀     1


select address, count(*) from student group by address;

对address 分组,分组后在统计的是每一组的数据

需求:统计男女的人数;

select gender ,count(*)  from student group by gender;// 但这样的话,假如数据库中性别那一字段,有可能一没有录默认是null ,或者是

直接录的是空字符。查询来的结果就有可能有【男   人数 ;】【女  人数】 ,【null  人数】【空字符  人数】

select gender, count(*)  from student group by gender where gender is not null and gender<>' ';////   错误的sql

因为where条件应该在分组之前

select gender, count(*)  from student  where gender is not null and gender<>'  '  group by gender;

这是分组前筛选,还有就是分组后筛选

1.12:分组查询后筛选(having)

需求: 查询那些地区的人数是大于2个的

select address,count(*) from student  group by address having coun(*)>2;

第一步:首先查出有哪些地区,(分组) 第二步:然后查询每一个地区的人数

第三步:再查询出那个地区的人数大于2;

(这是我们正常的思维逻辑)

select address  from student group by address

select address, count(*) from student group by address;

select address,count(*) from student  group by address having coun(*)>2;

(select address,count(*) from student  where count(*)>2 group by address ;)  //  为什么这里不行?因为count(*)是分组后产生的,而上题是gender 这个字段是本来就有的字段

我们只是去先选择再分组,而count(*)是因为分组后产生的;




0 0
原创粉丝点击