【SQL基础】SQL查询语句实例

2023-11-15

参考自:https://www.w3school.com.cn/sql/index.asp

下面举实例:员工表、部门表、薪资等级表。
//附上sql语句: 薪资等级表SALGRADE、部门表DEPT、员工表EMP
CREATE TABLE DEPT(
	DEPTNO int(2) not null ,
	DNAME VARCHAR(14) ,
	LOC VARCHAR(13),
	primary key (DEPTNO)
);
CREATE TABLE EMP(
	EMPNO int(4) not null ,
	ENAME VARCHAR(10),
	JOB VARCHAR(9),
	MGR INT(4),
	HIREDATE DATE DEFAULT NULL,
	SAL DOUBLE(7,2),
	COMM DOUBLE(7,2),
	primary key (EMPNO),
	DEPTNO INT(2) 
);
CREATE TABLE SALGRADE( 
	GRADE INT,
	LOSAL INT,
	HISAL INT 
);
INSERT INTO DEPT ( DEPTNO, DNAME, LOC ) VALUES (10, 'ACCOUNTING', 'NEW YORK'); 
INSERT INTO DEPT ( DEPTNO, DNAME, LOC ) VALUES (20, 'RESEARCH', 'DALLAS'); 
INSERT INTO DEPT ( DEPTNO, DNAME, LOC ) VALUES (30, 'SALES', 'CHICAGO'); 
INSERT INTO DEPT ( DEPTNO, DNAME, LOC ) VALUES (40, 'OPERATIONS', 'BOSTON'); 
commit;
 
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,DEPTNO ) VALUES (7369, 'SMITH', 'CLERK', 7902,  '1980-12-17', 800, NULL, 20); 
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,DEPTNO ) VALUES (7499, 'ALLEN', 'SALESMAN', 7698,  '1981-02-20', 1600, 300, 30); 
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,DEPTNO ) VALUES (7521, 'WARD', 'SALESMAN', 7698,  '1981-02-22', 1250, 500, 30); 
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,DEPTNO ) VALUES (7566, 'JONES', 'MANAGER', 7839,  '1981-04-02', 2975, NULL, 20); 
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,DEPTNO ) VALUES (7654, 'MARTIN', 'SALESMAN', 7698,  '1981-09-28', 1250, 1400, 30); 
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,DEPTNO ) VALUES (7698, 'BLAKE', 'MANAGER', 7839,  '1981-05-01', 2850, NULL, 30); 
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,DEPTNO ) VALUES (7782, 'CLARK', 'MANAGER', 7839,  '1981-06-09', 2450, NULL, 10); 
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,DEPTNO ) VALUES (7788, 'SCOTT', 'ANALYST', 7566,  '1987-04-19', 3000, NULL, 20); 
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,DEPTNO ) VALUES (7839, 'KING', 'PRESIDENT', NULL,  '1981-11-17', 5000, NULL, 10); 
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,DEPTNO ) VALUES (7844, 'TURNER', 'SALESMAN', 7698,  '1981-09-08', 1500, 0, 30); 
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,DEPTNO ) VALUES (7876, 'ADAMS', 'CLERK', 7788,  '1987-05-23', 1100, NULL, 20); 
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,DEPTNO ) VALUES (7900, 'JAMES', 'CLERK', 7698,  '1981-12-03', 950, NULL, 30); 
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,DEPTNO ) VALUES (7902, 'FORD', 'ANALYST', 7566,  '1981-12-03', 3000, NULL, 20); 
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,DEPTNO ) VALUES (7934, 'MILLER', 'CLERK', 7782,  '1982-01-23', 1300, NULL, 10); 
commit;
 
INSERT INTO SALGRADE ( GRADE, LOSAL, HISAL ) VALUES (1, 700, 1200); 
INSERT INTO SALGRADE ( GRADE, LOSAL, HISAL ) VALUES (2, 1201, 1400); 
INSERT INTO SALGRADE ( GRADE, LOSAL, HISAL ) VALUES (3, 1401, 2000); 
INSERT INTO SALGRADE ( GRADE, LOSAL, HISAL ) VALUES (4, 2001, 3000); 
INSERT INTO SALGRADE ( GRADE, LOSAL, HISAL ) VALUES (5, 3001, 9999); 
commit;

1. 查询员工中薪资高于平均薪资的员工姓名以及工作岗位

//错误写法!! 报错:> 1111 - Invalid use of group function
select 
ename,job 
from 
emp 
where sal > avg(sal);
//因为group by是在where之后执行的,而分组函数又是在group by完全执行后(having)执行,所以就会出错
//正确写法:可以使用select嵌套进行解决
select 
ename,job 
from 
emp
where sal > (select avg(sal) from emp);

2. 找出每个部门平均薪水的薪资等级

//先找出每个部门的平均薪资
select deptno,avg(sal) as avgsal from emp group by deptno
//利用这个返回的结果和salgrade进行连接,然后查询出想要的结果
select t.*,s.grade
from
(select deptno,avg(sal) as avgsal from emp group by deptno) t
join salgrade s
on
t.avgsal between s.losal and s.hisal;

