SQL语句

2023-05-16

Select

SQL 执行顺序

  1. from
  2. on
  3. join
  4. where
  5. group by
  6. having
  7. select
  8. distinct
  9. order by
  10. limit

WHERE

字段比较

代码作用
=等于
<>、!=不等于
<、<=小于
>、>=大于
between … and …两个值之间
is null、is not null值是否为null
and并且
name=‘liu’ or name=‘yang’或者
in(a,b,c) 、not in()包含、不包含(不在这个范围中)
like ‘_A%’模糊查询,%匹配多个字符,下划线匹配一个字符

字段函数处理

作用函数
字符转小写lower(name)
字符转大写upper(name)
字符串截取子串substr(name,1,length)
获取字符串长度length(name)
字符串拼接concat(name1,name2)
字符串去空格trim(name)
四舍五入保留整数round(1.5621,0)
随机数round(rand()*100,0)
避免空参与运算ifnull(数据,当作那个值)

ORDER BY

asc 升序排列,desc 降序。
多个字段排序,只有前一个字段相等时才会启用后一个字段排序。

select name,sal 
from emp
order by sal asc,name asc;

GROUP BY

  • select 中字段要在group by 中声明
  • 或者 使用分组函数 sum(field)
  • having 对分组后数据进行过滤。不能代替where
  • 对相同数据进行分组,去重
作用函数
计数count(salary)
求和sum(salary)
平均值avg(salary)
最大值max(salary)
最小值min(salary)
  • 分组函数自动忽略NULL
  • count(*) :统计表的总行数,整行不是空就统计
select field1,field2,max(field3) from emp
group by field1,field2;

DISTINCT

select distinct **,** from tablename;
//distinct只能出现在字段最前方 后面字段联合去重

INNER JOIN

等值连接

select e.ename,d.dname
 from emp e
 inner join dept d
 on e.deptno=d.deptno
 where 筛选条件

表自关联——表中所属情况

select a.ename as '员工名',b.ename as '领导名'
 from emp a
 join emp b
 on a.mgr=b.empno// 员工领导编号=领导的员工编号

表自关联——表中记录排序取前几名

SELECT * FROM Employee AS E1 
LEFT JOIN Employee AS E2 ON E1.salary<E2.salary AND E1.departmentId=E2.departmentId
#查出E1表中存放小的数据,E2表中存放大的数据

SELECT Department.`name` AS Department , E1.`name` AS Employee ,E1.salary AS Salary  FROM Employee AS E1 
LEFT JOIN Employee AS E2 ON E1.salary<E2.salary AND E1.departmentId=E2.departmentId
INNER JOIN Department ON E1.departmentId=Department.id
GROUP BY Department,Employee,Salary
HAVING COUNT(DISTINCT E2.salary)<=2
#先分组再过滤 HAVING COUNT(DISTINCT E2.salary)<=2
#过滤掉大表中数据个数小于等于2的,代表我E1表中的数据 最多只有2个大于它。

在这里插入图片描述

LEFT JOIN

左连接查询:主查左表,附带根据条件查询右表,匹配不上null表示。

select *
from student a
left join sc b
on a.sid=b.sid
ORDER BY a.sname

在这里插入图片描述

RIGHT JOIN

右连接查询:主查右表,附带根据条件查询左表,匹配不上null表示。

select *
from student a
right join sc b
on a.sid=b.sid
ORDER BY a.sname

select *
from sc a
right join student b
on a.sid=b.sid
ORDER BY b.sname

在这里插入图片描述
在这里插入图片描述

子查询

select *
from sc a
right join student b
on a.sid=b.sid
where (a.score)=(select max(score) from sc)
ORDER BY b.sname
-- 查询的成绩 包含在子查询中(最高成绩)
select *
from sc a
right join student b
on a.sid=b.sid
where (a.cid,a.score) in (select sc.cid, max(score) from sc group by sc.cid)
ORDER BY b.sname

