天天看點

MYSQL相關之不常見變量、排序函數、JDBC資料庫與Java連接配接

作者:老馬帶你學程式設計

本文源自Recently祝祝,創自Recently祝祝。轉載請标注出處

MYSQL相關之不常見變量、排序函數、JDBC資料庫與Java連接配接

1.MYSQL變量分兩類

使用者自定義變量

  1. 局部變量--->隻在目前begin/end代碼塊中有效
sql複制代碼create procedure add
 (
    in a int,
    in b int
)
 begin
    declare c int default 0;
    set c = a + b;
    select c as c;
end;
           
MYSQL相關之不常見變量、排序函數、JDBC資料庫與Java連接配接

2.使用者變量--->在用戶端連結到資料庫執行個體整個過程中使用者變量都是有效的。

系統變量

  1. 會話變量-->會話變量的作用域與使用者變量一樣,僅限于目前連接配接。當目前連接配接斷開後,其設定的所有會話變量均失效。@@session.變量名 或者@@local.變量名

4.全局變量-->全局變量影響伺服器整體操作。@@global.變量名

DEMO解釋排序函數

按員工底薪排序并且标明順序。 按照執行個體模仿,可以學會排序函數的使用方式。執行個體下邊也進行了解釋。Oracle中存在row_number,rank,dense_rank函數,而Mysql中需要模仿處理,下邊執行個體都是在Mysql中進行實作的。

DEMO1:

sql複制代碼-- 排序函數
-- row_number,rank,dense_rank
USE mytest;
           

row_number row_number簡寫rn,可以根據需求進行命名 使用名為“@rn”的變量來跟蹤行号。我們使用子查詢 (SELECT @rn := 0) 将其初始化為 0,然後使用表達式“@rn := @rn + 1”為每一行将其遞增 1。

sql複制代碼-- row_number
SELECT empno,ename,sal,@rn:=@rn+1 rn
FROM emp,(SELECT @rn:=0)t1
ORDER BY sal DESC;
           
MYSQL相關之不常見變量、排序函數、JDBC資料庫與Java連接配接

Demo2:

dense_rank dense_rank就是除了使用row_number-》rn,還使用了一個rank變量,rank就是下邊執行個體中的sal.

sql複制代碼-- dense_rank
SELECT empno,ename,sal,
IF(@sal=sal,@rn,@rn:=@rn+1) rn,
@sal:=sal 
FROM emp,(SELECT @rn:=0,@sal:=0) t1
ORDER BY sal DESC;
           

檢索“emp”表中所有員工的員工編号 (empno)、員工姓名 (ename) 和薪水 (sal),同時還按降序為每一行生成行号 (rn)的薪水。查詢使用變量 (@rn) 來跟蹤行号。在執行主查詢之前,該變量在子查詢 (t1) 中被初始化為 0。

MYSQL相關之不常見變量、排序函數、JDBC資料庫與Java連接配接

DEMO3:

-- rank

sql複制代碼-- rank

 SELECT empno,ename,sal,@r:=@r+1,
 IF(@sal=sal,@rn,@rn:=@r) rn, @sal:=sal
 FROM emp,(SELECT @rn:=0, @r:=0,@sal:=0) t1 ORDER BY sal DESC;

           

使用變量模拟 MySQL 中 ROW_NUMBER() 函數的行為。

  1. “@rn”變量用于跟蹤行号。
  2. “@r”變量用于跟蹤排名。
  3. “@sal”變量用于跟蹤以前的薪水值。
  4. 子查詢将所有變量初始化為 0。
  5. SELECT 語句檢索員工編号、姓名、薪水,并生成行号和級别。
  6. “@r”變量每行遞增 1。
  7. IF() 函數檢查目前薪水值是否與以前的薪水值相同。如果它們相同,則“@rn”變量用作目前行的排名。如果它們不同,則使用“@r”變量作為目前行的排名,并将“@rn”變量設定為“@r”的值。
  8. “@sal”變量用目前薪水值更新,以便在下一行進行比較。
  9. 結果集按薪水降序排列。

DEMO4:

sql複制代碼-- 将員工的資訊,按照部門和底薪排序,并标明順序
SELECT empno,ename,deptno,sal,
IF(@sal=sal,@rn,@rn:=@rn+1),
IF(@deptno=deptno,@rn,@rn:=1) rn,
@deptno:=deptno,
@sal:=sal
FROM emp,(SELECT @rn:=0,@sal:=0,@deptno:=0) t1
ORDER BY deptno,sal DESC;
           

檢索“emp”表中所有員工的員工編号 (empno)、員工姓名 (ename) 和薪水 (sal),同時還按降序為每一行生成行号 (rn)的薪水。

此外,它檢查目前行的薪水是否與上一行的薪水相同,如果是,則為目前行配置設定與上一行相同的行号。使用三個變量(@rn、@r 和@sal)來跟蹤行号、基于薪水的行排名以及之前的薪水值。

在執行主查詢之前,變量在子查詢 (t1) 中被初始化為 0。主查詢首先為每一行遞增 @r 變量以生成基于薪水的排名。然後它使用 IF 語句将目前薪水 (@sal) 與以前的薪水值進行比較。

如果它們相同,則為目前行配置設定與前一行相同的行号(@rn);否則,它使用@r 變量配置設定一個新的行号(@rn)。最後,它用目前行的薪水更新@sal 變量,以便在下一行進行比較。 ORDER BY 子句按薪水的降序對結果集進行排序。

MYSQL相關之不常見變量、排序函數、JDBC資料庫與Java連接配接

JDBC資料庫與Java連接配接

概述: JDBC是Java通路資料庫的标準規範,可以為不同的關系型資料庫提供統一通路,它由一組用Java語言編寫的接口和類組成。

MYSQL相關之不常見變量、排序函數、JDBC資料庫與Java連接配接

JDBC規範(掌握四個核心對象):

  • DriverManager:用于注冊驅動
  • Connection: 表示與資料庫建立的連接配接
  • Statement: 操作資料庫sql語句的對象
  • ResultSet: 結果集或一張虛拟表

JDBC連接配接資料庫基礎六部

第一步:注冊驅動 Class.forName("com.mysql.jdbc.Driver");

第二步:建立連接配接 這一步注意修改資料庫名稱以及密碼,和資料庫位址 conn=DriverManager.getConnection("jdbc:mysql://localhost/test1","root","123456");

第三步:建立Statement對象 st=conn.createStatement();

end》》》

智者見智,仁者見仁,一個好的價值觀念會讓你懂得許多,學會更多,得到很多

繼續閱讀