當前位置:首頁 » 編程語言 » 經典sql收藏
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

經典sql收藏

發布時間: 2022-12-19 10:24:17

A. sql 查詢用戶對應的所有收藏列表,sql語句該怎麼寫呢

select 收藏內容

from 收藏夾表 join 收藏表 on 收藏夾表.收藏夾id=收藏表.收藏夾id

where 用戶id='111'

B. MYSQL怎麼做用戶收藏表結構才合理

第一個問題:
對應關系是多對多,也就是一篇文章可以給多人收藏,一人可以收藏多篇文章,使用第二種方法,可以任意擴展,第一種方法雖然在取值的時候方便,但是其他的擴展操作會很痛苦
第二個問題解法跟第一種一樣
第三個問題:
緩存的使用,避免過度查詢同樣的sql,如果你的系統重復查詢很少,你用緩存也沒什麼用,如果多,用緩存會快很多,你看你使用的情況,自己衡量什麼時候該用

C. sql資料庫查詢語句例子

各位同學們好,我們今天繼續來說,sql資料庫。我們今天的文檔中主要介紹了SQL查詢語句、查詢語句示例等。這里我給大家做了一個總結,有需要的同學可以參考一下。

首先,我們來了解一下SQL資料庫組成基本:

查找Movies表裡的Title欄位:

查找ID小於5的電影的Title和Director的以下這些:

查看電影的總條數

以下查詢語句是常用於班級統計的:

查詢「001」課程比「002」課程成績高的所有學生的學號:

查詢平均成績大於60分的同學的學號和平均成績:

查詢所有同學的學號、姓名、選課數、總成績:

查詢姓「李」的老師的個數:

查詢沒學過「葉平」老師課的同學的學號、姓名:

查詢學過「001」並且也學過編號「002」課程的同學的學號、姓名:

查詢學過「葉平」老師所教的所有課的同學的學號、姓名:

查詢課程編號「002」的成績比課程編號「001」課程低的所有同學的學號、姓名:

查詢所有課程成績小於60分的同學的學號、姓名:

查詢沒有學全所有課的同學的學號、姓名:

好了,這就是關於sql資料庫查詢語句的基礎了。我都替你們整理好了,感興趣的同學收藏一來,需要用的時候直接拿起來用就可以了。我們今天就到這里,下期再見!

本篇文章使用以下硬體型號:聯想小新Air15;系統版本:win10;軟體版本:sqlserver2008。

D. SQL語句提取出中文的拼音首字母

正好最近收藏了一個 你可以看下思路
--將中文字元串轉化成文字首拼音的組合
create function fun_getPY(@str nvarchar(4000))
returns nvarchar(4000)
as
begin
declare @word nchar(1),@PY nvarchar(4000)
set @PY=''
while len(@str)>0
begin
set @word=left(@str,1)
--如果非漢字字元,返回原字元
set @PY=@PY+(case when unicode(@word) between 19968 and 19968+20901
then (select top 1 PY from (
select 'A' as PY,N'驁' as word
union all select 'B',N'簿'
union all select 'C',N'錯'
union all select 'D',N'鵽'
union all select 'E',N'樲'
union all select 'F',N'鰒'
union all select 'G',N'腂'
union all select 'H',N'夻'
union all select 'J',N'攈'
union all select 'K',N'穒'
union all select 'L',N'鱳'
union all select 'M',N'旀'
union all select 'N',N'桛'
union all select 'O',N'漚'
union all select 'P',N'曝'
union all select 'Q',N'囕'
union all select 'R',N'鶸'
union all select 'S',N'蜶'
union all select 'T',N'籜'
union all select 'W',N'鶩'
union all select 'X',N'鑂'
union all select 'Y',N'韻'
union all select 'Z',N'咗'
) T
where word>=@word collate Chinese_PRC_CS_AS_KS_WS
order by PY ASC) else @word end)
set @str=right(@str,len(@str)-1)
end
return @PY
end
--函數調用實例:
select dbo.fun_getPY('中華人民共和國AAA01')

