sql-DQL-单表查询
单表查询
select [distint]* 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组之后的条件 order by 排序 limit 分页限定
基础查询
select * from emp;
1.查询多个列(控制列)
select 字段名1,字段名2... from 表名;
查询所有列
select * from emp; -- 如果查询所有字段,则可以使用*来替代字段列表。
select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp; -- 推荐使用第二种。列出所有列名
- 计算列
一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
select empno,ename,sal,sal*12 from emp;
empno ename sal sal*12
7369 SMITH 800 9600
- 起别名:as
select ename as "姓名",job as "工作" from emp;
-- as也可以省略
select ename "姓名",job "工作" from emp;
select ename 姓名 ,job 工作 from emp;
select ename "from" ,job 工作 from emp; -- 不推荐

- 去除重复:distinct
select distinct job as 工作,deptno as 部门编号 from emp ;

条件查询 where
范围查询
算数运算 加减乘除
null的计算
① a.null参与运算时,结果永远为null
select ename,sal,comm,sal*12+comm from emp;

oracle的解决方案 --> 使用 nvl (相当于if)
select ename,sal,comm,sal*12+nvl(comm,0) from emp;
额外:nvl2 (if…else…)
nvl2(a,b,c) 当a=null时候,返回c;否则返回b
select ename,sal,comm,sal*12+nvl2(comm,comm,0) from emp;

mysql的解决方案
ifnull(表达式1,表达式2):
- 表达式1:哪个字段需要判断是否为null
- 如果该字段为null后的替换值。
关系运算符
关系运算符 > < >= <= = !=(或<>)
如果是null,则使用is null或is not null.
判断null
② b. 判断null 不能 !=null;而必须使用 is not null /is null
select * from emp where comm=null; -- 错误
select * from emp where comm < 400 or comm IS NULL;

逻辑运算
mysql 中的逻辑运算符 and(或 &&) or(或 ||) not(或 !)
oracle 逻辑运算符 or and not
select * from emp where empno=7788 or empno=7369;
select * from emp where deptno=20 and job ='CLERK';
select * from emp where not ( empno=7788 or empno=7369 );
而 || 被oracle用于字符串拼接
- select 'hello'||'123' from dual ;
BETWEEN ... AND ...
between 小 and 大,(数字和日期)
数字
select * from emp where sal between 2000 and 3000
日期
oracle:日期默认格式 '01-1月-81'(date)
select * from emp where hiredate between '01-1月-81' and '10-11月-81' ;
mysql:日期默认格式 'yyyy-MM-dd'(datetime)
select * from emp where hiredate between '1981-1-01' and '1981-11-10';
IN(集合)/not in
select * from emp where comm in (0,300,500);

如果集合有null,可以in, 不能not in
错误示例: where deptno not in (10,20,null)
模糊查询 like
占位符(通配符)
_:单个任意字符
%:多个任意字符 0-N
查询姓名中 第二个字母是M的员工
select * from emp where ename like '_M%' ;
查询姓名长度>=6的员工。
select * from emp where ename like '______%' ;
转义符:
如果要匹配的ename就是A_B,就需要使用转义符
select * from emp where ename like 'A\_B' escape '\' ;
排序查询 order by
order by 排序字段1 排序方式1, 排序字段2 排序方式2
排序字段可以是 字段名|别名|表达式|数字
排序方式:
ASC:升序,默认的。
DESC:降序。
如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。
null排序
select * from emp ORDER BY comm asc;
在MySQL中 null最小,升序时 排在最前面

在Oracle中 null最大,升序时 排在最后面

