复习:
① 创建数据库 xx: create database xx;
② 使用数据库 xx : use xx;
③ 创建表 xx:
create table xx(
列名 列类型 not null auto_increment ,
列名 列类型,
列名 列类型
)
④ 删除表:drop table xx;
⑤ 删除数据库drop database xx;
⑥ auto_increment 为自增通常和主键约束(primary key(id主键列)) 搭配使用,目的是:不重复,给每行数据 一个唯一标识。
⑦ 为pet表添加一条记录:
insert into pet values( 1,'旺财','公','牧羊犬',2 );
insert into pet(pname,psex,type,age ) values( '旺财','公','牧羊犬',2 );
⑧ 更新数据操作
为名字为‘旺财2’的宠物添加pid
update pet set pname=‘旺财2’ where pid=2
所有的宠物 年龄加1
update pet set age=age+1
删除 id 是4 的数据
delete from pet where pid=4
查询
- 查询格式:select 列 ,列… from 表 where 条件;
例:
select pid,pname ,psex ,age from pet where age>=5 ;
select * from pet; - 起别名格式:列 as ‘别名’(as 可以省略 ‘’ 或 ""都行 )
例:
Select pid ,pname ‘姓名’ ,pname from pet
Select pid,pname as “姓名” ,pname from pet
select stu.sno from s_student as stu
SELECT SNO sno,SNAME sname FROM s_student - 排序:order by 列 asc 或DESC(通常放在查询的最后面,默认是 asc 升序)
例:select * from pet where psex='公' order by age desc ;
(先按照 性别排序,然后相同性别的情况下,再根据年龄排序)select * from pet order by psex DESC , age asc;
(根据性别降序,年龄升序进行排序查询) - Where:后面加查询条件 ;and:并且;or:或者
例:
查询 公的 并且 年龄大于5岁的宠物
select * from pet where psex=‘公’ and age>5
查询 公的 或者 年龄大于5岁的宠物
select * from pet where psex='公' or age>5
(> < >= <= 不等于 : != , <>)
查询所有公的的宠物
select * from pet where psex !='母'
select * from pet where psex <> '母'
- 查询 空不空
查询 所有 没有 生日的 宠物
select * from pet where birthday is null;
select * from pet where birthday is not null;
- 将 pet 表 添加 一列 birthday date 类型
ALTER table pet add COLUMN birthday date;
7)关键字in:列 in (值1,值2,值3…)
查询列的值在括号中的记录:适用于不连续的、有限个数的值
例:查询 宠物年龄 是 3或5或7 的 记录
select * from pet where age =3 or age=5 or age=7;
select * from pet where age in (3,5,7) -- 查询 年龄段 是 3~7 的 宠物记录
select * from pet where age>=3 and age<=7
8)between and 查询格式:列 between 值1 and 值2 :
查找 列的值 是 值1 到值2 的范围的值(包含端点)select * from pet where age BETWEEN 3 and 7;
相比较( age>=3 and age<=7)高效一些
9) like 模糊查询 :格式 :列 like ‘%值%’
‘%’代表任意个任意字符(0~无穷)
‘_’代表任意一个字符
例:select * from pet where pname like '___'
练习:
① 查询 生日 是 1976-01-23 以后出生的人
SELECT * FROM s_student WHERE SBIRTH >'1976-01-23';
② 查询 95031 班的所有 男生
SELECT * FROM s_student WHERE SSEX = '男' AND CLASSES =’95031 ’
③ 查询 姓曾的 人
SELECT * FROM s_student WHERE SNAME LIKE '曾%'
④ 查询 姓曾的 并且是3个字的人
SELECT * FROM s_student WHERE SNAME LIKE '曾__'
⑤ 查询 学号在 105 ~108 的 学生信息
SELECT * FROM s_student WHERE SNO BETWEEN 105 AND 108
⑥ 查询 学号是 101 , 102, 103 ,104 这样的人
SELECT * FROM s_student WHERE SNO IN ( 101 , 102, 103 ,104)
或SELECT * FROM s_student WHERE SNO BETWEEN 101 AND 104
10)distinct:行级的去重复,将结果级中的行数据比较重复的干掉
SELECT DISTINCT psex, type from pet;
11)多行函数 (聚合函数 方法) 会将结果集进行统计汇总变成一行
常见的聚合函数:avg()、max()、min() 、sum() 、count()
例:
select count(*),max(age),min(age),avg(age),sum(age) from pet ;
select count(*) from pet where psex='公'
select count(birthday) from pet where psex='公'
注意 :
1、count(列名 或 ) 如果是列名统计的是非null的记录数
2、count () 就是统计记录数量
3、使用聚合函数不建议加其他的非聚合函数的列
4、聚合函数不能直接用在where 后面
如: select max(age),pname from pet;(无意义)
12)分组格式:group by 列 having 条件
① 宠物按照性别分组
select count(*) ,avg(age) ,max(age) ,psex from pet group by psex;
② 统计一下各班级的人数信息
Select classes ,count(*) from s_student group by classes ;
③ 统计一下各班 男生人数,且班级按降序排列
select classes,count(*) '人数' from s_student where ssex='男' group by classes order by classes desc;
④ 统计男生人数大于2的班级及其人数
select classes,count(*) '人数' from s_student where ssex='男' group by classes having count(*)>2;
练习:
统计每个品种的宠物数量;
SELECT type,COUNT(*) FROM pet GROUP BY type
统计 每个品种中 名字中带财的宠物数量 ;
SELECT type,COUNT(*) FROM pet WHERE pname LIKE "%财%" GROUP BY type
统计 每个品种的宠物数量找出宠物数量大于2 的品种;
SELECT type,COUNT(*) FROM pet GROUP BY type HAVING COUNT(*)>2
统计每个品种每种性别的宠物数量 ;
SELECT psex ,type,COUNT(*) FROM pet GROUP BY type,psex