3. 查每个员工所在的部门名称,要求显示员工名和部门名(select后嵌套子查询例子)

select 
e.ename,(select d.dname from dept d where e.deptno=d.deptno) as dname
from emp e;






下面继续举其他实际例子说明:
substr(strings|express,m,[n])
  • strings|express :被截取的字符串或字符串表达式
  • m 从第m个字符开始截取
  • n 截取后字符串长度为n
select Id as id, Name as name 
from table_example 
where cityId='123456'  AND  SUBSTR(Id,15,1)='1'

like关键字 :

//查询名字包含“嘎嘎嘎”的信息
select Id as id, Name as name 
from table_example 
where Name like '%嘎嘎嘎%'

between关键字 :

//查询2021年1月1日到2021年1月20日总费用(oracle写法)
select sum(fee)  as  sumfee  
from  table_example
where  TRANS_TIME 
between to_date('2021-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')  and  to_date('2021-01-20 23:59:59','yyyy-mm-dd hh24:mi:ss') 

Oracle to_date()函数的用法

group by子句:

//查询id信息2021年1月1日到2021年1月20日总费用
select ID ,sum(fee)  as  sumfee  
from  table_example
where  TRANS_TIME between to_date('2021-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')  and  to_date('2021-01-20 23:59:59','yyyy-mm-dd hh24:mi:ss') 
group by ID 

having子句:

//查询2021年1月1日到2021年1月20日总费用在300元以上的id
select ID ,sum(fee)  as  sumfee  
from  table_example
where  TRANS_TIME between to_date('2021-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')  and  to_date('2021-01-20 23:59:59','yyyy-mm-dd hh24:mi:ss') 
group by ID 
having sum(fee) > 100

order by :

//查询各信息2021年1月1日到2021年1月20日总费用并按费用由高到低排序
select ID ,sum(fee)  as  sumfee  
from  toolData
where  TRANS_TIME between to_date('2021-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')  and  to_date('2021-01-20 23:59:59','yyyy-mm-dd hh24:mi:ss') 
group by ID 
order by sumfee  desc


重点
left join 语句 :left join 详细

LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。
//查询各市2021年1月1日到2021年1月20日总费用
select CityId, sum(sumfee) as cityfee
from(
	select  B.GantryId, B.CityId, A.sumfee
	from(
		select TOLL_GANTRY_ID ,sum(FEE)  as  sumfee  
		from  toolData where  TRANS_TIME between to_date('2021-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')  and  to_date('2021-01-20 23:59:59','yyyy-mm-dd hh24:mi:ss') 
		group by TOLL_GANTRY_ID
		) A
 		left join(select GantryId,CityName from  doorFrameData) B
		on A.TOLL_GANTRY_ID = B.GantryId
	) S 
group by CityId
order by cityfee desc

结果如图:
inner join 语句:inner join 详细
2021年1月1日到2021年1月20日总费用在300元以上的门架及基本信息:

select A.* from
	(
	select GantryId as id, Name as name 
	from doorFrameData 
	) A
inner join
	(
	select TOLL_GANTRY_ID ,sum(FEE)  as  sumfee  
	from  toolData
	where  TRANS_TIME between to_date('2021-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')  and  to_date('2021-01-20 23:59:59','yyyy-mm-dd hh24:mi:ss') 
	group by TOLL_GANTRY_ID 
	having sum(FEE) > 300
	) B
on  
A.id = B.TOLL_GANTRY_ID 
注:INNER JOIN 与 JOIN 是相同的。

SQL union 操作符 :
union操作符用于合并两个或多个 select语句的结果集。union 内部的 select语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 select语句中的列的顺序必须相同。

union 操作符选取不同的值。如果允许重复的值,请使用 union all。

distinct :
关键词 distinct 用于返回唯一不同的值。

SELECT distinct 列名称 FROM 表名称
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【SQL基础】SQL查询语句实例 的相关文章

