当前位置: 首页 > news >正文

MySQL的SQL基础(五)

文章目录

    • 1. 单表查询
      • 1.1 having 语句
      • 1.2 order by 应用
      • 1.3 limit 应用
    • 2. select 多表连接查询
      • 2.1 多表连接查询作用
      • 2.2 多表连接查询类型
        • 2.2.1 笛卡尔乘积
        • 2.2.2 内连接
        • 2.2.3 外连接
    • 3. show 语句介绍
    • 4. information_schema 元数据获取

1. 单表查询

1.1 having 语句

作用:与where子句类似,having属于后过滤
场景:需要在group by + 聚合函数后,再做判断过滤时使用

-- 例子15: 统计中国,每个省的总人口,只显示总人口数大于500w信息
SELECT district,SUM(population)
FROM world.`city`
WHERE countrycode='CHN'
GROUP BY district
HAVING SUM(population)>5000000;

1.2 order by 应用

-- 例子16: 统计中国,每个省的总人口,只显示总人口数大于500w信息,并且按照总人口从大到小排序输出
SELECT district,SUM(population)
FROM world.`city`
WHERE countrycode='CHN'
GROUP BY district
HAVING SUM(population)>5000000
ORDER BY SUM(population) DESC ;

小提示:
(1)limit一般配合order by一起使用的,不做order by的limit没有太大的意义

1.3 limit 应用

作用: 分页显示结果集

-- 例子17: 统计中国,每个省的总人口,只显示总人口数大于500w信息,并且按照总人口从大到小排序输出,只显示前五名
-- limit 5 等同于 limit 5 offset 0
SELECT district,SUM(population)
FROM world.`city`
WHERE countrycode='CHN'
GROUP BY district
HAVING SUM(population)>5000000
ORDER BY SUM(population) DESC 
LIMIT 5;

-- 例子18: 统计中国,每个省的总人口,只显示总人口数大于500w信息,并且按照总人口从大到小排序输出,只显示前6-10名
SELECT district,SUM(population)
FROM world.`city`
WHERE countrycode='CHN'
GROUP BY district
HAVING SUM(population)>5000000
ORDER BY SUM(population) DESC 
LIMIT 5,5;

-- 上下两种写法结果都一样
-- limit 5 offset 5 跳过前5行,显示5行(6~10行)
SELECT district,SUM(population)
FROM world.`city`
WHERE countrycode='CHN'
GROUP BY district
HAVING SUM(population)>5000000
ORDER BY SUM(population) DESC 
LIMIT 5 OFFSET 5;

3~5名:
limit 2,3
limit 3 offset 2

2. select 多表连接查询

先创建一个school数据库并创建student、teacher、course、score表,并且插入数据,方便后续实验操作

use school
student :学生表
sno:    学号
sname:学生姓名
sage: 学生年龄
ssex: 学生性别

teacher :教师表
tno:     教师编号
tname:教师名字

course :课程表
cno:  课程编号
cname:课程名字
tno:  教师编号

score  :成绩表
sno:  学号
cno:  课程编号
score:成绩

-- 项目构建
-- 建库建表并插入数据
CREATE DATABASE school CHARSET utf8mb4;
USE school

CREATE TABLE student(
sno INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '学号',
sname VARCHAR(20) NOT NULL COMMENT '姓名',
sage TINYINT UNSIGNED  NOT NULL COMMENT '年龄',
ssex  ENUM('f','m') NOT NULL DEFAULT 'm' COMMENT '性别'
)ENGINE=INNODB CHARSET=utf8mb4;

CREATE TABLE course(
cno INT NOT NULL PRIMARY KEY COMMENT '课程编号',
cname VARCHAR(20) NOT NULL COMMENT '课程名字',
tno INT NOT NULL  COMMENT '教师编号'
)ENGINE=INNODB CHARSET=utf8mb4;

CREATE TABLE sc (
sno INT NOT NULL COMMENT '学号',
cno INT NOT NULL COMMENT '课程编号',
score INT  NOT NULL DEFAULT 0 COMMENT '成绩'
)ENGINE=INNODB CHARSET=utf8mb4;

