接下來,我們將使用員工相關的四張樣本數據表,來學習SQL,建議你在學習過程中多動手練習,理解才會更深刻。表和欄位含義,如下圖:
如何利用SQL語句來操作以上數據呢?我們必須將樣本數據導入MySQL客戶端(如:Navicat)中。可以在客戶端操作數據,或者在終端窗口。工作中經常在客戶端操作,所以本文所有SQL語句將在Navicat中學習。
首先將sql腳本保存到桌面(獲取方式:關注"Python之每日一課"公眾號,後來回復"sql基礎數據",即可。),導入SQL腳本的具體操作流程如下:
現在數據准備完成。這里是導入sql腳本;導出同理,選擇」轉儲SQL「文件。當然了,Navicat也支持將當前表或查詢結果導出Excel、CSV等文件類型。
下面可以寫SQL語句了(每個sql腳本可以保存,下次直接使用),如下:
類似於Python中 :print(要列印的東西)
①通過select查詢完的結果 ,是一個虛擬的表格,不是真實存在
② 要查詢的東西 可以是常量值、表達式、欄位、也可以是函數
補充:可以給欄位起別名,好處是提高可讀性,更方便理解;多表連接時,區分欄位。用AS 或 空格來實現。如下:
2、 條件查詢
條件查詢:根據條件過濾原始表的數據,查詢到想要的數據
1)語法
2)分類
①條件表達式
②邏輯表達式
③模糊查詢
⭐ 注意:where 一定要放到 from 後面。NULL 不是假,也不是真,而是"空";任何運算符,判斷符碰到NULL,都得NULL;NULL的判斷只能用is null,is not null;NULL 影響查詢速度,一般避免使值為NULL。exists查詢可以與in型子查詢互換,它們之間區別以後語句優化時會詳細講解。
3、 排序查詢
1)語法
2)舉栗
⭐ 注意:order by 一定要放到 語句最後(limit前面)
4、分組查詢
1)語法
2)特點
①可以按單個欄位分組
②和分組函數一同查詢的欄位最好是分組後的欄位
③分組篩選(where 和 having區別)
④可以按多個欄位分組,欄位之間用逗號隔開
⑤可以支持排序
⑥having後可以支持別名
3)舉栗
⭐ 注意:關鍵字順序是where —>group by—>having—>order by—>limit( having不能單獨使用,需結合group by ,表示對分組後的結果進行篩選;而 group by 必須結合分組聚合函數一起使用 ,比如:count()、max()等)
5、 常見函數
1)單行函數
2)分組函數
3)分組函數特點
①以上五個分組函數都忽略null值,除了count(*)
②sum和avg一般處理數值型,max、min、count可以處理任何數據類型
③都可以搭配distinct使用,用於統計去重後的結果
④count的參數可以支持:欄位、*、常量值,一般放1
6、連接查詢(多表查詢)
單個表不能滿足需求時,需要結合多張表,去除有關聯的數據。這時就需要用連接查詢,連接查詢有三種,通常join使用的最多。
①等值連接的結果 = 多個表的交集
②多個表不分主次,沒有順序要求
③一般為表起別名,提高閱讀性和性能
①語法
②好處
語句上,連接條件和篩選條件實現了分離,簡潔。
⭐ 注意:左右連接可互換 A left join B 等價於B right join A;內連接是左</pre>
右連接的交集;mysql沒有外連接。
自連接相當於等值連接,但是等值連接涉及多個表,而自連接僅僅是它自己。如下:在員工信息表裡,查詢員工名和直接上級的名。
7、子查詢
一條查詢語句中又嵌套了另一條完整的select語句,其中被嵌套的select語句,稱為子查詢或內查詢。在外面的查詢語句,稱為主查詢或外查詢。
①子查詢都放在小括弧內
②子查詢可以放在from後面、select後面、where後面、having後面,但一般放在條件的右側
③子查詢優先於主查詢執行,主查詢使用了子查詢的執行結果
④子查詢根據查詢結果的行數不同分為以下兩類:
2)舉栗
8、分頁查詢 (可選)
實際web開發中,當顯示的數據,一頁顯示不完時,需要分頁提交sql請求。
2)特點
①起始條目索引默認從0開始
②limit子句放在查詢語句的最後
③公式:select * from 表 limit (page-1)*sizePerPage,
3)舉栗
9、union聯合查詢
union用於把涉及多個表的SELECT語句的結果組合到一個結果集合中。適用於查詢條件較多,多個表之間沒有連接關系的場景。</pre>
2)特點
①多條查詢語句的查詢的列數必須是一致的
②多條查詢語句的查詢的列的類型幾乎相同
③union 代表去重,union all 代表不去重
3)舉栗
UNION 和 UNION ALL 運行結果的區別如下:
⭐ 注意:在多個 SELECT 語句中,第一個 SELECT 語句中被使用的欄位名稱將被用於結果的欄位名稱。當使用 UNION 時,MySQL 會把結果集中重復的記錄刪掉,而使用 UNION ALL ,MySQL 會把所有的記錄返回,且效率高於 UNION
好,今天學習到這里。工作中用的最多就是查詢。如果能消化本文涉及到的所有內容,大概能解決80%的工作需求。本文更多的是原理介紹,例子不多,只有先知道是什麼,才能知道怎麼學。那麼,接下來最重要的是要多練習實踐。因為實際的業務場景要復雜很多,給大家推薦兩個刷題的網站,力扣和牛客網,裡面有大量的sql面試題。能進一步提高我們sql的水平。這篇文章主要是SQL的常用查詢。明天繼續學習SQL的DML增刪改。一起加油!
㈡ sql數據分析需要學什麼
作為數據分析師,你首先需要從正在查詢的資料庫中讀取數據。我們一般會採用這種方法:
了解SELECT語句的工作方式。這其中包括研究邏輯查詢處理的工作方式。邏輯查詢處理描述了資料庫引擎執行SELECT語句的子句的順序。了解它會引導你編寫更好,更准確的查詢。
研究聯接的工作方式
內部聯接是最有效的。左,右和完全外部聯接的效率較低,但有時必須使用它們。內部聯接可以導致行被過濾掉,外部聯接不能導致過濾。研究加入,因此你知道何時使用每種類型。只有最簡單的資料庫查詢才不涉及聯接。
了解如何使用GROUP BY子句進行聚合
了解窗口函數/有序分析函數。這些是在SQL中進行分析的縮影。最初很難將你的頭纏繞在它們周圍,但是這是值得的。一旦了解了它們,便會一直使用它們。
了解資料庫規范化。如果你了解規范化,你將了解為什麼架構師以這種方式構造資料庫的理論。這有助於編寫查詢並確定要聯接的表。
了解實體關系圖(ERD)的工作方式。大多數ERD是使用魚尾紋符號構建的。確保知道基數和可選性約束是如何工作的,這將幫助你解密連接表時要使用的連接類型。
一旦掌握了這些知識,就應該擴展到學習SQL的DML和DDL子類別。DML代表數據操作語言,SELECT語句是該語言的一部分。DDL代表數據定義語言,這是資料庫架構師用來創建表的語言。
本文禁止轉載或摘編
本文為我原創
大數據
數據分析
數據分析師
1
收藏
分享
推薦文章
35歲轉行數據分析師可以嗎?
學習 · 56閱讀
Excel之PowerQuery 提取單元格指定文字
學習 · 175閱讀
[簡述]答題驗證系統部署說明
學習 · 865閱讀
㈢ sql語句相關測試
sql語句相關測試
篇一:SQL語句測試
1、(10分)要求:
選擇受理時間在2008-5-1 到 2008-6-1之間的所有申請人姓氏為「劉」的數據,並把「新受理編號」列表示成當前機器時間的年月和原受理編號年月後的數值組合
格式如下:
受理編號,新受理編號,受理時間, 申請人
200801112 201008112 2008-01-13劉XX
需要的表
I_Optinst 業務實例表
REGDATE(受理日期)
Regnum(受理編號)
Proposer(申請人)
解答:select Regnum as 受理編號, as 新受理編號,REGDATE as 受理時間,Proposer as申請人 from Optinst 2、(15分)要求:
前提:只統計業務小類「存量房買賣」
①按照月份分12月列出2008年每個月份的月份對應月份的交易總面積
②按照月份分12月列出2008年每個月份的月份對應月份的交易均價(申報價格/建築面積)
格式
年度月份 交易總面積 年度月份交易均價(元/平方米)
2008-01 23232 2008-01 2323
2008-02 23232008-02 232
2008-03 232323 2008-03 7656
2008-04 232323 2008-03 565
2008-05 232323 2008-03 5656
2008-06 232323 2008-03 565
2008-07 232323 2008-03 67
2008-08 232323 2008-03 676
2008-09 232323 2008-03 6767
2008-10 232323 2008-03 8686
2008-11 232323 2008-03 867
2008-12 232323 2008-03 454
需要的表:
Fc_room 房間表
BAREA(建築面積)
I_Optinst業務實例表
regdate(受理時間)
fc_owner 產權表
COSTVAL(申報價格)
EVLVAL(評估價格)
fc_owoom 房間明細表
1.select regdate as年度月份,BAREA as 交易總面積 from Fc_room,Optinst where
3、(20分)要求:
①:按照時間統計收費明細 統計格式如下
受理編號繳費人收費日期 收費名稱收費金額核費人收費人
②:按照時間匯總(2008年度)統計收費項目分類 統計格式如下
收費名稱 總金額
需要的表:
I_OptInst(業務實例表)
Regnum 受理編號
Proposer 申請人
I_Charge(收費實例表)
HEFEIMAN 核費人
PAYEE 收款人
CDATE 收費日期
I_ChrDtl(收費實例明細表
CNAME 收費名稱
MONEY 收費金額
4、(15分)要求:用途是住宅並且建築面積<=140>140 定義為 「非普通住宅」
用途是商業並且建築面積>140 定義為 「商業A級」
其他情況定義為「非住宅」
根據用途和面積列表出所有數據
格式
受理編號, 用途
200406000386 普通住宅
200406004631 非普通住宅
200406004633 普通住宅
200406004638 普通住宅
200406004641 非住宅
200501000004 普通住宅
200406004568 非住宅
200406005677 商業A級
表:
fc_room
barea 建築面積
BUse 用途
i_optinst
regnum 受理編號
5、(30分)工作量統計
① 選擇出以下格式的數據;並創建視圖名稱為view_AAAA
業務小類業務實例 交易價格建築面積 登記時間
1 存量房買賣 14100 19400.0029.98 2005-11-10 11:32:50 2 新建商品房 15041 229530.00 124.07 2005-11-21 08:59:36 3 新建商品房 15043 177363.00 101.35 2005-11-21 09:15:59 4 新建商品房 13046 71130.0023.71 2005-11-02 10:15:37 5 新建商品房 11280 148563.00 87.39 2005-10-11 09:50:48 6 新建商品房 11353 267369.00 116.04 2005-10-11 15:34:53 7 房改售房 2689 35.22 2004-06-17 08:43:00 8 產權人名稱變更 11701 724.18 2005-10-17 10:05:20 9 新建商品房 7206 158257.00 88.69 2005-09-16 14:50:57 10 存量房買賣 (轉 載於:wWw.cnboThwiN.cOM 博 威範文 網: sql語句測試 )10100 103.07 2005-08-31 20:27:06 11 存量房買賣 12980 51500.0046.66 2005-11-01 14:41:32 12 新建商品房 13000 136782.00 80.46 2005-11-01 15:37:05 13 新建商品房 16946 300844.00 146.33 2005-12-15 14:15:07 14 存量房買賣 10091 509.18 2005-08-31 19:19:25 ② 使用視圖 view_AAAA 當做表 選擇出如下樣式數據
業務小類 件數合計金額 合計面積
1 用途變更 1151.3
2 轉移登記 184.03
3 新建商品房 31 263243643197.34
4 房改售房 8252.43
5 產權人名稱變更 3 778.6
6 單位產新建 311697.49
7 贈與 1 28.48
8 存量房買賣 24 4379004134.67
9 判決仲裁 2 439.41
10 繼承遺贈 1 49.17
11 換證 2 228.88
12 新建房屋 17 928.91
③ 用水晶報表關聯視圖 view_AAAA 設計出類似於②的數據格式 需要的表
FC_Owner
EvlVal交易價格
I_OptInst,
SOName 業務小類
fc_owoom,
BArea 建築面積
FC_Room
regdate 受理日期
篇二:sql查詢語句學習測試答案
第一部分SQL查詢語句的學習
單表查詢 1、--查詢訂購日期在1996年7月1日至1996年7月15日之間的訂單的訂購日期、訂單ID、客戶ID和雇員ID等欄位的值
use eee
SELECT 訂購日期,訂單ID,客戶ID,
雇員ID
FROM 訂單
WHERE 訂購日期BETWEEN '1996-7-1 00:00:00' AND '1996-7-15 23:59:59'
2、--查詢「Northwind」示例資料庫中供應商的ID、公司名稱、地區、城市和電話欄位的值。條件是「地區等於華北」並且「聯系人頭銜等於銷售代表」。
use eee
SELECT 供應商ID,公司名稱,地區,城市,電話
FROM 供應商
WHERE 地區='華北' AND 聯系人職務='銷售代表'
3、--查詢「Northwind」示例資料庫中供應商的ID、公司名稱、地區、城市和電話欄位的值。其中的一些供應商位於華東或華南地區,另外一些供應商所在的城市是天津 use eee
SELECT 供應商ID,公司名稱,地區,城市,電話
FROM 供應商
WHERE 地區IN('華東', '華南') OR 城市='天津'
4、--查詢「Northwind」示例資料庫中位於「華東」或「華南」地區的供應商的ID、公司名稱、地區、城市和電話欄位的值
use eee
SELECT 供應商ID,公司名稱,地區,城市,電話
FROM 供應商
WHERE 地區IN('華東', '華南')
多表查詢 5、--查詢訂購日期在1996年7月1日至1996年7月15日之間的訂單的訂購日期、訂單ID、相應訂單的客戶公司名稱、負責訂單的雇員的姓氏和名字等欄位的值,並將查詢結果按雇員的「姓氏」和「名字」欄位的升序排列,「姓氏」和「名字」值相同的記錄按「訂單 ID」的降序排列
use eee
SELECT 訂購日期,訂單ID,公司名稱,姓氏,名字
FROM 訂單,雇員,客戶
WHERE 訂購日期BETWEEN '1996-7-1 00:00:00' AND '1996-7-15 23:59:59'
AND 訂單.雇員ID = 雇員.雇員ID
AND 訂單.客戶ID = 客戶.客戶ID
ORDER BY 姓氏,名字ASC,訂單ID DESC
6、--查詢「10248」和「10254」號訂單的訂單ID、運貨商的公司名稱、訂單上所訂購的產品的名稱
use eee
SELECT 訂單.訂單ID,公司名稱,產品名稱
FROM 訂單,運貨商,產品,訂單明細
WHERE 訂單.訂單ID IN('10248','10254')
AND 訂單.訂單ID = 訂單明細.訂單ID
AND 訂單明細.產品ID = 產品.產品ID
AND
訂單.運貨商= 運貨商.運貨商ID
7、--查詢「10248」和「10254」號訂單的訂單ID、訂單上所訂購的產品的名稱、數量、單價和折扣
use eee
SELECT 訂單.訂單ID,產品名稱,數量,訂單明細.單價,折扣
FROM 訂單,產品,訂單明細
WHERE 訂單.訂單ID IN('10248','10254')
AND 訂單.訂單ID = 訂單明細.訂單ID
AND 訂單明細.產品ID = 產品.產品ID
篇三:sql語句練習題及答案
一 在資料庫 school 中建立student , sc, course 表。
學生表、課程表、選課表屬於資料庫 School ,其各自的數據結構如下:
學生 Student (Sno,Sname,Ssex,Sage,Sdept)
課程表 course(Cno,Cname,Cpno,Ccredit)
學生選課 SC(Sno,Cno,Grade)
二 設定主碼
1 Student表的主碼:sno2 Course表的主碼:cno 3 Sc表的主碼:sno,cno
1寫出使用 Create Table 語句創建表 student , sc, course 的SQL語句
2
3 刪除student表中的元組
4在資料庫school中刪除關系student
5在student表添加屬性sbirthdate 類型 datetime
Delete
1 刪除所有 JSJ 系的男生 from Student where Sdept=』JSJ』 and Ssex=』男』; 2 刪除「資料庫原理」的課的選課紀錄
from SC where Cno in (select Cno fromCourse where Cname=』資料庫原理』);
Update
1 修改 0001 學生的系科為: JSJ
2 把陳小明的年齡加1歲,性別改為女。 2 修改李文慶的1001課程的成績為 93 分 3 把「資料庫原理」課的成績減去1分
Select 查詢語句
一 單表
1查詢年齡在19至21歲之間的女生的學號,姓名,年齡,按年齡從大到小排列。 2查詢姓名中第2個字為「明」字的學生學號、性別。 3查詢 1001課程沒有成績的學生學號、課程號
4查詢JSJ 、SX、WL 系的年齡大於25歲的學生學號,姓名,結果按系排列 5按10分制查詢學生的sno,cno,10分製成績
(1-10分 為1 ,11-20分為2 ,30-39分為3,。。。90-100為10) 6查詢 student 表中的學生共分布在那幾個系中。(distinct) 7查詢0001號學生1001,1002課程的成績。
二 統計
1查詢姓名中有「明」字的學生人數。 2計算『JSJ』系的平均年齡及最大年齡。 3查詢學生中姓名為張明、趙英的人數
4計算每一門課的總分、平均分,最高分、最低分,按平均分由高到低排列 5 計算 1001,1002 課程的'平均分。
6 查詢平均分大於80分的學生學號及平均分 7 統計選修課程超過 2 門的學生學號
8 統計有10位成績大於85分以上的課程號。 9 統計平均分不及格的學生學號
10 統計有大於兩門課不及格的學生學號
三 連接
1查詢 JSJ 系的學生選修的課程號
2查詢選修1002 課程的學生的學生姓名 (不用嵌套及嵌套2種方法) 3查詢資料庫原理不及格的學生學號及成績
4查詢選修「資料庫原理」課且成績 80 以上的學生姓名(不用嵌套及嵌套2種方法) 5查詢平均分不及格的學生的學號,姓名,平均分。 6查詢女學生平均分高於75分的學生姓名。
7查詢男學生學號、姓名、課程號、成績。(一門課程也沒有選修的男學生也要列出,不能
四 嵌套、相關及其他
1 查詢平均分不及格的學生人數
2 查詢沒有選修1002 課程的學生的學生姓名
3 查詢平均分最高的學生學號及平均分 (2種方法 TOP , any , all) *4 查詢沒有選修1001,1002課程的學生姓名。
5 查詢1002課程第一名的學生學號(2種方法) 6 查詢平均分前三名的學生學號
7 查詢 JSJ 系的學生與年齡不大於19歲的學生的差集
8 查詢1001號課程大於90分的學生學號、姓名及平均分大於85分的學生學號、姓名 9 查詢每門課程成績都高於該門課程平均分的學生學號 10 查詢大於本系科平均年齡的學生姓名
答案
參考答案
1 create table student (sno6), sname var8), ssex2), sagesmallint, sdept var15), primary key(sno));
create table sc
(sno6), cno 4),
grade decimal(12,2), primary key(sno,cno));
into student
values( 』4001』,』趙茵』,』男』,20,』SX』)
from student
student
alter table student add sbirthdate datetime
1 select sno, sname, sage from student
where ssex=』女』 and sage between 19 and 21order by sage desc; 2 select sno, ssexfrom student
where sname like 』_明% 』 ; 3 select sno, cnofrom sc
where grade is null and cno=』1001』 ; 4 select sno, sname from student
where sdept in (』JSJ』,』SX』,』WL』) and sage>25 group by sdept;
select sno, cno, grade/10.0+1 as levelfrom sc ;
select distinct sdept from student ; select grade from sc
where sno=』0001』 and (cno=』1001』 or cno=』1002』) ;
select count(*) from student where sname like 』%明% 』 ; select avg(sage),max(sage) from student where sdept=』JSJ』 ; select cno,sum(grade),avg(grade),max(grade),min(grade) from sc group by cno
order by avg(grade) desc ;
select cno, avg(grade) from sc where cno in(『1001』,』1002』) group by cno ;
select sc.sno ,avg(grade) from scgroup by sc.sno
having avg(grade)>80 ;
select sno from sc group by sno having count(*)>2 ;
select cno from sc where grade>85 group by cno having count(*)=10 ; select sno from sc group by sno having avg(grade)<60 ;
select sno from sc where grade<60 group="" by="" sno="" having="">2 ;
select cno from student,sc where student.sno=sc.sno and sdept=』JSJ』 ; a:select sname from student,sc where student.sno=sc.sno and cno=』1002』
b:select sname from student where sno in (select sno from sc where cno=』1002』)
select sno,grade from sc,course
where sc.cno=course.cno and cname=』資料庫原理』 and grade<60 a:select sname from student ,sc,course
where student.sno=sc.sno and sc.cno=course.cno and grade>80 and cname=』 資料庫原理』 b:select sname from student where sno in (select sno from sc where grade>80 and cno in (select cno from course where cname=』 資料庫原理』)) select sno,sname,avg(grade) from sc,studentwhere student.sno=sc.snogroup by student.sno having avg(grade)<60
a:select sname from student where ssex=』女』 and sno in(select sno from sc group by sno having avg(grade)>75)
b:select sname from sc,student where student.sno=sc.sno and ssex=』女』group by student.sno having avg(grade)>75
select student.sno,sname,cno,grade from student left join sc on student.sno=sc.sno and ssex=』男』
select count(*) from student where sno in( select sno from sc group by sno havingavg(grade)<60)
select sname from student where sno not in(select sno from sc where cno=』1002』)
student
0001 aaX 0002 bb
0003 ccX Sc
0001 1001 0001 1002 0002 1001 0003 1002
Select sname from student where not exists(select* from sc where cno=』1002』 and sc.sno=student.sno)
a:select top 1 sno,avg(grade) from sc group by sno order by avg(grade) desc b:select sno, avg(grade) from sc group by sno
having avg(grade)=(select top 1 avg(grade) from scgroup by sno order by avg(grade) desc) c:select sno, avg(grade) from sc group by sno
having avg(grade)>=all ( select avg(grade) from sc group by sno)
select sname from student where not exists(
select * from course where cno in(『1001』,』1002』) and
not exists(select * from sc where sno =student.sno and cno=course.cno) ) a:select top 1 sno from sc cno=』1002』 order by grade desc b:select sno from sc where cno=』1002』 and grade >=all (
;㈣ 怎樣學習sql
先入門:找一本入門的書,多操作,(首先肯定自己要裝個資料庫)多練習,可以先看書上的例子!
等到熟練以後可以看一些深一點的書籍,記住要多練習
㈤ 怎麼學習SQL語句
創建資料庫
創建之前判斷該資料庫是否存在 if exists (select * from sysdatabases where name='databaseName') drop database 'databaseName' go Create DATABASE database-name
刪除資料庫
drop database dbname
備份sql server
--- 創建 備份數據的 device USE master EXEC sp_admpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat' --- 開始 備份 BACKUP DATABASE pubs TO testBack
創建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根據已有的表創建新表: A:create table tab_new like tab_old (使用舊表創建新表) B:create table tab_new as select col1,col2… from tab_old definition only
刪除新表
drop table tabname
增加一個列
Alter table tabname add column col type 註:列增加後將不能刪除。DB2中列加上後數據類型也不能改變,唯一能改變的是增加varchar類型的長度。
添加主鍵
Alter table tabname add primary key(col) 說明:刪除主鍵: Alter table tabname drop primary key(col)
創建索引
create [unique] index idxname on tabname(col….) 刪除索引:drop index idxname on tabname 註:索引是不可更改的,想更改必須刪除重新建。
創建視圖
create view viewname as select statement 刪除視圖:drop view viewname
幾個簡單的基本的sql語句
選擇:select * from table1 where 范圍 插入:insert into table1(field1,field2) values(value1,value2) 刪除:delete from table1 where 范圍 更新:update table1 set field1=value1 where 范圍 查找:select * from table1 where field1 like 』%value1%』 (所有包含『value1』這個模式的字元串)---like的語法很精妙,查資料! 排序:select * from table1 order by field1,field2 [desc] 總數:select count(*) as totalcount from table1 求和:select sum(field1) as sumvalue from table1 平均:select avg(field1) as avgvalue from table1 最大:select max(field1) as maxvalue from table1 最小:select min(field1) as minvalue from table1[separator]
幾個高級查詢運算詞
A: UNION 運算符 UNION 運算符通過組合其他兩個結果表(例如 TABLE1 和 TABLE2)並消去表中任何重復行而派生出一個結果表。當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重復行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。 B: EXCEPT 運算符 EXCEPT 運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行並消除所有重復行而派生出一個結果表。當 ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重復行。 C: INTERSECT 運算符 INTERSECT 運算符通過只包括 TABLE1 和 TABLE2 中都有的行並消除所有重復行而派生出一個結果表。當 ALL 隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重復行。 註:使用運算詞的幾個查詢結果行必須是一致的。
使用外連接
A、left outer join: 左外連接(左連接):結果集既包括連接表的匹配行,也包括左連接表的所有行。 SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c B:right outer join: 右外連接(右連接):結果集既包括連接表的匹配連接行,也包括右連接表的所有行。 C:full outer join: 全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。
㈥ sql資料庫查詢語句例子
各位同學們好,我們今天繼續來說,sql資料庫。我們今天的文檔中主要介紹了SQL查詢語句、查詢語句示例等。這里我給大家做了一個總結,有需要的同學可以參考一下。
首先,我們來了解一下SQL資料庫組成基本:
查找Movies表裡的Title欄位:
查找ID小於5的電影的Title和Director的以下這些:
查看電影的總條數
以下查詢語句是常用於班級統計的:
查詢「001」課程比「002」課程成績高的所有學生的學號:
查詢平均成績大於60分的同學的學號和平均成績:
查詢所有同學的學號、姓名、選課數、總成績:
查詢姓「李」的老師的個數:
查詢沒學過「葉平」老師課的同學的學號、姓名:
查詢學過「001」並且也學過編號「002」課程的同學的學號、姓名:
查詢學過「葉平」老師所教的所有課的同學的學號、姓名:
查詢課程編號「002」的成績比課程編號「001」課程低的所有同學的學號、姓名:
查詢所有課程成績小於60分的同學的學號、姓名:
查詢沒有學全所有課的同學的學號、姓名:
好了,這就是關於sql資料庫查詢語句的基礎了。我都替你們整理好了,感興趣的同學收藏一來,需要用的時候直接拿起來用就可以了。我們今天就到這里,下期再見!
本篇文章使用以下硬體型號:聯想小新Air15;系統版本:win10;軟體版本:sqlserver2008。
㈦ 怎麼學習SQL查詢
第一,你先專注一個資料庫的學習,例如,oracle資料庫;
第二,買一本oracle的資料庫書;
第三,先把書里的知識系統的學習一下;
首先:SQL 分為兩個部分:數據操作語言 (DML) 和 數據定義語言 (DDL)
數據操作語言
SELECT - 從資料庫表中獲取數據
UPDATE - 更新資料庫表中的數據
DELETE - 從資料庫表中刪除數據
INSERT INTO - 向資料庫表中插入數據
數據定義語言就是
CREATE DATABASE - 創建新資料庫
ALTER DATABASE - 修改資料庫
CREATE TABLE - 創建新表
ALTER TABLE - 變更(改變)資料庫表
DROP TABLE - 刪除表
CREATE INDEX - 創建索引(搜索鍵)
DROP INDEX - 刪除索引
然後,必須了解sql的執行順序
from->where->group by->order by->select
最後,就是多多練習,和多表連接查詢
㈧ 簡單明了,大學生都應該知道的SQL
SQL(結構化查詢語言)是用於訪問和操作資料庫中的數據的標准資料庫編程語言。
SQL是關系資料庫系統的標准語言。所有關系資料庫管理系統(RDMS),如MySQL、MS Access、Oracle、Sybase、Informix、Postgres和SQL Server都使用SQL作為它們的標准資料庫語言。
為了處理資料庫和資料庫相關的編程,程序員需要有一些介質,或者可以說介面來詳細說明一組命令或代碼來處理資料庫或訪問資料庫的數據。在本章中,將簡要介紹在學習SQL的過程中您將學習的術語。
SQL為結構化查詢語言提供了獨特的學習和資料庫處理技術,並將幫助您更好地控制SQL查詢並有效處理這些代碼。由於SQL幫助您包括資料庫創建,資料庫或表刪除,獲取行數據和修改這些數據等,並行SQL使得事情自動和平滑,最終用戶可以輕松訪問和處理該應用程序的數據。
雖然 SQL 是一門 ANSI(American National Standards Institute 美國國家標准化組織)標準的計算機語言,但是仍然存在著多種不同版本的 SQL 語言。
然而,為了與 ANSI 標准相兼容,它們必須以相似的方式共同地來支持一些主要的命令(比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等)。
要創建一個顯示資料庫中數據的網站,您需要:
RDBMS 指關系型資料庫管理系統,全稱 Relational Database Management System。
RDBMS 是 SQL 的基礎,同樣也是所有現代資料庫系統的基礎,比如 MS SQL Server、IBM DB2、Oracle、MySQL 以及 Microsoft Access。
RDBMS 中的數據存儲在被稱為表的資料庫對象中。
表是相關的數據項的集合,它由列和行組成。
代碼示例:
每個表都被分解成稱為欄位的更小的實體。Customers表中的欄位由CustomerID,CustomerName,ContactName,Address,City,PostalCode和Country組成。欄位是表中的一列,用於維護表中每條記錄的特定信息。
記錄(也稱為行)是表中存在的每個單獨條目。例如,在上面的Customers表中有91條記錄。記錄是表中的橫向實體。
列是表中的垂直實體,其包含與表中的特定欄位相關聯的所有信息。
當您對任何RDBMS執行SQL命令時,系統將確定執行請求的最佳方式,並由SQL引擎確定如何解釋該任務。
在此過程中包含了各種組件。
典型的查詢引擎處理所有非SQL查詢,但SQL查詢引擎不會處理邏輯文件。
與關系資料庫交互的標准SQL命令是創建、選擇、插入、更新、刪除和刪除,簡單分為以下幾組:
數據定義語言用於改變資料庫結構,包括創建、更改和刪除資料庫對象。用於操縱表結構的數據定義語言命令有:
數據操縱語言用於檢索、插入和修改數據,數據操縱語言是最常見的SQL命令。
數據操縱語言命令包括:
數據控制語言為用戶提供許可權控制命令。
用於許可權控制的命令有:
使用SQL格式化工具可以比較直觀地看到您想要的操作
㈨ SQL查詢語句
SQL查詢語句大全
SQL語句無論是種類還是數量都是繁多的,很多語句也是經常要用到的,SQL查詢語句就是一個典型的例子,無論是高級查詢還是低級查詢,SQL查詢語句的需求是最頻繁的。那麼SQL查詢語句有哪些?下面跟我一起來看看吧!
一、簡單查詢語句
1. 查看錶結構
SQL>DESC emp;
2. 查詢所有列
SQL>SELECT * FROM emp;
3. 查詢指定列
SQL>SELECT empmo, ename, mgr FROM emp;
SQL>SELECT DISTINCT mgr FROM emp; 只顯示結果不同的項
4. 查詢指定行
SQL>SELECT * FROM emp WHERE job='CLERK';
5. 使用算術表達式
SQL>SELECT ename, sal*13+nvl(comm,0) FROM emp;
nvl(comm,1)的意思是,如果comm中有值,則nvl(comm,1)=comm; comm中無值,則nvl(comm,1)=0。
SQL>SELECT ename, sal*13+nvl(comm,0) year_sal FROM emp; (year_sal為別名,可按別名排序)
SQL>SELECT * FROM emp WHERE hiredate>'01-1月-82';
6. 使用like操作符(%,_)
%表示一個或多個字元,_表示一個字元,[charlist]表示字元列中的任何單一字元,[^charlist]或者[!charlist]不在字元列中的任何單一字元。
SQL>SELECT * FROM emp WHERE ename like 'S__T%';
7. 在where條件中使用In
SQL>SELECT * FROM emp WHERE job IN ('CLERK','ANALYST');
8. 查詢欄位內容為空/非空的語句
SQL>SELECT * FROM emp WHERE mgr IS/IS NOT NULL;
9. 使用邏輯操作符號
SQL>SELECT * FROM emp WHERE (sal>500 or job='MANAGE') and ename like 'J%';
10. 將查詢結果按欄位的值進行排序
SQL>SELECT * FROM emp ORDER BY deptno, sal DESC; (按部門升序,並按薪酬降序)
二、復雜查詢
1. 數據分組(max,min,avg,sum,count)
SQL>SELECT MAX(sal),MIN(age),AVG(sal),SUM(sal) from emp;
SQL>SELECT * FROM emp where sal=(SELECT MAX(sal) from emp));
SQL>SELEC COUNT(*) FROM emp;
2. group by(用於對查詢結果的分組統計) 和 having子句(用於限制分組顯示結果)
SQL>SELECT deptno,MAX(sal),AVG(sal) FROM emp GROUP BY deptno;
SQL>SELECT deptno, job, AVG(sal),MIN(sal) FROM emp group by deptno,job having AVG(sal)<2000;
對於數據分組的總結:
a. 分組函數只能出現在選擇列表、having、order by子句中(不能出現在where中)
b. 如果select語句中同時包含有group by, having, order by,那麼它們的順序是group by, having, order by。
c. 在選擇列中如果有列、表達式和分組函數,那麼這些列和表達式必須出現在group by子句中,否則就是會出錯。
使用group by不是使用having的前提條件。
3. 多表查詢
SQL>SELECT e.name,e.sal,d.dname FROM emp e, dept d WHERE e.deptno=d.deptno order by d.deptno;
SQL>SELECT e.ename,e.sal,s.grade FROM emp e,salgrade s WHER e.sal BETWEEN s.losal AND s.hisal;
4. 自連接(指同一張表的連接查詢)
SQL>SELECT er.ename, ee.ename mgr_name from emp er, emp ee where er.mgr=ee.empno;
5. 子查詢(嵌入到其他sql語句中的select語句,也叫嵌套查詢)
5.1 單行子查詢
SQL>SELECT ename FROM emp WHERE deptno=(SELECT deptno FROM emp where ename='SMITH');查詢表中與smith同部門的人員名字。因為返回結果只有一行,所以用「=」連接子查詢語句
5.2 多行子查詢
SQL>SELECT ename,job,sal,deptno from emp WHERE job IN (SELECT DISTINCT job FROM emp WHERE deptno=10);查詢表中與部門號為10的工作相同的員工的姓名、工作、薪水、部門號。因為返回結果有多行,所以用「IN」連接子查詢語句。
in與exists的區別: exists() 後面的子查詢被稱做相關子查詢,它是不返回列表的值的。只是返回一個ture或false的結果,其運行方式是先運行主查詢一次,再去子查詢里查詢與其對 應的結果。如果是ture則輸出,反之則不輸出。再根據主查詢中的每一行去子查詢里去查詢。in()後面的子查詢,是返回結果集的,換句話說執行次序和 exists()不一樣。子查詢先產生結果集,然後主查詢再去結果集里去找符合要求的欄位列表去。符合要求的輸出,反之則不輸出。
5.3 使用ALL
SQL>SELECT ename,sal,deptno FROM emp WHERE sal> ALL (SELECT sal FROM emp WHERE deptno=30);或SQL>SELECT ename,sal,deptno FROM emp WHERE sal> (SELECT MAX(sal) FROM emp WHERE deptno=30);查詢工資比部門號為30號的所有員工工資都高的員工的姓名、薪水和部門號。以上兩個語句在功能上是一樣的,但執行效率上,函數會高 得多。
5.4 使用ANY
SQL>SELECT ename,sal,deptno FROM emp WHERE sal> ANY (SELECT sal FROM emp WHERE deptno=30);或SQL>SELECT ename,sal,deptno FROM emp WHERE sal> (SELECT MIN(sal) FROM emp WHERE deptno=30);查詢工資比部門號為30號的任意一個員工工資高(只要比某一員工工資高即可)的員工的姓名、薪水和部門號。以上兩個語句在功能上是 一樣的,但執行效率上,函數會高得多。
5.5 多列子查詢
SQL>SELECT * FROM emp WHERE (job, deptno)=(SELECT job, deptno FROM emp WHERE ename='SMITH');
5.6 在from子句中使用子查詢
SQL>SELECT emp.deptno,emp.ename,emp.sal,t_avgsal.avgsal FROM emp,(SELECT emp.deptno,avg(emp.sal) avgsal FROM emp GROUP BY emp.deptno) t_avgsal where emp.deptno=t_avgsal.deptno AND emp.sal>t_avgsal.avgsal ORDER BY emp.deptno;
5.7 分頁查詢
資料庫的每行數據都有一個對應的行號,稱為rownum.
SQL>SELECT a2.* FROM (SELECT a1.*, ROWNUM rn FROM (SELECT * FROM emp ORDER BY sal) a1 WHERE ROWNUM<=10) a2="" where="" rn="">=6;
指定查詢列、查詢結果排序等,都只需要修改最里層的子查詢即可。
5.8 用查詢結果創建新表
SQL>CREATE TABLE mytable (id,name,sal,job,deptno) AS SELECT empno,ename,sal,job,deptno FROM emp;
5.9 合並查詢(union 並集, intersect 交集, union all 並集+交集, minus差集)
SQL>SELECT ename, sal, job FROM emp WHERE sal>2500 UNION(INTERSECT/UNION ALL/MINUS) SELECT ename, sal, job FROM emp WHERE job='MANAGER';
合並查詢的執行效率遠高於and,or等邏輯查詢。
5.10 使用子查詢插入數據
SQL>CREATE TABLE myEmp(empID number(4), name varchar2(20), sal number(6), job varchar2(10), dept number(2)); 先建一張空表;
SQL>INSERT INTO myEmp(empID, name, sal, job, dept) SELECT empno, ename, sal, job, deptno FROM emp WHERE deptno=10; 再將emp表中部門號為10的數據插入到新表myEmp中,實現數據的批量查詢。
5.11 使用了查詢更新表中的數據
SQL>UPDATE emp SET(job, sal, comm)=(SELECT job, sal, comm FROM emp where ename='SMITH') WHERE ename='SCOTT';
簡介
SQL語言1974年由Boyce和Chamberlin提出,並首先在IBM公司研製的關系資料庫系統SystemR上實現。由於它具有功能豐富、使用方便靈活、語言簡潔易學等突出的優點,深受計算機工業界和計算機用戶的歡迎。1980年10月,經美國國家標准局(ANSI)的資料庫委員會X3H2批准,將SQL作為關系資料庫語言的美國標准,同年公布了標准SQL,此後不久,國際標准化組織(ISO)也作出了同樣的決定。
SQL從功能上可以分為3部分:數據定義、數據操縱和數據控制。
SQL的核心部分相當於關系代數,但又具有關系代數所沒有的許多特點,如聚集、資料庫更新等。它是一個綜合的、通用的、功能極強的關系資料庫語言。其特點是:
1、數據描述、操縱、控制等功能一體化。
2、兩種使用方式,統一的語法結構。SQL有兩種使用方式。一是聯機交互使用,這種方式下的SQL實際上是作為自含型語言使用的。另一種方式是嵌入到某種高級程序設計語言(如C語言等)中去使用。前一種方式適合於非計算機專業人員使用,後一種方式適合於專業計算機人員使用。盡管使用方式不向,但所用語言的語法結構基本上是一致的。
3、高度非過程化。SQL是一種第四代語言(4GL),用戶只需要提出「干什麼」,無須具體指明「怎麼干」,像存取路徑選擇和具體處理操作等均由系統自動完成。
4、語言簡潔,易學易用。盡管SQL的'功能很強,但語言十分簡潔,核心功能只用了9個動詞。SQL的語法接近英語口語,所以,用戶很容易學習和使用。
功能
SQL具有數據定義、數據操縱、和數據控制的功能。
1、SQL數據定義功能:能夠定義資料庫的三級模式結構,即外模式、全局模式和內模式結構。在SQL中,外模式又叫做視圖(View),全局模式簡稱模式(Schema),內模式由系統根據資料庫模式自動實現,一般無需用戶過問。
2、SQL數據操縱功能:包括對基本表和視圖的數據插入、刪除和修改,特別是具有很強的數據查詢功能。
3、SQL的數據控制功能:主要是對用戶的訪問許可權加以控制,以保證系統的安全性。
語句結構
結構化查詢語言包含6個部分:
1、數據查詢語言(DQL: Data Query Language):其語句,也稱為「數據檢索語句」,用以從表中獲得數據,確定數據怎樣在應用程序給出。保留字SELECT是DQL(也是所有SQL)用得最多的動詞,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。這些DQL保留字常與其它類型的SQL語句一起使用。
2、數據操作語言(DML:Data Manipulation Language):其語句包括動詞INSERT、UPDATE和DELETE。它們分別用於添加、修改和刪除。
3、事務控制語言(TCL):它的語句能確保被DML語句影響的表的所有行及時得以更新。包括COMMIT(提交)命令、SAVEPOINT(保存點)命令、ROLLBACK(回滾)命令。
4、數據控制語言(DCL):它的語句通過GRANT或REVOKE實現許可權控制,確定單個用戶和用戶組對資料庫對象的訪問。某些RDBMS可用GRANT或REVOKE控制對表單個列的訪問。
5、數據定義語言(DDL):其語句包括動詞CREATE,ALTER和DROP。在資料庫中創建新表或修改、刪除表(CREATE TABLE 或 DROP TABLE);為表加入索引等。
6、指針控制語言(CCL):它的語句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用於對一個或多個表單獨行的操作。
語言特點
SQL風格統一
SQL可以獨立完成資料庫生命周期中的全部活動,包括定義關系模式、錄入數據、建立資料庫、査詢、更新、維護、資料庫重構、資料庫安全性控制等一系列操作,這就為資料庫應用系統開發提供了良好的環境,在資料庫投入運行後,還可根據需要隨時逐步修改模式,且不影響資料庫的運行,從而使系統具有良好的可擴充性。
高度非過程化
非關系數據模型的數據操縱語言是面向過程的語言,用其完成用戶請求時,必須指定存取路徑。而用SQL進行數據操作,用戶只需提出「做什麼」,而不必指明「怎麼做」,因此用戶無須了解存取路徑,存取路徑的選擇以及SQL語句的操作過程由系統自動完成。這不但大大減輕了用戶負擔,而且有利於提高數據獨立性。
面向集合的操作方式
SQL採用集合操作方式,不僅查找結果可以是元組的集合,而且一次插入、刪除、更新操作的對象也可以是元組的集合。
以同一種語法結構提供兩種使用方式
SQL既是自含式語言,又是嵌入式語言。作為自含式語言,它能夠獨立地用於聯機交互的使用方式,用戶可以在終端鍵盤上直接輸入SQL命令對資料庫進行操作。作為嵌入式語言,SQL語句能夠嵌入到高級語言(如C、C#、JAVA)程序中,供程序員設計程序時使用。而在兩種不同的使用方式下,SQL的語法結構基本上是一致的。這種以統一的語法結構提供兩種不同的操作方式,為用戶提供了極大的靈活性與方便性。
語言簡潔,易學易用
SQL功能極強,但由於設計巧妙,語言十分簡潔,完成數據定義、數據操縱、數據控制的核心功能只用了9個動詞:CREATE、ALTER、DROP、SELECT、INSERT、UPDATE、DELETE、GRANT、REVOKE。且SQL語言語法簡單,接近英語口語,因此容易學習,也容易使用。
;