SQL语句01

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

SQL分类:
    数据操纵语言DML(Data Manipulation Language)
        SELECT   INSERT   UPDATE    DELETE
    数据定义语言DDL(Data definition language)
        CREATE   ALTER   DROP   RENAME    TRUNCATE
    数据控制语言DCL (Data Control Language)
        GRANT   REVOKE

select关键字
--select[列1,列2,...列N]from 表
--oracle中,列名和表名默认不区分大小写,数据是区分大小写的
作用:检索“列”

注意:1.select后面的列可以起别名(查询的显示结果)
        1) 列名后面一个空格后添加别名(别名中不许有“空格”)
        例:select ename,sal*12 "年薪" from emp;
        2) 列名后面一个空格后使用双引号添加别名
        例:select ename,sal*12 "ysal" from emp;
        3) 列名后面一个空格后使用as关键字,在as后面添加别名
        例:select ename,sal*12 as "ysal" from emp;
    2.distinct用于对显示结果的去重
        1) distinct必须放在select后面
        2) 如果查询有多列,必须满足多列值都相同时,方可去重。
        --例子:查询公司有哪些职位
select job from emp;
select distinct job from emp;

--错误的SQL:select ename,distinct job from emp;
from关键字

作用:检索“表”

注意:检索的表后可以添加别名(别名不需要被双引号引起)
--给表取别名
select ename,sal,e.deptno from emp e,dept d;


where关键字

作用:过滤“行”记录(record)
--例:查询大于2000的员工信息
select * from emp where sal <= 5000;
用法:
    1.=,!=,<>,<,>,<=,>=,any,some,all
    例子:查询员工信息:条件:薪水大于1500,薪水还要大于2000
    select * from emp where sal != any(1000,1500,2000);
    some和any用法一样,all表示所有
    2. is null,is not null
    例子:
select * from emp where comm is not null;
select * from emp where comm is null;
    3.between x and y
    例子:查询员工薪水在2000-3000的员工信息
    select * from emp where sal between 2000 and 3000;
    4.and(都满足) 、 or(满足其一) 、 not
    例子:
select * from emp where sal >= 2000 and sal <=3000;
select * from emp where sal >= 1000 or sal >=2000;
    5.in(list),not in(list)
    例子:
    --查询职务为MANAGER和ANALYST的员工信息
select * from emp where job in('MANAGER','ANALYST');
--查询工资不为3000和5000的员工信息
select * from emp where sal not in(3000,5000);
    6.exists(子查询)、not exists(子查询)
    例子:
select * from emp where exists(select* from dept where deptno !=50);
select * from emp where not exists(select * from dept where deptno = 20);
    7.like模糊查询
        “%”:匹配零个或若干个字符
        “_”:匹配一个字符
        在模糊查询中,如果查询的数据中有“%”,“_”时,可以使用escape自定义转义字符
    例子:
--查询:员工姓名中含有"M"的员工信息
select * from emp where ename like '%A%';
--查询:员工姓名中第二个字母是"M"的员工信息
select * from emp where ename like '_M%';
--查询:员工姓名中第三个字母是"O"的员工信息
select * from emp where ename like '__O%';
--查询:员工姓名中倒数第二个字母为"E"的员工信息
select * from emp where ename like '%E_';
--查询:员工姓名中含有“%”的员工信息
insert into emp(empno,ename) values(9527,'huan%an');
select * from emp where ename like '%\%%' escape '\';


order by关键字

作用:用于对查询结果进行排序
select * from emp where deptno = 20 order by sal;
用法:
    1.利用asc 、desc对排序列进行升序或降序
    2.order by后可以添加多个列(逗号分隔),当一个列的值相同时,在按第二列进行排序,依次类推
    --1.如何决定升序还是降序?
select * from emp where deptno = 20 order by sal asc;--升序
select * from emp where deptno = 20 order by sal desc;--降序
--2.如果排序的列值相同时,如何处理?
select * from emp where deptno =  20 order by sal desc,ename asc;
--先按薪水降序,再按名字字典顺序升序排列

--计算字段 (列):不在于表中,通过+、-、*、/操作和列进行计算得到的列
--获取员工年薪
select (ename || '年薪为:' || sal * 12) info from emp;

--集合:每次查询结果可以看作一个集合
select * from emp where deptno = 20;
select * from emp where sal > 2000;
集合操作:
    1.union   并集
    例:
select * from emp where deptno = 20
union
select * from emp where sal > 2000;
    2.union all   全集
