格式:
select 列名*N from 表名 where 查询条件1 and/or 查询条件2 group by 列 having 分组条件 Order by 排序
规则:
sql除查询条件外,大小写都可以
从始至终,要保持大小写风格
“--”属于SQL语句的注释
所有查询条件为字符串时,需要用"进行修饰,否则就会当作列名进行解析
查询列
-- 查询表中的一列信息
select name from user
-- 查询表中的多列信息
select name , age from user
-- 查询表中的所有列信息
select * from user
为列取别名查询
--别名可以使用 '' 括起来,也可以不使用 '' 括起来
-- 查询时,为列取别名
select name 姓名 from user
-- 查询时,为多列分别取别名
select name 姓名 , age 年龄 from user
拼接查询
-- 查询多列信息进行拼接
select CONCAT(name,'的年龄:',age) 学员年龄 from user;
条件查询
普通条件查询:
= 、> 、<、!=、<>、>=、<=、between num1 and num2
-- 单一条件查询 1
select * from user where id = 100;
-- 单一条件查询 2
select * from user where job = 'monitor';
--
范围内查询
IN/NOT IN
-- 属于范围内的查询
select * from user where id IN (10,20,30,40);
-- 不属于范围内的查询
select * from user where id NOT IN (50,100,200);
空值查询
-- 空值查询
select * from user where favorite is null;
-- 非空查询
select * from user where favorite is not null;
模糊查询
like
-- % 代表任意位置的任意数量字符
select * from where name like '%g';
-- _ 代表任意字符的一次
select * from where name like '_o';
多条件连接查询
AND / OR
-- and / or
-- 即满足name,又满足id
select * from user where name = 'LNB' and id = 100;
--只要name或id满足一个
select * from user where name='wc' or id = 300;
结果排序
asc是升序排列(默认),使用desc可以降序排列
默认以 “主键” 进行排序
单列:
-- 指定以某个列 升/降排序
select * from user order by age
多列:
-- 指定多列进行排序
-- 先安装最先列进行排序后,在按照后续列进行排序
select * from user order by job,age;
-- 指定列数进行排序
-- 列数必须小于等于 所查询除的列
-- 按照第一列进行排序,即按照name进行排序
select name , age from user order by 1;
分页查询
控制一页显示的数据
-- 指定每次查询前 n 行
select * from user LIMIT 4;
-- 查询第 M 页 , 每页显示 N 个
select * from user LIMIT 0,4; -- 查询第一页,每页显示4行
select * from user LIMIT 4,4; -- 查询第二页,每页显示4行
分组
按照某一个条件进行分组,每一组返回对应的结果
group by 可以对指定的列进行分组,列尽量有相同的
having 可以对分组之后的数据进行过滤,所以能出现在having中的比较项一定是被分组的列或是组函数
底层
where称之为行级过滤,处理的是表中每一行数据的过滤
having称之为组级过滤,处理的是分组之后的每一组数据
能使用where的,尽量不要使用having
-- 按照cname进行班级分组,在每个组中列出分数最高的分值
select cname,max(grade) from class group by cname;
-- 按照cid进行分组后,并按照cname进行分组,选出平均值大于70的班级
select cid cname from class group by cid, cname having avg(grade)>70;
-- 查询哪个班级的平均分超过80
select cname,avg(grade) from class group by cname having avg(grade)>80;
-- 查询cid为10,20的平均成绩(行级过滤 优于 组级过滤)
-- 行级过滤
select cid, avg(grade) from class where cid in(10,20) group by cid;
-- 组级过滤
select cid, avg(grade) from class group by cid having cid in(10,20);
单表关键字执行顺序
select:查看哪些列的数据
from:表中获取数据
where:获取数据时进行行级过滤
group by:对数据进行分组处理,一组获取对应的结果
having:组级过滤,必须时分组条件或是组函数
order by:排序(asc、desc)
执行顺序:frome - where - group by - having - select - order by