常用sql語法初級

来源:https://www.cnblogs.com/wsw-tcsygrwfqd/archive/2018/05/10/8667247.html
-Advertisement-
Play Games

博主在工作中,常常需要使用sql語句來進行查詢,總結髮現,靈活使用這幾個要點,就可以應付大部分簡單情況。 一.連接:根據兩個或多個表中的列之間的關係,從這些表中查詢數據。 JOIN或INNER JOIN: 返回左表和右表中相互匹配的行 LEFT JOIN: 返回左表和右表中相互匹配的行,及左表中不相 ...


博主在工作中,常常需要使用sql語句來進行查詢,總結髮現,靈活使用這幾個要點,就可以應付大部分簡單情況。

一.連接:根據兩個或多個表中的列之間的關係,從這些表中查詢數據。

  • JOIN或INNER JOIN: 返回左表和右表中相互匹配的行
  • LEFT JOIN: 返回左表和右表中相互匹配的行,及左表中不相匹配的行
  • RIGHT JOIN: 返回左表和右表中相互匹配的行,及右表中不相匹配的行
  • FULL JOIN或FULL OUTER JOIN: 返回左表和右表中相互匹配的行,及不相匹配的行
  •  
  • 應用舉例
  • 在一些題目中沒有明確的暗示情況下,使用哪一種連接方式都可以;
  • 也有一些情況,只能使用特定的連接方式。

1.join/inner join

必須使用inner join的情況

1  --查詢所有未講課的教師的Tname和Depart. 
2   select TNAME,DEPART 
3   from TEACHER 
4   where TNO not in(select TEACHER.TNO from COURSE inner join 
5   TEACHER on COURSE.TNO=TEACHER.TNO)
6   --或者使用 Except
7     select TNAME,DEPART from TEACHER
8     except
9     select TNAME,DEPART from COURSE join TEACHER on COURSE.TNO=TEACHER.TNO

上面的sql語句中的“select TEACHER.TNO from COURSE inner join TEACHER on COURSE.TNO=TEACHER.TNO”中,只能使用inner join,使用left join、right join、full join都是錯誤的。

 2.left join和right join 

使用了left join 的情況,調換一下表的位置,就可以用right join替換;反之亦然。

1 --查詢所有學生的Sname、Cname和Degree列。
2 select SNAME,CNAME,DEGREE 
3 from STUDENT left join SCORE on STUDENT.SNO=SCORE.SNO 
4 left join COURSE on SCORE.CNO=COURSE.CNO

也可以寫成

1 select SNAME,CNAME,DEGREE 
2  from score  right join STUDENT on STUDENT.SNO=SCORE.SNO 
3 right join COURSE on SCORE.CNO=COURSE.CNO

 3.使用full join的情況較少,暫時還沒有用到。

 

二、嵌套

在sql語言中,一個select-from-where語句成為一個查詢塊。

將一個查詢塊嵌套在另一個查詢塊的where子句或having短語的條件中的查詢成為嵌套查詢。

 SQL語言允許多層嵌套查詢,但要註意的是,子查詢的select語句中不能使用order 不要子句,order by子句只能對最終查詢結果排序。

當掌握了sql語句的執行順序後,就會對這個限制的原因有更深刻的理解。

舉例

子查詢在where子句中

1 --查詢成績高於學號為“109”、課程號為“3-105”的成績的所有記錄。
2 select * from SCORE where DEGREE>(select DEGREE from SCORE where SNO='109' and CNO='3-105')

 

三、子查詢

上層的查詢塊稱為外層查詢或者父查詢,下層查詢塊稱為內層查詢或者子查詢。

子查詢的位置可以很靈活,掌握這一點,感覺sql學習就有了很大的進展。

1.子查詢可以放到where子句或having短語的條件中,這就是我們上面所介紹的嵌套查詢

2.子查詢可以出現在from子句中,這時子查詢生成的臨時派生表,稱為主查詢的查詢對象

1 --查詢所有選修了1號課程的學生姓名  (當然也可以使用嵌套查詢)
2 select Sname from Student,(select * from SC where cno='1') SC1 where Student.sno=SC1.sno

3.子查詢可以嵌套在INSERT語句中用以生成要插入的批量數據

1 --對每個系,求學生的平均年齡,再把結果插入Dept_age(Sdept,Avg_age)中
2 insert  into Dept_age(Sdept,Avg_age)
3 select Sdept.AVG(Sage)
4 from Student
5 group by Sdept

 

要點總結

1.連接:inner join、right join、left join 、full join

2.嵌套:將一個查詢塊嵌套在另一個查詢塊的where子句或having短語的條件中

3.子查詢的位置可以很靈活


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 幾個常用的方法如下: 把全部foo替換為bar,全局替換 當前行替換foo為bar 替換每個foo為bar,但需要確認. 單詞匹配替換, 需確認 忽略foo大小寫,替換為bar, 需確認 ...
  • 查看埠對應的程式: 根據進程號 ,查看程式的運行信息, 比如可執行文件的位置。 ...
  • 內核級別: (POST)BIOS加電自檢-->(Boot Sequence)從BIOS中讀取啟動順序-->讀取MBR中的bootloader-->載入內核-->讀取偽根-->讀取根文件中的init(/sbin/init) 用戶級別:設置預設運行級別-->運行初始化腳本,完成系統初始化-->關閉對應級 ...
  • Linux發行版本:基於linux內核提供桌面環境及辦公套件的操作系統 (Linux內核只有一個) 1. 啟動終端的快捷鍵: ctr + alt + t 2. 終端字體放大: ctr+shift+'+' 3. 終端字體縮小: ctr+'-' 4. ls : 查看當前目錄的文件信息 4.1 ls 路徑 ...
  • usr/bin/ld: cannot find -lxxx問題總結 linux下編譯應用程式常常會出現如下錯誤: /usr/bin/ld: cannot find -lxxx 意思是編譯過程找不到對應庫文件。其中,-lxxx表示鏈接庫文件 libxxx.so。 註:有時候,由於庫文件是編譯過程臨時生 ...
  • 1、簡述osi七層模型和TCP/IP四層模型 OSI七層模型 TCP/IP四層模型 2、簡述iproute家族命令 ip命令: ip [OPTIONS] OBJECT {COMMAND|help} ip link:network device configuration. ip link set D ...
  • 本文主要是總結一些常用的在實際運用中常用的一些mysql時間日期以及轉換的函數 1.now() :返回當前日期和時間 2.curdate() :返回當前日期 3. dayofweek(data) : 返回日期 data 是星期幾 (1 = 星期日,2 =星期一...7=星期六,ODBC標準) 4.w ...
  • Redis是一個開源的使用ANSI C語言編寫、支持網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。(百度百科 0.0) 下載:http://www.redis.cn/ 1、將下載的redis-4.0.9.tar.gz放置/usr/local目錄下,並解壓: t ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...