国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MySQL- sql語句基礎(chǔ)

這篇具有很好參考價值的文章主要介紹了MySQL- sql語句基礎(chǔ)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1.select后對表進行修改(delete)

報錯:You can’t specify target table ‘Person’ for update in FROM clause
原因:mysql不能在同一語句中先select出同一表中的某些值,然后對這個表做修改
錯誤寫法

delete from Person 
where id not in(
  select min(id) id
  from Person 
  group by email 
)

解決方法:添加臨時表

正確寫法

delete from Person 
where id not in(
  select * from (
  select min(id) id
  from Person 
  group by email 
  ) t1
)

2.函數(shù)GROUP_CONCAT()

我們可以使用函數(shù) GROUP_CONCAT() 將多行中的多個值組合成一個字符串。下面顯示了 GROUP_CONCAT() 函數(shù)的語法:

GROUP_CONCAT(
    DISTINCT 字段 ----去重
    ORDER BY 字段 ----ASC/DESC
    SEPARATOR sep ---分隔符: SEPARATOR ','
);

用例

select 
  sell_date ,
  count(distinct product) num_sold ,
  group_concat(
    distinct product 
    separator ','
  ) products
from 
  Activities 
group by 
  sell_date 

MySQL- sql語句基礎(chǔ),mysql,sql,數(shù)據(jù)庫,java

3.使用正則表達(dá)式

思路
一般來說,如果你被要求匹配一個字符串,應(yīng)該最先想到寫一個正則表達(dá)式模式進行匹配。

正則表達(dá)式提供各種功能,以下是一些相關(guān)功能:

正則表達(dá)式書寫格式
^:表示一個字符串或行的開頭
[a-z]:表示一個字符范圍,匹配從 a 到 z 的任何字符。
[0-9]:表示一個字符范圍,匹配從 0 到 9 的任何字符。
[a-zA-Z]:這個變量匹配從 a 到 z 或 A 到 Z 的任何字符。請注意,你可以在方括號內(nèi)指定的字符范圍的數(shù)量沒有限制,您可以添加想要匹配的其他字符或范圍。
[^a-z]:這個變量匹配不在 a 到 z 范圍內(nèi)的任何字符。請注意,字符 ^ 用來否定字符范圍,它在方括號內(nèi)的含義與它的方括號外表示開始的含義不同。
[a-z]*:表示一個字符范圍,匹配從 a 到 z 的任何字符 0 次或多次。
[a-z]+:表示一個字符范圍,匹配從 a 到 z 的任何字符 1 次或多次。
.:匹配任意一個字符。
\.:表示句點字符。請注意,反斜杠用于轉(zhuǎn)義句點字符,因為句點字符在正則表達(dá)式中具有特殊含義。還要注意,在許多語言中,你需要轉(zhuǎn)義反斜杠本身,因此需要使用\.。
$:表示一個字符串或行的結(jié)尾。

例子

SELECT user_id, name, mail
FROM Users
-- 請注意,我們還轉(zhuǎn)義了`@`字符,因為它在某些正則表達(dá)式中具有特殊意義
WHERE mail REGEXP '^[a-zA-Z][a-zA-Z0-9_.-]*\\@leetcode\\.com$';

4.DATE_FORMAT()

將日期值格式化為特定格式,請使用DATE_FORMAT函數(shù)。 DATE_FORMAT函數(shù)的語法如下:

DATE_FORMAT(date,format);  ---date 字段,format 需要格式
DATE_FORMAT(trans_date,'%Y-%m')  ---%Y-%m 2023-08
format date
%D 英文后綴如:0th, 1st, 2nd等的一個月之中的第幾天
%d 如果是1個數(shù)字(小于10),那么一個月之中的第幾天表示為加前導(dǎo)加0, 如:00, 01,02, …31
%H 24小時格式的小時,前導(dǎo)加0,例如:00,01…23
%h 小時,12小時格式,帶前導(dǎo)零,例如:01,02 … 12
%Y 表示年份,四位數(shù),例如2000,2001
%y 表示年份,兩位數(shù),例如00,01
%m 具有前導(dǎo)零的月份名稱,例如:00,01,02,… 12
%M 月份全名稱,例如:January, February,…December
format date
%Y-%m-%d 2017/04/30
%Y-%m 2017/04

