第二天MySQL

来源:https://www.cnblogs.com/jane315/archive/2020/05/05/12832837.html
-Advertisement-
Play Games

2020/5/5 一、 DQL條件查詢 語法:(執行順序已標出) SELECT 查詢列表 3 FORM 表名 1 WHERE 篩選條件; 2 分類: 1. 按條件表達式篩選 條件運算符:> < = != <> >= <= #查找員工月薪>12000的員工信息 SELECT * FROM employ ...


2020/5/5

一、 DQL條件查詢

語法:(執行順序已標出)

SELECT

     查詢列表                      3

FORM

     表名                             1

WHERE

                 篩選條件;         2

分類:

1. 按條件表達式篩選

條件運算符:>  <  =  !=  <>  >=  <=

#查找員工月薪>12000的員工信息

SELECT

               *

FROM

               employees

WHERE

               salary>12000;

2. 按邏輯表達式篩選

邏輯運算符:and  or  not

#查找員工編號在90至120的員工名、薪水以及員工編號

SELECT

       last_name,

       salary,

       employee_id

FROM

       employees

WHERE

               employee_id >= 90 AND employee_id <= 120;

 

3. 模糊查詢

關鍵字:

3.1   like

特點:一般和通配符搭配使用,可以判斷字元型或數值型。

通配符

%  可帶表任意多個字元(包括空字元)

_  只能代表任意一個字元

案例一:查找員工名中含有字元a的員工名和部門編號

 

 

 

 運行結果:

 

 

案例二:查找員工名中第二個字元為'a',第五個字元為'o'的員工名、部門編號和薪水

 

 

 

運行結果;

 

註意:若想查找的字元本身就為特殊的字元如_或%,則需要通過對該字元轉義來實現。共有倆種方式

方式一:使用’\’來轉義

方式二: 使用ESCAPE關鍵字配合

如:#查找員工名第二個字元為'_'的員工名、月薪以及獎金率

SELECT

       last_name,

       salary,

       commission_pct

FROM

       employees

WHERE

       last_name LIKE '_\_%';

-----------------------------------------------------

SELECT

       last_name,salary,

       commission_pct

FROM

       employees

WHERE

        last_name

 LIKE

  '_$_%' ESCAPE  '$';  (相當於把‘$‘附上轉義的功能)

 

3.2   between and

優點:

1. 能夠提高語句的簡潔度

2. 包含臨界值

3. 兩個臨界值不要調換順序

案例: 查找員工部門編號在90到120之間的員工名、部門編號、工作編號

     

運行結果:

 

以上兩種方法返回的查詢結果一樣,兩種方式的表達意義完全等價!

 

3.3   in

特點:

  1. 可以提高語句簡潔度
  2. in 列表的值類型必須一致或相容(可以隱式的轉換)
  3. 不支持使用通配符表示的的模糊字元

#查找員工部門編號是'AD_VP'、'FI_MGR'、'FI_ACCOUNT'的員工名、薪水、部門編號以及部門編號

SELECT

       last_name,

       salary,

       job_id,

       department_id

FROM

       employees

WHERE

       job_id = 'AD_VP' OR job_id = 'FI_MGR' OR job_id = 'FI_ACCOUNT';

---------------------------------------------------------------------

SELECT

       last_name,

       salary,

       job_id,

       department_id

FROM

       employees

WHERE

       job_id IN ('AD_VP','FI_MGR','FI_ACCOUNT');

 

上面這兩種方式完全等價

 

3.4   is null 、is not null

特點:=或<>不能用於判斷null值,而is null 或is not null可以判斷null值(is只能用於判斷null,與null搭配,不可以判斷數值如12000)

註意:安全等於<=>即可以判斷NULL值,也可以判斷其他普通的數值,可讀性較差。

#查找獎金率為null的員工名、月薪以及獎金率

SELECT

       last_name,

       salary,

       commission_pct

FROM

       employees

WHERE

       commission_pct IS NULL;(可讀性很好!)

