day04 查找关键字

昨日内容回顾

基本数据类型之日期相关类型

  1. date :年月日
  2. time :时分秒
  3. datetime:年月日时分秒
  4. year :年

基本数据类型之枚举与集合类型

  1. # 枚举
  2. 多选一(性别)
  3. enum('male','female')
  4. # 集合
  5. 多选多
  6. set('lookbook','football')

约束条件

  1. 1unsigned:无符号
  2. 2zerofill0填充
  3. 3not null:非空
  4. 4unique :唯一
  5. 5default :默认值
  6. 6primary key :主键
  7. 7auto_increment:自增 # 配置主键一起使用

约束条件之外键

  1. # 外键是用来记录表和表之间的关系
  2. # 表关系判断 换位思考
  3. 1.多对一
  4. 换位思考之后一边可以一边不可以 则为多对一
  5. 外键字段建在"多"的一方
  6. 2.多对多
  7. 换位思考之后两边都可以 则为多对多
  8. 外键字段建在第三张关系表
  9. # SQL
  10. foreign key(本表外键字段) references 另外一张表名(主键字段)
  11. on update cascade
  12. on delete cascade
  13. # 外键约束
  14. 1.在创建表的时候先创建被关联表
  15. 2.在录入数据的时候也是先录入被关联表
  16. """
  17. 外键虽然可以强行建立表关系 但是会造成表与表之间的强耦合
  18. 有时候当表特别多的情况下 可能不会使用外键来维护关系
  19. 而是通过代码层面建立逻辑意义上的关系
  20. """

今日内容概要

  1. 1、表关系之一对一
  2. 2、修改表的SQL语句补充
  3. 3、表查询关键字
  4. # 基本关键字
  5. select
  6. from
  7. where
  8. group by
  9. having
  10. distinct
  11. order by
  12. limit
  13. regexp
  14. # 多表查询关键字
  15. inner join
  16. left join
  17. right join
  18. union

表关系之一对一

  1. # 场景
  2. 客户表与学生表
  3. QQ用户表
  4. 以用户表和用户详情表为例
  5. 1、先站在用户表的基础之上
  6. 问:一个用户能否对应多个用户详情
  7. 答:不可以
  8. 2、在站在用户详情表基础之上
  9. 问:一个用户详情能否对应对个用户
  10. 答:不可以
  11. # 结论:换位思考之后两边都不可以,那么表关系有两种
  12. 1、没有关系
  13. 2、一对一关系
  14. 问题:外键字段建在哪呢?
  15. 答:理论上建在热河一方都可以,但是最好建在查询频率较高的表中
  16. 案例:
  17. create table user2(
  18. id int primary key auto_increment,
  19. name varchar(32),
  20. detail_id int unique, # 一对一,不能重复
  21. foreign key(detail_id) references user_detail(id)
  22. on update cascade
  23. on delete cascade
  24. );
  25. create table user_detail(
  26. id int primary key auto_increment,
  27. addr varchar(32),
  28. phone bigint
  29. );

操作表的SQL语句补充

  1. 1、修改表名称
  2. alter table m1 rename m2;
  3. rename table m1 to m2; # 关键字修改,rename ... to
  4. rename table m1 to m2, m3 to m4; # 可以多个修改
  5. 2、添加表字段
  6. alter table m1 add pwd int; # 关键字:add
  7. alter table m1 add hobby varchar(32) after name; # 在name字段后面添加hobby字段
  8. alter table m1 add age int first; # 在最上面添加字段
  9. 3、删除表字段
  10. alter table m1 drop age;
  11. 4、修改字段名和字段类型
  12. # modify:修改字段类型
  13. # change: 同时修改字段类型和字段名称
  14. alter table m1 modify age tinyint; # modify:修改字段类型
  15. alter table m1 change age gender int; # 把age改成gender,并修改字段类型

复制表(了解)

  1. # 查询语句执行的结果也是一张表,可以看成虚拟表
  2. 1、复制表结构+记录(key不会复制:主键、外键和索引)
  3. create table mmm select * from m7; # 数据都会复制,但是键不会复制
  4. 2、只拷贝表结构(不包含键)
  5. create table mqq select * from m7 where 1=2;
  6. 3、拷贝结构包含各种key
  7. create table mqq like m7;

