SQL语句查询关键词

select
指定需要查询的字段信息
select * *代码所有字段
select id 查询id字段
select id,name 可同时查询多个字段
select char_length(name) 支持对字段做处理
# 查询name字段 每个数据字符的长度
from
指定需要查询的表信息
from L1; 查询数据来源于l1表格
from db2.l1; 通过库名.表名方式表示 SQL语句中关键字的执行顺序和编写顺序并不是一致的 可能会错乱
eg:select id,name from l1;
#查询 id和name 字段 查询的表格是l1; 我们先写的是需要查询的字段 select 后面再写的查那个表 from 但是其实底部执行是 先运行from 找到我们要查询的表 再执行 select进行筛选 编写查询sql语句小技巧
针对select 后面具体要查询的字段名可以先不确定 from写完后再来填写也可以 """
SQL语句的编写类似于代码的编写 不是一蹴而就的 也需要反反复复的修修补补
"""

查询关键字之where筛选

where筛选之 and or not in like is

1.查询id大于等于3 小于等于6的数据
select id from l1 where id >=3 and id<=6;
# 需要查询的字段 id 查询数据来源 from L1 筛选 id >=3 and id<=6;
# 支持逻辑运算符 and or not 关键词 between (之间) select id from l1 where id between 3 and 6;
# 查询id 来源于L1表 筛选 id 在 3到6之间的 2.查询薪资是200或者1800或者1700的数据
select salary from l1 where salary in (200,1800,1700)
# in 方法 等于 salary=20000 or salary=18000 or salary=17000 3.查询id小于3和大于6的数据
select id from l1 where id<3 or id>6;
# or 方法 和 或 的意思 4.查询员工姓名中包含字母o的员工姓名与薪资
select name,salary from l1 where name like '%o%';
模糊查询关键字:like
like '模糊查询条件'
% 匹配任意个数字符 '%o' 已o结尾的任意数据
'o%' 已o开头的任意数据
'%o%' 包含o的任意数据 5.查询员工姓名是由四个字符组成的员工姓名与其薪资
select name,salary from l1 where name like '____';
_ 表示任意的一个字符
'___' 匹配3个字符
'o___' 已o开头后任意3个字符 eg:owen select name,salary from l1 where char_length(name) = 4;
# 也可以通过显示长度方法 char_length(name) = 4; 6. 查询岗位描述为空的员工名与岗位名
select name,post_comment from l1 where post_comment is null;
# 针对关键词查询需要用 is 而不是 =

查询关键字之分组 group by

聚合函数 max\min\sun\avg\count

分组:按照指定的条件将单个单个的数据组成一个个整体
eg: 将班级学生 按照 性别分组
将员工按照 等级 分组
将人员按照地区分组 分组的目的是为了更好的统计相关数据
eg: 查看班级男女比例
查看员工 等级占比
查看地区人员 平均收入 分组后可以使用聚合函数
集合函数专业用语分组之后的数据统计
max 最大值 min 最小值
sun 求和 avg 平均值
count 计数 1.将员工数据按照部门分组
select post from l1 group by post;
# 查询post字段 来源L1 根据post字段 分组
# 分组之后 select后面默认只能直接填写分组的依据 不能再写其他字段 select * from l1 group by post;
"""
MySQL5.6默认不会报错
set global sql_mode='strict_trans_tables,only_full_group_by'
MySQL5.7及8.0默认都会直接报错
原因是分组之后 select后面默认只能直接填写分组的依据 不能再写其他字段
select post from emp group by post;
select age from emp group by age;
分组之后默认的最小单位就应该是组 而不应该再是组内的单个数据单个字段
""" 2.获取每个部门的最高工资
select post,max(salary) from l1 group by post;
# 查询post字段中 最高的工资 来源于 l1表 post组
如果遇到需求 每个 平均 基本可以考虑使用分组 针对sql语句执行之后的结果 我们是可以修改字段名称的 关键字as 也可以省略 select post '部门',max(salary) '最高工资' from l1 group by post;
可以使用别名显示

3.一次获取部门薪资相关统计(最高 最低 平均 和)
select post'部门',max(salary)'最高薪资',min(salary)'最低薪资',
avg(salary)'平均值',sum(salary)'和' from l1 group by post;