如果排序存在null:在Oracle中Null最大。如果需要null排在最后,使用nulls last ;
…order by common nulls last;
Oracle/Sql Server :从1开始数
MySql:从0开始数
分组查询:group by ... having ...
group by 分组字段 having 筛选组
分组之后查询的字段:分组字段、聚合函数
查询时,不在组函数(多行函数)中的列,必须在group by后面
不能在where中使用组函数;可以在having中使用组函数(多行函数)
查询每个部门的人数:按部门分组
- select deptno, job,count(*) from emp group by deptno,job ;
查询每个部门的人数,只查询人数大于5的组
- select deptno,count(*) from emp group by deptno having count(*)>5 ;
可多个列分组(先按部门分组,再按job分组)
select deptno,job,avg(sal) from emp group by deptno,job;
分析:
select 分组1,分组2 ,组函数() from emp group by 分组1,分组2 ;
- where 和 having 的区别?
- 筛选 行:where
- 筛选 组:having
- where 在分组之前进行限定,如果不满足条件,则不参与分组。
having在分组之后进行限定,如果不满足结果,则不会被查询出来 - where 后不可以跟聚合函数,having可以进行聚合函数的判断。
- where 在分组之前进行限定,如果不满足条件,则不参与分组。
sql-DQL-单表查询的更多相关文章
- 06-查询操作(DQL)-单表查询
一. 综述 查询操作主要从两个方面来说:单表查询和多表查询. 单表查询包括:简单查询.过滤查询.结果排序.分页查询.聚集函数. 二 . 案例设计 1. 设计产品表(product).包括:主键 ...
- sql语句-单表查询
一:单表查询 CREATE TABLE `Score`( `s_id` ), `c_id` ), `s_score` ), PRIMARY KEY(`s_id`,`c_id`) ); ); ); ); ...
- 数据库——SQL数据单表查询
数据查询 语句格式 SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式>] … FROM <表或视图名>[,<表或视图名&g ...
- (七)MySQL数据操作DQL:单表查询1
(1)单表查询 1)环境准备 mysql> CREATE TABLE company.employee5( id int primary key AUTO_INCREMENT not null, ...
- DQL单表查询
DQL数据查询语言数据查询关键字:select 对数据库关系表中的数据进行查询 创建数据库创建表格学生表(学号s_no,姓名s_name,班级s_classno,课程s_courseno) 班级表(班 ...
- 【T-SQL基础】01.单表查询-几道sql查询题
概述: 本系列[T-SQL基础]主要是针对T-SQL基础的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础]02.联接查询 [T-SQL基础]03.子查询 [T-SQL基础 ...
- SQL基本查询_单表查询(实验二)
SQL基本查询_单表查询(实验二) 查询目标表结构及数据 emp empno ename job hiedate sal comn deptno 1007 马明 内勤 1992-6-12 4000 2 ...
- springdata 查询思路:基本的单表查询方法(id,sort) ---->较复杂的单表查询(注解方式,原生sql)--->实现继承类---->复杂的多表联合查询 onetomany
springdata 查询思路:基本的单表查询方法(id,sort) ---->较复杂的单表查询(注解方式,原生sql)--->实现继承类---->复杂的多表联合查询 onetoma ...
- sql多表查询(单表查询略过)
表library: 表borrow: 表reader: 1.等值连接:(常用) 原理:将多张表组合成一个逻辑大表,即字段相加记录相乘(笛卡尔积). 语法:select * from 表A,表B whe ...
- SQL数据查询之——单表查询
一.SQL数据查询的一般格式 数据查询是数据库的核心操作.SQL提供了SELECT语句进行数据查询,其一般格式为: SELECT [ALL | DISTINCT]<目标列表达式>[,< ...
随机推荐
- 【LeetCode】24.两两交换链表中的节点
24.两两交换链表中的节点 知识点:链表 题目描述 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 示例 示例 1 ...
- 记一次mysql请求超时甩锅历程
今天下午业务找我说是线上环境一个mysql库很慢,请求出现了大量的超时,让帮忙看看,以下为查找过程及甩锅过程. 1. mysql请求超时,ok,我们所有线上mysql都是开启了慢查询日志的,查找慢查询 ...
- JavaScript学习②
2. 基本对象: 1. Function:函数(方法)对象 1. 创建: 1. var fun = new Function(形式参数列表,方法体); //忘掉吧 2. function 方法名称(形 ...
- partTwo自动出题程序第三阶段
课堂测试3: 2.可定制(数量/打印方式):输入大的数量值,测试一下系统是否崩溃,反向查找系统是否优化的余地: 3.定制操作数的个数: 4.定制是否有乘除法 5.定制是否有括号(随机加入) 6 .定制 ...
- Java语言学习day05--7月2日
今日内容介绍1.引用类型变量的创建及使用2.流程控制语句之选择语句 ###01创建引用类型变量公式 * A: 创建引用类型变量公式 * a: 我们要学的Scanner类是属于引用数据类型,我们先了解下 ...
- .NET 7 Preview 3添加了这些增强功能
.NET 7 Preview 3 已发布, .NET 7 的第三个预览版包括对可观察性.启动时间.代码生成.GC Region.Native AOT 编译等方面的增强. 有兴趣的用户可以下载适用于 W ...
- windows 安装 kalfka 并快速启动
1.安装Java 环境 https://www.java.com/zh_CN/ 直接下载安装即可 (如果之前有配置过java环境 可以先跳过此步骤,但是如果运行的时候报错就需要把之前的jdk环境变量删 ...
- .NET性能优化-你应该为集合类型设置初始大小
前言 计划开一个新的系列,来讲一讲在工作中经常用到的性能优化手段.思路和如何发现性能瓶颈,后续有时间的话应该会整理一系列的博文出来. 今天要谈的一个性能优化的Tips是一个老生常谈的点,但是也是很多人 ...
- ABP应用开发(Step by Step)-下篇
测试 ProductAppService 类 启动模板附带测试基础架构,包括xUnit.Shouldly和NSubstitute库.它使用SQLite 内存数据库来模拟数据库,并为每个测试创建一个单独 ...
- FreeRTOS --(6)内存管理 heap5
转载自https://blog.csdn.net/zhoutaopower/article/details/106748308 FreeRTOS 中的 heap 5 内存管理,相对于 heap 4&l ...