单表查询准备

  1. create table emp(
  2. id int primary key auto_increment,
  3. name varchar(20) not null,
  4. sex enum('male','female') not null default 'male', #大部分是男的
  5. age int(3) unsigned not null default 28,
  6. hire_date date not null,
  7. post varchar(50),
  8. post_comment varchar(100),
  9. salary double(15,2),
  10. office int, #一个部门一个屋子
  11. depart_id int
  12. );
  13. #插入记录
  14. #三个部门:教学,销售,运营
  15. insert into emp(name,sex,age,hire_date,post,salary,office,depart_id) values
  16. ('jason','male',18,'20170301','张江第一帅形象代言',7300.33,401,1), #以下是教学部
  17. ('tom','male',78,'20150302','teacher',1000000.31,401,1),
  18. ('kevin','male',81,'20130305','teacher',8300,401,1),
  19. ('tony','male',73,'20140701','teacher',3500,401,1),
  20. ('owen','male',28,'20121101','teacher',2100,401,1),
  21. ('jack','female',18,'20110211','teacher',9000,401,1),
  22. ('jenny','male',18,'19000301','teacher',30000,401,1),
  23. ('sank','male',48,'20101111','teacher',10000,401,1),
  24. ('哈哈','female',48,'20150311','sale',3000.13,402,2),#以下是销售部门
  25. ('呵呵','female',38,'20101101','sale',2000.35,402,2),
  26. ('西西','female',18,'20110312','sale',1000.37,402,2),
  27. ('乐乐','female',18,'20160513','sale',3000.29,402,2),
  28. ('拉拉','female',28,'20170127','sale',4000.33,402,2),
  29. ('僧龙','male',28,'20160311','operation',10000.13,403,3), #以下是运营部门
  30. ('程咬金','male',18,'19970312','operation',20000,403,3),
  31. ('程咬银','female',18,'20130311','operation',19000,403,3),
  32. ('程咬铜','male',18,'20150411','operation',18000,403,3),
  33. ('程咬铁','female',18,'20140512','operation',17000,403,3);

查找关键字

  1. select:控制查询表中的哪些字段对应的数据
  2. from:控制查询的表
  3. where:筛选

查找关键字之where

  1. # where其实就是对数据进行筛选
  2. # 模糊查询:
  3. 关键字:like
  4. 关键符号:
  5. %:匹配任意个数的任意字符
  6. _:匹配单个个数的任意字符
  7. 1、查询id大于等于3小于等于6的数据
  8. select * from emp where id<=3 and id<=6;
  9. select * from emp where id between 3 and 6; # between:在两者之间
  10. 2、查询薪资是20000或者18000或者17000的数据
  11. select * from emp where salary=20000 or salary=18000 or salary=17000; # 比较繁琐
  12. select * from emp where salary in (20000,18000,17000) # 简写之后
  13. 3、查询员工姓名中包含o字符的员工姓名和薪资
  14. select name,salary from emp where name like '%o%';
  15. 4、查询员工姓名为四个字符组成的员工姓名和薪资
  16. select name,salary from emp where naem like '____';
  17. select name,salary from emp where char_length(name)=4; # 查询名字是4个字符
  18. 5、查询id小于3或者大于6的数据
  19. select * from emp where id not between 3 and 6;
  20. 6、查询薪资不在20000,18000,17000范围的数据
  21. select * from emp where salary not in (20000,18000,17000);
  22. 7、查询岗位描述为空的员工名与岗位名 # 针对null不能用等号,只能用is
  23. select * from emp where post_comment is NULL;

