SQL學習 -- mysql
阿新 • • 發佈:2020-12-13
技術標籤:sql
前言
臨時要寫一下java,設計到一個很複雜的sql,學一下,技多不壓身
基礎部分
sql語句註釋
一共三種方式可以進行sql語句的註釋
//句首 加上 -- table_name表名
-- select * from table_name;
//句首 加上 #
# select count(*) from table_name;
//和程式碼一樣 用 /* */包裹 column_name欄位名
/* select column_name from table_name; */
查詢 select
簡單的就不舉例了,太多了
- 查詢全部 select * 略
- 查詢指定欄位 select 欄位名 略
- distinct查詢
//查詢某個欄位包含哪些值(不重複的陳列) 使用distinct
select distinct 欄位名 from 表名
- 單條件查詢 where
//操作符 = 可以替換為其他任意判斷型的操作符
select 欄位名 from 表名 where 欄位=值
- 多條件查詢 and or
select 欄位名 from 表名 where 條件1 and/or 條件x
- 查詢結果排序
//單個欄位排序 //預設升序ASC select 欄位名 from 表明 order by 欄位A //降序排列 宣告DESC select 欄位名 from 表明 order by 欄位A DESC //多個欄位排序,查詢部分太重複,省略了 order by A,B //預設A、B升序 order by A desc,B // A 降序,B 升序排列 order by A ,B desc // A 升序,B 降序排列
插入 insert into
分兩種形式:
** 1.不指定欄位,按順序提供所有欄位的值。**
INSERT INTO 表名
VALUES (值,值值);
** 2.指定欄位,按順序提供指定欄位的值。**
INSERT INTO table_name (欄位A,B, C, ...)
VALUES (值A, B C, ...); //省略號表示以此類推
更新 update
注意一定要加限制條件,不然所有的資料都被更新
UPDATE 表名 SET 欄位A=xxx, 欄位B=xxx where 指定條件 //這裡的指定條件和查詢的類似
刪除 delete
注意一定要加限制條件,不然所有的資料都被刪除
刪庫跑路,手動滑稽。
delete from 表名 WHERE 條件
進階部分
查詢結果只需要一部分
SELECT 欄位名 FROM 表名 LIMIT 查詢的數量;
包含查詢 like
//查詢name以G開頭的
SELECT * FROM 表名 WHERE name LIKE 'G%';
//查詢name以G結尾的
SELECT * FROM 表名 WHERE name LIKE '%G';
//查詢name 包含G的
SELECT * FROM 表名 WHERE name LIKE '%G%';
//查詢name 不包含G的
SELECT * FROM 表名 WHERE name NOT LIKE '%G%';
萬用字元
不做過多描述
- % 0個或者多個字元
- _ 1個字元
- [ abc ] 列舉中的一個
- [ ^abc ] 不在列舉中的
in
//查詢欄位名x 為A 或者 B 的 可以理解為js中str.includes(x)
SELECT * FROM 表名 WHERE 欄位名x IN (A, B);
between
//between一般和and 一起使用
//查詢欄位名 在起始值-結束值之間的
SELECT * FROM 表名 WHERE 欄位名 between 起始值 and 結束值;
//NOT BETWEEN 同理 不贅述
//between和 in 一起用
SELECT * FROM 表名 WHERE (欄位1 BETWEEN 起始值 AND 結束值) AND country NOT IN (值1, 值2);
一般between給定的為數字範圍,但是也支援字母、日期範圍,我也是剛接觸,等用到的時候再具體展示
別名 alias (as)
- 給列起別名
SELECT 列1 AS 別名1, 列2 AS 別名2 FROM 表名;
- 給表起別名
//w a都是表的別名 這裡有點亂,但是大概意思能懂
SELECT w.欄位1, w.欄位2, a.欄位1, a.欄位2
FROM 表1 AS w, 表2 AS a
WHERE a.欄位x=w.欄位y and w.欄位x=xxx;
join
有點搞腦殼,寫每個join之前會先放個圖,一步步來,再難的事也變簡單。不要怕。。。不要怕。。。
** inner join**
相當於join 也就是說inner可以省略
//INNER JOIN 關鍵字在表中存在至少一個匹配時返回行。 這裡我不太理解
SELECT 欄位
FROM 表a
INNER JOIN 表b //這裡的inner要不要都行
ON 表a.欄位=表b.欄位;
** left join**
//LEFT JOIN 關鍵字從左表(table1)返回所有的行,即使右表(table2)中沒有匹配。如果右表中沒有匹配,則結果為 NULL。
SELECT 欄位
FROM 表a
LEFT JOIN 表b
ON 表a.欄位=表b.欄位;
right join
//RIGHT JOIN 關鍵字從右表(table2)返回所有的行,即使左表(table1)中沒有匹配。如果左表中沒有匹配,則結果為 NULL。
SELECT 欄位
FROM 表a
RIGHT JOIN 表b
ON 表a.欄位 = 表b.欄位;
** full outer join**
//FULL OUTER JOIN 關鍵字只要左表(table1)和右表(table2)其中一個表中存在匹配,則返回行.
SELECT 欄位
FROM 表a
FULL OUTER JOIN 表b
ON 表a.欄位 = 表b.欄位;
** join總結**
A inner join B 取交集。
A left join B 取 A 全部,B 沒有對應的值為 null。
A right join B 取 B 全部 A 沒有對應的值為 null。
A full outer join B 取並集,彼此沒有對應的值為 null。
union
//合併查詢結果 兩個以上select 不允許重複值 使用union all允許重複
查詢語句1 union 查詢語句2