5.count() 加條件

  1. COUNT( state=‘a(chǎn)pproved’ OR NULL ) >需要在后面 + or null

  2. COUNT( IF (state = ‘a(chǎn)pproved’, 1, NULL ) )

需要注意的是,count只有在字段數(shù)據(jù)為NULL時才不計入數(shù)量,如果IF (state = ‘a(chǎn)pproved’, 1, NULL ) 改為IF (state = ‘a(chǎn)pproved’, 1, 0 ) ,那么非 approved的數(shù)據(jù)也會被計入其中導(dǎo)致錯誤。

6.關(guān)于GROUP BY 中使用聚合函數(shù)去跟普通數(shù)據(jù)做比較而導(dǎo)致查詢結(jié)果錯誤的點

-------------- min(order_date) = customer_pref_delivery_date --------------
題目:
MySQL- sql語句基礎(chǔ),mysql,sql,數(shù)據(jù)庫,java

delivery_id 是表的主鍵。
該表保存著顧客的食物配送信息,顧客在某個日期下了訂單,并指定了一個期望的配送日期(和下單日期相同或者在那之后)。
如果顧客期望的配送日期和下單日期相同,則該訂單稱為 「即時訂單」,否則稱為「計劃訂單」。
「首次訂單」是顧客最早創(chuàng)建的訂單。我們保證一個顧客只會有一個「首次訂單」。

要求:寫一條 SQL 查詢語句獲取即時訂單在所有用戶的首次訂單中的比例。保留兩位小數(shù)。
MySQL- sql語句基礎(chǔ),mysql,sql,數(shù)據(jù)庫,java

 select customer_pref_delivery_date
  from Delivery 
  group by customer_id
  having min(order_date) = customer_pref_delivery_date

這個sql執(zhí)行結(jié)果是錯誤的,因為部分?jǐn)?shù)據(jù)會被忽略掉,比如那些有多條數(shù)據(jù)的(一個customer_id可以有多條消費記錄), having min(order_date) = customer_pref_delivery_date 拿到最小的order_date后去跟這個組內(nèi)的customer_pref_delivery_date去比較,但我們不能保證它拿的是不是min(order_date) 對應(yīng)的那個customer_pref_delivery_date,所以這里的 “ = ”,即比較,是有問題的(這種情況下應(yīng)該是取組內(nèi)第一條數(shù)據(jù)的customer_pref_delivery_date去跟min(order_date) 做比較,因為98的可以取到,其他3組取不到)

MySQL- sql語句基礎(chǔ),mysql,sql,數(shù)據(jù)庫,java

以上是符合條件的,但是會被篩選掉,導(dǎo)致錯誤
如果非要這么寫,那么需要搞清楚要比較的是什么customer_pref_delivery_date,比如這里要的是最小的customer_pref_delivery_date(初步判斷,不建議這么寫)

  select customer_pref_delivery_date
  from Delivery 
  group by customer_id
  having min(order_date) = min(customer_pref_delivery_date)

正確的完整寫法

select round(count(order_date=customer_pref_delivery_date or null) *100 / count(*) ,2) immediate_percentage 
from Delivery 
where (customer_id,order_date) 
in (
  select customer_id,min(order_date) order_date
  from Delivery 
  group by customer_id 
)

思路是先查詢拿到所有消費者的「首次訂單」,再拿原表去篩選并計算order_date=customer_pref_delivery_date的記錄數(shù),最后求比率

6.窗口函數(shù)(可用于部門績效排名,學(xué)校成績排名等)

<窗口函數(shù)> over (partition by <用于分組的列名>
order by <用于排序的列名>
rows/range子句<用于定義窗口大小> )

