基本的DQL语句-单表查询
一、DQL语言
DQL(Data Query Language 数据查询语言)。用途是查询数据库数据,如SELECT语句。是SQL语句 中最核心、最重要的语句,也是使用频率最高的语句。其中,可以根据表的结构和关系分为单表查询和多 表联查。
注意:所有的查询都会得到一张虚拟的表
二.单表查询
针对数据库中的一张数据表进行查询,可以通过各 种查询条件和方式去做相关的优化。
1.查询语句语法规则
SELECT [DISTINCT]
{*|表1.*|[ 表1.字段1 [as 字段别名1]
[, 表1.字段2[as 字段别名2]][, …]]}
FROM 表1 [ as 表别名 ]
[ left|right|inner join 表2 on 表之间
的关系 ]
[ WHERE ]
[ GROUP BY ]
[ HAVING]
[ ORDER BY]
[ LIMIT {[ 位置偏移量,] 行数 }] ;
| DISTINCT | 设定DISTINCT可以去掉重复记录。 |
| AS | 表名或者字段名过长时,可以用AS关键字起别名,方便操作。 |
| GROUP BY | 按组分类显示查询出的数据。 |
| HAVING | GROUP BY分组时依赖的分组条件。 |
| ORDER BY | 将查询出来的结果集按照一定顺序排序完成。 |
| LIMIT | 限制显示查询结果的条数。 |
2.最简单的查询
select 123;
select 'abc';
select 1+1;
3. 从表中获取数据
语法:select 字段名,字段名 from 表名
3.1 全字段查询
-- 全字段查询
select sid,sname,birthday,ssex,classid from student;
select * from student; -- sql优化 1.不要使用*代替字段名
3.2 部分字段查询
-- 部分字段查询
select sname,ssex from student;
4. 字段名起别名
表名或者字段名过长时,可以用AS关键字起别名,方便操作。
语法:SELECT 表别名.字段名1 AS 字段别名1, 表别名.字段名2 AS 字段别名2 FROM 表名 AS 表别名
select sname as '姓名' from student;
select sname as '姓名' , birthday '生日' ,ssex 性别 from student;
5.添加一个字段
select sname ,'猿究院' 学校 from student;
6. distinct 去重
语法:SELECT DISTINCT 字段名1, 字段名2... FROM 表名
注意:所有的字段数据要一致才会去重
select distinct sname,ssex from student;
7.WHERE条件子句
语法:SELECT * FROM 表名 [ WHERE 条件];
注意:
• WHERE条件子句不是必须的;
• WHERE子句,可以给查询增加条件;
• 条件:为筛选条件,如不指定则修改该表的所有数据。
- 带条件的查询-- 【where 子句】
select * from student where sid=5;
select * from student where sid<>5;
select * from student where sid>5;
select * from student where sid between 3 and 6;-- 查找1班的女同学
select * from student where classid=1 and ssex='女';
面试题!!!
查询 年龄 大于1990-1-1 的同学
select * from student where birthday < '1990-1-1';
7.1 LIKE 关键字
语法:SELECT * FROM 表名 WHERE 字段 LIKE 条件;
注意:
• 在WHERE子句中,使用LIKE关键字进行模糊查询;
• 与“%”一起使用,表示匹配0或任意多个字符;
• 与“_”一起使用,表示匹配单个字符。
模糊符号:
% 任意多的任意字符
_ 一个任意字符
-- 模糊符号
-- % 任意多的任意字符
-- _ 一个任意字符
insert into student(sname) values('杨靓');
insert into student(sname) values('杨文齐'),('小小杨'),('杨帅哥'),('帅气的杨同学');select * from student where sname like '%杨%';
select * from student where sname like '%杨';
select * from student where sname like '杨%';select * from student where sname like '杨_';
select * from student where sname like '杨__';
select * from student where sname like '杨___';
7.2 IN 关键字
语法:SELECT * FROM 表名 WHERE 字段 IN (值1,值2...);
注意:
• 查询的字段的值,至少与IN 后的括号中的一个值相同;
• 多个值之间用英文逗号隔开。
-- in 在某个特定的范围
-- 3 5 7 9
-- or 会让索引失效
select * from student where sid=3 or sid=5 or sid=7 or sid=9;-- 推荐
-- in 可以使用到索引
7.3 NULL 值查询
语法:SELECT * FROM 表名 WHERE 字段 IS NULL | IS NOT NULL
注意:
• NULL代表“无值”;
• 区别于零值0和空符串;
• 只能出现在定义允许为NULL的字段;
• 须使用 IS NULL 或 IS NOT NULL 比较操作符去比较。
-- null
-- is 是一个什么
select * from student where birthday is null;
select * from student where birthday is not null;
8.常用的聚合函数 (非常非常重要)
| 函数名 | 返回值 |
| AVG(col) | 返回指定列的平均值 |
| COUNT(col) | 返回指定列中非NULL值的个数 |
| MIN(col) | 返回指定列的最小值 |
| MAX(col) | 返回指定列的最大值 |
| SUM(col) | 返回指定列的所有值之和 |
聚合函数(非常重要*****)
把多个值变成一个值
- count() 统计个数
- max() 求最大值
- min() 求最小值
- sum() 求和
- avg() 求平均
-- 聚合函数(非常重要*****)
-- 把多个值变成一个值
-- count() 统计个数
-- max() 求最大值
-- min() 求最小值
-- sum() 求和
-- avg() 求平均-- count() 统计个数
-- count的特征: 任何类型都可以 但是不统计null
-- select count(字段\常量\*) from student;
select count(sid) from student; -- 主键
select count(classid) from student; -- 不统计nullselect count('a') from student; -- 不推荐
select count(123) from student; -- 推荐
select count(*) from student; -- 推荐-- sum avg min max 数值类型
select sum(score) from sc;
select avg(score) from sc;
select max(score) from sc;
select min(score) from sc;-- 统计出成绩表中一共有多少次考试,总成绩,平均分,最高分,最低分
/*
SELECT COUNT(DISTINCT sid) AS total_exams, SUM(score) AS total_score, AVG(score) AS average_score, MAX(score) AS highest_score, MIN(score) AS lowest_score
from sc;
*/
select count(*) ,sum(score),avg(score),max(score),min(score) from sc;
9.分组 group by
分组 group by
- 对所有的数据进行分组统计;
- 分组的依据字段可以有多个,并 依次分组。
- HAVING 与GROUP BY结合使用,进行分组 后的数据筛选。
-- 分组 group by ******
--男女同学各有多少人
select ssex,count(1) from student group by ssex;-- 统计出各班有多少人
select classid,count(1) from student group by classid;-- 统计成绩表中 每个同学的总分和平均分
select sid,sum(score),avg(score) from sc group by sid;-- 查询出平均分不及格的学生 sid 平均分
-- having where的区别 (面试)
-- having 对分组聚合后的数据进行筛选
select sid,sum(score),avg(score) from sc group by sid having avg(score) <60 ;
select sid,sum(score),avg(score) from sc where score<60 group by sid having avg(score) <60 ;
having where的区别 (面试)
10.ORDER BY排序
语法:SELECT * FROM 表名 ORDER BY 字段名 [DESC|ASC
注意:
• ORDER BY 表示对SELECT语句查询得到的结果,按字段名进行排序;
• DESC表示排序的顺序为降序,ASC表示排序的顺序为升序;
•“[ ]”包含的内容可以省略。
-- order by 排序
-- 先写先排
-- 升序 asc 不写(默认)
-- 降序 desc 必须声明
select * from student order by classid desc; -- 降序
select * from student order by classid asc; -- 升序select * from sc order by score desc, cid asc;
select * from sc order by score desc, cid desc;
11.LIMIT关键字
语法:SELECT * FROM 表名 LIMIT [n , m ]
注意:
• LIMIT关键字是MySQL特有关键字;
• LIMIT限制SELECT返回结果的行数;
• n 表示第一条记录的偏移量,m 表示显示记录的数量;
•“[ ]”包含的内容可以省略
limit 分页
步长 从0 开始 (页码-1)*步长,步长
语法:select * from student limit 位置,步长;
-- limit 分页
-- 步长 从0 开始 (页码-1)*步长,步长
select * from student limit 位置,步长;
select * from student limit 0,3;
select * from student limit 3,3;
select * from student limit 6,3;
-- 应用层解决
-- select * from student limit (3-1)*3,3; -- 错误的-- 找到成绩及格的总分数排名第二的 sid 总成绩
SELECT sid,sum(score) from sc where score >=60 group by sid order by sum(score) desc LIMIT 1,1;
拓展知识:
在不同的DBMS 中使用的关键字可能不同。在MySQL、PostgresQL、MariaDB和SQLite中使用LIMIT关键字,而且需要放到 SELECT语句的最后面。
如果是SQL Server和 Access,需要使用TOP关键字,比如:
SELECT TOP 5 name,hp_max FROM heros ORDER BY hp_max DESC
如果是 DB2,使用FETCH FIRST 5 ROwS ONLY这样的关键字;
SELECT name,hp_max FROM heros ORDER BY hp_max DESC FETCH FIRST 5 ROWS ONLY
如果是 Oracle,你需要基于 ROWNUM来统计行数:
SELECT rownum,last_name , salary FROM employees WHERE rownum <5 ORDER BY salary DESC;
相关文章:
基本的DQL语句-单表查询
一、DQL语言 DQL(Data Query Language 数据查询语言)。用途是查询数据库数据,如SELECT语句。是SQL语句 中最核心、最重要的语句,也是使用频率最高的语句。其中,可以根据表的结构和关系分为单表查询和多 表联查。 注意:所有的查询…...
Vue3 对比 Vue2
相关信息简介2020年9月18日,Vue.js发布3.0版本,代号:One Piece(海贼王) 2 年多开发, 100位贡献者, 2600次提交, 600次 PR、30个RFC Vue3 支持 vue2 的大多数特性 可以更好的支持 Typescript,提供了完整的…...
2024中国大学生算法设计超级联赛(1)
🚀欢迎来到本文🚀 🍉个人简介:陈童学哦,彩笔ACMer一枚。 🏀所属专栏:杭电多校集训 本文用于记录回顾总结解题思路便于加深理解。 📢📢📢传送门 A - 循环位移解…...
offer题目51:数组中的逆序对
题目描述:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。例如,在数组{7,5,6,4}中,一共存在5个逆序对,分别是(7…...
45、PHP 实现滑动窗口的最大值
题目: PHP 实现滑动窗口的最大值 描述: 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。 例如: 如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3, 那么一共存在6个滑动窗口, 他们的最大值…...
【计算机视觉】siamfc论文复现实现目标追踪
什么是目标跟踪 使用视频序列第一帧的图像(包括bounding box的位置),来找出目标出现在后序帧位置的一种方法。 什么是孪生网络结构 孪生网络结构其思想是将一个训练样本(已知类别)和一个测试样本(未知类别)输入到两个CNN(这两个CNN往往是权值共享的)中࿰…...
数学建模学习(111):改进遗传算法(引入模拟退火、轮盘赌和网格搜索)求解JSP问题
文章目录 一、车间调度问题1.1目前处理方法1.2简单案例 二、基于改进遗传算法求解车间调度2.1车间调度背景介绍2.2遗传算法介绍2.2.1基本流程2.2.2遗传算法的基本操作和公式2.2.3遗传算法的优势2.2.4遗传算法的不足 2.3讲解本文思路及代码2.4算法执行结果: 三、本文…...
Golang | Leetcode Golang题解之第241题为运算表达式设计优先级
题目: 题解: const addition, subtraction, multiplication -1, -2, -3func diffWaysToCompute(expression string) []int {ops : []int{}for i, n : 0, len(expression); i < n; {if unicode.IsDigit(rune(expression[i])) {x : 0for ; i < n &…...
Unity客户端接入原生Google支付
Unity客户端接入原生Google支付 1. Google后台配置2. 开始接入Java部分C#部分Lua部分 3. 导出工程打包测试参考踩坑注意 1. Google后台配置 找到内部测试(这个测试轨道过审最快),打包上传,这个包不需要接入支付,如果已…...
Spring Cloud之五大组件
Spring Cloud 是一系列框架的有序集合,为开发者提供了快速构建分布式系统的工具。这些组件可以帮助开发者做服务发现,配置管理,负载均衡,断路器,智能路由,微代理,控制总线等。以下是 Spring Cl…...
在 CentOS 7 上安装 Docker 并安装和部署 .NET Core 3.1
1. 安装 Docker 步骤 1.1:更新包索引并安装依赖包 先安装yum的扩展,yum-utils提供了一些额外的工具,这些工具可以执行比基本yum命令更复杂的任务 sudo yum install -y yum-utils sudo yum update -y #更新系统上已安装的所有软件包到最新…...
redis的学习(一):下载安装启动连接
简介 redis的下载,安装,启动,连接使用 nosql nosql,即非关系型数据库,和传统的关系型数据库的对比: sqlnosql数据结构结构化非结构化数据关联关联的非关联的查询方式sql查询非sql查询事务特性acidbase存…...
前端设计模式面试题汇总
面试题 1. 简述对网站重构的理解? 参考回答: 网站重构:在不改变外部行为的前提下,简化结构、添加可读性,而在网站前端保持一致的行为。也就是说是在不改变UI的情况下,对网站进行优化, 在扩展的…...
linux(CentOS、Ubuntu)安装python3.12.2环境
1.下载官网Python安装包 wget https://www.python.org/ftp/python/3.12.2/Python-3.12.2.tar.xz 1.1解压 tar -xf Python-3.12.2.tar.xz 解压完后切换到Python-3.12.2文件夹(这里根据自己解压的文件夹路径) cd /usr/packages/Python-3.12.2/ 1.2升级软件包管理器 CentOS系…...
CSS 中border-radius 属性
border-radius 属性在 CSS 中用于创建圆角边框。它可以接受一到四个值,这些值可以是长度值(如像素 px、em 等)或百分比(%)。当提供四个值时,它们分别对应于边框的左上角、右上角、右下角和左下角的圆角半径…...
【大数据专题】数据仓库
1. 简述数据仓库架构 ? 数据仓库的核心功能从源系统抽取数据,通过清洗、转换、标准化,将数据加载到BI平台,进而满足业 务用户的数据分析和决策支持。 数据仓库架构包含三个部分:数据架构、应用程序架构、底层设施 1&…...
go关于string与[]byte再学深一点
目标:充分理解string与[]bytes零拷贝转换的实现 先回顾下string与[]byte的基本知识 1. string与[]byte的数据结构 reflect包中关于字符串的数据结构 // StringHeader is the runtime representation of a string.type StringHeader struct {Data uintptrLen int} …...
Qt 实战(7)元对象系统 | 7.4、属性系统:深度解析与应用
文章目录 一、属性系统:深度解析与应用1、定义属性2、属性系统的作用3、属性系统工作原理(1)Q_PROPERTY宏(2)moc 的作用(3)属性在元对象中的注册 4、获取与设置属性4.1、QObject::property()与Q…...
Docker核心技术:容器技术要解决哪些问题
云原生学习路线导航页(持续更新中) 本文是 Docker核心技术 系列文章:容器技术要解决哪些问题,其他文章快捷链接如下: 应用架构演进容器技术要解决哪些问题(本文)Docker的基本使用Docker是如何实…...
sklearn中的增量学习:特征提取的艺术
sklearn中的增量学习:特征提取的艺术 在机器学习领域,特征提取是构建有效模型的关键步骤。然而,并非所有数据集都适合一次性加载到内存中进行处理,尤其是在处理大规模数据集时。Scikit-learn(sklearn)提供…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
redis和redission的区别
Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...
