热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQL知识点1oracle

文章目录1.SQL基本概念


文章目录







      • 1. SQL基本概念

      • 2. 语法



        • (1) 列的普通检索、合并与算术操作

        • (2) 行的选择

        • (3) 函数



          • 单行函数( 变量|列名|表达式 ) → 可嵌套无数个单行函数

          • 分组函数、多行函数 — 只能嵌套两层



            • 执行顺序

            • 函数的语法以及注意事项













1. SQL基本概念

SQL( Structured Query Language ):结构化查询语言



  • SQL分类:

    1. 数据查询语言( DQL ):从表中 检索数据(select)

    2. 数据操作语言( DML ):对表中数据进行 增(insert)、删(delete)、改(update)

    3. 事务处理语言( TPL ): 主要是对数据进行 提交(commit)、回滚(rollback)

    4. 数据控制语言( DCL ): 主要是对用户的权限 授权(grant)、回收(revoke)

    5. 数据定义语言( DDL ): 对数据库进行 创建(create)、删除(drop)、修改(alter)





  • 注意事项的语法:

    1. oracle的null:表示无效、无用、未赋值,未知的值

    2. oracle中的null操作: 任何与其进行算术操作,返回的值都是空值




2. 语法




  1. SQL语句的关键字不区分大小写,必须使用分号结束

  2. SQL语句有多条子句,尽量子句分行写 → 代码可读性

  3. 关键字尽量使用大写,其他语法元素(列名、表名等)则小写 → 代码可读性



(1) 列的普通检索、合并与算术操作




  1. 表中的列 与 算术操作列 进行 字符串合并输出 → 算术操作列必须必须打括号

  2. 别名加双引号表示按双引号的格式输出 – 区分大小写、可包含空格、特殊字符

  3. 原义字符(单引号):字符串字面量、日期

  4. 关键字distinct:消除重复行


select * from 表名 // 检索输出选中表的所有列数据
select distinct * from 表名 // 消除重复行
select 列名,列名 from 表名 // 检索输出选中表的所有指定列数据
select 列名 别名 from 表名 // 输出的列名为别名
select 列名 as 别名 from 表名
select 列名+算术运算符+数字/单引号字面量(字符串) from 表名 // 对指定列的值进行算术计算
select 列名 || 列名 from 表名 // 把多个列的列值 “字符串形式”合并成一列 输出
select 列名 || '字符串' || (算术操作咧) from 表名 // 合并算术操作列与其他列为一列
select concat(列名,列名/算术操作列) from 表名 // 合并列值为一列,concat只能写入两个参数


(2) 行的选择


注意:



  • 【】表示可有可无,不影响 有结果输出

  • { }表示里面内容必须有

  • | 表示输出的内容可以是其他另一个选项

  • 表达式:


select 【 distinct 】 { * | column | expression | function 【别名】 }
from 表名
【where 条件表达式 】
【order by 列名|表达式|列别名|列序号 【asc|desc】】









































































































































































































=、>=、<=



> 、<



<> (不等于)



between 下限 and 上限



in(集合元素)



like → 类似正则匹配



is null → 表空值无任何填写



and



or



not



desc 降序 → 空值排在最前



esc 默认升序



escape 转义字符



where使用的限定符



比较操作符



单词型特殊比较操作符



逻辑运算符



order by行的排序 &#8211; 必须写在整个语句最后

[外链图片转存失败(img-kFFm3ghZ-1568540199525)(en-resource://database/2224:1)]



  • 单词型比较操作符:

    1. like(模糊正则查询)

      • %: 代表0个或多个任意字符 → 不代表1个字符

      • _ : 仅代表一个任意字符

      • escape: 转义字符,(escape+特殊字符) → 即指明是特殊字符





select 列名 from 表名 where 列名 like 'a%b__3@_' escape '@ '
// 查询的是列值含有 首字母为a、且以 3_ 结尾的、并且倒数第5个字符为b的 行元素

(3) 函数


单行函数( 变量|列名|表达式 ) → 可嵌套无数个单行函数

这些函数 可写在select、where、order by




































































































































































































































































































































































lower(列名、表达式),upper(列名、表达式), initcap(列名、表达式) → 转为小写、大写、字符中的单词首字母大写



concat(列名|表达式, 列名|表达式) → 实参连接



substr(列名|表达式,开始index, 截取长度) → 截取字符串



length(列名|表达式) → 返回字符长度



instr(s1, s2, n1, n2)→ 寻找s2在s1的位置,n2第几出现的次数



lpad(s1,n1,s2)、rpad() → 用s2填充s1长度至n1



trim( 需被裁字符 from 字符1) → 去除字符1的头尾需被裁字符



replace(s1,s2,s3) → s1中的s2换成s3



round(列名|表达式, 保留小数位数) → 四舍五入



trunc(列名|表达式, 保留小数位数) → 单纯只是裁减



mod(m, n) → m/n的余数



属性sysdate → 返回window系统设置的日期



months_between(date1,date2) → 返回两者间隔的月数



add_months(date, n) → 日期加上月数后的新日期



next_day(date, &#8216;星期几&#8217;)/last_day → 下一个日期,当月最后一个日期



round(date, 格式) → 指定的格式后一位进行四舍五入



extract(year/month/day from date) → 截取年份/月份/或者天数



to_char(date, &#8221;日期格式)



to_nmber



to_date(&#8216;日期字符串&#8217;,&#8217;根据字符串写日期格式&#8217;)



nvl(列名|表达式,替代字符) → 参数1为空则替代字符替代



nvl2(列名|表达式,字符1,字符2) → 参数1为null则返回字符2,否则字符1



nvllif(参数1,参数2) → 两参相等返回nll,否则返回参数1



coalesce(无限个参数) → 返回首次不为null的参数



when then → 可写区间范围



decode then → 具体的数字



单行函数



字符



数值



日期



转换



通用


分组函数、多行函数 – 只能嵌套两层

语法:
  select 列|分组函数 from 表名
   where 行筛选条件
   group by 列名
   having 分组函数的条件
   order by 列名|分组函数表达式列


执行顺序

from(选表) &#8211;> where(选符合行) &#8211;> group by(行分组) &#8211;> having(选符合组) &#8211;> select(选输出的列) &#8211;> order by(排序行)


函数的语法以及注意事项

分组group by 列名有什么都需要写上去,除了分组函数


select deptno, ename, avg(count)
from emp
group by deptno , ename //分组字段后面所要写的列: 表显示的全部列,除了分组函数
//错误书写,会报错 // group by deptno


没有写 group by 则不能直接 写除了分组函数以为的其他列


select max(sal) from emp;
// select ename, max(sal) from emp 错误,无group by 则不能在输入其他的列


不能在where子句里写 有关分组函数的条件语句,有关分组函数条件的语句只能写在having 里面


select deptno, max(sal)
from emp
// where max(sal) > 30 则直接报错,分组函数条件语句需写在having后面
group by deptno
having max(sal) > 30;





































































分组函数



min(列名) &#8211; 最小值



max(列名) &#8211; 最大值



sum(列名) &#8211; 求和



avg(列名) &#8211; 平均数



count(列名) &#8211; 行数

注意 分组函数参数里面可以添加 distinct 去重


select count( distinct deptno ) from emp // 输出有员工的部门数量


注意 avg 只计算有值的列值,空值则忽略不计,为了避免出现平均算少的情况,需要使空值默认有值


select avg(nvl(sal, 0)) from emp; //行数有多少则除以多少,反映所有行的平均情况



推荐阅读
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有