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