Java-MySql-函式、多表查詢

簡單_319355229發表於2020-12-09

子查詢

當多個表中資料存在關聯,且需要先由另一個表資料查詢後使用進行當前表資料的查詢

由多條sql語句組成用於返回指定資料

在這裡插入圖片描述

在這裡插入圖片描述

子查詢中的sql語句一般返回一列資料並且有時可能返回唯一資料

函式

聚合函式

聚合函式:對一組值進行計算,並返回計算後的值 ,具有統計資料的作用,將多行資料進行聚合操作返回一個指定值

注意:在使用聚合函式時一般不會再對其他資料進行單獨查詢,因為聚合函式執行後僅返回一條資料,所以在進行查詢時,如果其他資料存在多條也只返回第一條語句

sum()

求和,將指定列中所有資料求和後返回

在這裡插入圖片描述

avg()

求平均值,獲取指定列平均值

在這裡插入圖片描述

max()

在這裡插入圖片描述

min()

在這裡插入圖片描述

count()

返回滿足條件的行數

在這裡插入圖片描述

字串函式

CHARSET(str)返回字串字符集
CONCAT (string2 [,… ])連線字串
INSTR (string ,substring )返回substring在string中出現的位置,沒有返回0
UCASE (string2 )轉換成大寫
LCASE (string2 )轉換成小寫
LEFT (string2 ,length )從tring2中的左邊起取length個字元
LENGTH (string )string長度
REPLACE (str ,search_str ,replace_str )在str中用replace_str替換search_str
STRCMP (string1 ,string2 )逐字元比較兩字串大小,
SUBSTRING (str , position [,length ])從str的position開始,取length個字元
LTRIM (string2 ) RTRIM (string2 ) trim去除前端空格或後端空格

charset()

返回指定欄位字串編碼

在這裡插入圖片描述

concat()

連線字串。將兩欄位資料或字串進行連線
在這裡插入圖片描述

instr()

查詢指定字串出現的位置,不存在則返回0

在這裡插入圖片描述

ucase()

將指定欄位資料已大寫形式返回
在這裡插入圖片描述

lcase()

將指定欄位資料已小寫形式返回
在這裡插入圖片描述

left()

返回指定欄位從左開始指定長度的資料

在這裡插入圖片描述

length()

返回指定欄位字元個數

在這裡插入圖片描述

replace()

使用指定字串替換欄位中某一字串

在這裡插入圖片描述

substring()

返回指定欄位自定起始位置開始長度的字串

在這裡插入圖片描述

trim()

空格替換
在這裡插入圖片描述

日期函式

用於進行日期轉換以及日期格式定義的函式

ADDTIME (date2 ,time_interval )將time_interval加到date2
CURRENT_DATE ( )當前日期
CURRENT_TIME ( )當前時間
CURRENT_TIMESTAMP ( )**當前時間戳 **
DATE (datetime )返回datetime的日期部分
DATE_ADD (date2 , INTERVAL d_value d_type )在date2中加上日期或時間
DATE_SUB (date2 , INTERVAL d_value d_type )在date2上減去一個時間
DATEDIFF (date1 ,date2 )兩個日期差
NOW ( )當前時間
YEAR|Month|DATE (datetime )年月日

current_date()

返回當前時間(date型別)

current_time()

返回當前時間(time型別)

current_timstamp()

返回當前時間(timestamp型別)

now()

返回當前時間(datatime型別)

date()

返回指定日期欄位date部分資料
在這裡插入圖片描述

time()

返回指定日期欄位time部分資料

在這裡插入圖片描述

date_add()

為包含date資料的日期型別進行新增

在這裡插入圖片描述

需要使用interval 進行數值的轉換

date_sub()

為包含date資料的日期型別進行減少
在這裡插入圖片描述

datediff()

返回兩個日期直接相差天數(第一個日期減第二個日期)

year()

返回指定日期型別的年

month()

返回指定日期型別的月

day()

返回指定日期型別的日

數學函式

abs()

返回數值型別絕對值

ceiling()

向上取整

floor()

向下取整

least()

獲取一行資料中最小值

rand()

隨機數
在這裡插入圖片描述

在資料庫表中有以下字元資料,如:
13-1、13-2、13-3、13-10、13-100、13-108、13-18、13-11、13-15、14-1、14-2
現在希望通過SQL語句進行排序,並且首先要按照前半部分的數字進行排序,然後再按照後半部分的數字進行排序,輸出要排成這樣:
13-1、13-2、13-3、13-10、13-11、13-15、13-18、13-100、13-108、14-1、14-2

#-前面升序 -後面降序
select * from sort order by str 
#查詢每個-的位置
select instr(str,'-') from sort
#獲取-左邊的值
select CONVERT(left(str,instr(str,'-')-1),SIGNED) from sort

#獲取-右邊的值
select CONVERT(right(str,length(str)-instr(str,'-')),SIGNED) from sort

select * from sort order by CONVERT(left(str,instr(str,'-')-1),SIGNED) asc , CONVERT(right(str,length(str)-instr(str,'-')),SIGNED) desc

分組

關鍵字group by

使用指定欄位進行分組,欄位資料的個數就是分組的個數,這樣在使用聚合函式時只會對相應分組進行聚合操作

在這裡插入圖片描述

聚合函式一般與分組一同使用,但是在進行條件判斷時,如果對於聚合函式進行判斷且存在分組那麼不能使用where進行條件判斷必須使用having(只針對於聚合函式的值的判斷)

在這裡插入圖片描述

where進行篩選與having的區別

WHERE子句:
用來篩選 FROM 子句中指定的操作所產生的行
GROUP BY子句:
用來分組 WHERE 子句的輸出
HAVING子句:
用來從分組的結果中篩選行

多表操作

在進行資料查詢時想查詢並返回多個表的資料的時候使用多表查詢

連線查詢

全連線

在進行多表連線查詢時返回兩表的笛卡爾積,在進行表連線時會將每張表的每一行與另一張表的每一行資料進行連線

注意:使用全連線會造成大量的冗餘資料,所以一般在where語句中進行篩選

不建議使用全連線進行連線查詢,因為全連線進行連線效率不高,因為是首先現將所有資料返回笛卡爾積之後使用where進行篩選

執行步驟為先將所有資料進行連線之後再進行條件篩選

在這裡插入圖片描述

內連線

INNER JOIN

語法:select *from 表1 inner join 表2 on 連線條件

內連線必須書寫on連線條件(如果不寫與全連線結構一致)

與全連線不同的是,內連線是在進行連線時直接將資料進行過濾之後進行返回

在這裡插入圖片描述

外連線

左外連線 (LEFT JOIN)
右外連線 (RIGHT JOIN)

語法:select * from 表1 left[right] join 表2 on連線條件

以左表或右表為準,保留左表或右表全部資料的基礎上進行連線

在這裡插入圖片描述

在這裡插入圖片描述


sql查詢語法總結

select 查詢展示的欄位與函式

from 資料來源(可以是由另一個查詢語句返回的結果作為表)

inner /left/right join 連線查詢

on 連線條件

where 篩選條件

group by 分組欄位

having 分組條件篩選

order by 排序欄位 asc /desc

limit 起始行 ,擷取行

在進行sql查詢語句書寫時

1、明確資料來源連線

查詢展示欄位所在的表

2、篩選條件where

根據需求決定展示資料的行有哪些

3、分組條件

根據需求決定使用分組的欄位(注意分組欄位是以指定欄位的值進行分組)

4、排序與擷取

相關文章