零基礎學SQL、MySQL以及Workbench筆記

上班之餘,花了兩周時間學了下SQL、MySQL以及Workbench,算是初步入門。周末邊刷著烈火如歌,邊寫了篇整理筆記,方便日後查看學習~

——SQL學習記錄——

SQL: Structured Query Language。結構化查詢語言。

相關學習借鑒資料:《SQL必知必會》,知乎,w3cschool,我要自學網

MySQL安裝:MySQL資料庫5.7.20的下載與安裝

Workbench安裝:MySQL Workbench使用方法總結

語法規則:

SQL不區分大小寫,通常做法是用大寫編寫所有SQL命令。

在SQL中,會忽略空格和換行。

一個SQL語句可以放在一個或多個文本行上。另外,多個SQL語句可以組合在一個文本行上。

SQL常用語句:Select,insert,update,delete,show等。

  • SHOW語句

SHOW DATABASES(列出伺服器管理的資料庫)SHOW TABLES (顯示當前選定的資料庫中的所有表)SHOW columns FROM customers (顯示「customers」表中的列)

  • SELECT語句(劃重點劃重點)

SELECT column_1, column_2, column_3 FROM table1;(從table1表中,選取3列數據)SELECT * FROM table1; (*通配符,表示所有。選取table1表中的所有列)SELECT DISTINCT column_1, column_2 FROM table1;(distinct用於返回唯一值,去掉重複記錄)SELECT * FROM table1 LIMIT 6; (limit限定子集範圍。選取table1表中前6條記錄)SELECT * FROM table1 LIMIT 2, 10; (選取table1表中從第3條開始的前10個結果)SELECT table1. column_1 FROM table1;(列名前提供表名,用點分隔。完全限定名稱)SELECT * FROM table1 ORDER BY column_1;(order by關鍵字默認按升序ASC排序)SELECT * FROM table1 ORDER BY column_1 DESC;(按DESC降序排序)SELECT * FROM table1 ORDER BY column_1, column_2;(多列排序,先按列1,再按列2)SELECT * FROM customers WHERE ID=6;(從customers表中選擇ID為6的記錄)SELECT * FROM customers WHERE ID BETWEEN 2 AND 6;(選取ID介於2和6之間的記錄)SELECT * FROM customers WHERE ID IN(3,4,6);(選取ID為3,4,6的記錄)SELECT * FROM customers WHERE City=』London』;(單引號環繞文本值,選取London相關的記錄)SELECT * FROM customers WHERE City=』London』AND state=』CA』;(AND語句)SELECT * FROM customers WHERE City=』London』AND (Age=25 OR Age=28);(結合AND和OR)SELECT ID, Salary+500 AS Salary FROM employees; (算術運算符+,為員工工資加500)SELECT CONCAT (FirstName,』,』,City)FROM customers;(concat()函數用於連接兩個或多個文本值,並返回連接字元串。把FirstName與City連接起來,用逗號分隔) 執行輸出結果: CONCAT (FirstName,』,』,City) John, New YorkSELECT CONCAT (FirstName,』,』,City) AS new_column FROM customers; (AS關鍵字為列自定義名稱) 執行輸出結果: new_column John, New York

  • LIKE操作符

LIKE操作符用於在WHERE子句中搜索列中的指定模式。SQL模式允許使用「_」匹配任何單個字元,而使用「%」匹配任意數目字元(包括零個字元)。案例:選擇FirstName以字母「D」開頭的所有員工:SELECT * FROM employees WHERE FirstName LIKE 『D%』;案例:選擇LastName以字母「s」結尾的所有員工:SELECT * FROM employees WHERE LastName LIKE 『%s』;

  • 函數

UPPER()函數:將指定字元串中的所有字母轉換為大寫。(Smith>>SMITH)LOWER()函數:將指定字元串中的所有字母轉換為小寫。(Smith>>smith)案例:SELECT FirstName, UPPER(LastName) AS LastName FROM employees;SQRT():平方根。 AVG():平均值。 SUM():求和。 MIN():最小值。案例:SELECT Salary, SQRT(Salary) FROM employees;

