感恩筆記之SQL語句操縱資料集基本功能模板
阿新 • • 發佈:2021-10-11
SQL查詢_基本功能
一 SQL語句整體架構
SELECT --1 查詢資料表
INTO --2 新建資料表
FROM --3 查詢資料表
WHERE --4 篩選資料表
ORDER BY --5 排序結果表
GROUP BY --6 分組結果表
HAVING --7 篩選分組結果表
UNION --8 合併查詢結果表
二 select部分功能
1 select查詢資料表
select *
from 表名
2 select查詢單列和多列
--1 查詢一列 select 列1名 from 表名 --2 查詢多累 select 列1名 , 列2名 from 表名
3 select單列去重
SELECT distinct 列1名 from 表名
4 select更改列名
--1 新列名放在後面
select 列1名 AS 新列名
--2 AS關鍵字省略
select 列1名 新列名
--3 新列名放在前面
select 新列名 = 列1名
5 select使用函式
select 函式(列1名)
from 表名
6 select多列運算
select 列1 + 列2
from 表名
7select資料標定
select CASE WHEN 條件表示式1 THEN '設定字元1' WHEN 條件表示式2 THEN '設定字元2' WHEN 條件表示式3 THEN '設定字元3' ELSE '設定字元4' END as 新列名 from 表名
三 into新建表
select *
into 新表名
from 表名
四 from查詢資料表
1 from父子查詢
注意:語句結構過長,在電腦上可以檢視完整結構
--1.子表在父表中存在的資料 select * FROM 父表 WHERE 相同列 IN (SELECT 相同列 FROM 子表) --2.子表不在附表中存在的資料 SELECT * FROM 父表 WHERE 相同列 NOT IN (SELECT 相同列 FROM 子表) --說明:附帶屬性:用相同欄位連線,通過子句屬性,顯示父句中匹配的資料 --3 三表子查詢_重複 select * from 表1 where 表1相同列 in ( select 表2相同列 from 表2 where 表2相同列 in ( select 表3相同列 from 表3 )) --4 三表子查詢_不重複 select * from 表1 where 相同列 in ( select 相同列 from 表2 where 身份證 not in ( select 相同列 from 表3 )) --說明:三表巢狀,賽選不重複資料,最下一層是not in 上一層是in,這就是一個邏輯反轉負負得正的結果
2 from連線查詢
--1.全連線:兩表全部連線,包括空值
SELECT *
FROM 表1 a FULL JOIN 表2 b
ON a.相同列 = b.相同列
--2.自連線:兩表有效值連結
SELECT *
FROM 表1 a INNER JOIN 表2 b
ON a.相同列 = b.相同列
--3.左連線:以左表為準,包括空值
SELECT *
FROM 表1 a LEFT JOIN 表2 b
ON a.相同列 = b.相同列
--4.右連線:以右表為準,包括空值
SELECT *
FROM 表1 a RIGHT JOIN 表2 b
ON a.相同列 = b.相同列
--5.交叉連線:同一張表提取不同欄位連線
SELECT *
FROM 表1 a JOIN 表1 b
ON a.相同列=b.相同列
--說明:連表後去掉重複列名:逐個顯示列
--6 三表連線_重複
select *
from 表1 as a join 表2 as b on a.表1相同列 = b.表2相同列
join 表3 as c on b.表2相同列 = c.表3相同列
--7三表連線_不重複
select *
from 表1 as a join 表2 as b on a.表1相同列 != b.表2相同列
join 表3 as c on b.表2相同列 != c.表3相同列
--8多表簡便連線
--二表簡便連線
select *
from 表1 , 表2
where 表1.相同列 = 表2.相同列
--三表簡便連線
select *
from 表1 a, 表2 b, 表3 c
where a.身份證號=b.身份證號
and b.參合家庭編號=c.參合家庭編號
--說明:三表連線相同,結果正常顯示沒毛病,如果是顯示三表連線不相同的,那麼在連線的 = 號就有一個邏輯關係,類似於負負得正的關係
3 from父子查詢+連線查詢
SELECT * from --1總查詢模型
(select * --2子查詢1
from 父表1
where 表1相同列 in (select 表1相同列
from 子表1 ) ) AS a
JOIN --3表連線名
(select * --4子查詢2
from 父表2
where 表2相同列 not in (select 表2相同列
from 子表2) ) as b
ON a.表1相同列 = b.表2相同列 --5表連線條件
五 where篩選資料表
1 where比較查詢
SELECT *
FROM 表名
WHERE 列1名 > 50
--比較運算子
>, <, =, !=, <>
2 where區間查詢
SELECT *
FROM 表名
where 列1名 BETWEEN 500 AND 100
3 where精確查詢
SELECT *
FROM 表名
WHERE 列1名 IN ('字元',60)
4 where模糊查詢
SELECT *
FROM 表名
WHERE 列1名 LIKE‘%字元%’ --模糊查詢
LIKE‘字元%’ --精確查詢
LIKE‘_字元%’ --定位查詢
LIKE‘%[50%]%’ --數字符號查詢
LIKE‘%[^50%]%’ --逆向查詢
5 where空值查詢
SELECT *
FROM 表名
where 列1名 is NULL
列1名 is NOT NULL
6 where多條件篩選
SELECT *
FROM 表名
where 列1名 > 50 and
列2名 BETWEEN 500 AND 100 and
列3名 IN ('字元',60) or
列4名 LIKE‘%字元%’ or
列5名 is NOT NULL
六 order by排序結果表
1 order by單列排序
SELECT *
FROM 表名
WHERE 查詢條件
ORDER BY 列1名 --正序
ORDER BY 列1名 DESC --倒序
2 order by多列排序
SELECT *
FROM 表名
WHERE 查詢條件
ORDER BY 列1名,列2名
七 group by分組結果表
1 group by單列分組求數
SELECT 列1名,COUNT(*)
FROM 表名
GROUP BY 列1名
2 group by多列分組求數
SELECT 列1名,列2名,列3名,COUNT (*)
FROM 表名
GROUP BY 列1名 ,列2名,列3名
八 union合併查詢結果表
--說明:union的功能不僅可以合併相同欄位結果,也可以達到去掉重複的結果
--說明:欄位必須相同
--1 合併結果:列必須相同
SELECT 列1,列2,列3
FROM 資料表 WHERE
UNION
SELECT 列1,列2,列3
FROM 資料表 WHERE
--2 結果新建表
SELECT *
INTO 新建表名
FROM (SELECT * FROM 表1
UNION
SELECT * FROM 表2) AS 新表名
--3 批量合併結果
careate view 檢視名 as
select * from 表1
union all
select * from 表2
......其他所有表
--說明:使用union all 上面不能接別的語句,會報錯