**查询 select
1.查询所有字段
select * from 表名
2.查询某一个字段
1.基于表
select 字段名,字段名 from 表名
2.基于表达式
select 表达式,表达式;
select 3+5,3*5;
3.基于函数
--查看当前的数据库
select database();
--查看当前时间
select now();
--查看当前的用户名
select user();
--查看当前数据库的版本
select version();
**3.**给字段起别名
select 字段名 [as]别名 from 表名;
**4.**给表起别名
select 别名.字段名 from 表名 as 别名;
select a.username from admin as a;
5.数据库.表名:
select username from news.admin;
**6.**完整格式
select 字段名 from 表名
[join条件]
[where条件]
[group by分组]
[having字段(二次筛选)]
[order by字段升序降序]
[limit限制]
7.where****条件
1.比较:> < = != <> <= >=
select * from admin where id>=2;
2.is[not] null
select * from admin where username is not null;
3.[not]between …and
4.[not]in(值1,值2,值3);
select * from admin where id in(1,2,3);
5.like ‘字符串’ 模糊查询
–查询admin表用户名是 姓张 开头
1._:匹配一个字符
2.%:匹配0个1个或者多个字符
select * from admin where username like '张_';
select * from admin where username like '张%';
--查询用户名中第二个字是张的用户
select * from admin where username like '_张%';
8.[group by分组]
原理:对字段相同的值进行分组,显示分组相同的值得一个结果 一般字段分组的那个字段结合聚合函数使用聚合函数
1.count(字段名):获得每组的个数(count(*))包含null的值
2.avg(字段):获得每组的平均数
3.max(字段):最大值
4.min(字段):最小值
5.sum(字段):求每组的和
9.having 字段:二次过滤
说明:
1.where条件对字段过滤
2.having条件是对一个结果的过滤,一般结合group by使用
1.order by 字段名
升序:asc【默认】
降序:desc
select * from admin order by id desc;
2.limit [偏移量][长度]:获取前多少条的记录(新闻数量)
说明:
1.偏移量 offset 起始编号从0开始
2.长度:获取的记录数
3.计算偏移量
第一页: 偏移量0 limit 0,5;
第二页: 偏移量5 limit 5,5;
第三页: 偏移量10 limit10,5;
偏移量=(当前页-1)*长度
**3.**多表联合查询
1.格式
select 字段名,字段名
from 表1
连接类型 表2
on 两个表的逻辑关系
连接类型 表2
on 两个表的逻辑关系
–管理员表
create table cms_admin(
id int unsigned key auto_increment,
username varchar(10) not null unique,
password char(32) not null,
sex tinyint not null default 0,
age tinyint not null
);
–创建cms_type
create table cms_type(
id int unsigned key auto_increment,
tname varchar(10) not null unique
);
–创建cms_news
create table cms_news(
id int unsigned key auto_increment,
title varchar(30) not null,
content text not null,
aid int not null,
tid int not null,
addtime timestamp not null default current_timestamp
);
–1.查询cms_admin,cms_type,cms_news
– 字段:新闻id,发布人是谁,新闻的标题
select n.id,username,title
from cms_admin as a
join cms_news as n
on a.id = n.aid
join cms_type as t
on t.id=n.tid;
–2.查询每个管理员发布的新闻数量
–字段:管理员id,管理员名称,发布新闻的数量
select a.id,username,count(*)
from cms_admin as a
join cms_news as n
on a.id = n.aid
group by n.aid;
–3.每个分类下发布的新闻个数
–字段:分类的id 分类的名称 新闻个数
select t.id,tname,count(*)
from cms_type as t
join cms_news as n
on t.id = n.tid
group by n.tid;
–4.查询cms_news,分类编号是2
– 的 按照addtime降序排序 的前2条记录
select * from cms_news
where tid=2
order by addtime desc
limit 0,2;