【知识库】-数据库_MySQL之基本数据查询:子查询、分组查询、模糊查询
简书作者:seay
文章出处: 关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询
回顾:【知识库】-数据库_MySQL常用SQL语句语法大全示例
Learn [已经过测试校验]
一、简单查询
二、别名/更名
三、子查询(嵌套查询)
四、聚合函数查询
五、分组查询
六、模糊查询
准备工作
创建数据库和数据库表

【SQLServer中自增使用IDENTITY(1,1),MySQL中自增使用PRIMARY KEY】
-- 创建学生表
CREATE TABLE Students(
Id int NOT NULL PRIMARY KEY,
Name varchar(20) NOT NULL,
Class varchar(15) NOT NULL,
Gender varchar(10) NULL,
Age int NULL,
Phone varchar(15) NULL,
Address varchar(100) NULL
); -- 创建课程表
CREATE TABLE Courses(
Id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
Name varchar(50) NOT NULL
); -- 创建成绩表
CREATE TABLE Scores(
Id int PRIMARY KEY AUTO_INCREMENT,
SId int NOT NULL,
CId int NOT NULL,
Grades decimal(5,2) NOT NULL,
IsPassed bit NOT NULL
); -- 插入学生表基础数据
INSERT INTO Students (Id,Name,Class,Gender,Age,Phone,Address) VALUES(2016001,'小明','一班','男',20,'','北京');
INSERT INTO Students (Id,Name,Class,Gender,Age,Phone,Address) VALUES(2016002,'小龙','一班','男',19,'','天津');
INSERT INTO Students (Id,Name,Class,Gender,Age,Phone,Address) VALUES(2016003,'小王','二班','男',20,'','北京');
INSERT INTO Students (Id,Name,Class,Gender,Age,Phone,Address) VALUES(2016004,'婷婷','一班','女',17,'','济南');
INSERT INTO Students (Id,Name,Class,Gender,Age,Phone,Address) VALUES(2016005,'张三','一班','男',19,'','北京');
INSERT INTO Students (Id,Name,Class,Gender,Age,Phone,Address) VALUES(2016006,'小赵','一班','男',20,'','北京');
INSERT INTO Students (Id,Name,Class,Gender,Age,Phone,Address) VALUES(2016007,'丽丽','二班','女',18,'','北京');
INSERT INTO Students (Id,Name,Class,Gender,Age,Phone,Address) VALUES(2016008,'花花','一班','女',19,'','沈阳');
INSERT INTO Students (Id,Name,Class,Gender,Age,Phone,Address) VALUES(2016009,'静静','二班','女',20,'','北京'); -- 插入课程表基础数据
INSERT INTO Courses(Name) VALUES('语文');
INSERT INTO Courses(Name) VALUES('数学');
INSERT INTO Courses(Name) VALUES('英语'); -- 插入成绩表基础数据
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016001,1,120,1);
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016001,2,70,0);
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016001,3,89,1);
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016002,1,90,1);
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016002,2,88,1);
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016002,3,96,1);
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016003,1,112,1);
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016003,3,102,1);
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016004,1,80,1);
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016004,2,86,1);
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016004,3,47,0);
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016005,1,87,1);
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016005,2,96,1);
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016005,3,68,0);
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016006,2,95,1);
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016006,3,100,1);
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016007,1,87,1);
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016007,2,57,0);
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016007,3,130,1);
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016008,1,89,1);
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016008,3,66,0);
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016009,1,97,1);
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016009,2,104,1);
INSERT INTO Scores(SId,CId,Grades,IsPassed) VALUES(2016009,3,68,1);
一、简单查询
简单查询只需要SELECT、FROM、WHERE3个关键字即可实现。
SELECT * FROM Students;
SELECT * FROM Students WHERE Class='一班';
SELECT * FROM Students WHERE Class='一班' AND Age = 20;

