一、基本查询语句
对学生管理系统中的字段进行基本的查询
1、查询所有字段
语法:select * from 表名
select * from student
2、查询指定字段
语法:select 字段名 from 表名
select name from student
3、使用as给字段起别名
语法:select 字段名 as 别名 from 表名
select name as 姓名 from student
4、使用as给表起别名
语法:select 字段名 from 表名 as 别名
select name from student as st
5、清除重复行
语法:select distinct 字段名 from 表名
select distinct age from student
二、条件查询语句
1、where
语法:select 字段名 from 表名 where 条件
查询年龄为18岁的人名
select name from student where age = 18
2、比较运算符(> < = !=)
select name from student where age != 18
3、逻辑运算符(and、or、not)
select name from student where age=18 and not gender=‘男’
4、模糊查询
like 语法:select 字段名1 from 表名 where 字段名2 like ’ like条件’
1)、%替换零个或多个
–例:查询以小开头的信息–
select * from student where name like ‘小%’
2)、下划线是一个占位符
–例:查询以小开头名字为两个字的学生信息–
select * from student where name like ‘小_’
–例:查询两个字以上的学生信息–
select * from student where name like
not like语法:select 字段名1 from 表名 where 字段名2 not like ’ like条件(上面两个例子适用)’
rlike:是正则匹配方式
1)、.单个字符
2)、*0个或者多个前一个字符
3)、^以…开头
4)、$以…结尾
5)、[abc]取一个
6)、{n}前边字符匹配n次
三、范围查询语句
1、in在一个非连续的范围内(not in)
–例:查询id号在1,3,8范围内的学生的姓名和年龄
select name,age from student where id in{1,3,8}
not in查询不在一个非连续的范围内
2、between…and…在什么到什么范围内,连续查询(not between…and…)
–例:查询年龄在18-20岁之间学生的姓名
select name from student where age between 18 and 20
3、isnull判断空(is not null)
–例:查询年龄为空的学生的姓名
select name from student where age is null
四、排序查询语句
语法:order by 字段 排列方式
——asc 从小到大 正序
——desc 从大到小 倒序
——在排列过程中遇到相同值时会按照主键进行排序
1、单个字段
–例:将年龄在18-34岁之间的男性按照年龄正序排序
select * from student where age between 18 and 34 and gender = ‘男’ order by age asc
2、多个字段
–例:按照年龄正序排序,并按照身高倒序排列
select * from student order by age asc,height desc
五、聚合函数
——count 求总数
——例:select count(name) from student
——max 求最大值
——min 求最小值
——sum 求和
——avg 求平均值
——round 四舍五入
——例:select round(avg(age),2) from student
六、分组查询
1、分组中的特殊情形
执行语句:select * from table group by name 语句报错
由于该表分组后拿到的虚拟表,name字段每个单元格只有一个值,而id和number字段每个单元格存在多个值,而关系数据库就是基于关系的单元格不允许有多个值,所以select * 会报错
——应用:如果出现过滤条件,可以先使用where 再group by或者 先group by再having
1、get_concat()
–在mysql中,可以使用group_concat 把分组(虚拟表)各个字段显示出来
——例:按照性别进行分组
2、where、having
–where是对原表数据进行判断
–having 表示对分组进行条件判断,是进行分组之后再判断
3、多字段分组
–就是把多个字段看成一个整体
——(1,'女’)(2,‘男’)…看成整体
4、group by和order by同时使用
——例子:明确使用顺序
select gender,group_concat(name,age,height) from student group by gender having avg(age)>8 order by count(height)
七、分页查询
–limit start,count–直接限制查询出来的个数
——start 是从第几条开始默认是0 count时返回几条数据
——带一个参数的limit 指定从查询结果的首行开始,唯一的参数表示返回的行数,如limit n和limit 0,n等价
——带两个参数的limit可以返回从任何一个位置开始的指定行数
——例:带一个参数:查看年龄小于18岁的五条数据
——例:带两个参数
——注意:limit 必须放在最后
——顺序:where–>order by–>limit
八、连接查询
——即多表之间进行关联查询
1、内连接,即取交集
——inner join…on on意味着条件
——using简化 join on
2、外连接
——包括左连接,右连接,全连接
——左连接
——left join … on on意味着条件
——以左表为基准查询信息,没有的默认为 null
——left 是指 left 左边的数据表
——以student为左表进行查询
——右连接
——right join … on on意味着条件
——全连接
——union 实现全连接 select 语句必须有相同数量的列,并且数据类型要相似
——union 只保留唯一值
——union all全部保留
——交叉连接
——cross join 也称笛卡尔积
——不带where条件子句,他将返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积
其实就是,左表所有的数据都和右表匹配一遍!
——自关联
九、子查询
子查询其实就是一个select中嵌套一个select
——查询学生表中年龄最大的学生的姓名
——查询学生的姓名的id在学生表中的学生的姓名
——查询出年龄等于最大值并且性别为男的学生的姓名