1. 程式人生 > 其它 >SQL學習 -- mysql

SQL學習 -- mysql

技術標籤: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

還有很多,大部分要特殊情況才用到,先學到這