MySQL入門筆記
MySQ 語法
DataBase和Table
刪掉database
drop database "database名稱"; |
創建 database
create database "database名稱"; |
使用這個 database
use "database名稱"; |
基本的 CRUD
導入數據
source /Users/joe/Downloads/data.sql; |
data.sql
內容:
CREATE TABLE employee( |
查看這個 database 有哪些 table
show tables |
描述 table 有哪些屬性 desc 表格名稱
desc movie; |
查看表格所有數據
select * from employee; |
WHERE 語句過濾
select * from employee where last_name="Clifford"; |
WHERE 兩個條件過濾
select * from employee where last_name="Clifford" and salary=6800; |
新增
INSERT INTO yourTABLEname (column1,column2)VALUES(新增項目 1,新增項目 2);
範例:
INSERT INTO employee (first_name, last_name, title, salary, hire_date) VALUES |
更新
update 語句更新數據(先找到要更改資料,再更改比較不會亂掉)
!!!注意 update from “table 名子”; 是對整個 table 進行操作
update employee set salary=10000,(預更改 coulmn = “更改值”) where title=”Software Architect”;
更新成功
select * from employee where title="Software Architect"; |
刪除
delete 語句刪除數據
!!!注意 delete from “table 名子”; 是對整個 table 進行操作
刪除例句
delet from employee where title ="Software Architect"; |
SQL 字符串相關處理方法
字串拼接 SUBSTRING
字串拼接 CONCAT(“A”,”B”)
select concat(first_name,",",last_name) from employee; |
字串合併取名為 fullname
select concat(first_name,",",last_name) as fullname from employee; |
字串合併 CONCAT_WS CONCAT_WS(“這裡輸入拼接字符串”, first_name, last_name)
select CONCAT_WS("-",first_name,last_name) from employee; |
字串 SUBSTRING
字串 SUBSTRING 可簡寫 SUBSTR
第一個字到第四
select SUBSTRING("Hello Word",1,4); |
從第七個到結束
select SUBSTRING("Hello Word",7); |
從後面數來三個
select SUBSTRING("Hello Word", -3); |
REPLACE,REVERSE and CHAR_LENGTH
字符串取代 REPLACE
select REPLACE(“一段字串”,”想改變的字串”,”改變成甚麼”);
範例:
select REPLACE("Hello World", "World", "MySQL"); |
字符反轉 REVERSE
select REVERSE(“要反轉字串”);
範例:
select REVERSE("Hello World"); |
查看字符串幾個字 CHAR_LENGTH
select CHAR_LENGTH(“字串”);
範例:
select CHAR_LENGTH("Hello World"); |
大小寫轉換 LOWER AND UPPER
字串變大寫 UPPER
select UPPER("Hello MySQL"); |
字串變小寫 LOWER
select LOWER("Hello MySQL"); |
大小寫範例:
select UPPER(first_name) as first_name, UPPER(last_name) as last_name from employee; |
select 結果的進一步處理
order by 對結果進行排序
將資料庫資料依據某項要求排序 order by(默認升序) + desc(降序)
select * from employee order by salary; |
選擇第三個 column 進行排序
select first_name, last_name , salary from employee order by 3; |
先排二在排一
select first_name, last_name , salary from employee order by 2,1; |
LIMIT 限制返回結果進行排序
限制數據返回 + limit 數量
select * from employee limit 5; |
限制 index 幾到幾
select * from employee limit 2,4; |
限制 index 多少到最後一個
select * from employee limit 2,18446744073709551615; |
LIKE 進行字符串搜索過濾
LIKE 模糊字串搜尋 + LIKE “字串加%” , %=甚麼都可
select * from employee where last_name LIKE "C%"; |
select * from employee where last_name LIKE "%n"; |
當知道長度為多少可以變成 + LIKE “____“;
select * from employee where last_name LIKE "____"; |
當要找的字串包含 “%” , “_“加上\
select * from 表格名 where firstname LIKE “%\%\_“;
count 對結果進行比較
計算資料表有多少筆資料 COUNT(* 或其他 column)
select COUNT(*) from employee; |
distinct 統計唯一値
計算這個 column 有幾種 DISTINCT(不同)
select distinct title from employee; |
利用 CONUT 計算
select COUNT(distinct title) from employee; |
GROUP BY 數據整合
select title,count(first_name) from employee group by title; |
MAX 和 MIN 球最大最小值
select max(salary) from employee; |
結合 group by
select title, max(salary) from employee group by title; |
SUM 和 AVG 求和平均值
select sum(salary), avg(salary) from employee; |
使用 max, min, sum, avg 不可這樣寫
select sum(salary), title from employee;
會報錯
HAVING
(✗)select title,count() from employee group by title where title=”Test Engineer;
(◯) select title,count() from employee where title=”Test Engineer group by title;
如果要想在聚合(group by)後過濾,要使用 HAVING
select title,count(*) from employee group by title having title="Test Engineer"; |
DATA TYPE 之數值類型
Numeric Tyoe
1. 整數(絕對值) Integer Types (Exact Value) - INTEGER,INT,SMALLINT,TINYINT,MEDIUMINT,BIGINT
如果要使用到 UNSIGNED 要在新增時加入,莫認為 Signed
範例:
create table test(a TINYINT UNSIGNED , b SMALLINT); |
2. 定點數(小數點後位數固定) Fixed-Point Types(Exact Value) - DECIMAL,NUMERIC
salary DECIMAL(5,2)第一個參數是總共幾位數,第二個參數是指小數點後有幾位,小數點超過會四捨五入
範例: -999.99 ~ 999.99
3. 浮點數(無法精確表示) Floating-Point Types(Approximate Value) - FLOAT(4 bytes),DOUBLE(8 bytes)
float(range,小數點後位數),BIT(M),BIT 由 0 和 1 組成,M can range from 1 to 64。
4. 二進位數位 Bit-Value Type - BIT
範例:
create table test6(a BIT(3)); |
Data and Time Type
1. DATE : “YYYY-MM-DD”
2. TIME : “HH:MM:SS” “12:10”默認為 12 小時 10 分,”14”默認為 14 秒,”1210”默認為 12 分 10 秒
3.YEAR : 4-digit string number in the range 1901 to 2155
4. DATETIME(8bytes) : “YYYY-MM-DD HH:MM:SS”
5. TIMESTAMP(4bytes) : range “1907-01-01 00:00:01”UTC to “2038-01-19 03:14:07”UTC 依照時區改變,會隨著現在時間變化,可用來記錄資料修改時間,可更改 TIMEZONE。
此時間是幾號
select DAYOFMONYH(參數) from tablename; |
此時間是星期幾
select DAYOFWEEK(參數) from tablename; |
此時間是此年第幾天
select DAYOFYEAR(參數) from tablename; |
此時間是幾月
select MONTHNAME(b) from demo; |
現在日期
select CURDATE(); |
現在時間
select CURTIME(); |
現在日期+時間
select NOW(); |
小練習:
select CONCAT(first_name," ",last_name,"was hired on",DATE_FORMAT(hire_date,"%D %M %Y")) as title from employee; |
String Type
1. CHAR and VARCHAR
VAR(可變的)
CHAR length string(0~255)
char 的 storage 是固定的,bytes 是固定的
VARCHAR variable-length strings(0~65535)
varchar 的 storage 是可變的,字符也算一個 bytes
2. BINARY and VARBINARY
3. BLOB and TEXT
通常用來存取大文檔,要排序大文檔通常比較費時,可通過
set max_sort_length = 2000; |
更改 sql 最大文字長度。
4. ENUM
選擇的數據類型
範例:
CREATE TABLE shirt( |
插入時可直接打索引值,速度比 varchar 快。
5. SET
最多八個 column(2 的 8 次方)
修改數據類型,使用 ALTER
create table user(username VARCHAR(10), password VARCHAR(20)); |
SQL 邏輯操作符
Equal 和 NOT Equal 等於不等於
--Equal範例 |
LIKE 和 NOT LIKE
--LIKE範例 |
Greate Than 和 Less Than 大於小於
--" > "可用運算符號替換 |
AND 和 OR
--AND範例,條件同時符合 |
BETWEEN
尋找一個 range 之間
--尋找薪水在6000到8000之間 |
IN 和 NOT IN
比較精確地找尋
select * from employee where salary in (5000,6000,7000,8000); |
CASE Statement
|
MySQL 內建函數
1. 字符函數
字串拼接:CONCAT(),CONCAT_WS。
字串大小寫:UPPER(),LOWER()。
從左右邊數來:LEFT(),RIGHT()。
字串長度:LENGTH()。
去除特定字符:LTRIM(),RTRIM(),TRIM()
字串替換:REPLACE()
獲取特定字串:SUBSTRING(特定字串,起,尾,)
2. 數值函數
無條件進位和捨去:CEIL(),FIOOR()
除數跟餘數:DIV(),MOD()
平方:POW()
四捨五入:ROUND()
3. 日期時間函數
當前時間:NOE(),CURDATE(),CURTIMEE()
格式化時間:DATE_FORNAT()
日期增加減少:DASTE_ADD()
時間差:DATEDIFF(第一個時間,第二個時間)
4. 訊息函數
獲取當前進程 ID:CONNECTION_ID()
當前 DATABASE 名稱:DATABASE()
最後一次生成的 ID:LAST_INSERT_ID()
當前用戶:USER()
當前版本:VERSION()
5. 聚合函數
平均值 AVG()
計数 COUNT()
最大值 MAX()
最小值 MIN()
求和 SUM()
6. 加密函數
更改密碼:PASSWORD()
存取密碼如果資料密要加密時用:MD5()
RELATIONSHIP 之 ONE TO MANY(一對多)
先新增兩個 table
CREATE TABLE customers( |
使用 id 連結兩個 table
select * from orders where customer_id = (select id from customers where email="roj@gmail.com"); |
使用 Foreign Key 約束關聯
CREATE TABLE customers( |
Inner Join 結合兩張 table
取 table 重複部分
select * from customers inner join orders where customers.id=orders.customer_id; |
ieft join
過濾條件式寫在 ON 後面,代表是先針對連結前的指定資料表進行過濾
過濾條件寫在 WHERE 後面,代表是對連結後取得的資料集合再進行過濾
--取得自己以及重複部分 |
rigth join
left join 的相反邊
ON DELETE
刪除被 FOREIGN KEY 約束的資料
--刪除使用者資料,會連帶買的商品一起刪除 |
補充
--兩種方法取小數點後精度 |
RELATIONSHIP 之 MANY to MANY(多對多)
|
練習題
找出評論者,評論分數最小,最大,平均,次數,如果次數等於 0 設為 INACTIVE,大於 0 設為 ACTIVE
--case語句也能用if判斷式 |