Java 學習記錄111 — Querying Data With SQL

張小雄
4 min readJan 27, 2022

--

https://www.udemy.com/course/java-the-complete-java-developer-course/learn/lecture/6060828#questions

老師在本課放了個檔案是一個資料庫,下載之後用 sqlite3 開啟

輸入:sqlite3 music.db

輸出:

SQLite version 3.37.2 2022–01–06 13:25:41

Enter “.help” for usage hints

輸入:.schema

輸出:

CREATE TABLE songs (_id INTEGER PRIMARY KEY, track INTEGER, title TEXT NOT NULL, album INTEGER);

CREATE TABLE albums (_id INTEGER PRIMARY KEY, name TEXT NOT NULL, artist INTEGER);

CREATE TABLE artists (_id INTEGER PRIMARY KEY, name TEXT NOT NULL);

Tim 老師說,第一欄有加下底線,是因為有些 Java classes 跟資料庫連結的時候需要,他認為這樣做是一個好習慣

小挑戰:查詢 album 367 的 name

輸入:SELECT name from albums where _id=367;

輸出:

Permanent Vacation

輸入:.headers on

輸出:無(把欄位名稱顯示出來)

輸入: SELECT name from albums where _id=367;

輸出:

name

Permanent Vacation

剛剛沒有 name 現在有了

輸入:.backup music-backup1

輸出:無(接下來要更新內容了,先備份)

輸入:.schema

輸出:

CREATE TABLE songs (_id INTEGER PRIMARY KEY, track INTEGER, title TEXT NOT NULL, album INTEGER);

CREATE TABLE albums (_id INTEGER PRIMARY KEY, name TEXT NOT NULL, artist INTEGER);

CREATE TABLE artists (_id INTEGER PRIMARY KEY, name TEXT NOT NULL);

Tim 老師補充:

PRIMARY KEY 就是作為 index,可以大幅提昇查詢跟 join 的速度(join 就是把表合併)

ralational database is that ordering of the row is undefined 非常像是 Java 的 Map 跟 Set

資料庫的理論就是從 Set 的理論上建立出來的

一張表可以有很多 key 但 PRIMARY KEY 只能有一個,通常就是作為 ID

若那張表沒有ID欄位也可以選其他欄位來使用 PRIMARY KEY,最重要的就是必須是唯一

輸入:INSERT INTO artists VALUES(201,"Beyonce");

輸出:

Error: stepping, UNIQUE constraint failed: artists._id (19)

因為 201 已經有了且只能有一個,所以就報錯

輸入:INSERT INTO artists (name) VALUES("Beyonce");

輸出:無

當欄位設定是 NOT NULL 那新增資料的時候就一定要有值

輸入:SELECT * from artists;

輸出:

1|Mahogany Rush

2|Elf

3|Mehitabel

(略刪)

201|Chemical Brothers

202|Beyonce

PRIMARY KEY 也是一定會有值,因為會影響到排序

但沒輸入的話,系統會自動幫你新增

輸入:INSERT INTO artists (_id) VALUES(203);

輸出:

Error: stepping, NOT NULL constraint failed: artists.name (19)

名子是 NOT NULL ,沒填就直接報錯

--

--