--------------------------------------------------------

SELECT

       last_name,

       salary,

       commission_pct

FROM

       employees

WHERE

       commission_pct <=> NULL;(可讀性較差)

以上兩種方式等價,返回查詢結果一致!!!

#查找獎金率不為null的員工名、月薪、獎金率以及年薪

SELECT

       last_name,

       salary,

       commission_pct,

       salary * (1 + IFNULL(commission_pct, 0)) * 12 AS 年薪

FROM

       employees

WHERE

       commission_pct IS NOT NULL;

註意,有個IFNULL()函數,原型為IFNULL(expression, alt_value),如果第一個參數的值expression為null,則替換它並返回第二個參數alt_value。

二、 DOL排序查詢

特點:

1. ASC代表升序,DESC代表降序(若不寫,則預設為升序)

2. order by 字句中可以支持單個欄位,多個欄位,表達式、函數、別名

3. order by 字句一般放在查詢語句的最後面,LIMIT子句除外

語法:(執行順序已標出)

SELECT

              查詢列表             3

FROM

              表名                 1

[WHERE

              篩選條件]         2

ORDER BY

              排序列表 ASC|DESC;     4

案例一: #查詢員工信息,要求工資從高到低排序

SELECT * FROM employees ORDER BY salary DESC;

 

案例二:#查詢部門編號>=90的員工信息,按入職時間的先後順序排序

SELECT

       *

FROM

       employees

WHERE

       department_id >= 90

ORDER BY

       hiredate DESC;

 

案例三:#按年薪的高低顯示員工的信息和年薪【按表達式排序】

SELECT

       *,salary * 12 * (1 + IFNULL(commission_pct, 0)) AS 年薪

FROM

       employees

ORDER BY

              salary * 12 * (1 + IFNULL(commission_pct, 0))  DESC;

 

案例四:#按年薪的高低顯示員工的信息和年薪【按別名排序】

SELECT

       *, salary * 12 * (1 + IFNULL(commission_pct, 0)) AS 年薪

FROM

       employees

ORDER BY

              年薪 DESC;

 

案例五:#按姓名的長度顯示員工的姓名和工資【按函數排序】

SELECT

       last_name,

       salary,

       LENGTH(last_name) 姓名長度

FROM

       employees

ORDER BY

              LENGTH(last_name) ASC;  (LENGTH(str)函數->返回str的位元組長度)

 

案例六:#查詢員工信息,要求先按工資排序,再按員工編號排序【按多個欄位排序】

SELECT

       *

FROM

       employees

ORDER BY

       salary DESC, employee_id DESC;

 

三、 常見函數介紹

調用方法:SELECT 函數名(實參列表)[from 表名];

分類:

1.單行函數

如:concat、length、ifnull、isnull等

2.分組函數

功能:做統計使用,又稱為統計函數、聚合函數、組函數

       單行函數分類:

1.  字元函數

# length函數->返回當前參數的位元組數(若字元集使用的是gbk則一個漢字占2個位元組,若是utf8則為3個位元組)

SELECT LENGTH('jane'); ->4

SELECT LENGTH(last_name) AS 姓名長度 FROM employees;

 

#concat函數->拼接字元

SELECT  CONCAT(last_name,'_',first_name)  AS 姓名 FROM employees;

 

#upper、lower函數(類似於python中的str.lower()與str.upper()函數,UPPER(str)->將str轉換為大寫字母返回,LOWER(str)-> 將str轉換為小寫字母返回)

SELECT UPPER(last_name) FROM employees;

SELECT CONCAT(UPPER(last_name),'_',LOWER(first_name)) AS 姓名 FROM employees;

 註意!!!索引是從1開始的

#substr,substring(截斷字元串)

截取從指定索引處後面的所有字元

SELECT SUBSTR('abcefghijk',2) AS output;->'cefghijk'

截取從指定索引處指定”字元“長度的字元

SELECT SUBSTR('abcdefghijk',2,3) AS output;->'cde'