随机推荐

  • 蜗牛君漫聊动态布局框架(三):适配器与创建者

    大家好 欢迎来到蜗牛君漫聊动态布局框架专题 上篇文章中我们介绍完了框架的核心功能实现 本篇继续介绍剩下的所有功能 不同类型ViewHolder的动态创建已经完成 接下来我们要实现数据与布局的中间件 适配器 Adapter 代码实现 中间件
  • anaconda所有版本大全

    今天在整理的时候把自己的anaconda搞废了 所以用了万能的方法 重装 但是面临装了官网的最新版 发现出现很多的小问题 不是缺少这就是缺少那 python的版本也是最新的3 8 用起来很不习惯 于是想到了降低python版本 但是在实际的
  • keil C51 常见错误和警告

    C51编译器识别错类型有三种 1 致命错误 伪指令控制行有错 访问不存在的原文件或头文件等 2 语法及语义错误 语法和语义错误都发生在原文件中 有这类错误时 给出 提示但不产生目标文件 错误超过一定数量才终止编译 3 警告 警告出现并不影响
  • 最强大脑记忆法

    3 14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944 上面这个是故事摄影的方法 10个记忆宫殿来记20个数字 汽车的记忆宫殿 1前轮 2车灯 3车
  • transformer位置编码最详细的解析

    位置编码positional encoding 1 位置编码是什么 为什么需要它 2 transformer提出的位置编码方法 3 直觉 4 其他细节 5 相对位置 6 常见问题解答 1 位置编码是什么 为什么需要它 位置和词语的顺序是任何
  • STL——set容器、map容器

    初识STL set容器 multiset容器 set容器 构造和赋值 set容器 大小和交换 set容器 插入和删除 set容器的查找和统计 set和multiset的区别 set的相关操作源码 multiset的相关操作源码 pair使用
  • Acwing算法基础课知识点

    知识点基础算法 代码模板链接 常用代码模板1 基础算法 排序 二分 高精度 前缀和与差分 双指针算法 位运算 离散化 区间合并 数据结构 代码模板链接 常用代码模板2 数据结构 链表与邻接表 树与图的存储 栈与队列 单调队列 单调栈 kmp
  • Android插件化的探索

    简介 对于App而言 所谓的插件化 个人的理解就是把一个完整的App拆分成宿主和插件两大部分 我们在宿主app运行时可以动态的载入或者替换插件的部分 插件不仅是对宿主功能的扩展而且还能减小宿主的负担 所谓的宿主就是运行的app 插件即宿主运
  • 几种本地存储方式

    浏览器本地存储的容器 1 cookie 2 sessionStorage 3 localStorage cookie cookie 浏览器早期存储数据容器 主要用于 存放用户名和密码 特点 容量小 4kb 操作繁琐 name zs pass
  • android studio安装automotive模拟器

    添加源 打开android studio的SDK Manager 选择SDK Update Sites选项卡 点击Add 弹出地址设置界面 添加polestar2 sys img Name填写 Polestar 2 System Image
  • RabbitMQ如何保证消息的顺序性【重点】

    1 1 保证顺序性的意义 消息队列中的若干消息如果是对同一个数据进行操作 这些操作具有前后的关系 必须要按前后的顺序执行 否则就会造成数据异常 举例 比如通过mysql binlog进行两个数据库的数据同步 由于对数据库的数据操作是具有顺序
  • SQLi LABS Less-12 联合注入+报错注入

    第十二关是双引号 括号的字符型注入 推荐使用联合注入 报错注入 方式一 联合注入 参考文章 联合注入使用详解 原理 步骤 实战教程 第一步 判断注入类型 用户名输入 a or 1 a 密码随便输入 1 页面正常显示 用户名输入 a or 0
  • 【C++】crypto++加密库简单使用

    crypto 加密库简单使用 目录 crypto 密码学库简单使用 一 简介 二 配置 三 使用示例 1 CRC32校验 2 Base64编码 3 Blake2b 4 AES 5 RSA 一 简介 crypto 是一个免费开源 公共领域 的
  • 功能测试之单元测试

    功能测试之单元测试 单元测试 理论 实例 单元测试 理论 简介 1 单元测试的基本概念 2 单元测试的策略 3 单元测试的步骤 4 Junit测试简单Java程序 1 单元测试概念 什么是单元测试 单元测试是一种验证行为 是指对软件中的最小
  • 第1章 多线程概述

    学习多线程之前 我们先要了解几个关于多线程有关的概念 A 进程 进程指正在运行的程序 确切的来说 当一个程序进入内存运行 即变成一个进程 进程是处于运行过程中的程序 并且具有一定独立功能 B 线程 线程是进程中的一个执行单元 负责当前进程中
  • Java经典面试题详解:springframework框架

    一面 1 自我介绍和项目 2 Java的内存分区 3 Java对象的回收方式 回收算法 4 CMS和G1了解么 CMS解决什么问题 说一下回收的过程 5 CMS回收停顿了几次 为什么要停顿两次 6 Java栈什么时候会发生内存溢出 Java
  • unity3d人物碰撞提示文字

    设置碰撞体 例如cube 将脚本挂载在物体上 碰撞显示text using System Collections using System Collections Generic using UnityEngine using Unity
  • 深度学习环境配置:2080Ti+Ubuntu16.04+CUDA10+cuDNN7.3+TensorFlow-gpu1.12

    目录 第一步 系统安装 Ubuntu16 04 第二步 连接校园网 第三步 cuda10 0 cudnn7 3安装
  • ES6 语法之 Iterator

    一 概念 Iterator 遍历器 为不同的数据类型提供统一的访问机制 只要部署了 Iterator 接口 原型上有 Symbol iterator 方法 就可以完成遍历操作 遍历操作主要通过 for of 完成 let arr 1 2 3
  • 【SQL基础】SQL查询语句实例

    参考自 https www w3school com cn sql index asp 下面举实例 员工表 部门表 薪资等级表 附上sql语句 薪资等级表SALGRADE 部门表DEPT 员工表EMP CREATE TABLE DEPT D