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 '%上海金融中心%';

14245353-c39d1ef625f7711e.png
  • 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 * FROM gy_user WHERE id = 77 OR id=88 OR id=99 OR id =111;
    SELECT * FROM gy_user WHERE id IN (77,88,99,111);
    22 查询学生年龄 是 23 30
    22 SELECT * FROM gy_user WHERE age = 23 OR age =30;
    SELECT * FROM gy_user WHERE age IN (23,30);
    23 查询学生省份 是 安徽 重庆
    23 SELECT * FROM gy_user WHERE address = '安徽' AND address ='重庆';
    SELECT * FROM gy_user WHERE address IN ('安徽','重庆');
    25 编号 不在 05 10 15 20
    25 SELECT * FROM gy_user WHERE sno NOT IN (05,10,15,20);
    27 导师不在 李素云 马超 刘程旭
    27 SELECT * FROM gy_user WHERE teacher NOT IN ('李素云','马超','刘程旭');
    30 查询 公司地址 包含 重庆或者包含 成都 或者上海的
    30 SELECT * FROM gy_user WHERE address IN ('重庆','成都','上海');

排序 order by

  • order by 后面跟字段名 +升序/降序
    select * from 表名 order by (sno /age.....)asc/desc

  • 多个排序用 , 来进行分隔,优先运行前面的排序条件

    14245353-ef6ea3e3ffb3f0c7.png

    SELECT * FROM gy_user ORDER BY age ASC; -- 排序升序
    SELECT * FROM gy_user ORDER BY age DESC ; -- 排序降序
    SELECT * FROM gy_user WHERE age>18 ORDER BY age ASC;
    -- 以编号查询降序排序
    SELECT * FROM gy_user ORDER BY sno ASC;
    SELECT * FROM gy_user ORDER BY sno DESC;
    -- 带判断条件升序排序
    SELECT * FROM gy_user WHERE realname LIKE '%吴%' ORDER BY age ASC ;
    -- 30.查询真真实姓名的姓氏为张王李杨的学生,按照年龄倒序排序,只显示真实姓名,年龄
    SELECT realname,age FROM gy_user WHERE realname LIKE '张%'OR '王%'OR realname LIKE'李%'OR realname LIKE'杨%' ORDER BY age DESC;
    -- 35.查询用户表 姓名为单字的,对真实姓名去重,根据年龄倒序排序
    SELECT DISTINCT realname FROM gy_user WHERE realname LIKE '_' ORDER BY age DESC;
    -- 38.查询用户表年龄大于20,班级类型为1,以id倒叙排序,以年龄正序排序
    SELECT * FROM gy_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条数据)

14245353-092fdcb05b7b703b.png

-- 限制条目数
SELECT sno FROM gy_user WHERE sno>50 LIMIT 10,100;

去重 distinct

  • 语法: select distinct 字段名 from 表名
    -- 去重
    SELECT DISTINCT realname FROM gy_user;
    -- 31. 查询用户名包含guoya的用户,并且根据真实姓名去重
    SELECT DISTINCT realname FROM gy_user WHERE sname LIKE '%guoya%';
    -- 35.查询用户表 姓名为单字的,对真实姓名去重,根据年龄倒序排序
    SELECT DISTINCT realname FROM gy_user WHERE realname LIKE '_' ORDER BY age DESC;
    -- 40.查询用户编号100-500区间,微信号不为空,以年龄倒叙,用户名去重显示。
    SELECT DISTINCT sname FROM gy_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) FROM gy_user;
    -- 统计最大 max ()
    SELECT MAX(sno) FROM gy_user;
    -- 统计最小 min ()
    SELECT MIN(sno) FROM gy_user;
    -- 统计平均值 avg ()
    SELECT AVG(sno) FROM gy_user;
    -- 求和 sum ()
    SELECT SUM(sno) FROM gy_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-a79684f8fca4719a.png

14245353-7ed08adbda42a9b0.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 今天,又发现自己拥有很有意思的一件事,是,很不喜欢很不专业的自己。 不专业针对的不是自己的专业——美术,或室内设计...
    狩望轮回阅读 268评论 0 0
  • linux系统学习的心得 之前用电脑都是可视化出来的图标,除了打字和一些快捷键,所有操作都是鼠标点点点点点。。。。...
    寂静之巅阅读 418评论 0 1
  • 1月13日精进,今日体验:干活的时候,试用精心保,慢慢融入平常的干活习惯,也就不那么难了!
    京心达田佳阅读 169评论 0 0
  • 工作 1:本月销售目标-- 6万 本月完成--51635 达成百分率--85% 2:产品陈列及卫生状...
    曾经_d6b8阅读 162评论 0 0