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.pswp.cn/news/249142.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249142.shtml
英文地址,請注明出處:http://en.pswp.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() 使用…