MySQL 笔记3 -- SQL 语言
MySQL 筆記3 – SQL 語言
MySQL 系列筆記是筆者學(xué)習(xí)、實踐MySQL數(shù)據(jù)庫的筆記
課程鏈接: MySQL 數(shù)據(jù)庫基礎(chǔ)入門教程
參考文檔:
MySQL 官方文檔
一、 SQL語言規(guī)范
- SQL關(guān)鍵字、對象名、和列名不區(qū)分大小寫
- 字符值和日期值要區(qū)分大小寫
- 在應(yīng)用程序中如果SQL語句文本很長,可以將語句分布到多行上,并且可以通過使用跳格和縮進(jìn)提高代碼的可讀性
- SQL語句以分號(;)結(jié)束。
二、 DDL:數(shù)據(jù)定義(definition)語言
| 創(chuàng)建數(shù)據(jù)庫 | create database 數(shù)據(jù)庫名 character set utf8; |
| 修改數(shù)據(jù)庫 | alter database 數(shù)據(jù)庫名 charactor set gbk; |
| 創(chuàng)建表 | CREATE TABLE 表名(列名1 類型 [約束],列名2 類型 [約束]); |
| 添加一列 | ALTER TABLE 表名 ADD 列名 數(shù)據(jù)類型; |
| 查看表的字段信息 | DESC 表名; |
| 修改表的字段類型 | ALTER TABLE 表名 MODIFY 字段名 數(shù)據(jù)類型; |
| 刪除一列 | ALTER TABLE 表名 DROP 字段名; |
| 修改表名 | RENAME TABLE 原始表名 TO 要修改的表名; |
| 查看表的創(chuàng)建細(xì)節(jié) | SHOW CREATE TABLE 表名; |
| 修改表的字符集 | ALTER TABLE 表名 CHARACTER SET 字符集名稱; |
| 修改表的列名 | ALTER TABLE 表名 CHANGE 原始列名 新列名 數(shù)據(jù)類型; |
| 刪除表 | DROP TABLE 表名; |
三、 DML:數(shù)據(jù)操作(manipulation)語言
1、插入操作
語句:
單行插入:INSERT INTO 表名(列名1,列名2 …)VALUE (列值1,列值2…);
多行插入:INSERT INTO 表名(列名1,列名2 …)VALUES (列值1,列值2…),(列值1,列值2…);
要點:
- 列名與列值的類型、個數(shù)、順序要一一對應(yīng)
- 值不要超出列定義的長度
- 插入的日期和字符一樣,都使用引號括起來
- 可以省略列名,VALUE 按表頭順序填寫
2、更新操作
語句:
更新某幾列值:UPDATE 表名 SET 列名1=列值1,列名2=列值2
更新某行的某幾列值:UPDATE 表名 SET 列名1=列值1,列名2=列值2 WHERE 列名=值;
要點:
- 如果列值為數(shù)字類型,可以使用運(yùn)算符
實例: 修改數(shù)據(jù)庫密碼
------ # 方法1:適用于舊版 # 進(jìn)入數(shù)據(jù)庫 use mysql; # 修改表 update user set password=password('abc') WHERE User='root'; ------ # 方法2:適用于新版 # 直接在數(shù)據(jù)庫管理系統(tǒng)中修改 update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost'; # 刷新MySQL的系統(tǒng)權(quán)限相關(guān)表 flush privileges; ------ # 方法3:適用命令行 mysqladmin -u root -p password 123563、刪除操作
語句:
刪除1:DELETE FROM 表名 [WHERE 列名=值]
刪除2:TRUNCATE TABLE 表名;
區(qū)別:
- DELETE 刪除表中的數(shù)據(jù),表結(jié)構(gòu)還在,刪除后的數(shù)據(jù)可以找回
- TRUNCATE 刪除是把表直接DROP掉,然后再創(chuàng)建一個同樣的新表,刪除的數(shù)據(jù)不能找回,執(zhí)行速度比DELETE快
四 、 DQL:數(shù)據(jù)查詢(query)語言
1、基本查詢語句
| 查詢所有列 | SELECT * FROM 表名; |
| 查詢指定列 | SELECT 列名1,列名2… FROM 表名; |
| 條件查詢 | SELECT * FROM 表名 WHERE 條件 |
2、條件查詢
條件查詢運(yùn)行符及關(guān)鍵字:
| =(等于)、!=(不等于)、<>(不等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于); | SELECT * FROM 表名 WHERE 列名>=值 |
| BETWEEN…AND;值在什么范圍 | SELECT * FROM 表名 WHERE 列名 BETWEEN 列值1 AND 列值2; |
| IN(set);固定的范圍值 | SELECT * FROM 表名 WHERE 列名 IN(列值1,列值2,…) |
| IS NULL;(為空)、IS NOT NULL(不為空) | SELECT * FROM 表名 WHERE 列名 IS NULL; |
| AND;與、OR;或、NOT; 非 | SELECT * FROM 表名 WHERE 列名1=列值 AND 列名2=列值; |
3、模糊查詢
語句: SELECT * FROM 表名 WHERE 列名 LIKE 匹配表達(dá)式;
通配符:
| _ | 任意一個字符 |
| % | 任意0~n個字符 |
常用匹配表達(dá)式:
| ‘____’ | 幾個_就表示匹配幾個字符 |
| ‘%字符%’ | 匹配包含某個/些字符的列值 |
| ‘字符%’ | 匹配以某個/些字符開頭的列值 |
| ‘%字符’ | 匹配以某個/些字符結(jié)尾的列值 |
4、字段控制查詢
| 去除重復(fù)記錄 | SELECT DISTINCT 列名 FROM 表名; |
| 查詢結(jié)果進(jìn)行運(yùn)算,必須都要是數(shù)據(jù)型 | SELECT *,列名1+列名2 FROM 表名; |
| 查詢結(jié)果進(jìn)行條件替換 | SELECT *,IFNULL(列名,0) FROM 表名; |
| 對查詢結(jié)果起別名 | SELECT *,列名1+列名2 AS 別名 FROM 表名; |
5、排序
語句: 可以多級排序
SELECT * FROM 表名 ORDER BY 列名1,列名2 排序類型;
排序類型:
- ASC:升序,從小到大,默認(rèn)
- DESC:降序,從大到小
6、聚合函數(shù)
語句:
SELECT 聚合函數(shù)(*) AS 別名 FROM 表名;
常用聚合函數(shù):
| COUNT() | 統(tǒng)計指定列不為NULL的記錄行數(shù); |
| MAX() | 計算指定列的最大值,如果指定列是字符串類型,那么使用字符串排序運(yùn)算; |
| MIN() | 計算指定列的最小值,如果指定列是字符串類型,那么使用字符串排序運(yùn)算; |
| SUM() | 計算指定列的數(shù)值和,如果指定列類型不是數(shù)值類型,那么計算結(jié)果為0; |
| AVG() | 計算指定列的平均值,如果指定列類型不是數(shù)值類型,那么計算結(jié)果為0; |
7、分組查詢
語句: SELECT 字段名 from 表名 GROUP BY 字段名;
要點:
- 當(dāng) GROUP BY 單獨(dú)使用時,只顯示出每組的第一條記錄
- 在使用分組時,SELECT 后面直接跟的字段一般都出現(xiàn)在 GROUP BY 后
(1)group by + group_concat():
- GROUP_CONCAT(字段名)可以作為一個輸出字段來使用表示分組之后,根據(jù)分組結(jié)果,使用GROUP_CONCAT()來放置每一組的某字段的值的集合
(2)group by + 聚合函數(shù):
- GROUP BY 統(tǒng)計出每個分組的某字段的值的集合,再通過集合函數(shù)來對這個"值的集合"做一些操作
(3)group by + having:
- having 作用和 where 一樣,但 having 只能用于 group by
- having 是在分組后對數(shù)據(jù)進(jìn)行過濾,where 是在分組前對數(shù)據(jù)進(jìn)行過濾
- having 后面可以使用分組函數(shù)(統(tǒng)計函數(shù)),where 不可以
8、LIMIT
語句:
SELECT * FROM 表名 LIMIT 參數(shù)1, 參數(shù)2;
- 參數(shù)1:從哪一行開始查
- 參數(shù)2:要查幾行
- 行數(shù)的索引從0開始
示例:
# 分頁查詢格式 SELECT * FROM 表名 LIMIT (當(dāng)前頁數(shù)-1)*每頁的行數(shù),每頁的行數(shù)# 實例 SELECT * FROM tabel LIMIT (cyr_page-1)*page_size,page_sizeGOOD LUCK!
總結(jié)
以上是生活随笔為你收集整理的MySQL 笔记3 -- SQL 语言的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Springboot访问jsp页面但是却
- 下一篇: MySQL 笔记4 -- 数据完整性