【MySQL基础】_第二篇 --DML_DQL

● 数据操纵语言DML(Data Manipulation Language)
● 常用语句: insert,delete,update
插入数据 方式1: INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2…..,值n);

方式2: INSERT INTO 表名 set 列名1=值1,..列名n=值n;

方式3: INSERT INTO 表名(列1,列2……,列n) VALUES(值1,值2…..,值n),(值1,值2…..,值n);

方式4:INSERT INTO 表名(列1,列2……,列n) 查询语句(查询的列数与插入列数匹配)

-- DML 数据操作 增 修 删
INSERT INTO student(NAME,gender,birthday,phone,height,reg_time)VALUES('詹姆斯','男','1985-2-3','1522222333',1.98,NOW())
 
INSERT INTO student SET NAME='科比',gender='男',birthday='1986-2-3',phone='156333333'
 
INSERT INTO student(NAME,gender,birthday,phone,height,reg_time)
                    VALUES('库里','男','1998-2-3','1522253242',1.88,NOW()),
                          ('欧文','男','1995-2-3','1522226343',2.12,NOW())
                              
INSERT INTO stu(number,NAME,gender,birthday,phone,height,reg_time)SELECT * FROM student
 
-- 修改记录  注意条件
UPDATE stu SET NAME='c罗',height=1.70 WHERE number = 1
 
-- 删除
DELETE FROM stu 
 
DELETE FROM student WHERE number = 2 
 
INSERT INTO student(NAME,gender,birthday,phone,height,reg_time)VALUES('杜兰特','男','1985-5-3','152222223',1.98,NOW())
 

-- sql - DQL  数据查询
● DQL(Data Query Language)数据查询语言查询是使用频率最高的一个操作,可以从一个表中查询数据,也可以从多个表中查询数据。

● 基础查询

● 语法:

select 查询列表 from 表名;

● 特点:

查询列表可以是:表中的字段、常量、表达式、函数查询的结果是一个虚拟的表格

-- 查询指定的列
SELECT NAME,gender,birthday,phone FROM student
 
-- 查询所有的列  *-所有的列   查询的结果是虚拟的表格, 不能操作,是只读的.
SELECT * FROM student
 
-- 查询结果进行算术运算  + - * /
SELECT NAME,height+1 FROM student
 
-- 去除重复数据   查询结果中所有的列都相同,视为重复数据
-- DISTINCT关键字去除重复数据
SELECT DISTINCT NAME,gender FROM student
 
 
-- 函数  
-- 单行函数: 会对查询中的每一行数据进行处理 
-- 字符函数
-- length(列名)   以字节为单位
SELECT NAME,LENGTH(NAME),gender FROM  student
 
-- CHAR_LENGTH(列名) 以字符为单位
SELECT NAME,CHAR_LENGTH(NAME),gender FROM  student
 
-- concat(str1,str2,str3) 连接多个字符串   as  别名
SELECT CONCAT(NAME,":",CHAR_LENGTH(NAME)) AS NAME,gender FROM  student
 
-- upper()  lower()
SELECT UPPER(NAME),LOWER(NAME) FROM student
 
-- substring(字符串,开始位置,截取的长度)   开始位置从1开始
SELECT SUBSTRING(NAME,1,3) FROM student
 
-- instr(字符串,指定的字符)  返回指定字符首次出现的位置   找不到返回0,
SELECT INSTR(NAME,'o') FROM student
 
-- trim(字符串)  默认是去掉字符串前后的空格
SELECT TRIM(NAME),NAME FROM student
 
-- trim(指定的子串 from 字符串)  可以去掉前后指定的子串
SELECT TRIM('a' FROM NAME),NAME FROM student
 
-- 左填充  右填充  到指定长度
SELECT LPAD(NAME,5,'a'),RPAD(NAME,5,'b') FROM student
 
-- replace(列,'old','new')
SELECT REPLACE(NAME,'o','O') FROM student

● 单行函数
• 逻辑处理
case when 条件 then 结果1 else 结果2 end; 可以有多个when

