# SQL I 資料庫 --- ### i think you have gotten know what is that in vacational high school ![](https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRr0uQGQtDMqGmV38uo4hKKgHN7oA26i0f9sQ&usqp=CAU) ##### HAHA but ...let,s review it ---- ### All right What is SQL > **S**tructure **Q**uery **L**anguage 是一種特定目的程式語言,用於管理關聯式資料庫管理系統(RDBMS),或在關係流資料管理系統(RDSMS)中進行流處理。 (當然還有另一種東西叫NoSQL) [指令參考](https://blog.xuite.net/towns/hc/65849335-MySQL+%E6%8C%87%E4%BB%A4%E3%80%81%E8%AA%9E%E6%B3%95%E5%8F%8A%E7%AE%A1%E7%90%86) ##### So in summary SQL used for DB(DataBase) ---- ### DB(DataBase) broad sense: that mean the place where we store data narrow sense: DB is set of a group of common data Application Example: phone contact(if we didn,t set up of our DB ) --- ### benefit of DB - 1. Redundancy - 2. Consistency - 3. Data Sharing - 4. Data Indepence - 5. Integrity - 6. Reduce Paper - 7. Security ---- ### What are you waiting for Just Download [SQlite Studio](https://sqlitestudio.pl/) ---- ### Yah! introduce DB [延伸閱讀](https://ithelp.ithome.com.tw/articles/10206222) ![](https://static.coderbridge.com/img/kdchang/996f9e8d3c734406b63b595e6f500b3c.png) DT稍後介紹(先知道DB 有很多的DT) ---- ### DataTable 資料庫的儲存方式長的很像Excel ![](https://i.imgur.com/Tf2g1YL.png) ---- 橫看Row 直看Col ![](https://i.imgur.com/Tf2g1YL.png) --- ### DataBase 結構 Bit -> Byte -> Field -> Record -> Table -> Data Base ![](https://i.imgur.com/JVfFPFG.png) 主要要知道 1. 一個DB Server 可以有很多DataBase(資料庫) 2. 一個DataBase 可以有很多 Datatable(資料表) 3. 一個Datatable 可以有很多 Record(資料紀錄) 4. 一個Record 可以有很多Field/Column(資料欄位) ---- ### DB VS DBMS ##### DataBase vs DataBase Management System ![](https://i.imgur.com/VxZINt4.png) what DBMS is you know? --- ### Download Example [Example連結](https://drive.google.com/file/d/1SyAbFDa0uA4ek1XuLW8bbZHYbgSU4pZz/view?usp=sharing) 開啟SQLite Studio 並且匯入這個SQL檔案 ---- ### You will see Database name and what datatables it involve --- ### 傳說中資料庫有四種基礎命令 也就是SUID Select Update Insert Delete 選擇 更新 插入 刪除 概念跟CRUD一樣 ---- ### Select 查詢 ```sql= SELECT * FROM `Class`; ``` "* 為所謂的萬用字元 也就是全部的意思" 那語法總得來說就是 ```sql= SELECT * FROM `資料表`; ``` ---- 當然我們也可以不一定要Show出全部的Columns(欄位) 也能一次抓多欄/單欄 ```sql= SELECT (`Class_name`) FROM `Class`; --單欄 Class_name SELECT (`Class_name`,`Class_id`) FROM `Class`; --多欄 Class_id ``` 稍微進階的查詢Query我們可以像程式語言一樣加入查詢條件,但... ---- 不是If 是Where 來個範例吧 ```sql= SELECT * FROM `Class` WHERE `Class_name` = "四資管二A"; ``` 你會發現語法是WHERE [condition] ---- ### Insert 插入 ```sql= INSERT INTO `Class` (`Class_name`,`Class_id`) VALUES ("四企管二A","4"); INSERT INTO `Class` VALUES ("四企管二A","4");--插入全欄位值 且Value插入順序正確可忽略欄位名稱 INSERT INTO `資料表` (`欄位1`,`欄位2`,...) VALUES ("Value1","Value2",...); ``` 做完之後 Class 資料表就多了一個 四企管二A了 ---- ### Update 更新 ```sql= UPDATE `Class` SET `Class_name`="四企管二Z" WHERE `Class_name` = "四企管二A"; UPDATE `資料表` SET `欄位名稱1`=`欄位值1`,`欄位名稱2`=`欄位值2`... [WHERE {條件式}] ``` 四企管二A 變成 四企管二Z 了XD ---- ### Delete 刪除 ```sql= DELETE FROM `Class` WHERE `Class_name`="四企管二Z"; DELETE FROM `資料表` WHERE 條件式; ``` 企管88 --- ### 玩了這麼多 我提供的資料庫是時候自己創建了 ---- ### Create 創建資料表\資料庫 還記得這張圖嗎 ![](https://i.imgur.com/JVfFPFG.png) 所以我們必須把最外層的DB建立起來 ```sql= CREATE DATABASE [database_name]; ``` ---- 同樣 建立一張DT ```sql= CREATE DATATABLE [datatable_name]( col1 datatype, col2 datatype, col3 datatype, ); --====== CREATE TABLE customers ( C_Id INT, Name varchar(50), Address varchar(255), Phone varchar(20) ); ``` ---- ### ALTER 修改資料表 #### 增加欄位 ```sql= ALTER TABLE table_name ADD column_name datatype; ``` ##### 更改資料欄位型別(沒錯ALTER 再ALTER) ```sql= ALTER TABLE table_name ALTER COLUMN column_name datatype; ``` ##### 刪除欄位 (DROP COLUMN) ```sql= ALTER TABLE table_name DROP COLUMN column_name; ``` ---- ### DROP 刪除資料表 ##### 刪除資料表 (DROP TABLE) 完全刪除整個資料表。 ##### DROP TABLE table_name; 僅刪除資料表內容,但保留結構 (TRUNCATE TABLE) ```sql= TRUNCATE TABLE table_name; ``` 資料表還在,只是資料清空了。 ##### 刪除資料庫 (DROP DATABASE) ```sql= DROP DATABASE database_name; ``` --- ### 蝦 指令超多? 這只是皮毛 接下來講講限制 資料庫限制 SQL Consraints 有六個類別 通常是拿來限制 欄位可/不可 更動或新增的條件 1. NOT NULL 非空值限制 2. UNIQUE 唯一限制 3. PRIMARY KEY 主鍵限制 4. FOREIGN KEY 外鍵限制 5. CHECK 檢查限制 6. DEFAULT 預設值限制 ---- ### 情境 顧客資料表 由於不能有顧客的編號(ID)為空值 我們會再設計DT的時候添加 NOT NULL ```sql= CREATE TABLE customer ( C_Id INT NOT NULL, Name VARCHAR(50) NOT NULL, Address VARCHAR(255), Phone VARCHAR(20) ); ``` ---- ### 承上題情境 由於顧客編號(ID)不能有重複的 為了避免衝突 我們也可以加入UNIQUE ```sql= CREATE TABLE customer ( C_Id INT NOT NULL UNIQUE, Name VARCHAR(50) NOT NULL, Address VARCHAR(255), Phone VARCHAR(20) ); --OR CREATE TABLE customer ( C_Id INT NOT NULL, Name VARCHAR(50) NOT NULL, Address VARCHAR(255), Phone VARCHAR(20), UNIQUE (C_Id) ); ``` --- ### 關聯(Relation) --- ### 指令變化 資料庫有很多廠商 基本上都遵循ISO的SQL標準但是各家的指令與語法還是會有差別(每個DB怎麼操作 有時候需要特別去查) --- ### 雖然SQL指令百百種 但是... 師父領進門修行靠個人 [Link](https://www.hackerrank.com/domains/sql?filters%5B.%28%29%5D%5B%5D=select&filters%5Bsubdomains%5D%5B%5D=join) ---- ### 希望各位都理解拉
{"metaMigratedAt":"2023-06-16T19:19:49.596Z","metaMigratedFrom":"YAML","title":"SQL I 資料庫","breaks":true,"contributors":"[{\"id\":\"4c8f8799-9dcd-430b-b7bc-8a5156d39d0b\",\"add\":5055,\"del\":95}]"}
    90 views