查询关键字之group by分组

  1. 分组:按照某个指定的条件将单个的数据分为一个个整体
  2. 比如:
  3. 按照年龄分组
  4. 按照省份分组
  5. 按照性别分组
  6. # 格式:
  7. 关键字 group by 条件
  8. # as:起别名
  9. # group_concat:用于分组之后获取分组以外的字段数据并支持拼接
  10. # concat:用于分组之前的拼接操作
  11. # concat_ws:当多个字段连接符相同的情况下推荐使用
  12. """
  13. 分组之后不再以单个个体为研究对象 也无法直接再获取单个个体的数据
  14. 研究对象应该是分组的整体
  15. 分组之后默认只能直接获取到分组的依据 其他字段数据无法直接获取
  16. 如果需要实现上述要求 还是修改sql_mode
  17. set global sql_mode='only_full_group_by';
  18. """
  19. 1、获取每个部分的最大薪资
  20. select post,max(salary) from emp group by post;
  21. select post as '部门',max(salary) as '最高薪资' from emp group by post; # as:起别名
  22. 2、每个部门的最小薪资
  23. select post as '部门',min(salary) as '最高薪资' from emp group by post;
  24. 3、统计每个部门到的人数
  25. select post as '部门',count(id) as '部门人数' from emp group by post;
  26. 4、获取每个部门的员工姓名
  27. # group_concat:用于分组之后获取分组以外的字段数据并支持拼接
  28. select post,group_concat(name,':',salary) from emp group by post;
  29. # concat:用于分组之前的拼接操作
  30. select id,concat(name,':',salary) as '呵呵' from emp;
  31. # concat_ws:当多个字段连接符相同的情况下推荐使用
  32. select id,concat_ws('|'name,post,sex,office) from emp;
  33. '''as可以省略但是为了语义更加明确建议不要省略'''

聚合函数:只能配合group by使用

  1. max() :最大值
  2. min() :最小值
  3. sun() :求和
  4. count() :计数
  5. avg() :求平均数
  6. # 上述聚合函数都是在分组之后使用 用于操作整体数据

练习题

  1. 1. 查询岗位名以及岗位包含的所有员工名字
  2. select post as '岗位',group_concat(name) as '人员' from emp group by post;
  3. 2. 查询岗位名以及各岗位内包含的员工个数
  4. select post,count(id) from emp group by post;
  5. 3. 查询公司内男员工和女员工的个数
  6. select sex,count(id) from emp group by sex;
  7. 4. 查询岗位名以及各岗位的平均薪资
  8. select post,avg(salary) from emp group by post;
  9. 5. 查询岗位名以及各岗位的最高薪资
  10. select post,max(salary) from emp group by post;
  11. 6. 查询岗位名以及各岗位的最低薪资
  12. select post,min(salary) from emp group by post;
  13. 7. 查询男员工与男员工的平均薪资,女员工与女员工的平均薪资
  14. select sex,avg(salary) from emp group by sex;

查询关键字之having过滤

  1. wherehaving都是用来筛选数据的
  2. wherehaving的区别:
  3. where:用于分组之前额筛选
  4. having:用于分组之后的过滤
  5. 1、统计各部门年龄在30岁以上的员工平均工资,并且保留平均工资大于10000的部门
  6. select post,avg(salary) from emp where age > 30 group by post having avg(salary)>10000;
  7. # 解题思路:大象放冰箱
  8. 1、统计各部门的员工平均工资
  9. select post,avg(salary) from emp group by post;
  10. 2、统计30岁以上的员工平均薪资
  11. select post,avg(salary) from emp where age > 30 group by post;
  12. 3、统计各部门年龄在30岁以上的员工平均工资,并且保留平均工资大于10000的部门
  13. select post,avg(salary) from emp where age > 30 group by post having avg(salary) > 10000;

查询关键字之distinct去重

  1. # 去重的前提是存在一模一样的数据,如果存在主键肯定无法去重
  2. select distinct id,age from emp; # 有id一定去重不了,因为存有主键
  3. select distinct age from emp; # 可以去重

查询关键字之order by排序

  1. order by 默认是升序
  2. 默认关键字:
  3. asc :升序
  4. desc:降序
  5. select * from emp order by salary asc; # 工资按升序排列
  6. select * from emp order by salary desc; # 工资按降序排列
  7. # order by支持多个字段数排序(第一个不行,接着往后排)
  8. select * from emp order by age,salary asc;
  9. select * from emp order by age asc,salary desc;