ifnull(被检测值,默认值)函数检测是否为null,如果为null,则返回指定的值,否则返回原本的值

if函数:if else的 效果     if(条件,结果1,结果2)

-- case when 条件  then 条件成立结果  else  不成立结果 end;
SELECT
  NAME,
  gender,
  (CASE WHEN height>=2 THEN '高个子' ELSE '正常身高' END)AS height
FROM
  Student
 
SELECT
  NAME,
  gender,
  (CASE WHEN height>=2 THEN 'A'
        WHEN height>=1.8 THEN 'B'
        ELSE 'C' END)AS height
FROM
  student
 
 
-- ifnull(列名,'为空时默认信息')  
SELECT
  NAME,
  gender,
  IFNULL(height,'暂未录入身高信息') AS height
FROM
  student
  
 
 -- if(条件,'结果1','结果2')
 SELECT
  NAME,
  gender,
  IF(height>=2,'高个子','正常')AS height
FROM
  Student

● 数学函数
round(数值):四舍五入

ceil(数值):向上取整,返回>=该参数的最小整数

floor(数值):向下取整,返回<=该参数的最大整数

truncate(数值,保留小数的位数):截断,小数点后截断到几位

mod(被除数,除数):取余,被除数为正,则为正;被除数为负,则为负

rand():获取随机数,返回0-1之间的小数

SELECT NAME,gender,ROUND(height),CEIL(1.1),FLOOR(1.9) FROM student
 
SELECT NAME,gender,TRUNCATE(height,1),height,RAND() FROM student
●日期函数
 日期函数

now():返回当前系统日期+时间

curdate():返回当前系统日期,不包含时间

curtime():返回当前时间,不包含日期

可以获取指定的部分,年、月、日、小时、分钟、秒

YEAR(日期列),MONTH(日期列),DAY(日期列) ,HOUR(日期列) ,MINUTE(日期列)SECOND(日期列)

str_to_date(字符串格式日期,格式):将日期格式的字符转换成指定格式的日期

date_format(日期列,格式):将日期转换成字符串

datediff(big,small):返回两个日期相差的天数


-- 日期函数
-- now()  年月日 时分秒 系统当前时间
-- CURDATE() 年月日
-- CURTIME() 时分秒 
 
SELECT NOW(),CURDATE(),CURTIME() FROM student
-- year(日期) 将日期格式化为年
SELECT YEAR(birthday),MONTH(birthday) FROM student 
 
-- STR_TO_DATE('2003-3-3','%Y-%m-%d') 将字符串日期 格式化为 日期类型
SELECT STR_TO_DATE('2003-3-3','%Y-%m-%d') FROM student
 
-- DATE_FORMAT(birthday,'%Y-%m') 将日期格式化为指定的字符串
SELECT DATE_FORMAT(birthday,'%Y-%m') FROM student
 
-- DATEDIFF(CURDATE(),birthday) 计算两个日期之间的相差的天数
SELECT DATEDIFF(CURDATE(),birthday) FROM student
 

● 分组函数
功能:用作统计使用,又称为聚合函数或统计函数或组函数

分类:sum 求和、avg 平均值、max 最大值、min 最小值、count计数(非空)

-- 分组函数  聚合函数(查询多行,返回一行) 统计函数
 
SELECT SUM(height) FROM student  -- 求和
SELECT AVG(height) FROM student  -- 平均值
SELECT MAX(height) FROM student  -- 最大值
SELECT MIN(height) FROM student  -- 最小值
SELECT COUNT(*) FROM student     -- 统计个数
● 条件查询
使用WHERE 子句,将不满足条件的行过滤掉,WHERE 子句紧随FROM子句。

语法:select from where

比较

         =, != 或<>, >, =, <=

逻辑运算

        and    与

        or       或

        not     非

-- 条件查询
-- select * from 表名  where  条件
 
-- and 并且
SELECT * FROM  student  WHERE gender = '男' AND height > 1.80
 
-- or 多个条件只需要满足一个即可
SELECT * FROM  student  WHERE gender = '男' OR height > 1.60
 
SELECT * FROM  student  WHERE gender != '男'
SELECT * FROM  student  WHERE gender <> '女'
 
