2018-10-25数据库基础
模糊查询 like
- select * from 表名 where like '%n%';
- select * from 表名 where like '_';
- like 只对 char varchar 字符型 进行模糊查询
- 通配符
- % 代表任意多个字符(0,n)
- 代表任意一个字符 (1)
10 学生姓名 包含 马
10 SELECT * FROM gy_user
WHERE realname LIKE '%马%';
11 学生姓名以吴开头
11 SELECT * FROM gy_user
WHERE realname LIKE '吴%';
12 学生姓名包含 李
12 SELECT * FROM gy_user
WHERE realname LIKE '%李%';
13 姓名包含静的学生
13 SELECT * FROM gy_user
WHERE realname LIKE '%静%';
14 姓名是两个字符的学生
14 SELECT * FROM gy_user
WHERE realname LIKE '';
15 姓名最后一位 是民的学生
15 SELECT * FROM gy_user
WHERE realname LIKE '%民';
16 姓名第二位为 春的学生姓名
16 SELECT * FROM gy_user
WHERE realname LIKE '春%';
17 姓名只有三个字符的学生
17 SELECT * FROM gy_user
WHERE realname LIKE '__';
18 姓名是 马什么梅的
18 SELECT * FROM gy_user
WHERE realname LIKE '马%梅';
19 姓名是 马东什么
19 SELECT * FROM gy_user
WHERE realname LIKE '马东%';
20 姓名是 什么冬梅
20 SELECT * FROM gy_user
WHERE realname LIKE '%冬梅';
24 姓名 不包含 什么康健
24 SELECT * FROM gy_user
WHERE sname NOT LIKE ('%康健');
26 导师不包含 李什么
26 SELECT * FROM gy_user
WHERE teacher NOT LIKE ('李%');
28 查询 公司名称 包含上海 或者地址在上海的
28 SELECT * FROM gy_user
WHERE NAME LIKE'%上海%' OR address LIKE '%上海%';
29 查询 公司名称 包含阿里 地址在 上海金融中心的
29 SELECT * FROM gy_user
WHERE NAME LIKE '%阿里%' AND address LIKE '%上海金融中心%';
-
not like 表示不包含
14245353-e29f7b4431008d8f.png
null的使用
SELECT * FROM gy_user
WHERE sname IS NULL ; -- 为空
SELECT * FROM gy_user
WHERE sname IS NOT NULL; -- 不为空
in的使用
同一个字段有多个筛选条件,每个条件都需要用英文的逗号分隔开
SELECT * FROM 表名 WHERE 条件 IN (值1,值2,值3);
14245353-1c45a9dee7a6861c.png
14245353-ac412421a722111a.png
-
对多个字段的多个筛选条件,每个条件都需要用英文的逗号进行分隔
14245353-edd10d00e2ed60c9.png - 不能对null进行筛选
21 查询学生id 是77 88 99 111
21 SELECT * FROMgy_user
WHERE id = 77 OR id=88 OR id=99 OR id =111;
SELECT * FROMgy_user
WHERE id IN (77,88,99,111);
22 查询学生年龄 是 23 30
22 SELECT * FROMgy_user
WHERE age = 23 OR age =30;
SELECT * FROMgy_user
WHERE age IN (23,30);
23 查询学生省份 是 安徽 重庆
23 SELECT * FROMgy_user
WHERE address = '安徽' AND address ='重庆';
SELECT * FROMgy_user
WHERE address IN ('安徽','重庆');
25 编号 不在 05 10 15 20
25 SELECT * FROMgy_user
WHERE sno NOT IN (05,10,15,20);
27 导师不在 李素云 马超 刘程旭
27 SELECT * FROMgy_user
WHERE teacher NOT IN ('李素云','马超','刘程旭');
30 查询 公司地址 包含 重庆或者包含 成都 或者上海的
30 SELECT * FROMgy_user
WHERE address IN ('重庆','成都','上海');
排序 order by
-
order by 后面跟字段名 +升序/降序
select * from 表名 order by (sno /age.....)asc/desc -
多个排序用 , 来进行分隔,优先运行前面的排序条件
14245353-ef6ea3e3ffb3f0c7.png
SELECT * FROMgy_user
ORDER BY age ASC; -- 排序升序
SELECT * FROMgy_user
ORDER BY age DESC ; -- 排序降序
SELECT * FROMgy_user
WHERE age>18 ORDER BY age ASC;
-- 以编号查询降序排序
SELECT * FROMgy_user
ORDER BY sno ASC;
SELECT * FROMgy_user
ORDER BY sno DESC;
-- 带判断条件升序排序
SELECT * FROMgy_user
WHERE realname LIKE '%吴%' ORDER BY age ASC ;
-- 30.查询真真实姓名的姓氏为张王李杨的学生,按照年龄倒序排序,只显示真实姓名,年龄
SELECT realname,age FROMgy_user
WHERE realname LIKE '张%'OR '王%'OR realname LIKE'李%'OR realname LIKE'杨%' ORDER BY age DESC;
-- 35.查询用户表 姓名为单字的,对真实姓名去重,根据年龄倒序排序
SELECT DISTINCT realname FROMgy_user
WHERE realname LIKE '_' ORDER BY age DESC;
-- 38.查询用户表年龄大于20,班级类型为1,以id倒叙排序,以年龄正序排序
SELECT * FROMgy_user
WHERE age>20 AND class_type = '1' ORDER BY sno DESC ,age ASC;
limit的使用
只能在mysql里面使用,oracle数据库中用 rownum,sqlSever数据中用top
限制限制条目数量
查询结果是以 0 为起始序号
格式 select * from 表名 limit n,m; (n表示起始位置,m表示展现m条数据)
-- 限制条目数
SELECT sno FROM
gy_user
WHERE sno>50 LIMIT 10,100;
去重 distinct
- 语法: select distinct 字段名 from 表名
-- 去重
SELECT DISTINCT realname FROMgy_user
;
-- 31. 查询用户名包含guoya的用户,并且根据真实姓名去重
SELECT DISTINCT realname FROMgy_user
WHERE sname LIKE '%guoya%';
-- 35.查询用户表 姓名为单字的,对真实姓名去重,根据年龄倒序排序
SELECT DISTINCT realname FROMgy_user
WHERE realname LIKE '_' ORDER BY age DESC;
-- 40.查询用户编号100-500区间,微信号不为空,以年龄倒叙,用户名去重显示。
SELECT DISTINCT sname FROMgy_user
WHERE (sno BETWEEN 100 AND 500) AND weichat IS NOT NULL ORDER BY age DESC;
分组 group by
- select 分组名,聚合函数(字段名) from 表名 group by 分组名 having 聚合函数(字段名) 条件
- 对聚合函数过滤只能用having
- 只能对展示分组字段和聚合函数
- 聚合函数 count,sum,avg,max,min。
14245353-a2cc76cd76b93cef.png
14245353-b77b5715914500f5.png
-- 统计条目数 count ()
SELECT COUNT(sno) FROMgy_user
;
-- 统计最大 max ()
SELECT MAX(sno) FROMgy_user
;
-- 统计最小 min ()
SELECT MIN(sno) FROMgy_user
;
-- 统计平均值 avg ()
SELECT AVG(sno) FROMgy_user
;
-- 求和 sum ()
SELECT SUM(sno) FROMgy_user
;
-- 求每一个班级的总年龄
SELECT SUM(age),class_type FROM gy_user
GROUP BY class_type;
-- 求每一个班级的平均年龄
SELECT AVG(age),class_type FROM gy_user
GROUP BY class_type;
-- 求每一个学历的最大年龄
SELECT MAX(age),education FROM gy_user
GROUP BY education;
-- 求每一个学历的平均年龄
SELECT AVG(age),education FROM gy_user
GROUP BY education;
-- 查询班级最大年龄大于32的班级
SELECT class_type,MAX(age) FROMgy_user
GROUP BY class_type HAVING MAX(age)>32;
-- 查询各班级中平均年龄大于25的班级
SELECT class_type,AVG(age)FROM gy_user
GROUP BY class_type HAVING AVG(age)>20;
-- 查询不同学历的各自人数
SELECT education ,COUNT(sno) FROM gy_user
GROUP BY education;
-- 查询不同学历 最小年龄 小于30的学历
SELECT education ,MIN(age) FROM gy_user
GROUP BY education HAVING MIN(age)<30;
-- 查询班级中平均年龄大于20的班级
SELECT class_type,AVG(age) FROM gy_user
GROUP BY class_type HAVING AVG(age)>20;
-- 查询各班级中最小年龄大于2的班级
SELECT class_type,MIN(age) FROM gy_user
GROUP BY class_type HAVING MIN(age)>2;
-- 查询各班级中平均年龄小于23的班级
SELECT class_type,AVG(age) FROM gy_user
GROUP BY class_type HAVING AVG(age)<23;
-- 查询各班级中 年龄总和小于500的班级
SELECT class_type,SUM(age) FROM gy_user
GROUP BY class_type HAVING SUM(age)<500;
14245353-7ed08adbda42a9b0.png