简书作者: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. nnginx配置代理服务器

    因为有些服务有ip白名单的限制,部署多节点后ip很容易就不够用了,所以可以将这些服务部署到其中的一些机器上, 并且部署代理服务器,然后其余机器以代理的方式访问服务.开始是以tinyproxy作为代理服 ...

  2. 随便----js参考书

    一.Javascript方面的书籍: 1 JavaScript权威指南(第6版):号称javascript圣经,前端必备:前端程序员学习核心JavaScript语言和由Web浏览器定义的JavaScr ...

  3. Sublime Text 3配置浏览默认路径为localhost

    1.在 Sublime Text 3 中,安装 SideBarEnhancements 侧边栏增强插件.(注意:安装插件之前需要安装包管理工具,参考这里) 2.SideBarEnhancements ...

  4. (一)初识JavaFX

    JavaFX是一个强大的图形和多媒体处理工具包集合,它允许开发者来设计.创建.测试.调试和部署富客户端程序,并且和Java一样跨平台. JavaFX应用程序 由于JavaFX库被写成了Java API ...

  5. Facebook 一个热搜帖,美国一个老人癌症不治最后的心愿是跟儿子喝啤酒。

    今天早上起床看到这个Facebook上的热搜帖.太感动了.这个老人癌症不治后最后心愿是跟他的儿子们一起喝一次啤酒.这个帖子被他孙子贴上网以后牵动了千万人的心.

  6. JS中数组与对象的遍历方法实例小结

    一.数组的遍历: 首先定义一个数组 1 arr=['snow','bran','king','nightking']; 1.for循环,需要知道数组的长度; 2.foreach,没有返回值,可以不知道 ...

  7. -parameters 参数的使用 解决 Feign PathVariable annotation was empty on param 0

    在使用 FeignClient 如果参数没有给默认名字 @PathVariable("districtId") Long districtId 比如 @FeignClient(&q ...

  8. centos7 开放/关闭防火墙和端口

    --------------------------------------------------------------防火墙----------------------------------- ...

  9. postgres 表和库等信息大小统计

    一 .数据库大小的统计 1.单个库查询 select pg_database_size('zybdb'); 2.查询所有的库 方法一: select pg_database.datname, pg_s ...

  10. IPC之namespace.c源码解读

    // SPDX-License-Identifier: GPL-2.0 /* * linux/ipc/namespace.c * Copyright (C) 2006 Pavel Emelyanov ...