這里寫目錄標題
- Navicat初識
- 資料庫相關
- 基礎命令
- SELECT 選擇列
- WHERE 結果集的條件
- 一些判斷符
- 條件運算子 AND OR NOT
- 其他運算子
- IN
- BETWEEN
- LIKE
- REGEXP
- IS NULL
- ORDER
- LIMIT
- JOIN
- 連接本表
- 連接多個表
- 多個連接條件 AND
- LEFT 與RIGHT JOIN
- 使用USING簡化
- NATURAL JOIN
- CROSS JOIN
- UNION 聯合多條SELECT
- INSERT
- LSAT_INSERT_ID()
- CREATE TABLE xxx AS
- UPDATE SET
- DELECT
資料庫,表,行列
大小寫不敏感
Navicat初識
簡潔明了
- Ctrl+` 進入命令列界面
- 查詢,新建查詢,撰寫SQL檔案
- 查看DDL,表上右鍵,物件資訊,選DDL,可以看主鍵
資料庫相關

VARCHAR 比 CHAR 更優,因為當CHAR字符不足50時,CHAR會自動填充剩余空間剩余空字符,導致空間浪費
PK 是否為主鍵
NN not null 是否可以為 NULL
AI 自動增進,常用于主鍵
Dafult 默認值
雖然有時候SQL陳述句很長,但是不要忘了是 ; 結尾
記得默認值DEFAULT 和 NULL
基礎命令
SELECT 選擇列
FROM 從哪個資料庫
WHERE 選擇條件
ORDER 排序原則
這幾條陳述句順序不能更改

SELECT 選擇列
可以用來對選擇的列進行一些轉換
SELECT
*,
(poinys+10)*100 AS another
-- 可以看到,雖然我們已經引入了*,但是為了引入別名,還是另寫了一行

只顯示不重復的部分DISTINCT

SELECT * 選擇全部

WHERE 結果集的條件
一些判斷符
注:<>為不等于
=
!=
>
>=
<
<=
<>
條件運算子 AND OR NOT

建議利用換行使代碼簡潔

當然也可以結合其他列進行運算

其他運算子
(我也不知道是不是叫這個)
IN
(選擇state使VA或FL或GA的行)


BETWEEN
(1000<=points<=3000)

LIKE
匹配模式串
WHERE state LIKE 'b%'
-- b后跟了若干字符
WHERE state LIKE '_y'
-- y前面跟了一個字符
WHERE state LIKE 'b__y'
-- b后兩個字符,然后是一個y
REGEXP
功能更為強大的正則運算式
-- ^ beginning
-- $ end
-- | logical or
-- [] [amd]
-- - [a-f]
WHERE last_name REGEXP '^fff'
-- 必須以fff開頭
WHERE last_name REGEXP 'fff$'
-- 必須以fff結尾
WHERE last_name REGEXP '^fff|mac|rose'
-- 以ff開頭,或包含mac,或包含rose
WHERE last_name REGEXP '[gim]e'
-- 含有e且e之一個是g或i或m
WHERE last_name REGEXP '[a-h]e'
-- 含有e且e之前是a-h中的任意一個字符
IS NULL
WHERE last_name IS NULL
ORDER
后跟算術運算式
-- DESC 降序
ORDER BY first_name DESC
-- 優先級排序,即使某一列沒有SELECT也可以按照該列排序(mysql是這樣,其他不一定)
ORDER BY state DESC, first_name, xxx DESC
-- 用數字表示按照選擇的第x列,如按照選擇的第一列查詢
-- 實際使用中應避免
ORDER BY 1
LIMIT
限制結果集的個數(行數)
-- 不足300的話就回傳全部,否則回傳前300
LIMIT 300
--跳過6個,讀取3個:7,8,9
LIMIT 6:3
-- 陳述句順序,在ORDER之后
SELECT
FROM
WHERE
ORDER
LIMIT
JOIN
和其他表結合,鏈接滿足某些條件的,幾個表中的資料,
有INNER RIGHT LEFT CROSS 四種,默認為INNER(這部分還妹看太懂)
SELECT order_id,o.customer_id, first_name, last_name
FROM orders o
JOIN customers c
ON o.customer_id = c.customer_id
-- orders中行A的customer_id和customers中行B的customer_id相等,則結果集中顯示,o為orders的別名,c為customers的別名,定義別名之后無法使用原名,注意SELECT 陳述句中的o.customer_id,當兩個表中有重名列時,必須精準定義
選擇不屬于當前資料庫的表JOIN, 在表前加前綴
FROM sql_store.order_items oi
連接本表
reports_to:該用戶屬于哪個老板
employee_id:員工id
以下代碼可以根據reports_to找到他的老板,并顯示姓名
JOIN自己必須起別名

連接多個表
SELECT
o.order_id,
o.order_date,
c.first_name,
c.last_name,
os.name AS status
FROM orders o
JOIN customers c
ON o.customer_id = c.customer_id
JOIN order_statuses os
ON o.status = os.order_status_id
多個連接條件 AND
JOIN一般用主鍵作為條件連接選擇條件
如果有復合主鍵存在,可以使用以下代碼

LEFT 與RIGHT JOIN
SELECT
c.customer_id,
c.first_name,
o.order_id
FROM customers c
JOIN orders o
ON c.customer_id = o.customer_id
ORDER BY c.customer_id
INNER JOIN 結果如下

LEFT JOIN 結果如下
注:寫的時候隱藏了OUTER,本為LEFT OUTER JOIN

JOIN的程序,就是對照著customerid,找到對應的orderd,將兩行的結果放到一起,然后顯示,如果找不到這樣的兩行,就不顯示,
LEFT JOIN,就是,就算找不到右邊那個orderid,也顯示左表的資料,右表的資料顯示為null,
盡量不適用RIGHT JOIN 否則會很亂
使用USING簡化
FROM a
JOIN b
ON a.x=b.x
-- 等同于
FROM a
JOIN b
USING(x)
-- 適用于兩個名字都一樣的情況
--同樣可以用于復合主鍵的清康
FROM a
JOIN b
ON a.x=b.x AND
a.y=b.y
-- 等同于
FROM a
JOIN b
USING(x,y)
-- 妙啊
NATURAL JOIN
資料庫自行根據一些相同的列名進行聯合,非常不推薦使用
CROSS JOIN
交叉連接,即笛卡爾連接,如圖,

顯式寫法
SELECT
c.first_name AS customer,
p.name AS product
FROM customers c
CROSS JOIN products p
ORDER BY c.first_name
隱式寫法
SELECT
c.first_name AS customer,
p.name AS product
FROM customers c, products p
ORDER BY c.first_name
UNION 聯合多條SELECT
注意:SELECT 結果集的列數應該相等,UNION會將他們按上下連接

INSERT


name 插入的列
VALUES,插入資料
DEFAULT,使用默認值,
不指定的話,就是用默認值或者遞增值
LSAT_INSERT_ID()
選中最后一條插入的列

CREATE TABLE xxx AS
通過復制當前表創建新表,這種情況下,MySQL會忽略列的特性,如該列是主鍵,是自動增量等


UPDATE SET

在WHERE中使用SEARCH


WHERE 適用于選擇條件只有一種,如果有多種,如內部有WHERE <…等,要使用WHERE IN
DELECT
洗掉表中的某些列
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/220906.html
標籤:python