select * from emp where deptno = 20
union all
select * from emp where sal>2000
--union 和 union all 的区别在于:
union all 会重复显示两个集合相同的部分
    3.intersect   交集
select * from emp where deptno = 20
intersect
select * from emp where sal>2000;
    4.minus    差集
--返回在第一个查询结果中与第二个查询结果不相同的那部分行记录。
--注意两条sql语句的顺序

注意:
    1.保证两个sql查询的列数是个数一致的
    2.保证两个sql查询的列的数据类型是一致的
    3.保证两个sql查询的列是相同的,否则查询的结果是无意义的

函数

单行函数:对单个数值进行操作,并返回一个值。
--dual是一个虚表,为了满足sql句式而设置这么一个表
要求:我讲完函数,你练习。
分类:
1.字符函数
    1)concat(a,b) 拼接a,b两个字符串数据
    例:select concat(concat(ename,'的职位是'),job) from emp;
    2)initcap(x) 将每个单词x首字母大写
    例:select initcap('reece zang')from dual;
    3)lower() / upper()  将字符串小写/将字符串大写
    例:
  select lower('REECE')from dual;
  select upper('reece') from dual;

    4)length() 获取字符串的长度
    例:select ename,length(ename) from emp;

    5)lpad(a,b,c) /rpad() 将a字符串左边填充至b长度,用c字符填充
    例:
  select lpad(ename,10) from emp;
  select rpad(ename,10,'*')from emp;

--注意:第二个参数要设定合理的值,否则会导致数据显示不完整
select lpad(ename,5) from emp;--只能显示从左数五个字符
 
    6)ltrim(a,b)  / rtrim()  去除a字符串左边的b字符,如果b不传参,默认去除空格
  例:
  select ltrim('a    abcd','a') from dual;
  select rtrim('   abcdef    aaaa','a f')from dual;

    7)replace(a,b,c)   将a中的b字符串替换为c
    例:select replace('he love you','he','I')test from dual;

    8)substr(a,b,c) 将a的字符串,从b位置开始截取,截c个长度
    例:select substr('123444567',3,4) from dual;

    9)trim( a from b) 将b左右两边的a字符去除掉
    例:select trim('a'from'a  ba a') from dual;

2.数字函数
    abs() 求取绝对值
    例:    select abs(-5)from dual;

    ceil() 向上取整
    例:select ceil(3.1) from dual;
 
    floor() 向下取整
    例:select floor(2.7)from dual;
 
    round() 四舍五入
    例:select round(4.6)from dual;

    power(x,y)  x的y次幂
    例:select power(2,10)from dual;
 

3.日期函数
    sysdate 返回系统当前日期,注意没有括号
    select sysdate from dual;
 
    add_months(d1,d2) 在d1日期上,增加d2个月份
  select hiredate,add_months(hiredate,12) from emp;
  select add_months(sysdate,6)from dual;

    months_between(d1,d2) 返回d1和d2之间的相隔月份
    如果d1>d2,则返回正数,如果d1<d2,则返回负数
    select months_between(sysdate,hiredate)from emp;
 
    last_day(d) 返回d日期所在月份最后一天的日期
    select hiredate,last_day(hiredate) from emp;

    next_day(d,X) 返回下一个星期X的日期
    select sysdate,next_day(hiredate,'星期五')from emp;

4.转换函数
    to_char()  将数字、或日期转化为字符串
    select to_char(sal,'$9,999.00')from emp;

    to_date()    将字符串转化为日期
select to_date('2019-04-16 23:16:16','yyyy-mm-dd hh24:mi:ss')from dual;

    to_number()  将字符串转化为数字
    select to_number('876')from dual;

5.其他函数
    nvl(x,y) 如果x为null,则显示为y,x不为null,则返回x,x和y的类型保持一致
    select ename,nvl(comm,0)from emp;

    sys_guid() 生成一个的32位随机字符串
    select sys_guid() from dual;

    decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)  条件取值,类同java的switch
select ename,sal,decode(sal,800,'屌丝',2000,'白领',3000,'小资',5000,'高富帅','一般人')from emp;

    case when then else end  条件取值,类同java的if-else if-else
    select ename,sal,case when sal<1000 then '屌丝'
                      when sal<2000 then '白领'
                      when sal<3000 then '小资'
                      when sal<4000 then '高富帅'
                        else '王宝强' end from emp;   


【注意点】
1、以CASE开头,以END结尾
2、分支中WHEN 后跟条件,THEN为显示结果
3、ELSE 为除此之外的默认情况,类似于高级语言程序中switch case的default,可以不加
4、END 后跟别名
5、只返回第一个符合条件的值,剩下的when部分将会被自动忽略,得注意条件先后顺序

