Mysql-03-DML資料操作語言-DQL-基礎查詢
DML資料操作語言
- 資料庫操作語言DML(Data Manipulation Language )
- 常用語句: insert dateta update
文章目錄
插入資料
INSERT INTO t_student VALUE(111,'聶','男','1999-01-01' ,122.1, 12311231,NOW());
方式一: INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2……,值n);
INSERT INTO t_student(stu_num ,stu_name ,stu_sex) VALUE(111,'聶','男');
方式二:INSERT INTO 表名 set 列名1=值1,…列名n=值n;
INSERT INTO t_student SET stu_birth ='1999-01-01';
方式三:INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2……,值n),(值1,值2……,值n);
INSERT INTO t_student VALUE(111,'聶','男','1999-01-01' ,122.1, 12311231,NOW()), (112,'聶','男','1999-01-01' ,122.1, 12311231,NOW()), (112,'聶','男','1999-01-01' ,122.1, 12311231,NOW()), (111,'聶','男','1999-01-01' ,122.1, 12311231,NOW()), (112,'聶','男','1999-01-01' ,122.1, 12311231,NOW());
方式四:INSERT INTO 表名(列1,列2……,列n) 查詢語句(查詢的列數與插入列數匹配)[套娃]
INSERT INTO t_student(stu_num ,stu_name ,stu_sex) SELECT stu_num ,stu_name ,stu_sex FROM t_student WHERE stu_score=122.1;
修改資料
UPDATE 表名 SET 列名 = ‘新值’WHERE 條件
UPDATE t_student SET stu_name='康' WHERE stu_num="112";
刪除資料
delete from 表名 where 條件
truncate table表名 清空整張表
刪除整個資料
DROP TABLE t_student
#刪除資料 表結構還在
DELETE FROM t_student WHERE stu_num=111;#清空整個資料 表結構還在
TRUNCATE TABLE t_student#刪除整個資料 表結構不在
DROP TABLE t_student
DQL-基礎查詢
DQL資料庫查詢語言查詢時使用頻率最高的一個操作,可以從一個表中查詢資料,也可以從多個表中查詢資料
基礎查詢:
語法:
select 查詢列表 from 表名;
特點:
- 查詢列表可以是: 表中的欄位,常量,表示式,函式
- 查詢的結果是一個虛擬的表格
查詢結果處理
- 查詢常量池:
SELECT 100
; - 查詢表示式
select 100*98
; - 查詢函式
select 函式; / 例如version()
- 特定列查詢
select column1,column2 from table
- 全部列查詢
select * from table
- 排除重複行 :
select distinct column1,column2 from table
- 算數運算子 :
+ - * /
函式:
類似於java中的方法:將一組邏輯語句事先在資料庫中定義好,可以直接使用
好處:
- 隱藏了實現的細節
- 提高了程式碼的重用性質
呼叫:
- select 函式名(實參列表) [from 表];
分類:
- 單行函式:如concat、length、ifnull等
- 分組函式:做統計使用,又稱為統計函式、聚合函式、組函式
單行函式
字元函式:
length():獲取引數值的位元組個數
char_length()獲取引數值的字元個數
concat(str1,str2,…):拼接字串
upper()/lower():將字串變成大寫/小寫
substring(str,pos,length):擷取字串 位置從1開始
instr(str,指定字元):返回子串第一次出現的索引,如果找不到返回0
trim(str):去掉字串前後的空格或子串,trim(指定子串 from 字串)
lpad(str,length,填充字元):用指定的字元實現左填充將str填充為指定長度
rpad(str,length,填充字元):用指定的字元實現右填充將str填充為指定長度
replace(str,old,new):替換,替換所有的子串
-- 函式
-- 單行函式: 對每行的記錄進行操作\
# 獲取引數位元組個數
SELECT LENGTH(stu_name) FROM t_student
# 獲取引數的字元個數
SELECT CHAR_LENGTH(stu_name) FROM t_student
#upper()/lower():將字串變成大寫/小寫
# 拼接字串
SELECT CONCAT(stu_name,+":",stu_num) FROM t_student;
# 擷取字串 由1開始
SELECT SUBSTRING( stu_num,1,2 )FROM t_student;
#返回子串第一次出現的索引,如果找不到返回0
SELECT INSTR(stu_name,'a') FROM t_student;
#trim(str):去掉字串前後的空格或子串,trim(指定子串 from 字串)
SELECT TRIM(stu_name) FROM t_student;
-- 用指定的字串 左填充,右填充到指定的長度
SELECT LPAD(stu_name,8,"ab")FROM student
SELECT RPAD(stu_name,8,"ab")FROM student
-- 替換字串
SELECT REPLACE(stu_name,'1',"A")FROM student
-- 分組函式,聚合函式,統計函式 將多行處理返回一個結果
SELECT COUNT(*) FROM student
邏輯處理
case when 條件 then 結果1 else 結果2 end; 可以有多個when
語法:
(CASE WHEN stu_score>90 THEN ‘優秀’
WHEN stu_score>80 THEN ‘良好’
ELSE ‘不優秀’ END)
SELECT
stu_num,
stu_name,
(CASE WHEN stu_score>90 THEN '優秀' ELSE '不優秀' END) score_level
FROM t_student
SELECT stu_num,
stu_name,
(CASE WHEN stu_score>90 THEN '優秀'
WHEN stu_score>80 THEN '秀'
ELSE '不及格' END ) score_level
FROM t_student;
ALTER TABLE t_student ADD STATUS INT COMMENT '0-未稽核,1-稽核通過,2-不通過'
SELECT
stu_num,
stu_name,
(CASE WHEN STATUS=0 THEN '未稽核'
WHEN STATUS=1 THEN '稽核通過'
ELSE '不通過' END) score_level
FROM t_student;
ifnull---- if
ifnull(被檢測值,預設值)函式檢測是否為null,如果為null,則返回指定的值,否則返回原本的值
# ifnull(被檢測值,預設值)函式檢測是否為null,如果為null,則返回指定的值,否則返回原本的值
SELECT stu_num,IFNULL(stu_score,0) FROM t_student;
-- if(條件,條件成立執行,不成立執行)
SELECT stu_num,IF(stu_score>90,'優秀','不優秀') FROM t_student;
數學函式
round(數值):四捨五入
ceil(數值):向上取整,返回>=該引數的最小整數
floor(數值):向下取整,返回<=該引數的最大整數
truncate(數值,保留小數的位數):截斷,小數點後截斷到幾位
mod(被除數,除數):取餘,被除數為正,則為正;被除數為負,則為負
rand():獲取隨機數,返回0-1之間的小數
日期函式
now():返回當前系統日期+時間
curdate():返回當前系統日期,不包含時間
curtime():返回當前時間,不包含日期
可以獲取指定的部分,年、月、日、小時、分鐘、秒 YEAR(日期),MONTH(日期),DAY(日期) ,HOUR(日期) ,MINUTE(日期) SECOND(日期)str_to_date:將日期格式的字元轉換成指定格式的日期
SELECT STR_TO_DATE(‘1998-3-2’, ‘%Y-%m-%d’);
date_format:將日期轉換成字串
SELECT DATE_FORMAT(NOW(), ‘%y年%m月%d日)’) AS output ;
datediff(big,small):返回兩個日期相差的天數
– 數學函式
SELECT ROUND(4.1);-- 四捨五入
SELECT CEIL(4.1); -- 向上取整
SELECT FLOOR(4.9);-- 向下
SELECT TRUNCATE(3.3353,2); -- 截斷 保留指定位數的小數
SELECT RAND();-- 獲得0-1之間的隨機數
– 日期函式
SELECT NOW();
SELECT CURDATE();
SELECT CURTIME();
SELECT YEAR(stu_reg_time) FROM student
SELECT MONTH(stu_reg_time) FROM student
SELECT DAY(stu_reg_time) FROM student
-- 將字串日期 轉為 日期格式
SELECT STR_TO_DATE('2020-10-10','%Y,%m,%d') FROM student
-- 將日期格式化為字串
SELECT DATE_FORMAT(stu_reg_time,'%Y年%m月')FROM student
-- 計算兩個日期之間的 天數差
SELECT DATEDIFF('2021-1-12','2021-1-1');
%Y | 年,4 位 |
%m | 月,數值(00-12) |
%d | 月的天,數值(00-31) |
%H | 小時 (00-23) |
%i | 分鐘,數值(00-59) |
%s | 秒(00-59) |
%f | 微秒 |
%T | 時間, 24-小時 (hh:mm:ss) |
%j | 年的天 (001-366) |
%w | 周的天 (0=星期日, 6=星期六) |
分組函式
- 功能:用作統計使用,又稱為聚合函式或統計函式或組函式
分類:sum 求和、avg 平均值、max 最大值、min 最小值、count 計數(非空) - 都會把為空的過濾掉
SELECT SUM(`stu_score`) FROM t_student;
SELECT MAX(`stu_score`) FROM t_student;
SELECT MIN(`stu_score`) FROM t_student;
SELECT AVG(`stu_score`) FROM t_student;
- – count函式的一般使用count(*)用作統計行數 * 所有列,遇到一個為空的列,重新找不為空的進行統計
- – 列的值為null不會被統計 一般使用主鍵或則*
SELECT COUNT(stu_sex) FROM t_student;
SELECT stu_sex, COUNT (*) FROM t_student; GROUP BY stu_sex