简书作者: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);

一、简单查询

  简单查询只需要SELECTFROMWHERE3个关键字即可实现。

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;

  

  

   
  HAVING子句和WHERE的区别
  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之基本数据查询:子查询、分组查询、模糊查询的更多相关文章

  1. sql 根据日期模糊查询&SQL Server dateTime类型 模糊查询

    曾经遇到这样的情况,在数据库的Meeting表中有PublishTime (DateTime,8)字段,用来存储一个开会时间,在存入时由于要指明开会具体时间,故格式为yyyy-mm-dd hh:mm: ...

  2. java操作elasticsearch实现前缀查询、wildcard、fuzzy模糊查询、ids查询

    1.前缀查询(prefix) //prefix前缀查询 @Test public void test15() throws UnknownHostException { //1.指定es集群 clus ...

  3. spring boot jpa 复杂查询 动态查询 连接and和or 模糊查询 分页查询

    最近项目中用到了jpa,刚接触的时候有些激动,以前的到层忽然不用写sql不用去自己实现了,只是取个方法名就实现了,太惊艳了,惊为天人,但是慢慢的就发现不是这么回事了,在动态查询的时候,不知道怎么操作了 ...

  4. Django:表多对多查询、聚合分组、FQ查询、事务

    1表多对多的关系查询 准备工作创建表结构 from django.db import models # Create your models here. class Publisher(models. ...

  5. 关于SQL查询语句中的LIKE模糊查询的解释

    LIKE语句的语法格式为: select * from 表名 where 字段名 like 对应值(字符串) 注:主要是针对字符型字段的,它的作用是在一个字符型字段列中检索包含对应字符串的. 下面列举 ...

  6. 【知识库】-数据库_MySQL之高级数据查询:去重复、组合查询、连接查询、虚拟表

    简书作者:seay 文章出处: 关系数据库SQL之高级数据查询:去重复.组合查询.连接查询.虚拟表 回顾:[知识库]-数据库_MySQL之基本数据查询:子查询.分组查询.模糊查询 Learn [已经过 ...

  7. android sqlite使用之模糊查询数据库数据的三种方式

    android应用开发中常常需要记录一下数据,而在查询的时候如何实现模糊查询呢?很少有文章来做这样的介绍,所以这里简单的介绍下三种sqlite的模糊查询方式,直接上代码把: package com.e ...

  8. Oracle,Mysql ,SQL Server 三大数据库带参数的模糊查询, 拼接查询条件问题

    最近项目开发一直在不断切换数据库,有时候一条sql 要同时考虑多种数据库中的兼容问题 , 先总结一条模糊查询拼接查询条件的问题,后续追加总结. 目前使用   mybatis: 1. Oracle 中使 ...

  9. oracle 语句之对数据库的表名就行模糊查询,对查询结果进行遍历,依次获取每个表名结果中的每个字段(存储过程)

    语句的执行环境是plsql的sql窗口, 语句的目的是从整个数据库中的所有表判断 不等于某个字段的记录数 . 代码如下: declare s_sql clob:=''; -- 声明一个变量,该变量用于 ...

随机推荐

  1. Tika检测文件类型

    Tika类型检测 Tika支持MIME所提供的所有互联网媒体文件类型.每当一个文件通过Tika检测到该文件,其文件类型.检测的介质类型,Tika内部通过以下机制. MIME标准 多用途Internet ...

  2. 初识 vue------简单介绍

    /**     vue         作者:尤雨溪         类型:MVVM      准确的来说是MV框架     为什么要学习vue         1.传统的项目是通过操作dom元素来修 ...

  3. vue项目打包文件配置(vue-clli3)

    练手项目完结打包的时候遇到一些问题,特此记录 先贴我的vue.config.js文件的代码(vue-cli3构建的项目默认是没有此文件的,需手动添加)更多详细配置参考官方配置文档,我的项目不大不小,这 ...

  4. img 图像底部留白的原因以及解决方法

    有时候,我们在添加图片img标签后并没有给该标签设置magrin属性的margin-bottom值,在有些浏览器中打开就会出现图像底部留白,为什么为造成这个原因?下面就来进行分析:由于img元素默认为 ...

  5. nginx 配置简单的静态页面

    nginx 文件服务配置,MIME和 default_type https://blog.csdn.net/qq_26711103/article/details/81116900 nginx 静态页 ...

  6. dubbo和zookeeper结合使用

    1.相关依赖引入 阿里的dubbo包含了spring相关内容,引入依赖时,需要排除,使用我们自己项目中的spring依赖 <!-- start..............dubbo....... ...

  7. deep_learning_Function_Sklearn_Mode

    API参考:https://scikit-learn.org/stable/modules/classes.html# 作为Python中经典的机器学习模块,sklearn围绕着机器学习提供了很多可直 ...

  8. uvalive 5905 Pool construction

    题目链接 题意: 有一个花园,有些地方是草地,有些地方是洞,现在要在这个花园中修建一个泳池,泳池全部由洞构成. 把洞变成草地需要花费一定的费用,把草地变成洞也需要花费一定的费用,并且泳池的边缘的草地上 ...

  9. Rectangle Puzzle CodeForces - 281C (几何)

    You are given two rectangles on a plane. The centers of both rectangles are located in the origin of ...

  10. 牛客小白月赛12 C 华华给月月出题 (积性函数,线性筛)

    链接:https://ac.nowcoder.com/acm/contest/392/C 来源:牛客网 华华给月月出题 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K, ...