【知识库】-数据库_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:=''; -- 声明一个变量,该变量用于 ...
随机推荐
- lua与c的交互(运用)
(1)lua程序 (2)C++程序(头文件) extern "C" { #include "lua.h" #include "lual ...
- java lesson14Homework
/** * 1. 本程序找出字符串数组 String[] arr = {“welcome”, “china”, “hi”, “congratulation”, “great”} 中的长度最大的元素,并 ...
- asp.net 13 缓存,Session存储
1.缓存 将数据从数据库/文件取出来放在服务器的内存中,这样后面的用来获取数据,不用查询数据库,直接从内存(缓冲)中获取数据,提高了访问的速度,节省了时间,也减轻了数据库的压力. 缓冲空间换时间的技术 ...
- 解决windows系统下ping,ipconfig不是内部或外部命令
一般情况下,都是误删了系统变量path的值.解决方法:右击我的电脑 → 选择属性 → 选择高级系统设置 → 环境变量 → 在系统变量列表中,找到“path”环境变量双击,打开.在变量值这一栏检测下是否 ...
- Java高并发程序设计学习笔记(七):并行设计模式
转自:https://blog.csdn.net/dataiyangu/article/details/87123586 什么是设计模式架构模式设计模式代码模式(成例 Idiom)单例模式普通单例假如 ...
- U盘安装 CentOS7图解
参考 https://jingyan.baidu.com/article/e75aca856cca69142fdac673.html
- MySQL增删改查语句
创建数据库:CREATE DATABASE 数据库名; 创建数据表:CREATE TABLE table_name (column_name column_type); 插入数据:INSERT INT ...
- centos7.3安装mysql5.7
一.写随笔的原因:最近在阿里云上买了个centos7.3服务器,想将一些demo运行在上面,所以需要做一些环境的安装,通过此篇文章MAKR一下.下面来记录下安装步骤(参考网上的一些教程,有坑的话会实时 ...
- OpenResty 执行流程阶段
nginx有11个处理阶段,如下图所示: 指令 所处处理阶段 使用范围 解释 init_by_luainit_by_lua_file loading-config http nginx Master进 ...
- deep_learning_Softmax()
该节课中提到了一种叫作softmax的函数,因为之前对这个概念不了解,所以本篇就这个函数进行整理,如下: 维基给出的解释:softmax函数,也称指数归一化函数,它是一种logistic函数的归一化形 ...