sql學習筆記
⑴ sql中EXISTS怎麼用
EXISTS在SQL中的作用是:檢驗查詢是否返回數據。
select a.* from tb a where exists(select 1 from tb where name =a.name)返回真假,當 where 後面的條件成立,則列出數據,否則為空。
exists強調的是是否返回結果集,不要求知道返回什麼。比如:select name from student where sex = 'm' and mark exists(select 1 from grade where ...)
只要exists引導的子句有結果集返回,那麼exists這個條件就算成立了,大家注意返回的欄位始終為1
如果改成「select 2 from grade where ...」,那麼返回的欄位就是2,這個數字沒有意義。所以exists子句不在乎返回什麼,而是在乎是不是有結果集返回。
(1)sql學習筆記擴展閱讀:
Exists 方法描述如果在 Dictionary對象中指定的關鍵字存在,返回True,若不存在,返回False。
語法object.Exists(key)Exists 方法語法有如下幾部分:部分描述Object必需的。始終是一個 Dictionary對象的名字。Key必需的,在 Dictionary對象中搜索的Key值。
exist相當於存在量詞:表示集合存在,也就是集合不為空只作用一個集合.
例如 exist P表示P不空時為真; not exist P表示p為空時為真in表示一個標量和一元關系的關系。
例如:s in P表示當s與P中的某個值相等時為真; s not in P 表示s與P中的每一個值都不相等時為真。
exits與not exits
exists(sql 返回結果集為真)
not exists(sql 不返回結果集為真)
如果not exists子查詢只有自己本身的查詢條件,這樣只要子查詢中有數據返回,就證明是false,結果在整體執行就無返回值;一旦跟外面的查詢關聯上,就能准確查出數據。
⑵ sql查詢兩個欄位相同的記錄
EXCEL中用VBA連接ACCESS資料庫
有如下一張表,要分別查找出所有同名的人、所有同名並且學號也一樣的人以及所有同名但不同學號的人。
查詢所有同名人員
select * from [18年考試成績] where [姓名] in (SELECT [姓名] FROM [18年考試成績] group by [姓名] having count(姓名)>1)
查詢結果:
查找所有姓名和學號兩個欄位都重復的人
select * from [18年考試成績] where [姓名] in (SELECT [姓名] FROM [18年考試成績] group by [姓名] having count(姓名)>1) and [學號] in (SELECT [學號] FROM [18年考試成績] group by [學號] having count(學號)>1)
查詢結果:
查找所有姓名重復但學號不重復的人
select * from [18年考試成績] where [姓名] in (SELECT [姓名] FROM [18年考試成績] group by [姓名] having count(姓名)>1) and [學號] not in (SELECT [學號] FROM [18年考試成績] group by [學號] having count(學號)>1)
注意:要把SELECT查詢子句配合in或not in 操作符使用,SELECT查詢子句只能有一列內容。
查詢結果:
其中子句 「SELECT [姓名] FROM [18年考試成績] group by [姓名] having count(姓名)>1」是顯示所有重復的姓名,如果如下:
如果要知道重復出現次數,則可以這樣寫:
SELECT [姓名],count(姓名) as 出現次數 FROM [18年考試成績] group by [姓名] having count(姓名)>1
結果如下:
查找唯一記錄
group by [姓名],意思是按姓名分組,having count(姓名)>1 是分組條件,意思是姓名次數出現2次以上的重復內容以姓名進行分組,前面的count(姓名)是對分組以後的姓名統計出現次數。在後面要使用函數條件時應該使用having,而不是使用where
查找唯一值,比如本例的班級中,只有一個「四班」,要把這個四班的所有欄位顯示出來可以這樣:
select * from [18年考試成績] where 班級 not in (SELECT 班級 FROM [18年考試成績] group by 班級 having count(班級)>1)
結果:
如果使用「SELECT DISTINCT 班級 FROM [18年考試成績]」語句查詢唯一值,結果將會如下:
DISTINCT 會顯示不重復的值,如果有重復的,只顯示第一個,所以如果需要顯示僅出現一次的值並不適合使用SELECT DISTINCT語句
分組查詢語句:
比如要班級為單位,查詢每個班的總人數,科目總分,科目平均分等
SELECT [班級],count(姓名) as 班級人數,sum(語文) as 語文總成績,sum(數學) as 數學總成績,ROUND(avg(語文),1) as 語文平均分,ROUND(avg(數學),1) as 數學平均分 FROM [18年考試成績] group by [班級]
查詢結果如下:
注意:如果使用函數的欄位,不使用AS指定別名,將會自動生成一個欄位名,第一列名字Expr1000,第二列名為Expr1001,第三列名為Expr1002,以此類推
如:
SELECT [班級],count(姓名),sum(語文),sum(數學),ROUND(avg(語文),1) ,ROUND(avg(數學),1) FROM [18年考試成績] group by [班級]
查詢結果如下:
如果不指定別名,你將無法清楚在查詢結果中知道每一列是干什麼的。
如果需要再細分,查詢每個班女生總人數和科目平均分,只需要再加一個where條件就可以了
SELECT [班級],count(姓名) as 班級女性人數,ROUND(avg(語文),1) as 語文平均分,ROUND(avg(數學),1) as 數學平均分 FROM [18年考試成績] where 性別='女' group by [班級]
⑶ 增刪改查哪個最重要
關於javaWeb增刪改查的簡單總結 原創
2020-04-25 13:14:49
走到天涯海角
碼齡4年
關注
增刪改查中最簡單的功能是刪除,通過Id來刪除單表或者多表都是可以的。
增刪改查中最重要的功能是查詢,因為不僅僅是單表查詢、連表查詢需要用到查詢,新增前和修改前也要使用到查詢。
查詢遇到的業務比如:
1.登錄:通過查詢用戶名和密碼來找出用戶,密碼可以重復,但是用戶名必須唯一,否則沒辦法找出單個用戶。
(重要) 只要查詢的欄位是唯一的,都可以通過這個欄位來查詢出對應的單個對象或者集合。
什麼欄位是唯一的呢?
如:用戶名必須唯一,文件名必須唯一,主鍵ID必須唯一等等,一時半會想不起來。
新增前,通過查詢獲得如:下拉框中的數據等
在新增時,通過獲取下拉框的值或者輸入框的值,就可以保存新增。
新增也會遇到循環插入的情況,如新增角色和修改角色,要循環插入數據到角色菜單關系表中。
循環插入數據的做法,我是用過兩種方法,一種方法是使用c3p0,另一種是使用mybatis的foreach標簽
修改前,通過查詢,獲得如:用戶的信息,然後放到修改輸入框,提高用戶的使用體驗。
修改時,通過隱藏區的Id,和輸入框或者下拉框中的值,來進行保存修改。
文章知識點與官方知識檔案匹配
Java技能樹首頁概覽
92024 人正在系統學習中
打開CSDN APP,看更多技術內容
JavaWeb實現簡單對資料庫的增刪改查_向晚而生的博客_web實現數...
資料庫:MySQL 連接池:Druid連接池 Github倉庫地址:點我 jar包下載:點我!提取碼:y4ef 參考:Javaweb實現增刪改查操作操作 用JavaWeb部分知識實現對資料庫的增刪改查 只展示Student和Teacher的相關代碼 一、效果圖 二、資料庫實現 1. ...
繼續訪問
Web對資料庫的增刪改查(servlet+jsp+javaBean增刪改查)
1.開始之前的准備(servlet+jsp+javaBean增刪改查) jsp:頁面的請求和展示 在前台主要學了jsp進行頁面的請求和展示 java後台 mysql資料庫 學習了java如何進行資料庫增刪改查 JDBC重構Dao Dao進行sql語句 將資料庫的獲取結果響應到頁面上 ...
繼續訪問
最新發布 javaweb極簡登錄注冊增刪改查
javaweb極簡登錄注冊增刪改查
繼續訪問
簡單的JavaWeb項目,基本的增刪改查和分頁查詢等功能。
簡單的JavaWeb項目,劉意老師整理,擁有登錄,添加,刪除,修改,分頁查詢,刪除選中,復雜分頁查詢功能。
JavaWeb階段案例--簡易版管理圖書系統(增刪改查)
超詳細JavaWeb階段項目 --圖書管理系統 -- 連接資料庫在網頁上實現圖書的增刪改查
繼續訪問
筆記--MySQL相關操作
一 登錄資料庫 1 用戶無密碼: mysql -uroot -p mysql-> 2 用戶有密碼: MySQL -root -p[passwd] mysql-> 二 創建資料庫: 查詢: mysql> show databases; +--------------------+ | Database ...
繼續訪問
Javaweb--通過網頁實現對資料庫的增刪查改
文章目錄Javaweb--通過網頁實現對資料庫的增刪查改1、功能需求2、技術選型2、最終效果圖3、資料庫准備4、前端開發5、後端開發 Javaweb–通過網頁實現對資料庫的增刪查改 通常在寫一些後台管理系統的時候,一定會有關於數據表格的增刪查改的功能實現。最近也是閑來無事,做了這個小案例,希望能幫到有寫這方面需求的朋友們。 1、功能需求 這次以單個的員工數據表為例,實現以下功能需求: 1、能夠正常從資料庫中讀取相應數據。 2、設置分頁,能夠通過點擊頁碼,進行數據更新,同時支持輸入頁碼更新數據
繼續訪問
讓我們在網頁中實現資料庫的增刪改查~
目錄主要思路首先讓我們鏈接自己的資料庫 index.js對資料庫設定一些用戶規則 user.js做一個添加數據的靜態網頁 add.html做一個主頁面 list.html最最最主要的js代碼自我激勵 主要思路 搭建網站伺服器,實現客戶端與伺服器端的通信 連接資料庫, 創建用戶集合, 向集合中插入文檔 當用戶訪問 /list時,將所有用戶信息查詢出來 1.實現路由功能 1.呈現用戶列表頁面 1. 再點擊修改按鈕的時 將用戶ID傳遞到當前頁面 2. 從資料庫中查詢當前用戶信息 將用戶信息展示到頁面中 2.從數據
繼續訪問
JavaWeb 增刪改查快速開發總結
JavaWeb增刪改查基本都是那一套,其中最繁瑣 變動的便是圍繞SQL語句、Servlet來展開,下面是我對這些左到一個小總結,希望能對您有所幫助首先項目搭建好之後就是最關鍵的SQL語句 Servlet代碼 Servlet方法 然後是前端methods()方法 刪除和批量刪除(這里用element做了個刪除提示)...
繼續訪問
Java web階段學習總結(華清遠見)
經過web前端的學習之後,我們開啟了Java web後端的學習。學習一樣新的東西首先要了解它的原理,以及所要具備的一些條件。對於Servlet 的開發步驟一般有:新建一個Java web項目工程 --> 創建servlet類繼承Http Servlet,重寫service方法 --> 在web.xml中做地址映射 --> 打包 --> 部署 --> 啟動容器。這樣就可以在瀏覽器中訪問web程序。了解步驟之後就可以動手敲了。
繼續訪問
javaWeb反思與總結
javaWeb的回顧總結
繼續訪問
javaweb mysql增刪改查_超詳細的JavaWeb用戶的增刪改查實現總結
前言本文是基於單體架構實現的角色的增刪改查的功能。前台使用Bootstrap+Ajax+Jsp , 後端使用Spring+SpringMvc+MyBatis進行開發,相信使用過這些技術的小夥伴應該很好的理解以下的內容,也希望看了這篇文章小夥伴們有所收獲。准備工作後端技術技術說明官網SpringSpring是一個輕量級控制反轉(IoC)和面向切面(AOP)的容器框架。SpringMvcMVC框架ht...
繼續訪問
Javaee增刪改查學習心得
這是我學習完Javaee增刪改查後的一些經驗心得,在這里記錄加深一下印象。 1、創建一個web項目,在左側項目區域右鍵創建新的web項目,如果沒找到選擇最下方other,搜索dy,點擊創建web項目。 2、導入相應的jar包,oracle資料庫導入oracle的jdbc連接jar包,mysql資料庫導入mysql的jdbc連接jar包。在lib文件夾下導入。如需j導入s或css的jar包則最好新建...
繼續訪問
MySQL學習筆記(一) 下載安裝+基本增刪改查 + 事務
mysql筆記,內容包含下載安裝,DDL,DML,DQL,DCL語法,約束,多表查詢等
繼續訪問
簡易的JavaWeb實現增刪查改(附資料庫)
一、概述 時隔一年,重回博客,應許多初學的同學要求,實現簡單的增刪查改功能的小程序,具體請詳看下面的截圖~~~ 二、開發環境 語言:JavaWeb、JSP、CSS 資料庫:MySQL 開發工具:Eclipse 三、部分截圖展示 四、代碼片段 @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletExceptio...
繼續訪問
php網頁設計實現增刪改查,包含報告實訓內容
運用PHP技術和MySQL資料庫實現對一個資料庫表格的操作。 實驗環境 1.DreamweaverCS6軟體2.phpStudy2018軟體(包含Web伺服器Apache、資料庫伺服器MySQL、PHP語言引擎) 實驗內容安排 1.選擇學習或生活環境中的一個數據表格並構造符合SQL格式的初始數據2.通過瀏覽器對這個數據表格進行查找、顯示、修改、增添、刪除5項操作...
繼續訪問
增刪查改
增刪查改 增刪查改在所有的語言代碼中都是最基礎和重要的,增刪查改在代碼中擔任著不可缺少的一部分,整個代碼項目都是靠著增刪查改。「增刪查改」就如同字面意思一樣,增:新增(insert),刪:刪除(delete),查:查詢(select),改:修改(update),代碼做出來的東西大部分都是靠著「增刪查改」來運行的! 先說的就是增:新增(insert),最簡單的意思就是用原來的數據來新增一條或多條新的數據,這就是新增。首先要有一個寫一個模態框才能在模...
繼續訪問
JavaWeb實現簡單對資料庫的增刪改查
通過JavaWeb實現簡單的對資料庫的增刪改查
繼續訪問
熱門推薦 java web基本增刪改查操作
這是一個結合mysql資料庫,java後端和jsp頁面的綜合案例: 聲明:學習本文時,需要有一定的基礎,例如jsp,jquery,servlet,Java,jdbc等基礎,如果不懂的希望從基礎學起,加油! 在代碼中有對應的注釋說明,所以我就直接上代碼了 大致流程是: 首先訪問到servlet層,在servlet層里調用StudentRepository的各個方法,然後展示到jsp頁面中。所以瀏覽器訪問路徑是servlet層里StudentServlet中@WebServlet("/student")的路徑(
繼續訪問
關於Javaweb課程設計的心得體會.docx
關於Javaweb課程設計的心得體會.docx關於Javaweb課程設計的心得體會.docx關於Javaweb課程設計的心得體會.docx關於Javaweb課程設計的心得體會.docx關於Javaweb課程設計的心得體會.docx關於Javaweb課程設計的心得體會.docx關於Javaweb課程設計的心得體會.docx關於Javaweb課程設計的心得體會.docx關於Javaweb課程設計的心得體會.docx
記錄一下springboot+mybatis實現增刪改查的基本流程和心得
記錄一下springboot+mybatis實現增刪改查的基本流程和心得 springboot是一個spring家族中舉足輕重的那一個,也是在javaweb實際開發過程經常使用到的一個框架,熟練使用springboot是在實際工作中非常重要的。(在一開始中我認為要先學會如何使用,而不是深究底層原理和代碼,畢竟一般的java開發工作中只會項目經理只會不停給你分配增刪改查的功能任務,當然,隨著開發經驗的不斷提升,只止步於增刪改查會很難得到工作地位提升的機會) 第一步:導入pom.xml依賴 <!--spr
繼續訪問
java的開發環境和運行環境,年薪60W必備
四面阿里 面試崗位是研發工程師,直接找螞蟻金服的大佬進行內推,參與了阿里巴巴中間件部門的提前批面試,一共經歷了四次面試,拿到了口頭offer。 一面: 自我介紹 項目中做了什麼,難點呢。 Java的線程池說一下,各個參數的作用,如何進行的。 Redis講一下 分布式系統的全局id如何實現。用zookeeper如何實現的呢,機器號+時間戳即可。 分布式鎖的方案,redis和zookeeper那個好,如果是集群部署,高並發情況下哪個性能更好。 kafka了解么,了解哪些消息隊列。 想做業務還是研究。 然後出了
繼續訪問
web增刪改查資料庫實驗總結
java
寫評論
⑷ 數據分析課程筆記 - 19 - HiveSQL 常用優化技巧
大家好呀,這節課學習 HiveSQL 的常用優化技巧。由於 Hive 主要用來處理非常大的數據,運行過程由於通常要經過 MapRece 的過程,因此不像 MySQL 一樣很快出結果。而使用不同方法寫出來的 HiveSQL 語句執行效率也是不一樣的,因此為了減少等待的時間,提高伺服器的運行效率,我們需要在 HiveSQL 的語句上進行一些優化。
本節課的主要內容 :
引言
1、技巧一:列裁剪和分區裁剪
(1)列裁剪
(2)分區裁剪
2、技巧二:排序技巧——sort by代替order by
3、技巧三:去重技巧——用group by來替換distinct
4、技巧四:聚合技巧——grouping sets、cube、rollup
(1)grouping sets
(2)cube
(3)rollup
5、技巧五:換個思路解題
6、技巧六:union all時可以開啟並發執行
7、技巧七:表連接優化
8、技巧八:遵循嚴格模式
Hive 作為大數據領域常用的數據倉庫組件,在平時設計和查詢時要特別注意效率。影響Hive效率的幾乎從不是數據量過大,而是數據傾斜、數據冗餘、job 或 I/O 過多、MapRece 分配不合理等等。對 Hive 的調優既包含對HiveSQL 語句本身的優化,也包含 Hive 配置項和 MR 方面的調整。
列裁剪就是在查詢時只讀取需要的列。當列很多或者數據量很大時,如果select 所有的列或者不指定分區,導致的全表掃描和全分區掃描效率都很低。Hive中與列裁剪優化相關的配置項是 hive.optimize.cp ,默認是 true 。
分區裁剪就是在查詢時只讀需要的分區。Hive中與分區裁剪優化相關的則是 hive.optimize.pruner ,默認是 true 。
HiveSQL中的 order by 與其他 SQL 語言中的功能一樣,就是將結果按某個欄位全局排序,這會導致所有map端數據都進入一個 rece 中,在數據量大時可能會長時間計算不完。
如果使用 sort by ,那麼就會視情況啟動多個 recer 進行排序,並且保證每個 recer 內局部有序。為了控制 map 端數據分配到 rece 的 key,往往還要配合 distribute by 一同使用。如果不加 distribute by 的話,map 端數據就會隨機分配給 recer。
這里需要解釋一下, distribute by 和 sort by 結合使用是如何相較於 order by 提升運行效率的。
假如我們要對一張很大的用戶信息表按照年齡進行分組,優化前的寫法是直接 order by age 。使用 distribute by 和 sort by 結合進行優化的時候, sort by 後面還是 age 這個排序欄位, distribute by 後面選擇一個沒有重復值的均勻欄位,比如 user_id 。
這樣做的原因是,通常用戶的年齡分布是不均勻的,比如20歲以下和50歲以上的人非常少,中間幾個年齡段的人又非常多,在 Map 階段就會造成有些任務很大,有些任務很小。那通過 distribute by 一個均勻欄位,就可以讓系統均勻地進行「分桶」,對每個桶進行排序,最後再組合,這樣就能從整體上提升 MapRece 的效率。
取出 user_trade 表中全部支付用戶:
原有寫法的執行時長:
優化寫法的執行時長:
考慮對之前的案例進行優化:
注意: 在極大的數據量(且很多重復值)時,可以先 group by 去重,再 count() 計數,效率高於直接 count(distinct **) 。
如果我們想知道用戶的性別分布、城市分布、等級分布,你會怎麼寫?
通常寫法:
缺點 :要分別寫三次SQL,需要執行三次,重復工作,且費時。
那該怎麼優化呢?
注意 :這個聚合結果相當於縱向地堆在一起了(Union all),分類欄位用不同列來進行區分,也就是每一行數據都包含 4 列,前三列是分類欄位,最後一列是聚合計算的結果。
GROUPING SETS() :在 group by 查詢中,根據不同的維度組合進行聚合,等價於將不同維度的 group by 結果集進行 union all。聚合規則在括弧中進行指定。
如果我們想知道用戶的性別分布以及每個性別的城市分布,你會怎麼寫?
那該怎麼優化呢?
注意: 第二列為NULL的,就是性別的用戶分布,其餘有城市的均為每個性別的城市分布。
cube:根據 group by 維度的所有組合進行聚合
注意 :跑完數據後,整理很關鍵!!!
rollup:以最左側的維度為主,進行層級聚合,是cube的子集。
如果我想同時計算出,每個月的支付金額,以及每年的總支付金額,該怎麼辦?
那應該如何優化呢?
條條大路通羅馬,寫SQL亦是如此,能達到同樣效果的SQL有很多種,要學會思路轉換,靈活應用。
來看一個我們之前做過的案例:
有沒有別的寫法呢?
Hive 中互相沒有依賴關系的 job 間是可以並行執行的,最典型的就是
多個子查詢union all。在集群資源相對充足的情況下,可以開啟並
行執行。參數設置: set hive.exec.parallel=true;
時間對比:
所謂嚴格模式,就是強制不允許用戶執行3種有風險的 HiveSQL 語句,一旦執行會直接報錯。
要開啟嚴格模式,需要將參數 hive.mapred.mode 設為 strict 。
好啦,這節課的內容就是這些。以上優化技巧需要大家在平時的練習和使用中有意識地去注意自己的語句,不斷改進,就能掌握最優的寫法。