SELECT SUBSTR('呀呀呀',2,1) AS output;'呀'

 

#instr(返回子串第一次出現的索引,如果找不到則返回0)

SELECT INSTR(‘我去上學啦’,’上學啦’);->3

 

#trim(去”前後”的制定字元,若不指定則預設為去掉空格。註意,字元串中間的內容不會去除)

SELECT TRIM('      lalalla      ')  AS output;  ->’lalalla’

SELECT TRIM( 'a'  FROM  'aaaaaaaabbbbbabbbaaabbbbaaaaa');-> bbbbbabbbaaabbbb

 

#lpad(在左邊用指定字元進行填充並且返回對應長度的字元結果)

SELECT LPAD('aaabbb',10,'c');->'ccccaaabbb'

SELECT LPAD('aaabbb',4,'c');->'aaab'

 

#rpad(在右邊用指定字元進行填充並且返回對應長度的字元結果)

SELECT RPAD('aaabbb',10,'c');->'aaabbbcccc'

SELECT RPAD('aaabbb',4,'c');->'aaab'

 

#replace(用指定字元值替換指定字元值)

REPLACE(str,from_str,to_str)(str->作用的字元串,from_str->要被替換的字元串,to_str->用來替換的字元串)

SELECT REPLACE('哈哈哈,我不知道','我不知道','我知道');->'哈哈哈,我知道'

 

2.  數字函數

#round(對傳入的參數四捨五入並返回)

SELECT ROUND(8.9);->9

SELECT ROUND(-8.9);->-9

SELECT ROUND(1.567,2);->1.57(2代表保留小數點後2位)

 

#ceil(向上取整,返回>=該參數的最小整數)

SELECT CEIL(1.002);->2

SELECT CEIL(1.00);->1

SELECT CEIL(-1.002);->-1

 

#floor(向下取整,返回<=該參數的最小整數)

SELECT CEIL(1.002);->1

SELECT CEIL(1.00);->1

SELECT CEIL(-1.002);->-2

 

#truncate 截斷

TRUNCATE(X,D)->(X->要被處理的參數,D->截斷後的小樹點位數)

SELECT TRUNCATE(1.69999,1);->1.6

 

#mod(取餘)

MOD(a,b): a-a/b*b(返回的取餘結果的正負值取決於參數a)

SELECT MOD(10,3);->1

SELECT MOD(10,-3);->1

SELECT MOD(-10,-3);->-1

SELECT MOD(-10,3);->-1

 

3.  日期函數

#now (返回當前系統日期+時間)

SELECT NOW();->2020-05-05 20:20:15

 

#curdate(返回當前系統日期,不包含時間)

SELECT CURDATE();->2020-05-05

 

#curtime(返回當前系統時間,不包含日期)

SELECT CURTIME();->20:21:53

 

#year、month、day、hour、minute、second(用於獲取指定的部分,年、月、日、時、分、秒)

SELECT YEAR(NOW());->2020

SELECT MONTH(NOW());->5

SELECT DAY(NOW());->5

SELECT HOUR(NOW());->20

SELECT MINUTE(NOW());->25

SELECT SECOND(NOW());->4

 

#str_to_date(將日期格式的字元轉換成指定格式的日期)

相對應的格式符如下:

 

 

SELECT STR_TO_DATE('9-13 1999','%c-%d %Y');-> 1999-09-13

#date_format(將日期轉換成字元)

SELECT DATE_FORMAT('2018/6/6','%Y年%m月%d日');-> 2018年06月06日

 

4.  其他函數

#version(返回當前mysql的版本)

SELECT VERSION();->5.7.25-log

 

#database(返回當前打開的資料庫)

SELECT DATABASE();->myemployees

 

#user(返回當前的用戶)

SELECT USER();->root@localhost

 

5.  流程式控制制函數

#if函數

IF(expr1,expr2,expr3)->(expr1:條件或邏輯表達式,若真則返回expr2,假則返回expr3)

SELECT IF(5>2,'大','小');->'大'

 

