mysql查询条件是小数 查不到6.28_28.mysql数据库之查询

1.查询语句

mysql 多表关系 查询语句 索引

1.添加数据补充:

将一个查询结果插入到另一张表中

create table student(name char(10),gender int);

insert into student values("jack",1);

insert into student values("rose",0);

create table student_man(name char(10),gender int);

insert into student_man select * from student where gender = 1;

2.所有的select 关键字

select distinct * from table_name

where

group by

having

order by

limit a,b

必须存在的有:

select

* 可以换成任意的一个或多个字段名称

from

table_name

#注意: 关键字的顺序是固定的不能随意变化

3.where 条件

select * from table_name

where

where 后面可以是

1.比较运算符

> < >= <= = !=

2.成员运算符

in not in 后面是一个set

3.逻辑运算符

and or not

not 要放在表达式的前面 and 和 or 放到两个表达式中间

4.模糊查询

like

% 表示 任意个数的任意字符

_ 表示一个任意字符

#

请查询 姓小的 数学小于 80 分 并且 英语 > 20分 的人的 数学成绩

select math,name from stu where math < 80 and english > 20 and name like "小%";

4.distinct 去除重复记录

select distinct * from stu;

# 注意仅当查询结果中所有字段全都相同时 才算重复的记录

5.指定字段

1.星号表示所有字段

2.手动指定需要查询的字段

3.还可也是四则运算

4.聚合函数

#请查询 英语及格的人的 平均分

select name,(math+english) / 2 平均分 from stu where english >= 60;

6.取别名

select name,math+english as 总分 from stu where name = "赵云";

as 可以省略

统计函数

也称之为聚合函数

将一堆数据经过计算得出一个结果

求和 sum(字段名)

平均数 avg(字段名)

最大值 max(字段名)

最小值 min(字段名)

个数 count(字段名) # 字段名称可以使用* 代替 另外如果字段为空会被忽略

可以用在 字段的位置 或是分组的后面

例如: 查询所有人的平均工资

select avg(salary) from emp

错误案例: 查询工资最高的人的姓名

select name,max(salary) from emp;

#默认显示的第一个name 因为name有很多行 而max(salary) 只有一行 两列的行数不匹配

# 不应该这么写 逻辑错误

select name from emp where salary = max(salary);

# 报错

# 原因: 伪代码

for line in file:

if salary = max(salary) #

#分析 where 读取满足条件的一行 ,max()先要拿到所有数据 才能求最大值,

#这里由于读取没有完成所有无法 求出最大值

#结论 where 后面不能使用聚合函数

7.group by

group 是分组的意思 即将一个整体按照某个特征或依据来分为不同的部分

为什么要分组 分组是为了统计,例如统计男性有几个 女性有几个

语法:

select xxx from table_name group by 字段名称;

需求:统计每个性别有几个人

select sex,count(*) from emp group by sex;

需求: 查询每个性别有几个 并且显示名字

select name,sex,count(*) from emp group by sex;

# mysql 5.6下 查询的结果是name仅显示该分组下的第一个

# 5.7以上则直接报错 ,5.6也可以手动开启这个功能

# 我们可以用group_concat 将分组之外的字段 做一个拼接 ,但是这是没有意义

# 如果要查询某个性别下的所有信息 直接使用where 即可

#结论: 只有出现在了group by 后面得字段才能出现在select的后面

8.having

用于过滤,但是与where不同的是,having使用在分组之后

案例:

# 求出平均工资大于500的部门信息

select dept,avg(salary) from emp group by dept having avg(salary) > 5000;

#查询 部门人数少于3的 部门名称 人员名称 人员个数

select dept,group_concat(name),count(*) from emp group by dept having count(*) < 3;

9.order

根据某个字段排序

语法:

select * from table_name order by 字段名称;

# 默认是升序

# 改为降序

select * from table_name order by 字段名称 desc;

# 多个字段 第一个相同在按照第二个 asc 表示升序

select * from table_name order by 字段名称1 desc,字段名称2 asc;

案例:

select * from emp order by salary desc,id desc;

10.limit

用于限制要显示的记录数量

语法1:

select * from table_name limit 个数;

语法2:

select * from table_name limit 起始位置,个数;

