主鍵自增差別:
【Oracle】
create table mytable
(
id int primary key, -- 主鍵,唯一,不能重複,必填,不能不填寫
name varchar(20),
money float
);
-- 使用序列讓主鍵自增
-- 建立序列
create sequence myseq; --從0開始 每次加1
--使用序列
insert into mytable(id,name,money) values(myseq.nextval,'jack',10);
【Mysql】
設定自動遞增 ---- AUTO_INCREMENT
分組語句差別:
【Oracle】
-- 工資最高 當聚合函數與真實列同時存在時,必須對真實列進行分組
SELECT ENAME, MAX(SAL) FROM EMP
GROUP BY ENAME; --分組
-- 工資最低 當聚合函數與真實列同時存在時,必須對真實列進行分組
SELECT ENAME,MIN(SAL) FROM EMP
GROUP BY ENAME;
-- 每種職位的最高薪資是多少
SELECT DISTINCT JOB,MAX(SAL) 最高薪資 FROM EMP
WHERE JOB IS NOT NULL
GROUP BY JOB;
-- 每種職位的人數
SELECT JOB,COUNT(EMPNO) FROM EMP
GROUP BY JOB;
GROUP BY注意事項:
1、當聚合函數與真實列同時存在時,必須對真實列進行分組
2、GROUP BY後面寫的的列的名字必須和查詢真實列的名字,一模一樣
3、除了查詢的列,還可以寫其他真實列
4、會将GROUP BY後面寫的列的内容組合在一起進行判斷,如果内容一樣則判定為同組,如果不一樣分組
5、GROUP BY 寫在WHERE後面
having
-- 每個部門員勞工數 超過5 HAVING 即可對真實列進行條件篩選,也可以對僞列進行篩選
SELECT DEPTNO ,COUNT(*) C FROM EMP
GROUP BY DEPTNO
HAVING COUNT(*) > 5 AND DEPTNO = 30;
【Mysql】
MySQL沒有此限制,會自動取第一行。
分頁的差別:
【Oracle】
oracle使用rownum僞列
-- 優化後的SQL語句
SELECT * FROM (SELECT E.*,ROWNUM RW FROM EMP E WHERE ROWNUM <= 10) MYEMP
WHERE MYEMP.RW >= 5
注意rownum不能使用> >= =;
【Mysql】
Mysql使用limit關鍵字
select * from table limit 5;--擷取前5條資料
select * from table limit index,psize;--index 頁數 psize--每頁顯示條數
MyBatis動态sql中#和$的差別
1.#和$兩者含義不同
(1)#會把傳入的資料都當成一個字元串來處理,會在傳入的資料上面加一個雙引号來處理。
(2)$則是把傳入的資料直接顯示在sql語句中,不會添加雙引号。
2.兩者的實作方式不同
(1) $作用相等于是字元串拼接
(2) #作用相當于變量值替換
3、#和$使用場景不同
(1) 在sql語句中,如果要接收傳遞過來的變量的值的話,必須使用#。因為使用#是通過PreparedStement接口來操作,可以防止sql注入,并且在多次執行sql語句時可以提高效率。
(2) $隻是簡單的字元串拼接而已,是以要特别小心sql注入問題。對于sql語句中非變量部分,那就可以使用$,比如$方式一般用于傳入資料庫對象(如傳入表名)。