二、别名/更名
语法
SELECT 字段名1 [AS] 别名 [,字段名1 AS 别名]… FROM <表名>
AS可以省略
当别名中含有非字母和下划线时或者是关键字时,需要加上单/双引号
示例
SELECT Id AS '学号',Name '姓名',Class ClassName FROM Students;

三、子查询(嵌套查询)
子查询也称嵌套查询,是指一个SELECT查询语句可以嵌入另一个SELECT查询语句之中。SQL中允许多级嵌套,子查询在实际使用中非常多。
连接查询:涉及两个及以上的表查询为连接查询。
--查询二班学生成绩
SELECT * FROM Scores WHERE SId IN(SELECT Id FROM Students WHERE Class='二班')

四、聚合函数查询
聚合函数:是一个值的集合为输入,返回单个值的函数。
SQL预定义了5个聚集函数:AVG(平均值)、MIN(最小值)、MAX(最大值)、SUM(求和)、COUNT(计数)。
具体的数据库还会预定义一些其他常用的函数,比如字符串相聚合函数、时间聚合函数……。
SELECT AVG(Age),MAX(Age),MIN(Age),SUM(Age),COUNT(Id) FROM Students;

五、分组查询
使用GROUP BY子句可进行分组查询
注意:分组查询的时候要在GROUP BY子句后面跟上所有查询字段的列表

HAVING子句
如果需要在分组前的数据进行限制,可以使用HAVING子句
HAVING子句只能与GROUP BY搭配使用
--根据班级分组查询各班平均年龄并且班级人数大于3人
SELECT Class,AVG(Age) FROM Students GROUP BY Class HAVING COUNT(Id)>3;

WHERE语句在GROUP BY语句之前,SQL会在分组之前计算WHERE语句;
HAVING语句在GROUP BY语句之后,SQL会在分组之后计算HAVING语句。
六、模糊查询
语法
SELECT 字段列表 FROM 表名 WHERE 字段 LIKE '<通配符>'
LIKE和通配符实现的_:任何单个字符(一个'_'只匹配一个字符,多个字符就使用多个_)
%:包含零个或更多字符的任意字符串(匹配任意内容)
[]:指定范围的字符(只匹配[]内的字符)
[ ^]:不在指定范围的字符(只匹配除[]内的字符)
SQL中通配符可以混合使用
(一)单个字符匹配
SELECT * FROM Students WHERE Name LIKE '小_';
SELECT * FROM Students WHERE Phone LIKE '188177166__';

(二)范围内查询
-- 查询所有手机号码结尾22的信息
SELECT * FROM Students WHERE Phone LIKE '%22';

(三)不在范围内查询
-- 查询所有手机号码不以22结尾的信息
SELECT * FROM Students WHERE Phone NOT LIKE '%22';