# 查询前三条

select * from emp limit 3;

# 从第三条开始 查询3条 3-5

select * from emp limit 2,3;

# 注意:起始位置 从0开始

# 经典的使用场景:分页显示

1.每一页显示的条数 a = 3

2.明确当前页数 b = 2

3.计算起始位置 c = (b-1) * a

select * from emp limit 0,3;

select * from emp limit 3,3;

select * from emp limit 6,3;

# django 提供了现成的分页组件 但是它是先查询所有数据 丢到列表中 再取出数据 这样如果数据量太大可能会有问题

2.子查询

将一个查询语句的结果作为另一个查询语句的条件或是数据来源

当我们一次性查不到想要数据时就需要使用子查询

1.in 关键字子查询

当内层查询 (括号内的) 结果会有多个结果时, 不能使用 = 必须是in ,另外子查询必须只能包含一列数据

需求: 指定一个部门名称,获取改部门下的所有员工信息

1.查询出 平均年龄 大于25的部门编号

select dept_id from emp group by dept_id having avg(age) > 25;

2.再根据编号查询部门的名称

select name from dept where id in (select dept_id from emp group by dept_id having avg(age) > 25);

子查询的思路:

1.要分析 查到最终的数据 到底有哪些步骤

2.根据步骤写出对应的sql语句

3.把上一个步骤的sql语句丢到下一个sql语句中作为条件

2.exists 关键字子查询

当内层查询 有结果时 外层才会执行

案例:

select* from dept where exists (select * from dept where id = 1);

# 由于内层查询产生了结果 所以 执行了外层查询dept的所有数据

3.多表查询

1.笛卡尔积查询

select * from table1,table2,......

# 笛卡尔积查询的结果会出现大量的错误数据即,数据关联关系错误!

添加过滤条件 从表外键值 等于 主表的主键值

# 并且会产生重复的字段信息 例如员工里的 部门编号 和 部门表的id字段

在select 后指定需要查询的字段名称

案例:

select dept.name 部门 ,dept.id 部门编号,emp.name 姓名,emp.id 员工编号,sex from emp ,dept where dept.id = dept_id;

2.内连接查询:

本质上就是笛卡尔积查询

语法:

select * from table1 inner join table2;

案例:

select * from emp inner join dept where dept_id = dept.id;

inner可以省略

select * from emp join dept where dept_id = dept.id;

3.左外连接查询

左边的表无论是否能够匹配都要完整显示

右边的仅展示匹配上的记录

需求: 要查询所有员工以及其所属的部门信息

select * from emp left join dept on dept_id = dept.id;

注意: 在外连接查询中不能使用where 关键字 必须使用on专门来做表的对应关系

4.右外连接查询

右边的表无论是否能够匹配都要完整显示

左边的仅展示匹配上的记录

需求: 要查询所有部门以及其对应的员工信息

select * from emp right join dept on dept_id = dept.id;

5.全外连接查询

无论是否匹配成功 两边表的数据都要全部显示

需求:查询所有员工与所有部门的对应关系

select * from emp full join dept on dept_id = dept.id;

注意:mysql不支持全外连接

我们可以将 左外连接查询的结果 和 右外连接查询的结果 做一个合并

select * from emp left join dept on dept_id = dept.id

union

select * from emp right join dept on dept_id = dept.id;

union的用法:

select * from emp

union

select * from emp;

# union将自动去除重复的记录

# union all 不去重复

select sex,name from emp

union

select * from dept;

# 注意 union 必须保证两个查询结果 列数相同 一般用在多个结果结构完全一致时

总结: 外连接查询 查到的是没有对应关系的记录,但是这样的数据原本就是有问题的,所以最常用的是内连接查询

内连接表示 只显示匹配成功的记录

外连接 没有匹配成功的也要实现

多表查询案例:

create table stu(id int primary key auto_increment,name char(10));

create table tea(id int primary key auto_increment,name char(10));

create table tsr(id int primary key auto_increment,t_id int,s_id int,

foreign key(s_id) references stu(id),

foreign key(t_id) references tea(id));

insert into stu values(null,"张三"),(null,"李四");

insert into tea values(null,"egon"),(null,"wer");