--------------------------- 案例 -----------------------------
公司的主管們感興趣的是公司每個部門中誰賺的錢最多。一個部門的 高收入者 是指一個員工的工資在該部門的 不同 工資中 排名前三 。
MySQL- sql語句基礎(chǔ),mysql,sql,數(shù)據(jù)庫,java

select t3.Department ,t3.Employee ,t3.salary
from (
  select t2.name Department ,t1.name Employee , 
  dense_rank() over(partition by t1.departmentId order by t1.salary desc) dr, 
  t1.salary 
  from Employee t1 
  left join Department t2 
  on t1.departmentId = t2.id 
) t3 
where t3.dr <=3

MySQL- sql語句基礎(chǔ),mysql,sql,數(shù)據(jù)庫,java
-------------------------------------------------------------

窗口函數(shù)>可以放以下兩種函數(shù):

1) 專用窗口函數(shù),即rank, dense_rank, row_number等。

  • Rank:存在并列排名,且占用原來名次,會跳數(shù)字。
  • Dense_rank: 存在并列排名,不占用原來名次,不跳數(shù)
  • Row_number:不存在并列排名
成績 Rank Dense_rank Row_number
100 1 1 1
100 1 1 2
100 1 1 3
98 4 2 4

2) 聚合函數(shù),如sum,avg,count,max,min等

group by 與 partition by 的區(qū)別

MySQL- sql語句基礎(chǔ),mysql,sql,數(shù)據(jù)庫,java

滑動窗口:rows&range用法

  • ROWS: 表示按照規(guī)定范圍,根據(jù)order by子句排序后,取的前N行及后N行的數(shù)據(jù)計算。常用:rows n preceding表示從當(dāng)前行到前n行(包括當(dāng)前行)
  • RANGE:表示按照規(guī)定范圍,根據(jù)order by子句排序后,指定當(dāng)前行對應(yīng)值的范圍取值,行數(shù)不固定,只要行值在范圍內(nèi),對應(yīng)行都包含在內(nèi)。適用于對日期、時間、數(shù)值排序分組
ROWS 解釋
Current Row 當(dāng)前行
n preceding 前 n 行,n 為數(shù)字, 比如 2 Preceding 表示前2行
unbounded preceding 當(dāng)前行到分區(qū)中的開頭行
n following 后n行,n 為數(shù)字, 比如 2 following 表示后2行
unbounded following 當(dāng)前行到分區(qū)中的結(jié)尾行
rows between 1 preceding and 1 following 窗口范圍是當(dāng)前行、前一行、后一行,共三行記錄

ROWS例子

select *,sum(weight) over(order by turn asc) TotalWeight
from Queue 

注意:這里sum()是求 當(dāng)前行 + 當(dāng)前行前面的所有行
MySQL- sql語句基礎(chǔ),mysql,sql,數(shù)據(jù)庫,java
因為order by 后面不加 窗口范圍 則默認(rèn)查看 當(dāng)前行 + 當(dāng)前行前面的所有行,相當(dāng)于rows unbounded preceding,如圖所示
MySQL- sql語句基礎(chǔ),mysql,sql,數(shù)據(jù)庫,java

RANGE 解釋
range interval 6 day preceding 最近7天的值(6天前+當(dāng)天的值)
range between interval 1 day preceding and interval 1 day following 前后一天和當(dāng)天的值

interval
/??nt?rvl/
n.間隔;(時間上的)間隙;間歇
preceding
/pr??si?d??/
v.先于;在…之前發(fā)生(或出現(xiàn));走在…前面
adj.在前的;前面的
following
/?fɑ?lo???/
adj.下列的;下述的;(時間上)接著的
n.下列;如下;下述;(統(tǒng)稱)擁護者,追隨者
v.跟隨;跟著;(指時間或順序)在…后發(fā)生,因…而發(fā)生;在…后做文章來源地址http://www.zghlxwxcb.cn/news/detail-658089.html