day04 查找关键字的更多相关文章

  1. 【SQL语句】 - 在所有存储过程中查找关键字,关键字不区分大小写 [sp_findproc]

    USE [EShop]GO/****** Object: StoredProcedure [dbo].[sp_findproc] Script Date: 2015/8/19 11:05:24 *** ...

  2. linux下vim编辑器查找 关键字

    在  linux  vim 编辑器 下查找   关键字 方法[一] 1?short_open_tag : 它的意思是vim 打开文件的第一行 ? : 它的意思是反向查找 short_open_tag ...

  3. .net通过iTextSharp.pdf操作pdf文件实现查找关键字签字盖章

    之前这个事情都CA公司去做的,现在给客户做demo,要模拟一下签字盖章了,我们的业务PDF文件是动态生成的所以没法通过坐标定位,只能通过关键字查找定位了. 之前在网上看了许多通多通过查询关键字,然后图 ...

  4. linux日志中查找关键字、前几行、结尾几行,Linux的find用法示例

    linux在日志中查找关键字.前几行.结尾几行,Linux的find用法示例 1.linux在日志中查找关键字.前几行.结尾几行 1.1查看日志 前 n行: 1.2查看日志 尾 n行: 1.3根据 关 ...

  5. js 查找关键字

    查找:4种: 1. 查找固定关键字,仅返回位置,可指定开始位置: var i=str.indexOf("kword"[,starti]); str.lastIndexOf(&quo ...

  6. linux grep (linux查找关键字在php出现的次数)

    http://www.th7.cn/system/lin/201508/127681.shtml 查找CleverCode在当前目录以及子目录,所有的php出现大于0的次数. # find -type ...

  7. vim查找关键字的好方法

    当你用vi打开一个文件后,因为文件太长,如何才能找到你所要查找的关键字呢?  在vi里可没有菜单-〉查找 不过没关系,你在命令模式下敲斜杆( / )这时在状态栏(也就是屏幕左下脚)就出现了 “/” 然 ...

  8. Linux - Shell - 在多个文件中查找关键字

    1. 概述 在多个文件中 查找内容 2. 想干啥 目的 在 多个文件 中, 查找内容 准备 之前在 单个文件里 查找过内容 工具 awk 前提 文件有固定格式 查找时有字段的要求 例子 # print ...

  9. sublime text多文件夹查找关键字

    Ctrl+shift+F 快捷键在文件夹内查找,与普通编辑器不同的地方是sublime允许添加多个文件夹进行查找 转自:http://www.douban.com/note/362268947/

随机推荐

  1. cat userlist(课上练习)

    问题描述 Linux文件系统的三层抽象是什么? 写出Cat userlist的过程,要详述目录文件,i-node.数据块,要画图示意. 假设块大小为4k, userlist的大小不小于10k,自己假设 ...

  2. python re:正则表达式中使用变量

    参考:https://www.cnblogs.com/songbiao/p/12422632.html Python中正则表达式的写法,核心就是一个字符串.如下:re.compile(r'表达式')所 ...

  3. fd定时器--timerfd学习

    定时器 可以用系统定时器信号SIGALARM 最近工作需要于是又发现了一个新玩意timerfd配合epoll使用. man 手册看一下 TIMERFD_CREATE(2) Linux Programm ...

  4. 滑动窗口的最大值 牛客网 剑指Offer

    滑动窗口的最大值 牛客网 剑指Offer 题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值.例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6 ...

  5. 51nod_1001 数组中和等于K的数对(二分)

    题意: 给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对.例如K = 8,数组A:{-1,6,5,3,4,2,9,0,8},所有和等于8的数对包括(-1,9 ...

  6. DeWeb部署

    DeWeb部署 部署时需要runtime中的大部分文件 需要的目录有: apps,仅包括需要部署的dll即可 dist,必须.请勿改动 media,非必须,一般媒体文件存在于此目录 upload,必须 ...

  7. 纯 CSS 自定义多行省略:从原理到实现

    文字溢出怎么展示,你的需求是什么?单行还是多行?截断,省略,自定义样式,自适应高度?在这里你都能找到答案.接下来我会由浅入深,从原理到实现,带你一步步揭开多行省略的面纱.我们先从最简单的单行溢出省略开 ...

  8. uni-app app端设置全屏背景色

    设置page:{样式},博主调试的时候在app端不起作用,设置配置文件的backgroundColor也没有用,所以博主就使用了一个稍微比较偏的办法解决了,没有用获取设备信息的api来实现 具体操作就 ...

  9. ORACLE,mysql中替换like的函数

    数据库中存储了海量的数据,当查询时使用like,速度明显变慢.我在做项目时,发现使用内部函数INSTR,代替传统的LIKE方式查询,并且速度更快. INSTR()函数返回字符串中子字符串第一次出现的位 ...

  10. CCCC-exercise

    CCCC-exercise 1.L1 总结L1 1-27里面我觉得有东西可以总结的题目 贴了部分的代码 L1-006(20) 一个正整数 N 的因子中可能存在若干连续的数字.例如 630 可以分解为 ...