SQL知識點整理(未完待續)

SQL複習

幾個關鍵詞
  1. 主鍵sql

    • 在關係表中,任意兩條記錄不能重複(這裏的不能重複不是指兩條記錄不徹底相同,而是可以經過某個字段惟一區分出不一樣的記錄),這個字段被稱爲主鍵
    • 選取主鍵的一個基本原則是,不使用任何業務相關的字段做爲主鍵,通常把這個字段命名爲id(常見的有自增整數類型,全局惟一GUID類型)
    • 聯合主鍵:經過多個字段惟一標識記錄,兩個或更多的字段都設置爲主鍵,對於聯合主鍵,容許一列有重複,只要不是全部主鍵列都重複便可
  2. 外鍵數據庫

    • 若是一個字段(關鍵字)在一個關係中是主關鍵字,那麼這個關鍵字被稱爲另外一個關係的外鍵,外鍵表示了兩個關係之間的相關關係。數據結構

    • //外鍵約束的名稱fk_class_id能夠任意,FOREIGN KEY(class_id)指定了class_id做爲外鍵,REFERENCES classes(id)指定了這個外鍵將關聯到classes表的id列
      ALTER TABLE students
      ADD CONSTRAINT fk_class_id
      FOREIGN KEY (class_id)
      REFERENCES classes(id)
  3. 索引code

    • 索引是關係數據庫中對某一列或多個列的值進行預排序的數據結構,經過使用索引,可讓數據庫系統沒必要掃描整個表,而是直接定位到符合條件的記錄排序

    • //建立了一個名爲id_score的,使用列score的索引,索引的名稱是任意的,若是索引有多列,能夠在括號裏依次寫上
      ALTER TABLE students
      ADD INDEX id_score(score)/(name,score)
    • 索引的效率取決於索引列的值是否散列索引

    • 索引的優勢是提升了查詢效率,缺點是在插入,更新和刪除記錄時,須要同時修改索引,所以索引越多,速度相對也越慢字符串

    • 對於主鍵,關係數據庫會自動對其建立主鍵索引,使用主鍵索引的效率是最高的,由於主鍵會保證絕對惟一it

查詢數據
  1. 基本查詢class

    • //查詢某個表中的全部行
      //SELECT是關鍵字,表示將要執行一個查詢,*表示全部列,FROM表示將要從哪一個表查詢
      SELECT * FROM students
  2. 條件查詢效率

    • SELECT * FROM students WHERE score>=50
      //通常形式
      SELECT * FROM <表名> WHERE <條件表達式>
    • where關鍵字後面的就是條件,score是列名,該列存儲了學生的成績,score>=50篩選除了指定條件的記錄

    • AND,表示多個條件同時知足

      SELECT * FROM students WHERE score=55 AND gender = 'M'
    • OR,表示只須要知足一個條件

      SELECT * FROM students WHERE score=55 OR gende='M'
    • NOT,表示不符合該條件的記錄

      SELECT * FROM students WHERE NOT score>=55
    • 要組合三個或者更多的條件能夠使用( )來表示

      select * from students where not (score>=80 and  class_id=1)
    • 若是不加括號,條件運算按照NOT,AND,OR的優先級進行,加上括號能夠改變優先級

    • 經常使用的條件表達式

      使用=判斷相等 score=80 name='abc'
      使用>判斷大於	score>80 name>'abc'	字符串比較根據ASCII碼,中文比較根據數據庫設置
      使用>=判斷大於等於 score>=80
      使用<判斷小於	score<80
      使用<=判斷小於等於 score<=80
      使用<>或!=判斷不相等 score <>/!=80
      使用LIKE判斷類似 name LIKE 'ab%' %表示任意字符
  3. 投影查詢

    • SELECT id, score points, name FROM students WHERE gender = 'M';
    • 使用SELECT * 表示查詢表的全部列,使用SELECT 列1,列2,列3,則僅能夠返回指定列,這種操做稱爲投影,select語句能夠對結果集的列進行重命名

  4. 排序

    • 通常查詢結果一般是按照id,也就是主鍵進行排序,若是要根據其餘條件排序,能夠使用ORDER BY關鍵字,默認是從低到高進行排序

      SELECT id, name, gender, score FROM students ORDER BY score
    • 加上DESC關鍵字能夠降序

      SELECT id, name, gender, score FROM students ORDER BY score DESC;
    • 若是排序列有相同的數據須要進一步排序,能夠繼續添加列名

      //先按score列降序,若是有重複的則按照gender進行排序
      SELECT id, name, gender, score FROM students ORDER BY score DESC, gender;
  5. 分頁

    • 分頁其實是從結果集中截取出從第M+1條開始的N條數據

      //M是偏移量,向後移動M位,因此從M+1開始取數據
      SELECT id, name, gender, score FROM students 
      ORDER BY score
      limit N offset M
    • Offset是可選的,默認爲0,limit超出範圍也不會報錯,隨着M愈來愈大查詢效率也會愈來愈低

  6. 聚合查詢

    • 用來統計被查詢數據的數據量

      SELECT COUNT(*) FROM students;
      //也能夠給COUNT(*)設置一個別名
      SELECT COUNT(*) num FROM students;
    • 使用聚合查詢一樣也能加上條件查詢語句

    • AVG、MAX、MIN表示查詢出的數據中的平均值、最大值、最小值

    • 若是聚合查詢的WHERE條件沒有匹配到任何行,COUNT()會返回0,而SUM()AVG()MAX()MIN()會返回NULL

  7. GROUP BY(分組聚合)

    • //查詢每一個class_id對應人數(每一個班級的人數)
      SELECT class_id, COUNT(*) num FROM students GROUP BY class_id;
    • //查詢每一個班級男生女生的人數
      SELECT class_id, gender, COUNT(*) num FROM students GROUP BY class_id, gender;
相關文章
相關標籤/搜索