select *
from sc a
right join student b
on a.sid=b.sid
where (a.cid,a.score)not in (select sc.cid, max(score) from sc group by sc.cid)
ORDER BY b.sname

在这里插入图片描述

排序函数

select
    id 
   ,score
   ,rank() over(order by score desc) rank               --按照成绩排名,纯排名
   ,dense_rank() over(order by score desc) dense_rank   --按照成绩排名,相同成绩排名一致
   ,row_number() over(order by score desc) row_number   --按照成绩依次排名
   ,ntile(3) over (order by score desc) ntile         --按照分数划分成绩梯队
from scores;

在这里插入图片描述

Case语句

CASE WHEN SC.score>=60 AND SC.score<=100 THEN 1 END

SELECT *
FROM Student a
LEFT JOIN SC b
ON a.sid=b.sid

SELECT a.*
       ,SUM(CASE WHEN b.cid='01' THEN b.score ELSE 0 END) AS s01
       ,SUM(CASE WHEN b.cid='02' THEN b.score ELSE 0 END) AS s02
       ,SUM(CASE WHEN b.cid='03' THEN b.score ELSE 0 END) AS s03
       ,AVG(CASE WHEN b.score IS NULL THEN 0 ELSE b.score END) avs
FROM Student a
LEFT JOIN SC b
ON a.sid=b.sid
GROUP BY 1,2,3,4
ORDER BY avs DESC;

在这里插入图片描述

小数点保留

FORMAT(clumn,2

CAST类型转换

CAST(
COUNT((CASE WHEN SC.score>=90 AND SC.score<=100 THEN 1 END)) AS FLOAT
)

日期处理

date日期类型: %Y-%m-%d

datetime日期类型:%Y-%m-%d %h:%i:%s

now() :获取当前时间 年月日 时分秒

CURDATE() :获取当前年月日

year(date):获取传入日期的年份

TIMESTAMPDIFF(YEAR,Student.birth,CURDATE()):距离今天多少年

WEEKOFYEAR(Student.birth):获取日期的周数

MONTH(Student.Sage):获取日期的月份

插入日期处理

MySQL 默认日期格式 %Y-%m-%d 1999-10-01

函数:str_to_date(‘字符串日期’,‘日期格式’);

str_to_date('01-10-1999','%d-%m-%Y'));

查询日期处理

函数:date_format(日期数据,‘日期格式’)

select sid,sname,date_format(sage,'%m/%d/%Y') as birth from student;

在这里插入图片描述

Oracle

表空间创建

-- 表空间
CREATE TABLESPACE DATA_LIUYANG
LOGGING 
DATAFILE '/home/oracle/app/oracle/oradata/helowin/EXAM_LIUYANG_DATA.dbf'
SIZE 50M 
AUTOEXTEND ON 
NEXT 50M MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL;

-- 临时表空间
CREATE TEMPORARY TABLESPACE TEMP_LIUYANG
TEMPFILE '/home/oracle/app/oracle/oradata/helowin/EXAM_LIUYANG_TEMP.dbf'
SIZE 50M 
AUTOEXTEND ON 
NEXT 50M MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL;

用户创建

CREATE USER EXAM_LIUYANG IDENTIFIED BY 123456

用户绑定表空间

--绑定表空间和临时表空间
ALTER USER EXAM_LIUYANG DEFAULT TABLESPACE DATA_LIUYANG TEMPORARY TABLESPACE TEMP_LIUYANG;

授权

--授予 权限 TO user
GRANT DBA TO EXAM_LIUYANG;

备份还原

-- 备份
Exp  jdp/jdp@192.168.0.133:1521/project.bm1oracle.com file=liuyang_20211110.dmp;
-- 还原
Imp EXAM_LIUYANG/123456@110.40.242.86:1521/helowin file=’D:\liuyang_2020104.dmp’;

connect by进行级联查询