-- like '库%' 模糊匹配
SELECT * FROM student WHERE NAME LIKE '库%'
 
SELECT * FROM student WHERE height>=1.65 AND height <=1.98
 
-- BETWEEN 1.65 AND 1.98 两者之间
SELECT * FROM student WHERE height BETWEEN 1.65 AND 1.98
 
-- in(值1,值2,值n) 在给定的值中
SELECT * FROM  student WHERE height IN(1.78,1.88,1.98)
 
SELECT * FROM  student WHERE height  NOT IN(1.78,1.88,1.98)
 
-- 查询身高为null值的数据
SELECT* FROM student WHERE height  IS NULL
 
SELECT* FROM student WHERE height  IS NOT NULL

1、UNION 的语法如下:

[SQL 语句 1]

UNION

[SQL 语句 2]

2、UNION ALL 的语法如下:

[SQL 语句 1]

UNION ALL

[SQL 语句 2]

当使用union 时,mysql 会把结果集中重复的记录删掉,而使用unionall ,mysql 会把所有的记录返回,且效率高于union 。

-- union 将多个查询结果合并, 合并时,列数必须一致,  去除重复数据
SELECT NAME,gender FROM student WHERE gender   = '男'
  UNION
SELECT NAME,gender FROM student WHERE  number>1
 
-- union all 只是将查询的多个结果合并, 不会去除重复数据
SELECT NAME,gender FROM student WHERE gender   = '男'
  UNION ALL
SELECT NAME,gender FROM student WHERE  number>1
• 排序
查询结果排序,使用 ORDER BY

子句排序order by 排序列ASC/DESC

asc代表的是升序,desc代表的是降序,如果不写,默认是升序order by子句中可以支持单个字段、多个字段

-- 排序   order by 列   asc(升序) desc(降序)
 SELECT * FROM student WHERE number>0 ORDER BY number ASC
  
 SELECT * FROM student WHERE number>0 ORDER BY number DESC 
 
 SELECT * FROM student WHERE number>0 ORDER BY height ASC
 
 SELECT * FROM student WHERE number>0 ORDER BY reg_time DESC
 
 SELECT * FROM student WHERE number>0 ORDER BY height ASC,reg_time ASC
• 数量限制
limit子句:对查询的显示结果限制数目(sql语句最末尾位置)

 -- 数量限制   实现分页查询   limit 开始位置,每次查询的数量
 SELECT * FROM student WHERE number>0 ORDER BY number ASC LIMIT 0,3
 
 SELECT * FROM student WHERE number>0 ORDER BY number ASC LIMIT 3,3
 
 SELECT * FROM student WHERE number>0 ORDER BY number ASC LIMIT 6,3
 
•分组查询
语法:

select 分组函数,列(要求出现在group by的后面)

from 表 [where 筛选条件]

group by 分组的列表

[having 分组后的筛选]

[order by 子句]

-- 分组查询  
-- 分组--在一些统计场景中,按照某一个条件进行区分(分组)
-- 统计时, 按照性别,  班级, 年级 , 部门 ,年份  月份
-- 把满足某个条件的数据,分到同一个组中, 每个组内单独进行处理
 
-- 查询 男生,女生各有多少人    每个年级各有多少  每个部门各有多少人
   -- 分组统计 男生组统计一次,  女生组统计一次
  SELECT COUNT(*),gender FROM student  GROUP BY gender
  SELECT MAX(height),gender FROM student  GROUP BY gender
  
  
  SELECT COUNT(*),DATE_FORMAT(reg_time,'%Y-%m') FROM student  GROUP BY DATE_FORMAT(reg_time,'%Y-%m')
 
 
  -- 统计男生女生各多少人
   SELECT COUNT(*),gender FROM student  GROUP BY gender
   
   -- 男生和女生谁的人数大于2
   -- HAVING COUNT(*)>2             having    条件 是对分组后的结果进行条件筛选
   SELECT COUNT(*),gender FROM student    GROUP BY gender  HAVING COUNT(*)>2
 


                        

  • 19
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值