Select 查詢語句

来源:https://www.cnblogs.com/ruckly/archive/2019/05/15/10872256.html
-Advertisement-
Play Games

select 用於從數據看查詢數據。語法 * 是通配符表示查詢所有欄位。如果要查特定的欄位時,不要使用*,影響查詢效率。 1.1.2 distinct 去重 把重覆性的記錄去掉,只保留一條。 修飾多欄位時,多個欄位的值都不一樣才保留。 1.1.3 where 子句 where 表示查詢的條件。 [1 ...


1.1  查詢語句

1.1.1     select

select 用於從數據看查詢數據。語法

select field1,filed2,.. .
from tablename
[where condition]

 

 1 -- 查詢所有員工的名字和雇員號
 2 select empno,ename from emp;
 3 
 4 -- 查詢所有員工的雇員號、姓名、崗位
 5 select empno,ename,job from emp;
 6 
 7 -- 欄位的別名 as
 8 select ename as "姓名" from emp;
 9 select ename as "姓名",job as "崗位" from emp;
10 
11 -- 別名一定要用雙引號,不能用單引號
12 select ename "姓名",job "崗位" from emp;
13 -- 雙引號可以省略
14 select ename 姓名 from emp;
15 
16 -- 表的別名
17 select emp.ename,emp.job from emp;
18 select e.ename,e.job from emp e;

  *  是通配符表示查詢所有欄位。如果要查特定的欄位時,不要使用*,影響查詢效率。

1.1.2 distinct 去重

把重覆性的記錄去掉,只保留一條。

 

select empno,ename,job,mgr,hiredate,sal,comm,deptno
from emp;
-- * 通配符表示所有欄位
select * from emp;

修飾多欄位時,多個欄位的值都不一樣才保留。

1.1.3     where 子句

where 表示查詢的條件。

 [1] =,!= ,<>,<,>,<=,>= 關係運算符

<> 表示不等於

 1 -- where 子句
 2 
 3 -- 把部分10的雇員查詢出來
 4 select * 
 5 from emp 
 6 where deptno = 10;
 7 
 8 -- 把名稱為smith的雇員
 9 select e.*
10 from emp e
11 where e.ename = 'SMITH';
12 
13 -- 查詢底薪大於等於1000的員工
14 select e.*
15 from emp e
16 where e.sal >= 1000;
17 
18 select e.*
19 from emp e
20 where e.sal <> 800

any/som/all(list)

any/some(list) 滿足list列表中的任意一個條件

all(list) 滿足list列表的中所有條件

 1 -- any some all
 2 
 3 -- 查詢薪資大於1000或者薪資大於800的雇員
 4 select e.*
 5 from emp e
 6 where e.sal > some(1000,800);
 7 
 8 -- 查詢薪資大於1000
 9 select e.*
10 from emp e
11 where e.sal > all(1000,800);

 [2] null

null 在sql中表示的是不確定 => 可以認為沒有值(一些情況下)

1 -- null/not null
2 -- 查詢沒有津貼的雇員
3 select e.*
4 from emp e
5 where e.comm is null
6 
7 select e.*
8 from emp e
9 where e.comm is not null

【3】betweem x and y

表示一個值位於【x,y】區間,x與Y一般都是數字

-- between x and y
-- 查詢薪資在1000-5000之間的雇員
select e.*
from emp e
where e.sal between 1000 and 5000

-- 查詢薪資在(3000,5000]之間的雇員
select e.*
from emp e
where e.sal between 3000.01 and 5000

【4】in/not in list

表示欄位值是否在list列表中

 1 -- in/not in(list)
 2 -- 查詢部分號是10和20的員工
 3 select e.*
 4 from emp e
 5 where e.deptno in(10,20);
 6 
 7 select e.*
 8 from emp e
 9 where e.deptno not in(10,20);
10 
11 -- 查詢薪資是1000,2000,5000的員工
12 select e.*
13 from emp e
14 where e.sal in (1000,2000,5000);

【5】模糊查詢

like 關鍵字 用於模糊查詢中

%:表示任意字元出現多次(含0次),

_:表示任意字元出現1次。

escape(‘x’)表示指定的轉義字元為x,一般指定為\

-- 查詢名字是c開頭的雇員

select e.*
from emp e
where e.ename like 'c%';

-- 查詢名字中第二個字母是M的雇員
select e.*
from emp e
where e.ename like '_M%'

-- 查詢名字中含有M的雇員
select e.*
from emp e
where e.ename like '%M%';

-- 查詢名字中含有%的雇員
select e.*
from emp e
where e.ename like '%\%%' escape('\');

1.2 複雜查詢(and /or)

where 後面的條件可以跟多個and或者or連接

and:且、並且

or:或、或者

 1 -- 查詢部門10且薪資大於等2000的雇員
 2 select e.*
 3 from emp e
 4 where e.deptno = 10 and e.sal >= 2000;
 5 
 6 -- 查詢名字中含M且薪資大於1000的雇員
 7 select e.*
 8 from emp e
 9 where e.ename like '%M%' and e.sal > 1000
10 
11 -- 查詢部門在10或20的雇員
12 select e.*
13 from emp e
14 where e.deptno = 10 or e.deptno = 20

where 中and、or的執行效率問題

-- 思考:查詢條件的順序對查詢速度是否有影響?

/*
分析:
and 表示且,條件越多,檢索的數據量越來越少
or 表示或,條件越多,檢索的數據量越來越多
where 條件的執行順序從後向前
*/

-- 優化後的sql
select e.*
from emp e
where e.sal>=2000 and e.deptno = 10
-- 結論
-- AND:  把檢索結果較少的條件放到後面

-- 查部門10或30的雇員
select e.*
from emp e
where e.deptno = 10 or e.deptno = 30;

綜合案例

 1 --使用in查詢部門名稱為 SALES 和 RESEARCH 的雇員姓名、工資、部門編號
 2 -- 思考:部門名稱位於dept,雇員信息位於emp表
 3 select e.ename,e.sal,e.deptno
 4 from emp e
 5 where e.deptno in 
 6 (
 7 select d.deptno
 8 from dept d
 9 where d.dname = 'SALES' or d.dname = 'RESEARCH'
10 );

1.3  計算欄位

我們經常需要把資料庫中檢索出來的信息進行再加工,允許的操作+、-、*、/。通過四個運算得到新的欄位(計算欄位)。

計算欄位在數據表中不存在。

-- 查詢出每個雇員的月薪(收入)
select e.ename,e.sal+e.comm as "收入",e.deptno
from emp e
 

註意:很多記錄中的comm是null,表示不確定的值,經常四則運算後的值也不確定。

當遇到欄位時null時,可以通過nvl函數把null轉化便於運算的類型。

-- nvl函數優化
select e.ename,e.sal+nvl(e.comm,0) "收入",e.deptno
from emp e



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

-Advertisement-
Play Games
更多相關文章
  • 找到其快捷方式 -> 右鍵 -> 屬性 -> 快捷方式 -> 快捷鍵 ...
  • 1、 PrintScreen 整個屏幕 Alt+PrintScreen 當前程式的視窗 Win+Shift+S 可選擇截圖範圍,但不能進行編輯。 以上方式均只是將截圖放到了系統剪貼板,需要在圖像處理工具、QQ輸入框等地方Ctrl+V,截圖才會顯示出來。 2、 Win+PrintScreen 自動截取 ...
  • 一、LNMP應用平臺概述 1.概述:LNMP代表的就是:Linux系統下Nginx+MySQL+PHP這種網站伺服器架構。Nginx是一個高性能的HTTP和反向代理伺服器,也是一個IMAP/POP3/SMTP代理伺服器。Mysql是一個小型關係型資料庫管理系統。PHP是一種在伺服器端執行的嵌入HTM ...
  • Nginx 簡介 Nginx 是一個高性能的 HTTP 和反向代理 Web 伺服器,同時也提供了 IMAP/POP3/SMTP 服務。前向代理作為客戶端的代理,服務端只知道代理的 IP 地址而不知道客戶端的 IP 地址。 Nginx 安裝 推薦使用 LNMP 一鍵安裝包,Ubuntu/CentOS ...
  • Cockpit 進行主機監控 官網文檔: https://cockpit project.org/running.html 版本信息 針對Red Hat 安裝步驟 在okd集群環境中使用 查詢組件 安裝 ...
  • 龍芯1D是超聲波熱表、水錶和氣表測量專用 SoC 晶元。該晶元集成超聲波時間測量、超聲波脈衝發生器、溫度測量單元、CPU、串口、紅外收發器、段式LCD 控制器、電壓檢測單元、空管檢測單元、超聲波換能器斷線檢測等功能部件,配合完善的編程、模擬、調試環境,將會大大簡化超聲波熱表測量系統的軟硬體設計。 龍 ...
  • Vim編輯器作用:編輯文本文檔的(但預設是沒有安裝的) 需要yum進行安裝 啟動方式 vim 文件名字 有三種模式:命令模式,末行模式,輸入模式 命令模式:只能查看內容 輸入模式:可以對內容進行修改 末行模式:可以對內容執行命令 i :在游標所在位置的前方插入字元 a :在游標所在位置的後方插入字元 ...
  • 以前曾經做過練習《T-SQL PIVOT 行列轉換》https://www.cnblogs.com/insus/archive/2011/03/05/1971446.html 今天把拿出來,再練習。 以前透視列,需要手動指定。是否可以動態拿到呢? 看看下麵的演示: 在實現之前,得先參考這篇《列值轉換 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...