--SUBSTR 截取字符串
--SYS_CONNECT_BY_PATH 展示以指定column和分隔符delimiter表示从根节点到当前节点的路径。
--START WITH 根节点
--CONNECT BY条件
--PRIOR 接条件为parent_id等于上级的id,查找到下一级记录后又会找parent_id等于下一级记录的id的记录
SELECT  SUBSTR(SYS_CONNECT_BY_PATH(DEPT_NAME,'->'),3) NAME_PATH
FROM    JDP_OU_DEPT
        START WITH PARENT ='root'
        CONNECT BY PRIOR DEPT_ID=PARENT 

小数个数

ROUND( column, 2 ) 

日期月份处理

ADD_MONTHS(column5);当前月份 +5
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL语句 的相关文章

  • 为什么我们不能有多个主键?

    我知道表中不能有超过 1 个主键 但技术原因是什么 直接拉取自SO https stackoverflow com questions 217945 can i have multiple primary keys in a single
  • 为什么 sql 字段名称中不应该包含逗号?

    人们一直告诉我列名中不应包含空格 我只是想知道 这是为什么 这是我为学校创建的一些数据库表遇到的问题 字段名称包括 Preble 和 Darke 相反 它们需要是 普雷布尔县 俄亥俄州 和 达克县 俄亥俄州 如果它们是行名称 我只需创建一个
  • Oracle 获取列值发生变化的行

    假设我有一张桌子 比如 ID CCTR DATE 1 2C 8 1 2018 2 2C 7 2 2018 3 2C 5 4 2017 4 2B 3 2 2017 5 2B 1 1 2017 6 UC 11 23 2016 还有其他字段 但我
  • 在 plsql 中立即执行

    如何从这段代码中得到结果 EXECUTE IMMEDIATE SELECT FROM table name through for loop 通常的方法看起来像这样 for items in select from this table l
  • (SQL) 识别字段中字符串格式多次出现的位置

    我需要将叙述字段 自由文本 拆分为多行 目前的格式如下 Case Reference Narrative XXXX XX 123456 Endless Text up to 50k characters 在作为文本的叙述字段中 各个条目 当
  • 是否可以使用“WHERE”子句来选择SQL语句中的所有记录?

    晚上好 我很好奇是否可以在 SQL 语句中创建一个 WHERE 子句来显示所有记录 下面一些解释 随机 SQL 语句 Java JSP示例 正常情况 String SqlStatement SELECT FROM table example
  • 获取查询的行号

    我有一个查询将返回一行 当表排序时 有什么方法可以找到我正在查询的行的行索引吗 我试过了rowid但当我期待第 7 行时却得到了 582 Eg CategoryID Name I9GDS720K4 CatA LPQTOR25XR CatB
  • 具有 LINQ 支持的最完整的 ORM?

    我正在寻找一个提供完整或接近完整的 LINQ 支持的 ORM LINQ 到 SQL 支持 LINQ 内部的所有内容 Contains Math Log 等 在不创建新数据上下文的情况下无法预先加载关系属性 ADO NET 实体框架 糟糕的
  • SQL Server PIVOT 函数

    我有一个检索所有代理及其模块的查询 结果集将每个模块返回 1 行 SELECT am agentID AS agentid pa agentDisplayName agentdisplayname m ModuleName ModuleNa
  • 在 Oracle 中使用触发器记录对表的更改

    我的一门课有一个项目 当我们的两个表发生更改时 我们需要创建一个日志 插入 更新 删除 我们需要使用Oracle触发器和PL SQL 在日志文件中 我们需要记录用户ID 日期时间 IP地址和事件 插入 更新 删除 我知道如何设置触发器 但我
  • 如何将自定义类型数组传递给 Postgres 函数

    我有一个自定义类型 CREATE TYPE mytype as id uuid amount numeric 13 4 我想将它传递给具有以下签名的函数 CREATE FUNCTION myschema myfunction id uuid
  • SQL Server 查询结果集的大小

    SQL Server 中是否有确定结果集中 Mgmt Studio 查询中返回的数据大小 以 MEGS 为单位 您可以打开客户端统计信息 查询菜单 包括客户端统计信息 它给出执行查询时从服务器返回的字节数
  • 在 Postgres 中的数组字段上应用聚合函数?

    是否可以对整数 字段 或其他数字数组 中的所有值应用聚合 如 avg stddev CREATE TABLE widget measurement integer insert into widget measurement values
  • 如何通过循环变量在 dbt 中多次运行 SQL 模型?

    我有一个 dbt 模型 测试模型 接受地理变量 zip state region 在配置中 我想通过循环变量来运行模型三次 每次使用不同的变量运行它 问题是 我有一个如下所示的宏 它将变量附加到输出表名称的末尾 即运行测试模型 with z
  • 从一个sql服务器选择到另一个sql服务器?

    我想将一台服务器 Data Old S1 中的一个表 T1 在 DB1 中 中的数据选择到另一台服务器 Data Latest S2 中的另一个表 T2 在 DB2 中 中的数据 我怎样才能做到这一点 请注意服务器的命名方式 查询也应该考虑
  • T-sql、刻度、时间戳

    是否有可能在 t sql 中获得像 DateTime Ticks 这样的 C 内容 感谢帮助 您不太可能从 SQL 中获得与 DateTime Ticks 相同的精度 因为 SQL 不能以那么高的精度表达时间 SQL Server 只存储大
  • ORA-01749: 您不能向自己授予/撤销权限

    我正在运行以下查询RATOR MONITORING授予引用权限的架构RATOR MONITORING CONFIGURATION SMSC GATEWAY表到RATOR MONITORING schema GRANT REFERENCES
  • 按两列的最小值排序

    I use SQL Server 2008 R2 我需要按两列的最小值对表进行排序 该表如下所示 ID integer Date1 datetime Date2 datetime 我希望我的数据按至少两个日期排序 以这种方式对该表进行排序的
  • 在 Doctrine DQL 中选择 count() ,并使用左连接多对多单向关系,其中用户没有关系特定组

    情况 我尝试在 DQL 中为不属于特定组的用户选择 count 标准ManyToMany之间的单向关系User and Group实体来自FOSUserBundle and SonataUserBundle 系统 Symfony 2 5 D
  • 计算树中值的总和(递归查询)

    我在表员工 id name parentid 中有树结构 并且该表可以嵌套 employees 与另一个具有列 id employeeid quantity 的 Sales 表是一对多关系 每个员工都有销售数量 我想计算每个员工以及儿童员工