组函数
组函数又被称作聚合函数,用于对多行数据进行操作,并返回一个单一的结果

avg()求平均值,只能对数字类型进行处理,不处理空字段
例:--求20部门的平均薪水为多少?
select avg(sal) avgsal from emp where deptno = 20;


sum()求和,只能对数字类型进行处理
例:--求20部门的员工的总薪水
select sum(sal) sumsal from emp where deptno = 20;
 
count()计数,对任何类型生效,不处理空字段
例:--求20部门的员工有几个
select count(1) from emp where deptno = 20;

max() 求最大值,对任何类型生效
例:--求20部门员工工资最高的是多少
select max(sal) from emp where deptno = 20;
select max(hiredate) from emp;

min() 求最小值,对任何类型生效
例:--求20部门员工工资最低的是多少
select min(sal) from emp where deptno = 20;
 


group by关键字
作用:对查询结果进行分组处理
select deptno,job from emp group by deptno,job;
select deptno,avg(sal) from emp group by deptno
select deptno,count(1) from emp group by deptno;

用法:
    1.分组之后,不能将除分组字段之外的字段放在select后面
--select deptno from emp group by deptno;
--select deptno,count(1) from emp group by deptno;
    2.group by 后面可以跟多个字段,则这多个字段值都相同时,才分为一组
    --select deptno,job from emp group by deptno,job
            
    3.分组之后,可以使用组函数对每个组进行数据处理
--select deptno,avg(sal) from emp group by deptno
--select deptno,count(1) from emp group by deptno;
having 关键字
作用:用于对分组数据进行过滤
用法:
    类似于where的用法
--例:求平均薪水在2000以上的部门编号
select deptno from emp group by deptno having avg(sal)>2000;

--where 和 having关键字不冲突!
select avg(sal),deptno from emp where sal>1500
       group by deptno having avg(sal)>2500
       order by deptno desc;

-- select  from  where   group by  having  order by [asc/desc]
--where 后不能使用分组函数
--select e.deptno from emp e where avg(sal) > 1500 group by deptno;


sql顺序分为两类:

1.sql的书写顺序
select   from    where    group by   having   order by [asc/desc]

2.sql的执行顺序
from   where   group by   having    select   order by [asc/desc]

转载于:https://www.cnblogs.com/zang1998/p/10722230.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/249142.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mongoose 笔记

快速启动 首先需要安装MongoDB和Node.js。 然后使用npm下载mongoose&#xff1a; npm install mongoose 接着我们直接在项目中引入mongoose&#xff0c;并且连接数据库就会在本地运行 MongoDB了&#xff1a; // index.js var mongoose require(mongoose); mongoose.connect(…

前端DES加密

1、下载crypto.js文件库 https://github.com/brix/crypto-js/releases 2、引入文件 <script type"text/javascript" src"js/jquery.min.js"></script> <script src"js/rollups/tripledes.js"></script> <script src&…

DOMBOM(source、methods、contents、Application)

何为DOM&#xff1f; Document Object Model Dom&#xff0c;是W3C组织推荐的处理可扩展标志语言的标准编程接口。在网页上&#xff0c;组织页面的对象被组织在一个树形结构中&#xff0c;用来表示文档中对象的标准模型就称为DOM。 可以认为DOM是页面上数据和结构的一个树形表示…

sublime 无法下载插件解决办法(亲测有效)

最近发现sublime装不到插件 只需要在Preferences > Package Settings > Package Control > Settings - User页面加上以下代码即可&#xff1a; "channels":["https://erhan.in/channel_v3.json"]上述频道亲测有效&#xff0c;如果还不能使用的小…

ES命令

基础概念 Elasticsearch有几个核心概念。从一开始理解这些概念会对整个学习过程有莫大的帮助。 接近实时&#xff08;NRT&#xff09; Elasticsearch是一个接近实时的搜索平台。这意味着&#xff0c;从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟&#xff…

Bug : Bash on Ubuntu on Windows scp work on window but not in shell file

&#xff1a; No Permission转载于:https://www.cnblogs.com/rgqancy/p/10726154.html

图片做背景撑开div

需求点&#xff1a; 设计师给了一张超大背景图&#xff0c;需要做一个不知道大小广告位&#xff0c;要求就是要把图片撑满整个页面&#xff0c;而且还得保证自适应。 解决方案一 &#xff08;亲测有效&#xff09; HTML代码&#xff1a; <div class"wrap">…

十一、jQuery的基本用法