insert into tsr values(null,1,1),(null,1,2),(null,2,2);

#egon老师教过哪些人?

select tea.name,stu.name from tea join tsr join stu

on

tea.id = t_id and stu.id = s_id

where tea.name = "egon";

# 子查询实现

select * from stu where id in (select s_id from tsr where t_id = (select id from tea where name = "egon"));

小结:

select [distinct] *|字段名|四则运算|函数 from table_name

where 比较运算符 逻辑运算符 成员运算符 区间 between and 模糊匹配 like exists regexp 正则匹配

group by

having 通常根聚合函数 count sum max min avg

order by

limit a,b

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567299.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

控制for each循环次数_CCF CSP编程题解201312-1:出现次数最多的数

试题编号&#xff1a;201312-1试题名称&#xff1a;出现次数最多的数时间限制&#xff1a;1.0s内存限制&#xff1a;256.0MB问题描述:给定n个正整数&#xff0c;找出它们中出现次数最多的数。如果这样的数有多个&#xff0c;请输出其中最小的一个。输入格式:输入的第一行只有一…

python编程优化_掌握六大技巧,让python编程健步如飞!

有人跟我抱怨说python太慢了&#xff0c;然后我就将python健步如飞的六大技巧传授给他&#xff0c;结果让他惊呆了&#xff0c;你也想知道这个秘诀吗?这就告诉你&#xff1a;Python是一门优秀的语言&#xff0c;它能让你在短时间内通过极少量代码就能完成许多操作。不仅如此&a…

python离线安装依赖包_python离线安装外部依赖包的实现

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…

python段子_Python爬取内涵段子里的段子

环境&#xff1a;Python3.6#!/usr/bin/env python3#-*-coding:utf-8-*-#version:3.6.4__author__ 杜文涛import requestsimport jsondef get_json_dic(url):global dict_jsonresponse requests.get(urlurl)json_response response.content.decode() #获取r的文本 就是一个js…

r语言中的或怎么表示什么不同_R经典入门 之 R语言的基本原理与概念 -- 200430

一、基本原理R是一种解释型语言&#xff0c;输入的命令可以直接被执行&#xff0c;不同于C等编译语言需要构成完整的程序才能运行。R的语法非常简单和直观。合法的R函数总是带有圆括号的形式&#xff0c;即使括号内没有内容(如&#xff0c;ls())。所有函数后都接有圆括号以区别…

旋流式沉砂池计算_旋流沉砂池设计方法

旋流沉砂池设计接口条件和主要参数设计旋流沉砂池前要确认的接口条件和信息包括&#xff1a;地质、气候等基本设计条件&#xff1b;可用地尺寸及在总图的位置坐标&#xff1b;地坪标高&#xff0c;上下游水位或范围&#xff0c;冻土层高度&#xff0c;管道覆土小深度要求&#…

parallelstream启动的线程数_高并发与多线程网络学习笔记(三)线程组和线程池

线程组线程组的作用是&#xff1a;可以批量管理线程或线程组对象&#xff0c;有效地对线程或线程组对象进行组织。构造函数ThreadGroup(String name)//默认parent为当前线程组 ThreadGroup(ThreadGroup parent, String name)具体方法//评估当前活跃的线程数,包括当前group和子g…

java 缓冲流_Java缓冲流的使用