CREATE TABLE teacher(
tno INT NOT NULL PRIMARY KEY COMMENT '教师编号',
tname VARCHAR(20) NOT NULL COMMENT '教师名字'
)ENGINE=INNODB CHARSET=utf8mb4;

INSERT INTO student(sno,sname,sage,ssex)
VALUES (1,'zhang3',18,'m'),
(2,'zhang4',18,'m'),
(3,'li4',18,'m'),
(4,'wang5',19,'f'),
(5,'zh4',18,'m'),
(6,'zhao4',18,'m'),
(7,'ma6',19,'f'),
(8, 'oldboy', 20, 'm'),
(9, 'oldgirl', 20, 'f'),
(10, 'oldp', 25, 'm');

INSERT INTO teacher(tno,tname) VALUES
(101,'oldboy'),
(102,'hesw'),
(103,'oldguo');

INSERT INTO course(cno,cname,tno)
VALUES
(1001,'linux',101),
(1002,'python',102),
(1003,'mysql',103);

INSERT INTO sc(sno,cno,score)
VALUES
(1,1001,80),
(1,1002,59),
(2,1002,90),
(2,1003,100),
(3,1001,99),
(3,1003,40),
(4,1001,79),
(4,1002,61),
(4,1003,99),
(5,1003,40),
(6,1001,89),
(6,1003,77),
(7,1001,67),
(7,1003,82),
(8,1001,70),
(9,1003,80),
(10,1003,96);

SELECT * FROM student;
SELECT * FROM teacher;
SELECT * FROM course;
SELECT * FROM sc;

在这里插入图片描述

2.1 多表连接查询作用

为什么要使用多表连接查询?
我们的查询需求,需要的数据,来自于多张表,单张表无法满足。

2.2 多表连接查询类型

2.2.1 笛卡尔乘积

笛卡尔积没有什么意义,但是有助于我们理解工作过程

2.2.2 内连接

在这里插入图片描述

2.2.3 外连接

在这里插入图片描述

3. show 语句介绍

4. information_schema 元数据获取

相关文章:

  • 图书巨头BakerTaylor遭勒索软件攻击 系统中断一周仍未恢复
  • 项目实战第三十六讲:基于 Sharding-JDBC 的商品分库⽅案
  • MySQL(进阶篇--InnoDB引擎)
  • 【Linux修炼】开篇
  • 【数学建模】层次分析(MatlabPython代码实现)
  • 如何用人工智能自动玩游戏
  • PIE-engine 教程 ——影像集合的使用for循环函数(北京市NDVI计算)
  • 数据结构-栈和队列(1)
  • 【微服务】springboot 整合 dubbo3.0
  • c++迭代器STL中的vector简单概述
  • 不可重复读和幻读详解(必看!!!)
  • 2022eclipse下载安装与使用教程
  • 【云原生】zookeeper + kafka on k8s 环境部署
  • 【牛客刷题日记】— Javascript 通关秘籍
  • 深度学习项目部署遇到的错误【记录】
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • download使用浅析
  • Github访问慢解决办法
  • Git学习与使用心得(1)—— 初始化
  • Java-详解HashMap
  • JS笔记四:作用域、变量(函数)提升
  • Python进阶细节
  • spring boot下thymeleaf全局静态变量配置
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 仿天猫超市收藏抛物线动画工具库
  • 分类模型——Logistics Regression
  • 基于web的全景—— Pannellum小试
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 提醒我喝水chrome插件开发指南
  • 我从编程教室毕业
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 与 ConTeXt MkIV 官方文档的接驳
  • puppet连载22:define用法
  • python最赚钱的4个方向,你最心动的是哪个?
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #565. 查找之大编号
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (2020)Java后端开发----(面试题和笔试题)
  • (28)oracle数据迁移(容器)-部署包资源
  • (C#)获取字符编码的类
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (附源码)计算机毕业设计高校学生选课系统
  • (南京观海微电子)——示波器使用介绍
  • (三)Honghu Cloud云架构一定时调度平台
  • (一)Neo4j下载安装以及初次使用