本文源自Recently祝祝,創自Recently祝祝。轉載請标注出處
1.MYSQL變量分兩類
使用者自定義變量
- 局部變量--->隻在目前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;
2.使用者變量--->在用戶端連結到資料庫執行個體整個過程中使用者變量都是有效的。
系統變量
- 會話變量-->會話變量的作用域與使用者變量一樣,僅限于目前連接配接。當目前連接配接斷開後,其設定的所有會話變量均失效。@@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;
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。
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() 函數的行為。
- “@rn”變量用于跟蹤行号。
- “@r”變量用于跟蹤排名。
- “@sal”變量用于跟蹤以前的薪水值。
- 子查詢将所有變量初始化為 0。
- SELECT 語句檢索員工編号、姓名、薪水,并生成行号和級别。
- “@r”變量每行遞增 1。
- IF() 函數檢查目前薪水值是否與以前的薪水值相同。如果它們相同,則“@rn”變量用作目前行的排名。如果它們不同,則使用“@r”變量作為目前行的排名,并将“@rn”變量設定為“@r”的值。
- “@sal”變量用目前薪水值更新,以便在下一行進行比較。
- 結果集按薪水降序排列。
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 子句按薪水的降序對結果集進行排序。
JDBC資料庫與Java連接配接
概述: JDBC是Java通路資料庫的标準規範,可以為不同的關系型資料庫提供統一通路,它由一組用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》》》
智者見智,仁者見仁,一個好的價值觀念會讓你懂得許多,學會更多,得到很多