Group_concat 方法

4.统计每个部门的人数
select post'部门',count(id)'部门人数' from l1 group by post; 5.统计每个部门的部门名称以及部门下的员工姓名
select post'部门名称',name'员工姓名 'from l1 group by post; # 报错
'''分组以外的字段无法直接填写 需要借助于方法''' select post'部门名称', group_concat(name)'员工姓名 'from l1 group by post;
# 获得每个部门下的所有员工姓名 +-----------------------------+---------------------
| 部门名称 | 员工姓名
+-----------------------------+----------------------
| operation | 僧龙,程咬金,程咬银,程咬铜,程咬铁 |
| sale | 哈哈,呵呵,西西,乐乐,拉拉 |
| teacher | tom,kevin,tony,owen,jack,jenny,sank |
| 浦东第一帅形象代言 | jason group_concat 方法:该函数返回一个字符串结果,该字符串结果是通过分组串联的非NULL数据值。、
通常配合 group by 一起使用 也可以单独使用,比如需要每个表里面的全部 姓名等
select group_concat(name) from l1;
# 会得到一个很长的字符串 里面就是所有的姓名了 select group_concat('拼接字符串',name) from l1;
# 会得到字符串[子公司jason,子公司tom,子公司kevin,子公司tony,子公司owen]

查询关键字之having过滤

having与where本质是一样的 都是用来对数据做筛选的
where是用在分组之前 首次筛选
having用在分组之后的 二次筛选 1.统计各部门年龄在30岁以上的员工平均工资,并保留大于10000的数据 '针对稍微复杂一点你的SQL 我们可以像编写代码一样 先思考一下逻辑思路'
1.先筛选出所有年龄大于30的员工
2.然后在按照部门分组统计平均薪资
3.最后在筛选大于10000的 select port,avg(salary) from l1 where age>30 group by port having avg(salary) > 10000;

查询关键字之去重distinct

去重:
去除字段中一模一样的数据,只保留一个 单字段去重
select distinct age from l1;
# 列表单字段去重 多字段联合去重
select disiinct name,post from l1;
# 列表内 name字段 + post字段 相加结果相同去重

关键字之order by排序

1.单字段排序 默认升序
select * from l1 order by age;
# 根据age字段排序 从小到大
单字段排序 降序 desc
select * from l1 order by age desc:
# 根据age字段排序 从大到小 2.依据多字段排序
select * from l1 order by age,salary
# 首先依据第一个添加的字段 age进行排序 当age相同时 根据 salary排序 统计各部门年龄在10岁以上的员工平均工资,并且保留平均工资大于1000的部门,然后对平均工资进行排序. select post,avg(salary) from l1 where age > 10 group by post having avg(salary) > 1000 order by avg(salary);
# 展示 部门 和 部门平均工资 数据来源 表l1 对年龄大于10的人根据部门分组,然后二次筛选组内 平均薪资大于1000的 然后 按照从小达大 排序 当一条SQL语句中很多地方都需要使用聚合函数计算之后的结果 我们可以节省操作(主要是节省了底层运行效率 代码看不出来) select post,avg(salary) as a_salary from l1 where age>10
group by post having a_salary >1000 order by a_salary 多次重复使用的数据可以起别名 然后用别名代替,这样系统底层不需要多次计算
提高运行效率

查询关键字之limit分页

当表中数据特别多的情况下 我们很少会一次获取所有的数据 很多网站也都是做了分页吹了,一次性只展示一点点

关键词 limit(丽米特)

select * from l1 limit 5;  # 直接限制展示的条数

select * from l1 limit 2,10 # 从第2条开始往后读取10条

例如 以后需要展示最高 或者 最高几条时 都可以考虑 limit 方法

查询工资最高的前三人
select * from l1 order by salary desc limit 3;
# oeder by 排序默认从小到大 加上 desc 降序从大到小 展示3条 查询工资最底的三人
select * from l1 order by salary limit 3;
# 默认排序从小到大

查询关键字之regexp正则表达式

SQL语句的模糊匹配 like 方法不习惯是 也可以使用 regexp 编写正则筛选

可以配合 where 配合使用 针对每个字段进行正则匹配

select * from l1 where name regexp '^j.*n$';

也可以变相理解为搜索:

查找L1表中名字 “张无忌”的所有信息
select * from l1 where name regexp '张无忌' 模糊匹配,以特定字符串开头
select * from l1 where name regexp '^J';
select * from l1 where nane like 'j%'; 模糊匹配,以特定字符串结尾
select * from l1 where name regexp 'j$';
select * from l1 where nane like '%j'; 模糊匹配 包含 或者
select * from l1 where name regexp '哈哈|嘻嘻|呵呵'; # 简单的模糊查询可以使用like 稍微复杂一点的建议使用 regexp 迷糊匹配 不包含 not regexp
select * from l1 where name not regexp '^j';
# 不包含 已 j开头的所有数据

多表查询的思路

表数据准备
create table dep(
id int primary key auto_increment,
name varchar(20)
); create table emp(
id int primary key auto_increment,
name varchar(20),
sex enum('male','female') not null default 'male',
age int,
dep_id int
); #插入数据
insert into dep values
(200,'技术'),
(201,'人力资源'),
(202,'销售'),
(203,'运营'),
(205,'财务'); insert into emp(name,sex,age,dep_id) values
('jason','male',18,200),
('dragon','female',48,201),
('kevin','male',18,201),
('nick','male',28,202),
('owen','male',18,203),
('jerry','female',18,204); select * from emp,dep;
'''这种为交叉连接 交叉联结(笛卡尔积)
指将表1中的每一行与表2中的每一行进行合并,因此合并后得到的行数是两张表行数的乘积。
注意:交叉联结在实际应用中比较少,因为结果行数较多,运算量比较大,实际使用价值也不大''' 如果我们想把对应的数据关联 例如 表一 有表二 的id 可以这样处理
select * from emp,dep where emp.dep_id=dep.id;
# 展示所有字段 数据来源 emp表和dep表 筛选条件 emp.dep_id=dep.id; 其实我们也是把多张表的数据合并到了一起 然后在根据筛选条件进行展示

小练习

1. 查询岗位名以及岗位包含的所有员工名字
select post '部门',group_concat(name)'员工姓名' from l1 group by post;
2. 查询岗位名以及各岗位内包含的员工个数
select post,count(id) from l1 group by post;
3. 查询公司内男员工和女员工的个数
select gender,count(id) from l1 group by gender;
4. 查询岗位名以及各岗位的平均薪资
select post,avg(salary) from l1 group by post;
5. 查询岗位名以及各岗位的最高薪资
select post,max(salary) from l1 group by post;
6. 查询岗位名以及各岗位的最低薪资
select post,min(salary) from l1 group by post;
7. 查询男员工与男员工的平均薪资,女员工与女员工的平均薪资
select gender,avg(salary) from l1 group by gender;
8. 统计各部门年龄在30岁以上的员工平均工资
select post,avg(salary) as a_salary from l1 where age>30 group by post;

