写SQL语句需要注意的点
生活随笔
收集整理的這篇文章主要介紹了
写SQL语句需要注意的点
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
先回憶一下DDL和DML
創建表DDL
create table t_xx(id int auto_increment primary key, name char(10),...) create table t_student( id int auto_increment primary key , name char(10), 外鍵id int, foreign key(外鍵id) references 外表t_class(外表id字段名) );插入數據DML
insert into t_xx(f_1, f_2, f_3,.....) values(v_1, v_2, v_3....), --可省略字段名 (v_1, v_2, v_3....),(......);更新數據DML
updata t_xx set f_xx = 新值 where f_xx = 舊值;連接
- INNER JOIN 兩邊表同時有對應的數據,即任何一邊缺失數據就不顯示。
- LEFT JOIN 會讀取左邊數據表的全部數據,即便右邊表無對應數據。
- RIGHT JOIN 會讀取右邊數據表的全部數據,即便左邊表無對應數據。
連接時的on和where
注意on與where有什么區別,兩個表連接時用on,在使用left jion時,on和where條件的區別如下:
- on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄。
- where條件是在臨時表生成好后,再對臨時表進行過濾的條件。這時已經沒有left join的含義(必須返回左邊表的記錄)了,條件不為真的就全部過濾掉。
分組group by時having和where的區別
- WHERE語句在GROUP BY語句之前;SQL會在分組之前計算WHERE語句。
- HAVING語句在GROUP BY語句之后;SQL會在分組之后計算HAVING語句。
- 由于COUNT()函數不可用于WHERE語句中,但可以在HAVING后面用
distinct和group by 比較性能
- 在不同記錄數較小時(重復的數據大),count group by性能普遍高于count distinct,尤其對于text類型表現的更明顯。
- 在不同記錄數較大的場景(重復數據小),count group by性能反而低于直接count distinct。
tips:具體可訪問查看https://www.jianshu.com/p/34800d06f63d
SQL集合運算之差、并、交
- EXPECT 集合差運算, 可代替not in 或者in
- UNION 集合并運算,可選參數 ALL,重復的數據也顯示 可代替or
- INTERSECT 集合交運算,返回兩個查詢檢索出的共有行
舉例:查出不是部門經理的普通員工編號
SELECT emp_no FROM employees EXCEPT --左減右 SELECT emp_no FROM dept_manager; -- 上面代替下面,上面會用索引,下面不用索引 SELECT emp_no FROM employees WHERE emp_no NOT IN (SELECT emp_no FROM dept_manager)總結
以上是生活随笔為你收集整理的写SQL语句需要注意的点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BigDecimal的异常记录:java
- 下一篇: mysql 检查_检查MySQL的健康状