子查詢:當一個查詢是另一個查詢的條件時,稱之為子查詢。

例子: SELECT * FROM items WHERE cost>500 ORDER BY cost DESC;

SELECT Salary FROM employees WHERE Salary > (SELECT AVG(Salary) FROM employees);

表連接:組合來自兩個或對個表的數據。表連接創建一個臨時表,顯示連接表中的數據。

案例:連接 customers表和orders表

SELECT customers.ID, customers.Name, orders.Name, orders.Amount FROM customers, orders WHERE customers.ID=orders.Customer_ID ORDER BY customers.ID;

自定義別名:AS

SELECT ct. ID, ct. Name, ord. Name, ord. Amount FROM customers AS ct, orders AS ord WHERE ct. ID=ord. Customer_ID ORDER BY customers.ID;

  • 連接

JOIN操作符:橫向連接。又分內連接和外連接。

案例:有三個表如下:

內連接:SELECT * FROM user_1, user_2 WHERE user_1.id = user_2.id

內連接輸出結果

左外連接:SELECT * FROM user_1 LEFT OUTER JOIN user_2 ON user_1.id = user_2.id

左外連接,主表1的行都在

三個表左外連接:SELECT * FROM user_1 LEFT OUTER JOIN user_2 ON user_1.id = user_2.id LEFT OUTER JOIN user_3 ON user_1.id = user_3.id

三個表左外連接

右外連接:SELECT * FROM user_1 RIGHT OUTER JOIN user_2 ON user_1.id = user_2.id

右外連接,右表的行都在

全外連接:SELECT * FROM user_1 FULL OUTER JOIN user_2 ON user_1.id = user_2.id

全連接,兩個表的行都在

UNION操作符:縱向連接UNION將多個數據集合併到單個數據集中,並刪除任何現有的重複項。UNION ALL將多個數據集合併到一個數據集中,但不會刪除重複的行。UNION ALL比UNION運行速度快,因為它不會對數據集執行重複刪除操作。UNION內部每個SELECT語句必須擁有相同數量的列。列也必須擁有相似的數據類型。同時,每個SELECT語句中的列的順序必須相同。案例:SELECT ID, City FROM table1 UNION SELECT ID, City FROM table2;(不包括重複值)SELECT ID, City FROM table1 UNION ALL SELECT ID, City FROM table2;(包括重複值)

CREATE TABLE語句:創建表

CREATE TABLE uesrs ( UserID int, FirstName varchar(100), LastName varchar(100), City varchar(100); PRIMARY KEY(UserID));

SQL約束:約束可在創建表時規定

NOT NULL:指示某列不能存儲NULL值。

UNIQUE:保證每列的每行必須有唯一值。

PRIMARY KEY:NOT NULL和UNIQUE的結合。主鍵。

FOREIGN KEY:保證一個表中的數據匹配另一個表中的值的參照完整性。

CHECK:保證列中的值符合指定的條件。

DEFAULT:規定沒有給列賦值時的默認值。

AUTO INCREMENT:自動遞增,插入新記錄時,自動創建主鍵欄位的值。

案例: UserID int NOT NULL AUTO_INCREMENT, PRIMARY KEY (UserID)

CREATE TABLES users (id int NOT NULL AUTO_INCREMENT, username varchar(40) NOT NULL, password varchar(10) NOT NULL, PRIMARY KEY(id) );

INSERT INTO語句:用於向資料庫中的表添加新的數據行。

案例:向Employees表中插入新的一行信息。

INSERT INTO Employees VALUES (6, 『Andrew』, 『Thomas』, 43);

INSERT INTO Employees( ID, FirstName, LastName, Age) VALUES (6, 『Andrew』, 『Thomas』, 43); (指定表列名後,再插入數據)

