CDA資料分析師 - SQL資料庫基礎 查詢&連線
-
SQL 查詢
【應用】
查詢單表語句
select語句、from 語句、where 語句、group by 語句、having 語句、order by 語句、limit語句&子查詢等
聚合函式,包括 count、sum、avg、max&min 等
【DEMO】
-- 查詢單表資料
SELECT *
FROM `score_info` AS SCO
WHERE SCO.id > 0
GROUP BY SCO.id
HAVING SCO.id = 2
ORDER BY SCO.id DESC
-- LIMIT a, b -- a代表起始值(預設為0),b代表限制總數
LIMIT 0, 5;
-
SQL 連線
【領會】
表的連線型別,包括內連線(等值、不等值)、外連線(左、右、全)&交叉連線(笛卡爾連線)
查詢的集合操作,只包括並集操作
資料的更新及刪除
檢視的概念及建立
【應用】
查詢多表語句
inner join 的用法、left/right/full join 的用法、cross join 的用法&union 的用法等
【DEMO】
-- 查詢多表資料 橫向連線 (備註:MySQL不支援FUll JOIN)
CREATE OR REPLACE VIEW `v_left_score` AS
SELECT
-- *
STU.id AS '學號',
`STU`.`name` AS '姓名',
SUM( SCO.score ) AS '總分',
AVG( SCO.score ) AS '均分',
ROW_NUMBER ( ) OVER ( ORDER BY SUM( SCO.score ) DESC ) AS '排名'
FROM
`student_info` AS STU
LEFT JOIN `score_info` AS SCO ON STU.id = SCO.stu_id
GROUP BY
STU.id
ORDER BY
SUM( SCO.score ) DESC;
-- 交叉連線(笛卡爾連線)
SELECT * FROM `student_info`
CROSS JOIN `subject_info`;
-- OR
SELECT * FROM `student_info`, `subject_info`;
-- 查詢多表資料 縱向連線
SELECT SCO.score FROM `score_info` AS SCO
UNION
SELECT SCO.score FROM `score_info` AS SCO;
-- 更新資料
UPDATE `student_info`
SET `name` = '華盛頓'
WHERE `id` = 3;
-- 刪除資料
DELETE FROM `student_info`
WHERE `id` = 4;
-- 新建檢視
CREATE VIEW `v_subject_info` AS SELECT
*
FROM
subject_info;
-- 更新檢視
CREATE OR REPLACE VIEW `v_subject_info` AS SELECT
*
FROM
subject_info;
-- 刪除檢視
DROP VIEW `v_subject_info`;
-
其它 SQL 語句中常用的關鍵字、運算子&函式
【領會】
關鍵字
運算子
函式
其他函式&Oracle / Hive row number over partition by
MySQL正則匹配
【解析&DEMO】
1.常用關鍵字 AND、OR、NOT、IN、BETWEEN、LIKE、IS NULL、DISTINCT等 ,DISTINCT為去重;
2.常用運算子包括比較運算子、算數運算子、邏輯運算子;
3.常用函式包括數值型別函式、字串型別函式、日期時間函式&其他函式;
【DEMO】
-- 數值型別函式
SELECT
-- N的平方根
SQRT(121),
-- N的符號值(正數1 負數-1 0為0)
SIGN(11),
-- N的截斷M位小數
TRUNCATE(1.5555, 3),
-- N的四捨五入M位小數
ROUND(1.5555, 3),
-- 大於N的最小整數
CEILING(10),
-- 小於N的最大整數
FLOOR(11),
-- 0至1的隨機數
RAND(),
-- π值
PI(),
-- 取餘數
MOD(8,3),
-- 以2為底8的對數
LOG(2,8),
-- N的自然對數
LN(EXP(11)),
-- 最小值
LEAST(22,22,11),
-- 最大值
GREATEST(1,2,11),
-- e的N次方
EXP(3),
-- 十六機制
HEX(17),
-- 八進位制
OCT(9),
-- 二進位制
BIN(3),
-- 絕對值
ABS(-100);
-- 字串型別函式
SELECT
-- 去前後空格
TRIM(' abcd '),
-- 去後空格
RTRIM(' abcd '),
-- 去前空格
LTRIM(' abcd '),
-- 顛倒順序
REVERSE('abcd'),
-- str重複N次
REPEAT('a',4),
-- 引用轉義
QUOTE('a''b''c'),
-- substr in str 的位置
POSITION('c'IN'abcd'),
-- 長度
LENGTH('1234'),
-- 後第N位的字元
RIGHT('abcd',1),
-- 前第N位的字元
LEFT('abcd',1),
-- 轉大寫
UPPER('aBc'),
UCASE('aBc'),
-- 轉小寫
LOWER('AbC'),
LCASE('AbC'),
-- str in strlist的位置
FIND_IN_SET('c','a,b,c'),
-- 替換str中b為f
REPLACE('abcdBBBbef','b','f'),
-- 替換 ostr的第a到b位 為nstr
INSERT('a',1,4,'bb'),
-- 用 連線strlist
CONCAT_WS(' ','aa','bb','cc'),
-- 連線strlist
CONCAT('aa','bb','cc'),
-- str的位元長度(二進位制位數)
BIT_LENGTH(' '),
-- str的ASCII碼值
ASCII(NULL);
-- 時間日期函式
SELECT
-- fmt格式日期
DATE_FORMAT(NOW(),'%a'),
-- fmt格式UNIX
FROM_UNIXTIME(UNIX_TIMESTAMP(NOW()),'%a'),
-- 月
MONTHNAME(NOW()),
-- 星期
DAYNAME(NOW()),
-- 日期
DATE(NOW()),
-- 時間
TIME(NOW()),
-- 當前日期
CURDATE(),
CURRENT_DATE(),
-- 當前時間
CURTIME(),
CURRENT_TIME(),
-- 一年的第幾天
DAYOFYEAR(NOW()),
-- 一月的第幾天
DAYOFMONTH(NOW()),
-- 一週的第幾天(範圍1-7,週日為第一天)
DAYOFWEEK(NOW()),
-- 年
YEAR(NOW()),
-- 季度
QUARTER(NOW()),
-- 月
MONTH(NOW()),
-- 周
WEEK(NOW()),
-- 日
DAY(NOW()),
-- 時
HOUR(NOW()),
-- 分
MINUTE(NOW()),
-- 秒
SECOND(NOW());
-- 其他函式
-- 結果聚合
SELECT
GROUP_CONCAT(STU.`name`)
FROM
`student_info` STU
GROUP BY
STU.remarks;
-- 資料型別轉換
SELECT
CAST('2019-01-01' AS DATE),
CAST(12+13 AS CHAR);
4.正規表示式匹配。
正規表示式是使用某種模式匹配一類字串的方法,使用REGEXP關鍵字來匹配查詢正規表示式。
正規表示式模式字元 | 說明 |
---|---|
^ | 匹配字串開始 |
$ | 匹配字串結束 |
. | 代表字串中任意字元(包括/n,/t) |
[字符集合] | 匹配字符集中任意一個位元組 |
[^字符集合] | 匹配除字符集中任意一個位元組 |
* | 匹配前面的子表示式零次或多次,str* 等價於str{0,N}。 |
+ | 匹配前面的子表示式一次或多次,str+ 等價於str {1,N}。 |
字元{M,N} | 匹配字元出現>=M次 |
字元{N} | 匹配字元出現>=N次 |
S1|S2|S3 | 匹配S1、S2和S3中任意一個 |
-- 正則匹配
SELECT *
FROM student_info STU
WHERE STU.`name`
-- 匹配學生姓名以‘張’開始的學生
-- REGEXP '^張'
-- 匹配學生姓名以‘強’結尾的學生
-- REGEXP '強$'
-- 匹配學生姓名包含‘欣’的學生
-- REGEXP '.欣|欣.'
-- REGEXP '[欣]'
-- 匹配學生姓名不叫‘李四’的學生
-- REGEXP '[^李四]'
-- 匹配學生姓名中‘李’出現0,1……次的學生
-- REGEXP '李*'
-- 匹配學生姓名中‘李’出現大於0次的學生
-- REGEXP '李+'
-- 匹配學生姓名中‘李’大於等於1的學生
-- REGEXP '李{1,2}'
-- 匹配學生姓名中‘李’大於等於2的學生
-- REGEXP '李{2}'
-- 匹配學生姓名中含‘李’或‘強’或‘張三’的學生
REGEXP '李|強|張三'
;
備註:正規表示式模式字元解釋說明中部分為自己嘗試實踐後重新定義,與部分參考資料不太一致,若有興趣請參加作者的帖子討論 https://bbs.csdn.net/topics/392551271 ,非常感謝您的指正!
相關文章
- php基礎之連線mysql資料庫和查詢資料PHPMySql資料庫
- go 連線資料庫 - GORM學習 - sql查詢Go資料庫ORMSQL
- 通用資料庫/源連線管理分析查詢DBeaverEE資料庫
- 資料庫基礎查詢--單表查詢資料庫
- PHP連線、查詢MySQL資料庫PHPMySql資料庫
- MySQL資料庫基礎——多表查詢:子查詢MySql資料庫
- 資料庫學習(四)連線查詢資料庫
- SQL Server 跨資料庫查詢SQLServer資料庫
- 【資料庫】查詢優化之子連線優化資料庫優化
- sql server資料庫錯誤資料恢復(資料庫連線失效,無法附加查詢)SQLServer資料庫資料恢復
- Android SQL資料庫查詢方法 query( )AndroidSQL資料庫
- SQL Server實戰四:查詢資料庫的資料SQLServer資料庫
- 資料庫-SQL基礎語法資料庫SQL
- SQL Server 查詢資料庫中所有表資料條數SQLServer資料庫
- 第 67 期 Go database/sql 資料庫連線池分析GoDatabaseSQL資料庫
- Golang 全域性sql資料庫連線GolangSQL資料庫
- c#連線SQL Server資料庫C#SQLServer資料庫
- 【學習】SQL基礎-006-多表連線查詢SQL
- 【資料庫資料恢復】sql server資料庫連線失效的資料恢復案例資料庫資料恢復SQLServer
- SQL Server資料庫基礎之行資料轉換為列資料SQLServer資料庫
- java 資料庫程式設計(一)JDBC連線Sql Server資料庫Java資料庫程式設計JDBCSQLServer
- 關係型資料庫查詢語言 SQL 和圖資料庫查詢語言 nGQL 對比資料庫SQL
- MySQL資料庫:7、SQL常用查詢語句MySql資料庫
- laravel 5.8 連線資料庫庫查詢 資料 速度慢,使用mysql 直接查詢響應就快,什麼原因呢?Laravel資料庫MySql
- 用Navicat連線資料庫-資料庫連線(MySQL演示)資料庫MySql
- SQL連線查詢SQL
- 深圳軟體測試學習:【資料庫】-【oracle】-連線查詢資料庫Oracle
- Jemter查詢資料庫資料庫
- 求助:資料庫查詢資料庫
- ThinkPHP 資料庫查詢PHP資料庫
- 資料庫排序查詢資料庫排序
- 查詢資料庫大小資料庫
- MySql中的資料查詢語言(DQL)三:連線查詢MySql
- 資料庫查詢優化:使用explain分析sql語句執行效率資料庫優化AISQL
- 連線資料庫資料庫
- MongoDB資料庫中查詢資料(下)MongoDB資料庫
- SQL的資料庫操作:新增、更新、刪除、查詢SQL資料庫
- 概括SQL Server實時查詢Oracle資料庫WSSQLServerOracle資料庫