標籤:
4-1插入記錄INSERT
INSERT [INTO] tbl_name [(col_name)] {VALUES|VALUE} ({expr|DEFAULT},...), (...), ... #可以一次性插入多條記錄INSERT [INTO] tbl_name SET col_name = {expr | DEFAULT}, ... #可以使用子查詢INSERT [INTO] tbl_name [(col_name,...)] SELECT ... #可以將查詢的結果插入到指定的表中 4-2更新記錄UPDATEUPDATE [LOW_PRIORITY] [IGNORE] tbl_reference SET col_name1={expr1 | DEFAULT} [,col_name2={expr2|DEFAULT}] ... [WHERE where_condition] #單表更新 4-3-1刪除記錄DELETEDELETE FROM tbl_name [WHERE where_condition] #單表刪除 4-3-2多表刪除從資料表t1中把那些id值在資料表t2裡有匹配的記錄全刪除掉
DELETE t1 FROM t1,t2 WHERE t1.id=t2.id
或
DELETE FROM t1 USING t1,t2 WHERE t1.id=t2.id
2、從資料表t1裡在資料表t2裡沒有匹配的記錄尋找出來並刪除掉
DELETE t1 FROM t1 LEFT JOIN T2 ON t1.id=t2.id WHERE t2.id IS NULL
或
DELETE FROM t1,USING t1 LEFT JOIN T2 ON t1.id=t2.id WHERE t2.id IS NULL
3、從兩個表中找出相同記錄的資料並把兩個表中的資料都刪除掉
DELETE t1,t2 FROM t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t1.id=25
注意此處的delete t1,t2 from 中的t1,t2不能是別名
#delete t1,t2 from table_name as t1 left join table2_name as t2 on t1.id=t2.id where table_name.id=25
在資料裡面執行是錯誤的(MYSQL 版本不小於5.0在5.0中是可以的)
上述語句改寫成
#delete table_name,table2_name from table_name as t1 left join table2_name as t2 on t1.id=t2.id where table_name.id=25
在資料裡面執行是錯誤的(MYSQL 版本小於5.0在5.0中是可以的)
附:上述語句啟動並執行環境 MYSQL 4.0.2以上
4-4尋找記錄SELECTSELECT select_expr [,select_expr ...][ FROM table_reference [WHERE where_condition] [GROUP BY {col_name | position} [ASC|DESC],....] #分組,可以指定列名和列位置 [HAVING where_condition] #對某一部分分組,保證分組條件要麼彙總函式(MAX,SUM),或該語句出現在select語句中 [ORDER BY {col_name | expr | position} [ASC|DESC] ,...] #多用於升降序 [LIMIT {[offset,] row_count | row_count OFFSET offset}] #限制查詢結果返回數量]5-1子查詢子查詢(Subquery)是指出現在其他SQL語句中的SELECT字句。 #SELECT * FROM t1 #outer query/outer statement 外查詢 WHERE col1 = (SELECT col2 FROM t2); #subquery 子查詢子查詢是嵌套在查詢內部,且必須始終出現在圓括弧內,可以包含多個關鍵字或條件,如 DISTINCT、GROUP BY 、ORDER BY 、LIMIT,函數等。 子查詢外層查詢可以是:SELECT,INSERT,UPDATE,SET或DO。子查詢可以返回標量、一行、一列或子查詢。使用比較子的子查詢包括=/>/</>=/<=/<>/!=/<=>文法結構: operand comparison_operator subquery#SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price >=(SELECT ROUND (AVG(goods_price),2) FROM tdb_goods);子查詢結果大於一個結果是需要使用ANY /SOME/ALL 來修飾operand comparison_operator ANY (subquery)operand comparison_operator SOME (subquery)
operand comparison_operator ALL (subquery)
| 運算子/關鍵詞 |
ANY |
SOME |
ALL |
>/>=
|
最小值 |
最小值 |
最大值 |
| </<= |
最大值 |
最大值 |
最小值 |
| = |
任意值 |
任意值 |
|
| <>/!= |
|
|
任意值 |
由[NOT] IN 的子查詢文法結構:operand comparison_operator [NOT] IN (subquery) =ANY 運算子與IN等效。!=ALL或<>ALL運算子與NOT IN等效。使用[NOT] EXISTS 的子查詢如果子查詢返回任何行,EXISTS將返回TRUE;否則將返回FALSE。5-2 使用INSERT....SELECT將查詢結果寫入資料表文法結構: INSERT [INTO] tbl_name [(col_name,...)] SELECT ...#->INSERT tbl_goods_cates(cate_name) #插入商品品牌名->SELECT goods_cate FROM tdb_goods GROUP BY goods_cate; #從商品表中尋找品牌名5-3 多表更新文法結構:UPDATE table_references SET col_name1 = {expr1 | DEFAULT} [,col_name2 = {expr2 | DEFAULT}]... [WHERE where_condition]#->UPDATE tdb_goods INNER JOIN tbd_goods_cates #使用內串連更新->ON goods_cate = cate_name #條件為 表1欄位=表2欄位-> SET goods_cate = cate_id; #設定表1欄位 名稱= 表2 欄位ID 5-4 多表更新一步到位建立資料表同時將查詢結果寫入到資料表文法結構:CREATE TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] select_statement#->CREATE TABLE tdb_goods_brands #建立商品類型表->(->brand_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, #建立類型表ID欄位->brand_name VACHAR(40) NOT NULL #建立類型名欄位, 長度40 ,非空->)->SELECT brand_name FROM tdb_goods GROUP BY brand_name; #從商品表中尋找類型5-5 串連表的參照關係:table_references #表1{[INNER | CROSS] JOIN | {LEFE | RIGHT} [OUTER] JOIN} #連線類型table_references #表2 ON conditional_expr #串連條件連線類型INNER JOIN ,內串連 # 在MySQL中,JOIN,CROSS JOIN 和INNER JOIN是等價的,A∩BLEFT [OUTER] JOIN,左外串連 # AU(A∩B)RIGHT [OUTER] JOIN , 右外串連 #(A∩B)UB多表串連#->SELECT goods_id,goods_name,cate_name,brand_name,goods_price FROM tdb_goods AS g #使用別名,尋找->INNER JOIN tdb_goods_cates AS c ON g.cate_id = c.cate_ID #條件1->INNER JOIN tdb_goods_brands AS b ON g.brand_id = b.brand_id; #條件2
無限分類表的設計(通過自身串連實現 存在三個欄位 ID,name,父類ID)#->SELECT s.type_id,s.type_name,p.type_name #查詢->FROM tdb_goods_types AS s LEFT JOIN tdb_goods_types AS p #左外串連 FROM子查詢中必須使用別名->ON s.parent_id = p.type_id; #串連條件多表刪除文法結構:DELETE tbl_name[.*] [,tbl_name[.*]] ... FROM table_references [WHERE where_condition]#->DELETE t1 FROM tdb_goods AS t1 #刪除表t1表->LEFT JOIN #使用左外串連-> (SELECT goods_id,goods_name FROM tdb_goods GROUP BY goods_name HAVING count(goods_name) >= 2) AS t2 #子查詢 商品名稱類型數量大於2->ON t1.goods_name= t2.goods_name #串連條件->WHERE t1.goods_id > t2.goods_id; #刪除條件為id更大的
菜鳥的MySQL學習筆記(三)