初步接触不是很习惯&#xff0c;之前都是用的js&#xff0c;但是jQuery去掉了js很多繁琐的内容&#xff0c;用的不是很熟&#xff0c;所以先简单的记录一下&#xff0c;后续在继续补充 jq获取html内容: $("#id") 获取id $(".class") class名 …

spring-注解---IOC(3)

spring--注解---IOC(3) package com.zwj.bean;public class Blue {public Blue(){System.out.println("blue...constructor");}public void init(){System.out.println("blue...init...");}public void detory(){System.out.println("blue...detory..…

绝对定位的div图片居中自适应

需求点 固定定位div中添加图片内容&#xff0c;保证图片垂直居中&#xff0c;并且自适应。 一般在第三方UI组件中&#xff0c;这种布局需求较为常见 解决方案一 &#xff08;亲测有效&#xff09; HTML代码&#xff1a; <div class"el-carousel__item is-active is…

英语进阶系列-A06-本周总结

本周总结 目录Content 英语进阶系列-A01-再别康桥 英语进阶系列-A02-英语学习的奥秘 英语进阶系列-A03-英语升级练习一 英语进阶系列-A04-英语升级练习二 英语进阶系列-A05-英语升级练习三 古诗Poem 再别康桥 回乡偶书 梅花 劝学 游子吟 词汇Vocabulary be; have; give; get; t…

在div中设置文字与内部div垂直居中

要实现如图一所示的结果&#xff1a; html代码如下&#xff1a; <!DOCTYPE html> <html><head lang"zh"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta charset"utf-8" /><title>商…

王之泰201771010131《面向对象程序设计(java)》第九周学习总结

第一部分&#xff1a;理论知识学习部分 第7章异常、日志、断言和调试 概念&#xff1a;异常、异常类型、异常声明、异常抛出、 异常捕获1.异常处理技术2.断言的概念及使用3.基本的调试技巧 1&#xff09;异常的概念 a.Java的异常处理机制可以控制程序从错误产生的 位置转移到能…

vue移动端UI框架——Vant全局引入vs局部引入

全局引入 1.在main.js中全局引入全部vant组件 优点&#xff1a;可以在所有vue文件的template中定义所需组件缺点&#xff1a;打包发布时会增加包的大小&#xff0c;Vue的SPA首屏打开时本来就有些慢&#xff0c;同时不能在js中使用类似Toast功能的组件 代码如下&#xff1a; …

大前端完整学习路线(完整版),路线完整版

第一阶段&#xff1a; HTMLCSS: HTML进阶、CSS进阶、divcss布局、HTMLcss整站开发、 JavaScript基础&#xff1a; Js基础教程、js内置对象常用方法、常见DOM树操作大全、ECMAscript、DOM、BOM、定时器和焦点图。 JS基本特效&#xff1a; 常见特效、例如&#xff1a;tab、…

web-8. 多框架页面的创建

8. 多框架页面的创建 8.1 框架概念 框架是由单个框架加上框架集构成的区域。 每个框架是指页面中一个独立额区&#xff0c;框架集是一个关于框架结构的页面&#xff0c;定义本页面的框架数、大小、布局以及框架之间的相互关系。 8.2 框架集标记 框架集文件保存了所有框架的信息…

汇编语言第二章知识梳理及思考

第二章 寄存器&#xff08;CPU工作原理&#xff09; CPU概述 CPU由运算器、控制器、寄存器等器件组成&#xff0c;这些器件靠内部总线相连。 内部总线实现CPU内部各个器件之间的联系。 外部总线实现CPU和主板上其他器件的联系。 寄存器概述 8086CPU有14个寄存器&#xff1a; AX…

前端面试题总结(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)持续更新

Vue面试题 生命周期函数面试题 1.什么是 vue 生命周期 2.vue生命周期的作用是什么 3.第一次页面加载会触发哪几个钩子 4.简述每个周期具体适合哪些场景 5.created和mounted的区别 6.vue获取数据在哪个周期函数 7.请详细说下你对vue生命周期的理解&…

Neural Networks and Deep Learning 读书笔记

1 转载于:https://www.cnblogs.com/jellyj/p/9867103.html

JS中的数据类型转换:String转换成Number的3种方法

今天有个学员问了个关于数据类型转换的问题&#xff0c;我觉得这个是可以给大家说一下的。 JavaScript中&#xff0c;可以通过以下3种方法来将string值转换成number&#xff1a; 1.调用Number()来对string进行值类型转换。 2.parseInt()。 3.parseFloat()。 Number() 使用…