/*

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ZHRMGHGAAA01

(1 行受影響)

*/

E. SQL語句, 我想在PHP中做一個收藏按鈕 ,點擊後從資料庫表中調取用戶和商店ID到新的表中

你可以先在資料庫中寫一個存儲過程Add_Favorite,然後在收藏按鈕添中調用加這個存儲過程就可以了。

Oracle Procere Sample:
create or replace procere Add_Favorite (P_UserName in Varchar2, P_ShopName in Varchar2) As
BEGIN
Insert into Table_Name values(P_UserName, P_ShopName) ;
EXCEPTION
WHEN others THEN
rollback;
END Add_Favorite;

PHP 調用 Add_Favorite:
$sql_sp = "BEGIN Add_Favorite(:UserName, :ShopName); END;";
$stmt = OCIParse($conn, $sql_sp);
OCIBindByName($stmt, ":UserName", $id, 16);
OCIBindByName($stmt, ":ShopName", $name, 30);
OCIExecute($stmt);

F. 求一條SQL語句 求高手

給個模板 試試:
select a.id,b.name,c.point from a,b,c where a.id=b.id and b.id=c.id and id=4

但是這種評論數有兩條的話會分成兩條數據顯示,你連接三張表還有多條數據SQL應該搞不定要存儲過程 或者 1L 這樣也行。

G. SQL Server資料庫常用命令(建議收藏)

命令:create database 資料庫名;

示例:create database student;

命令:drop database 資料庫名;

示例:drop databasestudent;

命令:create table 表名

(列名數據類型,列名2.....)

示例:create table student

(snamechar(20),sidint)

命令:drop table 表名

示例:drop table student

(插入(新增)列)

命令:alter table 表名

add 新列名數據類型

示例:alter table student

addsageint

(刪除列)

命令:alter table 表名

drop column 列名

示例:alter table student

drop column sid

(修改列類型)

命令:alter table 表名

altercolumn 列名數據類型

示例:alter table student

altercolumnsidfloat(浮點型)

(新增約束)

命令:alter table 表名

alter column 列名新數據類型

示例:alter table student

alter column PK_sidprimarykey(sid)(新增的約束類型是主鍵約束)

(刪除約束)

命令:alter table 表名

drop列名

示例:alter table student

drop PK_sid

命令:select要查詢的數據列名

from 表名

where篩選條件(無法對分組後的數據進行篩選)

(高級搜索)【groupby 列名(分組)

having篩選條件(只能對分組後的數據進行篩選)

order by排序方式(控制數據最後輸出的排列方式有正序:asc、倒敘:desc)】

示例:selectsid

from student

wheresid=2

【group by sid

havingsid=1

order by desc】

命令:insertinto表名

(列名 ,列名)

values

(值,值)

示例:insertinto表名

(sname,sid,sage)

values

(『張三』,12,15)

命令:update from 表名

set 列名=新值

示例:update from student

set sname='李四'

命令:insert into 表名(值的總數必須和列的總數相同)

select值,值,值union all

selevt值,值,值

示例:insertinto表名

select'張三',15,18

select'李四',16,19

命令:create view 視圖名

as

select 列

from 表名

示例:create view students

as

select sname

from student

H. SQL 語法速成手冊(干貨滿滿,建議收藏!)



SQL 語法結構包括:

例如: SELECT 與 select 、 Select 是相同的。

數據定義語言(Data Definition Language,DDL)是 SQL 語言集中負責數據結構定義與資料庫對象定義的語言。

DDL 的主要功能是 定義資料庫對象

DDL 的核心指令是 CREATE 、 ALTER 、 DROP 。

數據操縱語言(Data Manipulation Language, DML)是用於資料庫操作,對資料庫其中的對象和數據運行訪問工作的編程語句。

DML 的主要功能是 訪問數據 ,因此其語法都是以 讀寫資料庫 為主。

DML 的核心指令是 INSERT 、 UPDATE 、 DELETE 、 SELECT 。這四個指令合稱 CRUD(Create, Read, Update, Delete),即增刪改查。

