MYSQL快速複習筆記

顯示當前所有的可用數據庫
SHOW DATABASE;    

顯示當前數據庫內可用表
SHOW TABLES ;

顯示某個表中的所有屬性信息
SHOW COLUMNS FORM 表名

SHOW STATUS 顯示廣泛的服務器狀態
SHOW CREATE DATABASE/TABLE  顯示創建庫或表的SQL語句是啥
SHOW GRANTS 顯示授權用戶
SHOW ERRORS SHOW WARNINGS  顯示服務器錯誤或警告消息

檢索單個列
SELECT prod_name
FROM products

檢索多個列
SELECT id,name,price
FROM products

檢索所有列
SELECT *
FROM products

檢索出不重複的行
SELECT DISTINCT id
FROM products

返回某些行
SELECT name
FROM products
LIMIT  begin,len  //即開始行,和行數
注意: 行從0開始,  故LIMIT1,返回的是第二行

按年齡排序
SELECT name,age
FROM products
ORDER BY age
找出年齡最小的? 加個LIMIT 1即可

按多個列排序
先按price排,再按name排
SELECT id,price,name
FROM products
ORDER BY price, name

降序排序
按price降序排,再按name升序排
SELECT id,price,name
FROM products
ORDER BY price DEC, name

找出price=2的人
SELECT name, price
FROM products
WHERE price = 2
注意: ORDER BY 排序語句應該放在WHERE的後面

SQL做where字符匹配時,不區分大小寫。

不匹配檢查: 給出id不是1003的人制造的產品
SELECT id,name
FROM products
WHERE id <> 1003;   //或者 id != 1003

範圍值檢查:
SELECT name,price
FROM products
WHERE price BETWEEN 5 AND 10

空值檢查
WHERE price IS NULL  

多個過濾條件(AND是且, OR是或)
WHERE id=1003 AND price <10 AND age < 18

AND和OR的組合
WHERE id=1002 OR id=1003 AND price>10
根據SQL的規則, AND優先於OR,變成了
WHERE id=1002 OR (id=1003 AND price>10)
所以最好在OR和AND組合時,加上括號
WHERE (id=1002 OR id=1003) AND price>10

取特定值,即id=1002、1003、1004的值皆可
WHERE id IN (1002,1003,1004) 

否定條件       NOT 條件,  則取不滿足這個條件的行
WHERE id NOT IN (1002,1003,1004)

通配符,配合字符串匹配和LIKE使用
百分號通配符,查找以jet開頭的任何名字
WHERE name LIKE  'jet%'
包含有anvil的名字
WHERE name LIKE  '%anvil%'
查找以s起頭,e結尾的所有名字
WHERE name LIKE 's%e'

下劃線通配符, 該符號只能代表1個任意字符
不能匹配0個字符,即該處必須有1個字符
WHERE name LIKE '_ton anvil'

使用通配符的注意事項
1.不要過度使用通配符
2.不要把通配符用在搜索模式的開始處
3.注意通配符的位置

正則表達式,伴隨着REGEXP使用
LIKE匹配的是整個串,REGEXP只要出現了類似的即可,即有子串即可
例如LIKE ‘abc’ ,只能返回abc。
REGEXP ‘abc’, 則可以返回 abcd

.可以匹配任意一個字符
WHERE name REGEXP '.000'

搜索2個串, |類似於或OR
WHERE name REGEXP '1000|2000'
注意:  '1|2|3 Ton' 指代的是1或2或3 Ton, 故不要連續用|後又跟字符,而應該用[]

匹配幾個字符中的一個即可
WHERE name REGEXP '[123] TON'
則可返回  1 Ton 和 2 Ton

匹配1-9加a-z
WHERE name REGEXP  '[1-9] [a-z]'

匹配 正則符號模樣的特殊字符
用\\作爲前導
WHERE name REGEXP '\\.'
則找到匹配.的, 此時.不代表任意字符

匹配某個字符的0個或1個
WHERE name REGEXP 'sticks?'
則可匹配stick或者sticks

指定匹配數目 {n}
不少於指定數目的匹配 {n,}
匹配n到m數目的匹配 {n,m}