ALTER TABLE:用於在已有的表中添加、刪除或修改列。

案例:給「people」表中添加一個名為「Birthday」的列

ALTER TABLE people ADD Birthday date;

ALTER TABLE people DROP COLUMN Birthday ; (刪除「Birthday」列)

ALTER TABLE people CHANGE FirstName name varchar(55);(將「FirstName」列重命名為「name」)

UPDATE語句:更新表中記錄

UPDATE Employees SET Salary=6000 WHERE ID=1; (WHERE子句規定哪條記錄需要更新,如果省略WHERE子句,所有記錄都將被更新!)

UPDATE Employees SET Salary=5500, FirstName=』Robert』WHERE ID=1; (逗號分隔,更新多列)

RENAME TABLE: 重命名整個表。

RENAME TABLE people TO users;

DELETE 語句:刪除表中記錄

DELETE FROM Employees WHERE ID=1;(WHERE子句規定哪條記錄需要刪除,如果省略WHERE子句,所有記錄都將被刪除!)

DROP TABLE: 刪除整個表。

DROP TABLE people;

SQL視圖:是基於SQL語句的結果集的可視化的表。視圖包含行和列,就像一個真實的表。

案例:創建一個視圖List,顯示每個員工的「FirstName」和「Salary」。

CREATE VIEW List AS SELECT FirstName, Salary FROM Employees;

可以像查詢實際表一樣查詢列表視圖:

SELECT * FROM List;

DROP VIEW:刪除視圖。

DROP VIEW List;


——附錄——

  • 數據類型

Mysql支持的數據類型有哪些?

SQL語句中,創建一個數據表時create table user{user_id int unsigned};

當中的unsigned表示,數據項user_id恆為正整數。例如如果tinyint最大是127,那tinyint unsigned最大就可以到 127 * 2。unsigned 屬性只針對整型,而binary屬性只用於char 和varchar。

  • SQL運算符

  • UTF-8和GBK有什麼區別

GBK編碼專門用來解決中文編碼的,是雙位元組的。不論中英文都是雙位元組的。

UTF-8 編碼是用以解決國際上字元的一種多位元組編碼,它對英文使用一個位元組,中文使用三個位元組來編碼。


——使用MySQL資料庫——

創建名為samp的資料庫:Create database samp character set gbk;(字元編碼指定為gbk)查看已經創建的資料庫:Show databases;(類似的,查看錶:show tables; 。Describe表名: 查看已創建表的詳細信息)指定要使用的資料庫:Use samp (可以不加分號。輸入後提示Database changed)創建表students: Create table students ( id int unsigned not null auto_increment primary key, name char(8) not null, Sex char(4) not null, age tinyint unsigned not null, tel char(13) null default 『-』);向表中插入數據:insert into students values(NULL, 『王剛『,『男』,20, 『13811223344』);查詢表中數據:select * from students;更新表中數據:將所有人年齡增加1:Update students set age=age+1;在表的最後追加列address:Alter table students add address char(60);在名為age的列後插入列birthday:Alter table students add birthday date after age;修改列,將表tel列改名為telphone。Alter table studengts change tel telphone char(13) default 『-』;將name列的數據類型改為char(16)。Alter table students change name name char(16) not null;重命名students表為workmates。Alter table students rename workmates;刪除列birthday:Alter table workmates drop birthday;刪除表中數據:刪除id為1的行:delete from workmates where id=1;刪除表中所有數據:delete from workmates;刪除表: Drop table workmates;刪除整個資料庫:Drop database samp;輸入exit或quit退出登錄。

相關鏈接:

MySQL Workbench導入csv文件

推薦閱讀:

黃小龍第三講:簡單的數據處理筆記
數據分析師面試怎麼做
Netflix與推薦系統
為什麼我們需要可視化 II
全球商業智能與分析市場劇變:傳統BI巨頭集體淪陷

TAG:MySQL | 數據分析 | SQL |