「SQL雜記」修訂間的差異

出自Tan Kian-ting的維基
跳至導覽 跳至搜尋
行 1: 行 1:
{{Nav|程式語言、邏輯學}}
{{Nav|程式語言、邏輯學}}
==SQL Pocket Guide的一些記錄==
==SQL Pocket Guide的一些記錄==
===Ch1. 概論-Ch4===
===Ch1-Ch4===


*SQL分成:
*SQL分成:
行 51: 行 51:
*句子sentence、子句clause
*句子sentence、子句clause


select database.table.id from database.table altername
select id, ... , (select avg(population) from county ) as average.pop ... #子查詢subquery
如果子查詢和外部表格欄位關聯,則應用join,以提升效能。
select o.id, o.name,
count(o.is) as num_waterfalls,
from owner o left join waterfalls w,  o 為別名
on o.id = w.owner_id
group by o.id, o.name
select all x,y from ... where...


  select id, name from 學生清單;
  select id, name from 學生清單;

於 2023年12月31日 (日) 23:46 的修訂

SQL Pocket Guide的一些記錄

Ch1-Ch4

  • SQL分成:
    • Microsoft SQL
    • MySQL
    • Oracle Database
    • PostgreSQL
    • SQLite
  • 另有ANSI SQL這個標準
Select * from 表格名稱;
select... comment
from ..
where...
having...
group by 

口訣:sweaty feet wll give hirroble odors

執行順序:

  1. from 取得所有資料
  2. where 過濾資料
  3. group by 組群於類間
  4. having 過濾群
  5. select 選擇欄
  6. order by 排序結果


欄位、foreign key(FK)、一對多、一對一等、primary key (PK)

有些程式語言提供library操作SQL資料庫

資料庫瀏覽

  • DBBrowser for sqlite
  • pgadmin
CREATE DATABASE my_db; 建立資料庫

連結既有資料庫:

  • host
  • port
  • database
  • username
  • password

帳密和程式碼要分開儲放。

  • 函數、identifier、alias
  • 句子sentence、子句clause
select database.table.id from database.table altername

select id, ... , (select avg(population) from county ) as average.pop ... #子查詢subquery

如果子查詢和外部表格欄位關聯,則應用join,以提升效能。

select o.id, o.name,
count(o.is) as num_waterfalls,
from owner o left join waterfalls w,  o 為別名
on o.id = w.owner_id
group by o.id, o.name


select all x,y from ... where...
select id, name from 學生清單;
select * from student;
select name, round(age * 0.9) from student;
select name, age as foo from tab.col 點號.避免重名

Ch5. 增刪更檔案

  • 下列語法以PostgreSQL為準
  • database object 是存資料的資料庫物件
  • datamodel是綱要,schema是其實作
  • 檢視現有資料庫
 \l
  • 檢視目前使用之資料庫:
 select current_database;
  • 刪除資料庫
drop database my_db;

匯出 Firefox 瀏覽紀錄

開啟 profile 設定檔的資料夾,先 sqlite3 places.sqlite,進入 sqlite 命令模式:

輸入:

sqlite> .headers on
sqlite> .mode csv
sqlite> .output selected_data.csv
sqlite> SELECT datetime(moz_historyvisits.visit_date/1000000,'unixepoch'), moz_places.url, moz_places.title FROM moz_places, moz_historyvisits WHERE moz_places.id = moz_historyvisits.place_id ; 
sqlite> .quit

導出到 selected_data.csv[1][2]

引用