事務控制語言 (Transaction Control Language, TCL) 用於 管理資料庫中的事務 。這些用於管理由 DML 語句所做的更改。它還允許將語句分組為邏輯事務。

TCL 的核心指令是 COMMIT 、 ROLLBACK 。

數據控制語言 (Data Control Language, DCL) 是一種可對數據訪問權進行控制的指令,它可以控制特定用戶賬戶對數據表、查看錶、預存程序、用戶自定義函數等資料庫對象的控制權。

DCL 的核心指令是 GRANT 、 REVOKE 。

DCL 以 控制用戶的訪問許可權 為主,因此其指令作法並不復雜,可利用 DCL 控制的許可權有: CONNECT 、 SELECT 、 INSERT 、 UPDATE 、 DELETE 、 EXECUTE 、 USAGE 、 REFERENCES 。

根據不同的 DBMS 以及不同的安全性實體,其支持的許可權控制也有所不同。

(以下為 DML 語句用法)


插入完整的行

插入行的一部分

插入查詢出來的數據



刪除表中的指定數據

清空表中的數據


查詢單列

查詢多列

查詢所有列

查詢不同的值

限制查詢結果


子查詢的子查詢



SELECT 語句中的 WHERE 子句

UPDATE 語句中的 WHERE 子句

DELETE 語句中的 WHERE 子句

IN 示例

BETWEEN 示例

AND 示例

OR 示例

NOT 示例

% 示例

_ 示例


組合查詢



其中, SOUNDEX() 可以將一個字元串轉換為描述其語音表示的字母數字模式。








AVG() 會忽略 NULL 行。

使用 DISTINCT 可以讓匯總函數值匯總不同的值。

指定多個列的排序方向

分組

分組後排序

使用 WHERE 和 HAVING 過濾數據

(以下為 DDL 語句用法)

普通創建

根據已有的表創建新表

添加列

刪除列

修改列

添加主鍵

刪除主鍵



創建表時使用約束條件:

(以下為 TCL 語句用法)


(以下為 DCL 語句用法)




可以使用觸發器來進行審計跟蹤,把修改記錄到另外一張表中。

MySQL 不允許在觸發器中使用 CALL 語句 ,也就是不能調用存儲過程。

BEGIN 和 END

當觸發器的觸發條件滿足時,將會執行 BEGIN 和 END 之間的觸發器執行動作。

NEW 和 OLD

CREATE TRIGGER 指令用於創建觸發器。

語法:

說明:

示例:

I. 如何用SQL分析電商用戶行為數據(案例)

        

本文以「淘寶用戶行為數據集」的分析全過程為例,展示數據分析的全過程

——使用工具:MySQL,Excel,Navicat,PowerBI

——分析類型:描述分析,診斷分析

——分析方法:漏斗分析,用戶路徑分析,RFM用戶價值分析,活躍/存留分析,帕累托分析,假設驗證分析。

(考慮到閱讀體驗文章中只放了SQL截圖,如需PDF版本,再公眾號後台回復「用戶行為分析」領取)

(目錄如下)

       

1.分析流程和方法

當沒有清晰的數據看板時我們需要先清洗雜亂的數據,基於分析模型做可視化,搭建描述性的數據看板。

然後基於描述性的數據挖掘問題,提出假設做優化,或者基於用戶特徵數據進行預測分析找規律,基於規律設計策略。簡單來說:

——描述性分析就是:「畫地圖」

——診斷性分析就是:「找問題」

——預測性分析就是 :「找規律」


在數據分析中有兩個典型的場景:

一種是有數據,沒有問題:需要先整體分析數據,然後再根據初步的描述分析,挖掘問題做診斷性分析,提出假設,設計策略解決問題。

 

另一種是已經發現了問題,或者已經有了假設,這種做數據分析更偏向於驗證假設。

 

2.淘寶用戶行為分析

本次是對「淘寶用戶行為數據集」進行分析,在分析之前我們並不知道有什麼問題,所以需要先進行描述性分析,分析數據挖掘問題。