WHERE name REGEXP '[[:digit:]]{4}'
則匹配4個任意數字

^定位爲文本的開始,$定位爲文本的結束
注意: ^有另外一個用途,可以用來否定集合[]

在SQL中測試自己寫的正則表達式對不對
SELECT ‘hello’ REGEXP 'abc'   
若正確,則返回1,否則返回0。 顯然這個例子返回0

計算字段
SELECT Concat(name, '(' , country, ')' )

則返回的行裏的每個值爲   
LSX(CHINA)
CRISTINA(USA)

RTrim(name)可以刪除name中多餘的右邊空格,常可以用在拼接中

給計算字段取別名
SELECT Concat(name, '(' , country, ')' ) AS newtitle
則列名叫newtitle

執行算數計算
SELECT id, num, price, num*price AS sumProfit
則多返回一個列,叫做總利潤

測試拼接字段
SELECT 3*2+5,  則返回11
SELECT Now(),  則返回數據庫的當前時間

數據處理函數
Select name, Upper(name) AS upcase_name       都轉爲大寫

返回價格的平均值
SELECT AVG(price) AS avg_price
FROM products
WHERE id = 1003

計算的數量,包括NULL
SELECT COUNT(*) AS num_cust
計算num的數量,不包括NULL
SELECT COUTN(num) AS num_cust
還有MAX,MIN,SUM

指定不同元素的統計
SELECT AVG(DISTINCT price) AS avg_price

分出5個id,計算各id對應產品的數量
SELECT id, COUNT(*) AS id_num
FROM products
GROUP BY id
1.除了聚集計算語句外, SELECT中出現的每個列都必須出現在GROUP BY中
2.GROUP BY 必須出在 ORDER BY 之前

過濾分組
SELECT id, COUNT(*) AD orders
FROM orders
GROUP BY id
HAVING COUNT(*) >= 2

列出具有2個以上價格爲10的產品
SELECT id, COUNT(*) AS  num
FROM products
WHERE price >= 10
GROUP BY id
HAVING COUNT(*) >=2
順序:先WHERE過濾, 在COUNT過濾

語句使用順序
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
LIMIT

子查詢
找出訂購了物品TNT2的所有客戶id
SELECT cus_id
FROM orders
WHERE sail_id IN (SELECT sail_id
                            FROM orderitem
                            WHERE prod_id = ‘TNT2'
即先從產品表中,找到產品id爲INT2的所有訂單
再從訂單表中,找到訂單id匹配的所有客戶。

檢索出上述客戶id的所有信息
SELECT cus_name, cus_age
FROM customer
WHERE  cus_id IN (SELECT cus_id
                            FROM orders
                            WHERE sail_id IN (SELECT sail_id
                                                         FROM orderitem
                                                         WHERE prod_id = ‘TNT2'))
顯示每個客戶的訂單總數
SELECT name, state, (SELECT COUNT(*)
                                 FROM orders
                                 WHERE orders.cus_id = cus.cus_id ) AS orders
FROM customers
ORDER BY name
對於customer中的每一個客戶id, 都從訂單表中進行檢索,找出每個id的訂單數量。


創建表:
CREATE TABLE 表名
     列名   數據類型   列屬性
      ……
      PRIMARY KEY (主鍵列1,主鍵列2……) 
)ENGINE=InnoDB

添加列:
ALTER TABLE 表名
ADD 列名 數據類型

刪除列:
ALTER TABLE 表名
DROP COLUMN 列名
 
刪除表:
DROP TABLE 表名

重命名錶:
RENAME TABLE 舊錶名 TO 新表名

插入行:
INSERT INTO 表名(
列名1
列名2
……
VALUES(
數據1
數據2
……
),
數據3
數據4
);
這樣就插入了2行

更新數據:
UPDATE 表名
SET  列名1=數據1
       列名2=數據2
WHERE 查詢條件



刪除數據:
DELETE FROM 表名
WHERE 查詢條件


表中刪除主鍵爲:
alert table table_test drop primary key;

表中增加主鍵爲:
alert table table_test add primary key(id);



發佈了311 篇原創文章 · 獲贊 27 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章