package java;import org.junit.Test;import java.io.*;/*** 处理流之一&#xff1a;缓冲流的使用** 1.缓冲流&#xff1a;* BufferedInputStream* BufferedOutputStream* BufferedReader* BufferedWriter** 2.作用&#xff1a;提供流的读取、写入的速度* 提高读写速度的原因&a…

pytorch l2正则化_吴恩达深度学习 编程作业六 正则化(2)

推荐守门员应该将球踢到哪个位置&#xff0c;才能让自己的队员用头击中。1.无正则化模型判别是否有正则化与调用其他计算函数。准确率&#xff1a;0.948/0.915明显过拟合overfiting了。2.L2正则化公式如下&#xff0c;在原有cost函数基础上增加L2项&#xff0c;L2为参数w的均方…

java 代码锁_Java中的Lock锁

Lock锁介绍&#xff1a;在java中可以使用 synchronized 来实现多线程下对象的同步访问&#xff0c;为了获得更加灵活使用场景、高效的性能&#xff0c;java还提供了Lock接口及其实现类ReentrantLock和读写锁 ReentrantReadWriteLock。相比synchronized来实现同步&#xff0c;使…

vs中工具箱代表的意思_“日”除了代表太阳,其实还有这种意思,特别是出现在这些词语中的“日”...

对于“日”来说&#xff0c;大家都并不陌生&#xff0c;对于日的成语更是多得数不胜数&#xff0c;今天小编将日字成语进行了一个总结&#xff0c;需要用到的朋友们可以收藏&#xff01;一&#xff1a;以“日”开头的成语&#xff0c;大多数形容的是时间。日积月累、日久天长、…

java 访问路径_java获取项目访问路径的相关方法

java获取项目访问路径的相关方法刘振兴代码分享2016年02月11日6292暂无评论在jsp和class文件中调用的相对路径不同。在jsp里&#xff0c;根目录是WebRoot 在class文件中&#xff0c;根目录是WebRoot/WEB-INF/classes 当然你也可以用System.getProperty("user.dir")获…

java 保存文件在服务器_java文件保存至服务器

import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;public class ImageRequest{/*** 读取网络图片并保存至服务器硬盘中* param imgUrl* return …

mysql or走索引吗_加了索引,mysql查询就一定会用吗?

小白白跑去鹅厂面试&#xff0c;面试官提出了一个很实际的问题&#xff1a; mysql增加索引&#xff0c;那些情况会失效呢&#xff1f;谈一下实际工作中遇到的情况。我们的小白白又抛出了白氏秘籍&#xff1a;用不用索引&#xff0c;找DBA小姐姐&#xff01;啊&#xff1f;这是你…

java单词查找树_Trie 单词查找树 java实现(来自算法第4版)

强烈建议看书上的实现步骤&#xff0c;这里只是一个个人记录。单词查找树的性能&#xff1a;查找命中所需的时间与被查找的键的长度成正比。比如单词有7个字符&#xff0c;查找或插入操作最多只需要检查8个节点。查找未命中只需检查若干个字符。所需空间&#xff1a;在RN~RNw之…

学python开发必须要会wsgi么_学python着几个要搞清楚WSGI和uWSGI区别

Python&colon; 解决pip安装源被墙的问题pip install -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.c ...resin的简单介绍和使用1.resin是一款应用服务器(application server),它自身也包含一款支持Http1.1协议的WEB服务器(web server),它也可以…

java 连接 sftp失败_java – 文件上传到SFTP失败(Apache VFS)

我有一个SFTP问题(WindowsWinSSHD).我尝试用Apache Commons VFS在一个文件夹中写一个文件.在本地SFTP上我没有上传的问题,但在第二个SFTP上我总是得到以下错误.FTP看起来像这样&#xff1a;我需要上传到文件夹“alis”.奇怪的是它没有User / Group和770权限.但是,使用FileZilla…

基本农田卫星地图查询_如何基于西安80坐标查询定位

1. 概述水经注软件除了可以轻松下载无水印Google Earth卫星影像、有明确拍摄日期的历史影像、地方高清天地图、百度高德大字体打印地图&#xff0c;且可按1万/5千等国家标准图幅下载&#xff0c;下载含高度的全国矢量建筑、全国乡镇及街区行政区划、地名点、高速铁路网、公交路…

java getipaddress_教你java用getAddress方法取得IP地址

本篇教你java用getAddress方法取得IP地址&#xff1a;getAddress方法和getHostAddress类似&#xff0c;它们的唯一区别是getHostAddress方法返回的是字符串形式的IP地址&#xff0c;而getAddress方法返回的是byte数组形式的IP地址。getAddress方法的定义如下&#xff1a;public…

tcp的无延时发送_高并发架构的TCP知识介绍

这是关于高并发架构网络协议基础知识的第二篇&#xff0c;编程路上的基础心法&#xff01;做为一个有追求的程序员&#xff0c;不能只满足增删改查&#xff0c;我们要对系统全方面无死角掌控。掌握了这些基本的网络知识后&#xff0c;相信一方面日常排错中会事半功倍&#xff0…