1. 程式人生 > 資料庫 >Mysql-03-DML資料操作語言-DQL-基礎查詢

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中的方法:將一組邏輯語句事先在資料庫中定義好,可以直接使用

好處:

  1. 隱藏了實現的細節
  2. 提高了程式碼的重用性質

呼叫:

  • 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