我們首先來看下這個數據集的元數據:

       

根據以上數據欄位我們可以拿用戶行為為主軸從縱深方向提出一些問題,然後再從數據中找答案

       

縱向:

——這個數據集中用戶的日活躍和周活躍時間有什麼規律嗎?

——在當日活躍的用戶次日,三日,四日……還有多少活躍?

深向:

——用戶從瀏覽到購買的整體轉化率怎麼樣?

——用戶從瀏覽到購買的路徑是怎麼樣子的? 

——平台主要會給用戶推送什麼商品?

——用戶喜歡什麼類目?喜歡什麼商品? 

——怎麼判斷哪些是高價值用戶 ? 

 

 

下面是叮當整理的常用分析方法:      

我們可以給前面的問題匹配一下分析方法,便於後面的分析:


為了便於後面的數據分析,在分析之前我們需要先對做一下清洗

看元數據(欄位解釋,數據來源,數據類型,數據量……)初步發現問題為之後的處理做准備。

       

確定缺失值范圍,去除不需要欄位,填充缺失內容    

根據元數據格式和後續分析需要的格式對數據進行處理

  


去除重復值,異常值

——去除重復值:並把用戶ID,商品ID,時間戳設置為主鍵

——異常值處理:查詢並刪除2017年11月25日至2017年12月3日之外的數據

     

查詢並刪除小於2017-11-25的

——驗證數據:      


——分析思路:

——SQL提數:

       

       

——Excel可視化:

       

活躍曲線整體為上升狀態,同為周六日,12月2號,3號相比11月25日,26日活躍度更高。

用戶在周六周日相比其他時間更活躍(周六周日為休息日,用戶有更多時間)

      

一天內用戶活躍的最高峰期為21點(用戶在這個時間段空閑較多)

 

——分析思路:

——SQL提數:

列出每用戶每天及當天後面又活躍的日期,並創建「活躍時間間隔表」用於後面求次日存留,三日存留……

       

對「活躍時間間隔表視圖」引用進行分組統計,計算每日存留人數並創建視圖

對存留人數表進行計算,統計活躍用戶留存率

——Excel可視化:

       

——分析思路:

——SQL提數:

-把各種用戶行為分離出來並創建視圖方便後續查詢用戶行為數據

查詢整體數據漏斗

——Excel可視化:

       

用戶從瀏覽到購買整體轉化率2.3%,具體主要在哪個環節流失還需要再細分用戶路徑分析

 

——分析思路:

       

——SQL提數:

——PowerBI可視化:

       

用戶從瀏覽到購買的路徑主要有4條,路徑越長轉化率越底

路徑1:瀏覽→購買:轉化率1.45%

路徑2:瀏覽→加購物車→購買:轉化率0.33

路徑3:瀏覽→收藏→購買:轉化率0.11%

路徑4:瀏覽→收藏→加購物車→購買:轉化率0.03%

——分析思路:

——SQL提數:


——Excel可視化:

       

——描述性分析:

瀏覽量top100的商品瀏覽量呈階梯分布,越靠前的階梯之間的落差相對越大在這個階梯中的商品越少,越靠後商品瀏覽量階梯之間的落差相對越小,同階梯內的商品越多。

瀏覽量TOP100的商品所屬類目中,4756105,3607361,4357323三個類目瀏覽量遠超其他類目。

——分析思路:

——SQL提數:

查詢計算商品轉化率,升序排列,取前100個

       

——Excel可視化:

       

——描述性分析:

從商品看:有17款商品轉化率超過了1。

從類目看:這些商品所屬類目分布均勻,除965809,4801426,2735466,2640118,5063620,4789432,2945933這7個類目之外,其他類目都只有一個商品在轉化率TOP100的商品中。

——分析思路:

用戶價值分析常用的分析方式是RFM模型

       

本次分析中的R,F,M具體定義(僅用於演示分析方法,無實際業務參考價值):

 

——SQL取數與分析:

1)建立打分標准:先計算R,F的值,並排序,根據R,F值最大值和最小值得區間設計本次得打分標准

-查詢並計算R,F值創建視圖

       

-引用RF數值表,分別查詢R,F的最大值和最小值

       

       

-結合人工瀏覽的建立打分標准      

2)給R,F按價值打分

3)計算價值的平均值

       

4)用平均值和用戶分類規則表比較得出用戶分類   

     

——Excel可視化      

 

通過描述性分析得到可視化的數據後我們一般會先看一下是否符合業務常識

如果符合常識接下來我們會通過與行業平均數據和本產品的同比環比對比看是否正常,如果不正常就要找原因,設計解決方案,如果正常那就看是否有可以優化的地方。

       

我們首先來看一下這些描述性分析是否符合業務常識和指標是否正常:

       

1.活躍曲線整體為上升狀態,同為周六日,12月2號,3號相比11月25日,26日活躍度更高。

2.用戶在周六周日相比其他時間更活躍

3.一天內用戶活躍的最高峰期為21點

4.從2017年11月15日致2017年12月3日,活躍用戶新增38%

5.從2017年11月15日致2017年12月3日,活躍用戶次日留存增長18.67%,當日的活躍用戶留存也在快速增長,第七日留存比次日留存高18.56%。

6.用戶從瀏覽到購買整體轉化率2.3%

7.用戶從瀏覽到購買的路徑主要有4條,路徑越長轉化率越低。

8.瀏覽量top100的商品瀏覽量呈階梯分布,越靠前的階梯之間的落差相對越大在這個階梯中的商品越少,越靠後商品瀏覽量階梯之間的落差相對越小,同階梯內的商品越多。

9.瀏覽量TOP100的商品所屬類目中,4756105,3607361,4357323三個類目瀏覽量遠超其他類目。

10.從商品看:有17款商品轉化率超過了1。

11.從類目看:這些商品所屬類目分布均勻,除965809,4801426,2735466,2640118,5063620,4789432,2945933這7個類目之外,其他類目都只有一個商品在轉化率TOP100的商品中。

根據以上診斷分析我們梳理出了以下假設,做假設驗證。

       

 

假設1:這些商品中有高轉化率的爆款商品

       

 

對比瀏覽量TOP5的商品,發現這些商品轉化率在同一類目下並不高,假設不成立

 

假設2:4756105,3607361,4357323三個類目屬於高頻剛需類目

-創建類目購買頻次表

       

-計算類目購買頻次平均值

       

-查詢4756105,3607361,4357323三個類目的購買頻次       

4756105,3607361,4357323三個類目的用戶購買頻次明顯高於平均值,假設成立

 

假設3:有部分用戶是未點擊商詳直接從收藏和購物車購買的。

       

用戶不是直接從收藏和購物車購買的,只是後續復購未點擊商詳,假設不成立

 

假設4:淘寶推薦的商品主要是「同一類目下的高轉化商品」

       

用Excel對瀏覽量TOP100的商品ID和轉化率TOP100的商品ID進行去重,結果無重復值,假設不成立


3.結論:

1)用戶活躍:用戶活躍曲線整體呈上升趨勢,在一周中周六,周日活躍度比平時更高,在一天中用戶活躍曲線從凌晨4點開始往上升,在中午12點和下午5~6點有兩個小低谷(吃飯),到晚上9點時活躍度達到頂峰。

 

2)用戶留存:從2017年11月15日致2017年12月3日的用戶留存數據來看,淘寶的用戶留存數據較好,活躍用戶次日留存增長18.67%,當日的活躍用戶留存也在快速增長,第七日留存比次日留存高18.56%。

 

3)用戶轉化:整體轉化2.3%,用戶從瀏覽到購買的路徑主要有4條,路徑越長轉化率越低。

4)平台推薦與用戶偏好:從數據集中的數據來看,排除用戶興趣偏好標簽,淘寶給用戶用戶推送的商品主要是高頻剛需的類目,促使用戶復購,流量迴流平台。

 