#case函數

使用一:(switch case的效果)

case 要判斷的欄位或表達式

when 常量1 then 要顯示的值1或語句1;

when 常量2 then 要顯示的值2或語句2;

else常量n then 要顯示的值n或語句n;

end

 

案例:查詢員工的工資,要求:

部門號=30,顯示的工資為1.1倍

部門號=40,顯示的工資為1.2倍

部門號=50,顯示的工資為1.3倍

SELECT

       salary 原始工資,

       department_id,

       CASE department_id

WHEN 30 THEN

       salary * 1.1

WHEN 40 THEN

       salary * 1.2

WHEN 50 THEN

       salary * 1.3

ELSE

       salary

END AS 新工資

FROM

       employees;

 

 

  使用二:(類似於多重if)

case

when 條件1 then 要顯示的值1語句1;

when 條件2 then 要顯示的值2或語句2;

else條件n then 要顯示的值n或語句n;

end

案例:查詢員工的工資,要求:

如果工資>20000,顯示級別A

如果工資>15000,顯示級別B

如果工資>10000,顯示級別C

否則,顯示級別D

SELECT

   salary 原始工資,

   CASE

WHEN salary > 20000 THEN

   'A'

WHEN salary > 15000 THEN

   'B'

WHEN salary > 10000 THEN

   'C'

ELSE

   'D'

END AS 獎金級別

FROM

   employees;

 

 


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

-Advertisement-
Play Games
更多相關文章
  • 在資料庫的數據日積月累的積累下,業務資料庫中的單表數據想必也越來越大,大到百萬、千萬、甚至上億級別的數據,這個時候就很有必要進行資料庫讀寫分離、以及單表分多表進行存儲,提高性能 ...
  • 更安全的rm命令,保護重要數據 網上流傳的安全的rm,幾乎都是提供一個rm的"垃圾"回收站,在伺服器環境上來說,這實非良方。 我想,提供一個安全的rm去保護一些重要的文件或目錄不被刪除,避免出現重要數據誤刪的悲劇,或許才是更佳方案。 我寫了一個腳本:https://github.com/malong ...
  • Linux常用命令 一、控制台相關命令 控制台命令就是指通過字元界面輸入的可以操作系統的命令。我們現在要瞭解的是基於Linux操作系統的基本控制台命令。不同於圖形模式的一種類似文本編輯器的運行命令的環境。在遠程登陸控制或是操作沒有圖形環境的Linux系統時,控制台命令就有很大的用途了,建議大家一定要 ...
  • 本文主要講解如何安裝VM插件實現高級功能(下篇) 上篇主要講WndowsOS下利用VM虛擬機部署MACOS ...
  • 這裡分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農曆年分二十四節氣,希望在每個交節之日準時發佈一期。 ...
  • “一段數據流從應用程式發送端,一直到應用程式接收端,總共經過了多少次拷貝?” 先看發送端,當應用程式將數據送到發送緩衝區時,調用的是 send 或 write 方法,如果緩存中沒有空間,系統調用就會失敗或者阻塞。我們說,這個動作事實上是一次”顯式拷貝“。而在這之後,數據將會按照 TCP/IP 的分層... ...
  • 初步進入Linux世界 一、Linux目錄介紹 1.樹型目錄結構 Linux文件系統採用了多級目錄的樹型層次結構管理文件。樹型結構的最上層是根目錄,用/表示。在根目錄之下是各層目錄和文件。 2.工作目錄與用戶主目錄 當登錄Linux時,首先進入到一個特殊的目錄,稱為主/登錄目錄。可以通過~來指定(或 ...
  • 學習視頻:https://www.bilibili.com/video/BV1tJ411r7EC?p=74 設計資料庫步驟: 良好的資料庫設計:節省空間,數據完整,方便開發。 步驟:1、收集信息 2、標識實體 3、標識實體屬性 4、標識實體之間的關係 5、畫E-R圖,編寫Sql 概念瞭解: 映射基數 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...