【知识库】-数据库_MySQL之基本数据查询:子查询、分组查询、模糊查询的更多相关文章
- sql 根据日期模糊查询&SQL Server dateTime类型 模糊查询
曾经遇到这样的情况,在数据库的Meeting表中有PublishTime (DateTime,8)字段,用来存储一个开会时间,在存入时由于要指明开会具体时间,故格式为yyyy-mm-dd hh:mm: ...
- java操作elasticsearch实现前缀查询、wildcard、fuzzy模糊查询、ids查询
1.前缀查询(prefix) //prefix前缀查询 @Test public void test15() throws UnknownHostException { //1.指定es集群 clus ...
- spring boot jpa 复杂查询 动态查询 连接and和or 模糊查询 分页查询
最近项目中用到了jpa,刚接触的时候有些激动,以前的到层忽然不用写sql不用去自己实现了,只是取个方法名就实现了,太惊艳了,惊为天人,但是慢慢的就发现不是这么回事了,在动态查询的时候,不知道怎么操作了 ...
- Django:表多对多查询、聚合分组、FQ查询、事务
1表多对多的关系查询 准备工作创建表结构 from django.db import models # Create your models here. class Publisher(models. ...
- 关于SQL查询语句中的LIKE模糊查询的解释
LIKE语句的语法格式为: select * from 表名 where 字段名 like 对应值(字符串) 注:主要是针对字符型字段的,它的作用是在一个字符型字段列中检索包含对应字符串的. 下面列举 ...
- 【知识库】-数据库_MySQL之高级数据查询:去重复、组合查询、连接查询、虚拟表
简书作者:seay 文章出处: 关系数据库SQL之高级数据查询:去重复.组合查询.连接查询.虚拟表 回顾:[知识库]-数据库_MySQL之基本数据查询:子查询.分组查询.模糊查询 Learn [已经过 ...
- android sqlite使用之模糊查询数据库数据的三种方式
android应用开发中常常需要记录一下数据,而在查询的时候如何实现模糊查询呢?很少有文章来做这样的介绍,所以这里简单的介绍下三种sqlite的模糊查询方式,直接上代码把: package com.e ...
- Oracle,Mysql ,SQL Server 三大数据库带参数的模糊查询, 拼接查询条件问题
最近项目开发一直在不断切换数据库,有时候一条sql 要同时考虑多种数据库中的兼容问题 , 先总结一条模糊查询拼接查询条件的问题,后续追加总结. 目前使用 mybatis: 1. Oracle 中使 ...
- oracle 语句之对数据库的表名就行模糊查询,对查询结果进行遍历,依次获取每个表名结果中的每个字段(存储过程)
语句的执行环境是plsql的sql窗口, 语句的目的是从整个数据库中的所有表判断 不等于某个字段的记录数 . 代码如下: declare s_sql clob:=''; -- 声明一个变量,该变量用于 ...
随机推荐
- Tika检测文件类型
Tika类型检测 Tika支持MIME所提供的所有互联网媒体文件类型.每当一个文件通过Tika检测到该文件,其文件类型.检测的介质类型,Tika内部通过以下机制. MIME标准 多用途Internet ...
- 初识 vue------简单介绍
/** vue 作者:尤雨溪 类型:MVVM 准确的来说是MV框架 为什么要学习vue 1.传统的项目是通过操作dom元素来修 ...
- vue项目打包文件配置(vue-clli3)
练手项目完结打包的时候遇到一些问题,特此记录 先贴我的vue.config.js文件的代码(vue-cli3构建的项目默认是没有此文件的,需手动添加)更多详细配置参考官方配置文档,我的项目不大不小,这 ...
- img 图像底部留白的原因以及解决方法
有时候,我们在添加图片img标签后并没有给该标签设置magrin属性的margin-bottom值,在有些浏览器中打开就会出现图像底部留白,为什么为造成这个原因?下面就来进行分析:由于img元素默认为 ...
- nginx 配置简单的静态页面
nginx 文件服务配置,MIME和 default_type https://blog.csdn.net/qq_26711103/article/details/81116900 nginx 静态页 ...
- dubbo和zookeeper结合使用
1.相关依赖引入 阿里的dubbo包含了spring相关内容,引入依赖时,需要排除,使用我们自己项目中的spring依赖 <!-- start..............dubbo....... ...
- deep_learning_Function_Sklearn_Mode
API参考:https://scikit-learn.org/stable/modules/classes.html# 作为Python中经典的机器学习模块,sklearn围绕着机器学习提供了很多可直 ...
- uvalive 5905 Pool construction
题目链接 题意: 有一个花园,有些地方是草地,有些地方是洞,现在要在这个花园中修建一个泳池,泳池全部由洞构成. 把洞变成草地需要花费一定的费用,把草地变成洞也需要花费一定的费用,并且泳池的边缘的草地上 ...
- Rectangle Puzzle CodeForces - 281C (几何)
You are given two rectangles on a plane. The centers of both rectangles are located in the origin of ...
- 牛客小白月赛12 C 华华给月月出题 (积性函数,线性筛)
链接:https://ac.nowcoder.com/acm/contest/392/C 来源:牛客网 华华给月月出题 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K, ...