以上結論受數據量和數據類型的影響,並不一定準確,僅用來練習數據分析方法。

(考慮到閱讀體驗文章中只放了SQL截圖,如需PDF版本,再公眾號後台回復「用戶行為分析」領取)

J. 很有意思的SQL查詢題目,看看大家如何解決

兩個難點:
1、如何讓Sql Server取到字元串中的數字,比如1、2、4和11、12、4雖然都是三位數字,但前者只有個位,後者含有十位和個位,用substring肯定是不行了。
2、如果取出了數字,還要依次遍歷整張表,循環取ID,並去除重復ID

總得說來第一條智能取數比較折磨人。

標記一下,看有無高人進來
--------------------------------
仔細思考了下,還是做出來了,真的很折磨人。
下面的語句全部一下執行就可以看到結果了。
其中@strIn就是需要查找的字元串,如果要查看其他數據,修改這個值就可以了。
思路是把一個欄位值變成多行數據,把','變為' union all'拼接語句實現。
--建立測試變數表@T,並賦值
declare @T table(id int,strnum varchar(50))
insert into @T
select 1,'1,2,4,5,8,9'
union all
select 2,'1,3,5,6,7,8,9,11'
union all
select 3,'3,4,5,6,7'
union all
select 4,'1,5,7,8,9'
union all
select 5,'3,5,6,9,11,12'
union all
select 6,'2,3,4,5,7'
union all
select 7,'3,4,5,6,7,8'
union all
select 8,'1,2,3,4,5,6,7,8,9,10'
union all
select 9,'1,7,8,9'
--@strIn查找的字元串
declare @strIn varchar(1000)
set @strIn = '1,11,12'

declare @strtable table(strSql varchar(4000))
insert into @strtable
Select 'select '''+cast(id as varchar(3))+''' as id,'''+replace(strnum,',',''' as num Union all Select ' + ''''+cast(id as varchar(3))+''' as id, ''') + ''' as num'
from @T

declare @comtable table(strSql varchar(4000))
insert into @comtable
select 'select '''+replace(@strIn,',',''' as num Union all Select ''' )+ ''' as num'

declare @textsql varchar(4000)
set @textsql = ''
Select @textsql=@textsql+strSql+' Union all ' from @strtable
set @textsql = substring(@textsql,1,len(@textsql)-10)

declare @comsql varchar(4000)
set @comsql = ''
Select @comsql=@comsql+strSql+' Union all ' from @comtable
set @comsql = substring(@comsql,1,len(@comsql)-10)

set @textsql = 'declare @Rtexttable table(id int,num varchar(3)) insert into @Rtexttable '+@textsql+
' declare @Rcomtable table(num varchar(3)) insert into @Rcomtable '+@comsql+' select distinct id from @Rtexttable a join @Rcomtable b on a.num = b.num'
exec (@textsql)

-------------------------
看了WHITE_WIN的,醍醐灌頂,豁然開朗。本人不喜歡用函數就改成存儲過程了
declare @T table(id int,strnum varchar(50))
insert into @T
select 1,'1,2,4,5,8,9'
union all
select 2,'1,3,5,6,7,8,9,11'
union all
select 3,'3,4,5,6,7'
union all
select 4,'1,5,7,8,9'
union all
select 5,'3,5,6,9,11,12'
union all
select 6,'2,3,4,5,7'
union all
select 7,'3,4,5,6,7,8'
union all
select 8,'1,2,3,4,5,6,7,8,9,10'
union all
select 9,'1,7,8,9'

declare @strIn varchar(100)
set @strIn = '1,11,12'

declare @RT table (strnum varchar(30))

while charindex(',',@strIn)>0
begin
insert into @RT select left(@strIn,charindex(',',@strIn)-1)
set @strIn = substring(@strIn,charindex(',',@strIn)+1,len(@strIn))
end
If(len(@strIn)>0)
begin
insert into @RT select @strIn
end

select a.id from @T a, @RT b where ','+a.strnum+',' like '%,'+b.strnum+',%'
group by a.id
order by a.id