日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

写SQL语句需要注意的点

發布時間:2024/7/23 数据库 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 写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语句需要注意的点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。