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