赞
踩
基础查询
查询所有字段
语法格式
select * from 表名;
列:查询所有学生数据
select * from students;
查询部分字段
语法格式
select 字段1,字段2,... from 表名;
列:查询所有学生的姓名、性别、年龄
select name,sex,age from students
起字段别名
语法格式:
select 字段1 as '别名1' from students;
列:给名字取别名
select name as '别名1' from students;
select name 别名1 from students;【as 关键字可以省略】
去重
语法格式:
select distinct 字段1,... from 表名;
列:显示所有学生的性别,不显示重复的数据
select distinct sex from students;
复杂查询
条件查询:按照一定条件筛选需要的结果
语法格式:
select 字段1,字段2... from 表名 where 条件;
条件构成(where后面支持多种运算符,进行条件的处理)
比较运算
等于:=、大于:>、大于等于:>=、小于:<、小于等于:<=、不等于:!= 或 <>
列1:查询小巧的年龄
select age from students where name='小巧';
列2:查询20岁以下的学生
select * from students where age<20;
列3:查询家乡不在北京的学生
select * from students where hometown!='北京';
逻辑运算
and、or、not
列1:查询年龄小于20的女同学
select * from students where age<20 and sex='女';
列2:查询女学生或'1班'的学生;
select * from stidents where sex='女' or class='1班';
列3:查询非天津的学生
select * from students where not hometoem='天津';
模糊查询
like、%标识任意多个任意字符、_表示一个任意字符
列1:查询姓孙的学生
select * from students where name like '孙%';
列2:查询姓孙且名字是一个字的学生
select * from students where name like '孙_';
列3:查询姓名以乔结尾的学生
select * from students where name like '%乔';
列4:查询姓名含白的学生
select * from students where name like '%白%';
范围查询
in表示在一个非连续的范围内,格式为in(......)
between...and... 表示在一个连续的范围内
列1:查询家乡是北京或上海或广东的学生
select * from students where hometown in('北京','上海','广东')
列2:查询年龄为18至20的学生
select * from students where age between 18 and 20;
判断空
判空is null
判非空is not null
列1:查询没有填写身份证的学生
select * from students where card is null;
列2:查询填写了身份证的学生
select * from students where card is not null;
排序:按照一定的排序规则筛选所需结果
语法格式:
select * from 表名
order by 列1 asc|desc,列2 asc | desc,...
默认按照列值从小到大排序
asc从小到大排序,既升序
desc从大到小排序,既降序
列1:查询所有学生信息,按年龄从小到大排序
select * from students order by age
列2:查询所有学生信息,按年龄从大到小排序,年龄相同时,再按学号从小到大排序
select * from students order by age desc,studentNo
聚合函数:对一组数据进行计算得到一个结果的实现方法
使用聚合函数方便进行数据统计
聚合函数不能在where子句中使用
常用聚合函数
count():查询总记录数
max():查询最大值
min():查询最小值
sum():求和
avg():求平均值
查询总记录数
列:查询学生总数
select count(*) from students;
分组:在同一属性(字段)中,将值相同的放到一组的过程
语法格式:
select 字段1,字段2,聚合... from 表名 group by 字段1,字段2...
注意:
1.一般情况,使用哪个字段进行分组,那么只有该字段可以在 * 的位置处使用
2.分组操作多和聚合函数配合使用
列1:查询各种性别的人数
select sex,count(*)from students group by sex;
列2:查询每个班级中各种性别的人数
select class,sex,count(*)from students group by class,sex
分组后的数据筛选
语法格式
select 字段1,字段2,聚合... from 表名
group by 字段1,字段2,字段3...
having 字段1,... 聚合...
列:查询男生总人数
select count(*) from students where sex='男'
select sex,count(*) from students group by sex having sex='男'
【where与having】
【where是对from后面指定的表进行数据筛选,属于对原始数据的筛选】
【having是对group by 的结果进行筛选】
【having后面的条件中可以用聚合函数,where后面不可以】
分页:对大批量数据进行设定数量展示的过程
语法格式:
select * from 表名 limit start,count
limit 分页
从start开始,获取count条数据
start索引从0开始
列:查询前3行学生信息
select * from students limit 0,3
【数据库的表名规范为:项目简称+表的内容+附加内容】
【例如:tp_goods_attr】
【含义:thshop商城_商品_属性】
连接查询:将不同的表通过特定关系连接的过程
分为:内连接、左连接、右连接、自关联
内连接:查询的结果为两个表匹配到的数据
左连接:查询的结果为两个表匹配到的数据加左表特有的数据,对于右表中不存在的数据使用null
右连接:查询的结果为两个表匹配到的数据加右表特有的数据,对于左表中不存在的数据使用null
内连接
语法格式
select * from 表1
inner join 表2 on 表1.列=表2.列
注意:两张表中有对应关系的数据都会显示出来,没有对应关系的数据均不在显示
举例说明:
列1:查询学生信息及学生的成绩
select * from students stu
inner join scores sc on stu.studentsNo = sc.studentNo
扩充:给表起别名(1>缩短表名利于编写 2>用别名给表创建副本)
列2:查询课程信息及课程的成绩
select * from courses cs inner join scores sc on cs.courseNo = sc.courseNo
列3:查询学生信息及学生的课程对应的成绩
select * from students stu inner join scores sc on studentNo = sc.studentNo
inner join coures cs on cs.courseNo = sc.courseNo
列4:查询王昭君的成绩,要求显示姓名、课程号、成绩
select stu.name,sc.courseNo,sc.score from students stu
inner join scores sc on stu.studentNo = sc.studentNo where stu.name ='王昭君'
左连接
语法格式
select * from 表1
left join 表2 on 表1.列=表2.列
注意:以 left join 关键字为界,关键字左侧表为主表(都显示),而关键字右侧的表为从表(对应内容显示,不对应为null)
举例说明:
列1:查询所有学生的成绩,包括没有成绩的学生
select * from students stu left join scores sc on stu.studentNo = sc.studentsNo
列2:查询所有学生的成绩,包括没有成绩的学生,需要显示课程名
select * from students stu left join scores sc on stu.studentsNo = sc.studentsNo
left join courses cs on cs.courseNo = sc.courseNo
右连接
语法格式
select * from 表1
right join 表2 on 表1.列=表2.列
注意:以 right join 关键字为界,关键字右侧表为主表(都显示),而关键字左侧的表为从表(对应内容显示,不对应为null)
补充:存在左右连接的必要性
说明:能够体现左右连接必要性的场景为:至少为三张表进行查询
注意:实际工作中,最多就三张表连接查询
自关联:将同一表通过特定关系连接的过程
注意:1>数据表只有一张 2>数据表中至少有两个字段之间有某种联系
方式:通过给表起别名的形式,将原本只有一张的数据表变为两张,然后通过对应字段实现连接查询即可
子查询:在一个查询套入另一个查询的过程
子查询:在一个 select 语句种,嵌入了另一个 select 语句,那么嵌入的 select 语句称之为子查询语句
作用:子查询是辅助主查询的,要么充当条件,要么充当数据源
列1:查询大于平均年龄的学生
查询班级学生平均年龄
select avg(age) from students
查询大于平均年龄的学生
select * from students where age > (select avg(age) from students);
列2:查询小明的成绩,要求显示成绩
学生表中查询小明的学号
select tudentsNo from students where name='小明'
成绩表种根据学号查询成绩
select * from scores where studentNo = '001'
select * from scores
where studentNo = (select tudentsNo from students where name='小明');
学习sql练习题获取网站
力扣、牛客网
【以上均为网上视频学习笔记,如有侵权请告知,立马删】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。