随机推荐

  • String、StringBuffer、Stringbulider的区别

    java中用于处理字符串常用的有三个类 java lang String java lang StringBuffer java lang StrungBuilder 三者共同之处 都是final类 不允许被继承 xff0c 主要是从性能和
  • 常用集合List、Set、Map的比较

    概述 List Set Map都是接口 xff0c 前两个继承至Collection接口 xff0c Map为独立接口 List有序 xff0c 可重复 1 ArrayList 底层 xff1a 数组 xff1b 查询快 xff0c 增删慢
  • Apache中的默认编码

    好吧 xff0c 在Django上测试挺好的GBK编码的静态文件 xff0c 部署到Apache后乱码了 xff0c 默认编码变成了UTF 8 xff0c 可是meta中明明指定了charset为GBK的 xff1a lt meta htt
  • SpringDoc使用

    文章目录 1 SpringDoc简介2 SpringDoc基础使用 1 SpringDoc简介 SpringDoc是一款可以结合SpringBoot使用的API文档生成工具 2 SpringDoc基础使用 POM文件 span class
  • Result统一响应数据

    目录 1 响应数据的格式 1 1 状态码划分 1 3 响应数据的封装 2 统一数据返回 1 响应数据的格式 在分离的环境中 xff0c 我们前后交互就显得尤为重要 前端按照接口文档中的URL地址和参数要求发送请求 xff0c 接着后端对业务
  • SpringBoot实现全局异常处理器

    1 本文使用 64 ControllerAdvice 64 ExceptionHandler 进行全局的 Controller 层异常处理 不用在 Controller 层进行 try catch xff01 package com exa
  • 排序算法的对比

    冒泡排序VS选择排序 两者时间复杂度O n2 冒泡排序找最大值放在最后 xff0c 选择排序找最小值放在前面 选择排序属于不稳定排序 xff1b 选择排序一般情况下优于冒泡排序 xff0c 每轮只交换一次 如果集合有序度高 xff0c 则选
  • Redis基本操作

    安装Redis docker compose安装 单节点 version 34 3 3 34 services master image redis 6 0 container name redis environment 34 disco
  • RabbitMQ初级操作

    MQ 消息队列 xff1a 一种进程通信或同一进程的不同线程的通信方式 采用链表结构实现 xff0c 拥有权限的进程向消息队列写入或读取消息 常用MQ xff1a RabbitMQ ActiveMQ kafka xff0c Redis的Li
  • SpringBoot——邮件模块

    SpringBoot集成邮件模块 邮件协议 原文链接 xff1a https blog csdn net qq 37745470 article details 89094227 什么是SMTP xff1f SMTP全称为Simple Ma
  • JVM内存结构

    JVM JVM xff1a Java Virtual Machine xff0c Java虚拟机 xff0c 识别 class后缀文件 xff0c 解析class的指令 xff0c 调用操作系统函数完成操作 JVM JRE JDK关系 xf
  • JVM类加载机制

    类加载过程3个阶段 xff1a 1 加载 将类的字节码载入方法区 xff0c 并创建 Class对象 加载符号引用到类常量池 xff0c 只是有这个名字UnresolvedClass Name 如果类的父类没有加载 xff0c 先加载父类加
  • nginx 反向代理配置

    Nginx 反向代理 xff1a 其实客户端对代理是无感知的 xff0c 因为客户端不需要任何配置就可以访问 xff0c 我们只需要将请求发送到反向代理服务器 xff0c 由反向代理服务器去选择目标服务器获取数据后 xff0c 在返回给客户
  • Cookies 和 Session的区别

    1 cookie 是一种发送到 客户 浏览器的文本串句柄 xff0c 并保存在客户机硬盘上 xff0c 可以用来在某个WEB站点会话间持久的保持数据 2 session 其实指的就是访问者从到达某个特定主页到离开为止的那段时间 Sessio
  • HashMap详解

    HashMap 16 xff0c 0 75 为什么能快速查找 xff1f put操作放入key时 获取key的hash值 在原始hash值的基础上再次获取hash值 二次hash值与容量取模运算 capacity 获得桶下标 根据桶下标 x
  • 设计模式——单例模式

    单例模式 饿汉式 类加载阶段被初始化就会创建实例 提前创建 span class token keyword class span span class token class name Singleton span span class
  • Java多线程

    并发 线程状态 Debug调试 xff0c 线程模式 java xff1a 6种状态 NEW 新建 startRUNNABLE 就绪 运行 阻塞I O cpu 调度TERMINATED 终结 代码执行完毕BLOCKED 阻塞 获取锁失败WA
  • JVM垃圾回收

    GC与分代回收算法 GC目的 xff1a 实现无用对内存自动释放 xff0c 减少内存碎片 加快分配速度 GC要点 xff1a 回收区域 xff1a 堆内存可达性分析算法 三色标记法GC具体实现称垃圾回收器GC采用分代回收思想 xff0c
  • 4种对象引用类型

    1 强引用 A a 61 new A 通过GC Root的引用链 xff0c 如果强引用不到该对象 xff0c 该对象才会被回收 2 软引用 SoftReference a 61 new SoftReference new A 如果仅有软引
  • SQL语句

    Select SQL 执行顺序 fromonjoinwheregroup byhavingselectdistinctorder bylimit WHERE 字段比较 代码作用 61 等于 lt gt 61 不等于 lt lt 61 小于