SQL语句筛选/查询的更多相关文章

  1. SQL语句关联查询

    一:连接类型: 关联查询:只有存在关联的表才能关联查询,完全独立的表之间无法关联 1.关联的类型:自关联,左关联,右关联,全关联(full join)两张表都是主表 2.关联的表:两张以上,以一张(或 ...

  2. mysql 常用 sql 语句 - 快速查询

    Mysql 常用 sql 语句 - 快速查询 1.mysql 基础 1.1 mysql 交互         1.1.1 mysql 连接             mysql.exe -hPup    ...

  3. SQL语句在查询分析器中可以执行,代码中不能执行

    问题:SQL语句在查询分析器中可以执行,代码中不能执行 解答:sql中包含数据库的关键字,将关键字用[]括起来,可以解决. 后记:建数据库的时候尽量避免使用关键字. 例子: sql.Format(&q ...

  4. 如何在 Linux 上用 SQL 语句来查询 Apache 日志

    Linux 有一个显著的特点,在正常情况下,你可以通过日志分析系统日志来了解你的系统中发生了什么,或正在发生什么.的确,系统日志是系统管理员在解决系统和应用问题时最需要的第一手资源.我们将在这篇文章中 ...

  5. 在Hibernate中使用HibernateTemplate来进行包含sql语句的查询

    /**     * 使用sql语句进行查询操作     * @param sql     * @return     */    public List queryWithSql(final Stri ...

  6. Sql语句之查询所有学生所有科目分数及总分

    昨天练Sql语句,数据库建了四个表分别是,学生表,课程表,成绩表以及教师表(教师表不在讨论范围),突然想到以前高中时代老师手上的那张成绩表,然后我就寻思着能不能用Sql语句把表打印出来,以下是我的思考 ...

  7. Python与开源GIS:在OGR中使用SQL语句进行查询

    摘要: 属性选择与空间选择都可以看作是OGR内置的选择功能,这两种功能可以解决大部分实际中的问题.但是也有这种时候,就是进行查询时的条件比较复杂.针对这种情况,OGR也提供了更加灵活的解决方案:支持使 ...

  8. SQL 语句在查询分析器执行很快,程序 Dapper 参数化查询就很慢(parameter-sniffing)

    这个问题困扰我好长时间了,使用SQLSERVER 事务探查器找到执行超时的SQL语句,参数查询都是通过执行exe sp_executesql 的存储过程调用,因为它能够分析并缓存查询计划,从而优化查询 ...

  9. [Beego模型] 四、使用SQL语句进行查询

    [Beego模型] 一.ORM 使用方法 [Beego模型] 二.CRUD 操作 [Beego模型] 三.高级查询 [Beego模型] 四.使用SQL语句进行查询 [Beego模型] 五.构造查询 [ ...

  10. MySQL的EXPLAIN命令用于SQL语句的查询执行计划

    MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP).这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL 语句的.这条命令并没有提供任何调整建议,但它能够提供重要的信息 ...

随机推荐

  1. Minio VS Ceph

    文章转载自:https://blog.csdn.net/Moolight_shadow/article/details/123204412

  2. 6. EFK:免费的日志采集与可视化搜索套件

    收集日志是为了做进一步的分析.收集是第一步,收集到日志后还需要进行存储.索引,以便进行快速查询分析.我们还需要一个友好的查询界面,来方便用户使用日志. 本文介绍一个免费的开源软件组合,正好可以实现上述 ...

  3. Linux shell猜数游戏

    题目:猜随机数随机1-100中的一个数字,要求用户猜数字,猜中则退出脚本并告知用户猜测次 数和随机数字,否则要求用户继续猜,并告知当前猜的数字和随机数的关系. #!/bin/bash #猜数游戏 Ra ...

  4. 垃圾回收机制GC

    垃圾回收机制GC 我们已经知道,name = 'leethon'这一赋值变量的操作,是将变量与数据值相绑定. 而数据值是存储到内存中的,有时变量会重新赋值即绑定其他数据值,而使得原本的数据值无法通过变 ...

  5. 自定义ListView下拉刷新上拉加载更多

    自定义ListView下拉刷新上拉加载更多 自定义RecyclerView下拉刷新上拉加载更多 Listview现在用的很少了,基本都是使用Recycleview,但是不得不说Listview具有划时 ...

  6. 13.MongoDB系列之分片简介

    1. 分片概念 分片是指跨机器拆分数据的过程,有时也会用术语分区.MongoDB既可以手工分片,也支持自动分片 2. 理解集群组件 分片的目标之一是由多个分片组成的集群对应用程序来说就像是一台服务器. ...

  7. SpringBoot整合ES+Kibana

    前言:最近在写一个HTTP代理服务器,记录日志使用的是ES,所以涉及到SpringBoot和ES的整合,整合完毕后又涉及到数据可视化分析,所以使用了Kibana进行管理,有些坑,需要记录一下 Spri ...

  8. go-zero docker-compose搭建课件服务(四):生成Dockerfile

    0.转载 go-zero docker-compose 搭建课件服务(四):生成Dockerfile并在docker-compose中启动 0.1源码地址 https://github.com/liu ...

  9. python3使用mutagen进行音频元数据处理

    python版本:python 3.9   mutagen版本:1.46.0 mutagen是一个处理音频元数据的python模块,支持多种音频格式,是一个纯粹的python库,仅依赖python标准 ...

  10. SpringBoot自动配置(装配)流程

    源码分析 SpringBoot自动配置流程 ​ ​ 首先,我们要了解在@SpringBootApplication注解的内部,还具有@EnableAutoConfiguration,@SpringBo ...