到了這里,關(guān)于MySQL- sql語句基礎(chǔ)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • MySQL相關(guān)的SQL語句、數(shù)據(jù)庫、數(shù)據(jù)表、字段、類型

    1、 SQL 語句不區(qū)分大小寫。 SQL語句 用途 描述 mysql -u root -p 連接 MySQL 在命令行窗口中輸入 mysql -u root -p 命令,回車,然后輸入 MySQL 密碼(不要忘記了密碼,找回麻煩),再回車就連接上 MySQL 了。最初都是使用 root 用戶登錄,工作中不能一直使用 root 用戶登錄。因為 root 權(quán)限太

    2024年02月13日
    瀏覽(115)
  • mysql,用sql語句,建立學(xué)生-課程數(shù)據(jù)庫基本表

    mysql,用sql語句,建立學(xué)生-課程數(shù)據(jù)庫基本表

    學(xué)生表 學(xué)號 姓名 年齡 性別 院系 Student Sno Sname Sage Ssex Sdept 課程表 課程號 課程名 先行課 學(xué)分 Course Cno Cname Cpno Ccredit 選課表 學(xué)號 課程號 成績 SC Sno Cno Grade 注意創(chuàng)建表的時候要注意它的字段名,類型,長度,約束條件,取值范圍要合適,大小寫符號要正確,中文逗號,分號

    2024年02月08日
    瀏覽(27)
  • MySQL數(shù)據(jù)庫概念、管理以及SQL語句的基本命令操作

    MySQL數(shù)據(jù)庫概念、管理以及SQL語句的基本命令操作

    數(shù)據(jù)(data) 描述事物的符號記錄 包括數(shù)字,文字、圖形、圖像、聲音、檔案記錄等 以“記錄”形式按統(tǒng)一格式進行存儲(記錄可以看成一條記錄) 表 將不同的記錄組織在一起 用來存儲具體數(shù)據(jù) 記錄:行 字段(屬性):列 以行+列的形式就組成了表(數(shù)據(jù)存儲在表中) 數(shù)

    2024年02月08日
    瀏覽(33)
  • MySQL 數(shù)據(jù)庫實用指南:測試數(shù)據(jù)準(zhǔn)備、SQL語句規(guī)范與基本操作

    MySQL 數(shù)據(jù)庫實用指南:測試數(shù)據(jù)準(zhǔn)備、SQL語句規(guī)范與基本操作

    歡迎來到小K的MySQL專欄,本節(jié)將為大家準(zhǔn)備MySQL測試數(shù)據(jù)、以及帶來SQL語句規(guī)范、數(shù)據(jù)庫的基本操作的詳細(xì)講解 要學(xué)習(xí)SQL查詢語句,首先必須解決一個問題,數(shù)據(jù)問題。為了方便大家學(xué)習(xí)閱讀我的文章,在這里提供了一個test.sql文件 ? 登錄MySQL,輸入 source xxx/test.sql 導(dǎo)入sql文

    2024年02月08日
    瀏覽(32)
  • MySQL數(shù)據(jù)庫第十一課---------SQl語句的拔高-------水平提升

    MySQL數(shù)據(jù)庫第十一課---------SQl語句的拔高-------水平提升

    ???????????????????????????????? ? ? ? ? ????? ????個人主頁 ::小小頁面 ????????????????? gitee頁面 :秦大大 ? ? ? ? ? ? ? ? 一個愛分享的小博主 ?歡迎小可愛們前來借鑒 ______________________________________________________? ? SQL提高 ? 日期函數(shù) ????

    2024年02月16日
    瀏覽(40)
  • MySQL數(shù)據(jù)庫增刪改查及聚合查詢SQL語句學(xué)習(xí)匯總

    MySQL數(shù)據(jù)庫增刪改查及聚合查詢SQL語句學(xué)習(xí)匯總

    目錄 數(shù)據(jù)庫增刪改查SQL語句 MySQL數(shù)據(jù)庫指令 1.查詢數(shù)據(jù)庫 2.創(chuàng)建數(shù)據(jù)庫 3.刪除數(shù)據(jù)庫 4.選擇數(shù)據(jù)庫 創(chuàng)建表table ? 查看所有表 創(chuàng)建表 查看指定表的結(jié)構(gòu) 刪除表 數(shù)據(jù)庫命令進行注釋 增刪改查(CRUD)詳細(xì)說明 增加 SQL庫提供了關(guān)于時間的函數(shù):now()? 查詢 查詢表作列與列之間進

    2024年02月09日
    瀏覽(28)
  • 基于Linux操作系統(tǒng)中的MySQL數(shù)據(jù)庫SQL語句(三十一)

    基于Linux操作系統(tǒng)中的MySQL數(shù)據(jù)庫SQL語句(三十一)

    MySQL數(shù)據(jù)庫SQL語句 目錄 一、SQL語句類型 1、DDL 2、DML 3、DCL 4、DQL 二、數(shù)據(jù)庫操作 1、查看 2、創(chuàng)建 2.1、默認(rèn)字符集 2.2、指定字符集 3、進入 ?4、刪除 5、更改 6、練習(xí) 三、數(shù)據(jù)表操作 (一)數(shù)據(jù)類型 1、數(shù)值類型 1.1、TINYINT 1.2、SMALLINT 1.3、INT 1.4、BIGINT 1.5、FLOAT(M,D) 2、時間

    2024年02月15日
    瀏覽(25)
  • MySQL:想實現(xiàn)sql語句進行批量刪除數(shù)據(jù)庫或表,而引發(fā)的熬夜探究

    MySQL:想實現(xiàn)sql語句進行批量刪除數(shù)據(jù)庫或表,而引發(fā)的熬夜探究

    因為在自測過程中,創(chuàng)建了很多數(shù)據(jù)庫,一個個手動刪除屬實有點對不起程序員這個身份,那么有沒有簡單的sql語句操作來進行批量刪除數(shù)據(jù)庫呢?于是便有了本篇文章 上面圖片是AI創(chuàng)作,未經(jīng)允許,不可商用哦! 刪庫跑路需謹(jǐn)慎, 放棄一切亦不易。 了解到數(shù)據(jù)庫或表的信

    2024年01月16日
    瀏覽(30)
  • MySQL數(shù)據(jù)庫基礎(chǔ)(九):SQL約束

    MySQL數(shù)據(jù)庫基礎(chǔ)(九):SQL約束

    文章目錄 SQL約束 一、主鍵約束 二、非空約束 三、唯一約束 四、默認(rèn)值約束 五、外鍵約束(了解) 六、總結(jié) PRIMARY KEY 約束唯一標(biāo)識數(shù)據(jù)庫表中的每條記錄。 主鍵必須包含唯一的值。 主鍵列不能包含 NULL 值。 每個表都應(yīng)該有一個主鍵,并且每個表只能有一個主鍵。 遵循原

    2024年02月19日
    瀏覽(25)
  • MySQL基礎(chǔ)篇——MySQL數(shù)據(jù)庫客戶端連接,數(shù)據(jù)模型,SQL知識

    MySQL基礎(chǔ)篇——MySQL數(shù)據(jù)庫客戶端連接,數(shù)據(jù)模型,SQL知識

    作者簡介:一名云計算網(wǎng)絡(luò)運維人員、每天分享網(wǎng)絡(luò)與運維的技術(shù)與干貨。? ?座右銘:低頭趕路,敬事如儀 個人主頁:網(wǎng)絡(luò)豆的主頁?????? 目錄 前言 一.客戶端連接MySQL 二. 數(shù)據(jù)模型 1.關(guān)系型數(shù)據(jù)庫(RDBMS) 2.數(shù)據(jù)模型 三.SQL 1.SQL通用語法 2.SQL分類 3.數(shù)據(jù)庫操作 1). 查

    2024年02月06日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包