Mysql基本语法DML和DQL语句的总结(笔记)

Mysql基本语法DML和DQL语句的总结(笔记)

DML语句简介:数据库操作语句

准备工作:首先创建库test_dml,在test_dml库中创建一个student表其中有id,姓名,年龄,性别,住址这些字段.

CREATE DATABASE test_mdl;
USE test_mdl;
CREATE TABLE student(
    id INT ,  		-- 学号
    NAME VARCHAR(10), 	-- 姓名
    age INT,  		-- 年龄
    gender VARCHAR(5), 	-- 性别
    address VARCHAR(50) -- 住址
);
-- 查看表的信息
SELECT * FROM student;

运行结果
在这里插入图片描述

1.DML语句之插入

给学生表中插入数据

语法
​	方式1:insert into 表名 values(值1,值2,值3,值4...值n); 插入全部数据
​	方式2:插入部分字段,没有插入的字段,默认值就是null, 也支持一次性插入多条数据
		insert into 表名(字段名称1,字段名称2....) values(值1,值2...) ;

代码:

-- 方式1
INSERT INTO student VALUES(1,'高圆圆',42,'女','西安市');
	-- 插入表的数据支持 :一次插入多条数据
	-- insert into 表名 values(值1,值2,值3,值4...值n),(值1,值2,值3,值4...值n);
INSERT INTO student VALUES(2,'文章',35,'男','咸阳市'),
(3,'马伊琍',40,'女','上海市'),(4,'马保国',56,'男','宝鸡市');

-- 方式2
-- 插入部分字段,没有插入的字段,默认值就是null  这里没有插入address字段
INSERT INTO student(id,NAME,age,gender) VALUES(5,'王宝强',35,'男');
-- 也支持一次性插入多条数据  这里没有插入address字段
INSERT INTO student(id,NAME,age,gender) VALUES(6,'张三丰',60,'男'),(7,'令狐冲',38,'男');

-- 查看表的信息
SELECT * FROM student;

运行结果:
在这里插入图片描述

注意事项:
1)插入的这些值必须要和表中的字段对应上; 先后顺序保证一致!
2)目前没有加入"数据库约束",可以插入非法数据,举例:id重复 ,后期需要使用数据库约束来限定用户的操作表的行为!

举例:

-- 插入一个学生id为7的
INSERT INTO student VALUES(7,'张佳宁',32,'女','西安市');
-- 查看表的信息
SELECT * FROM student;

运行结果:
在这里插入图片描述

2.DML语句之修改表记录

一般实际开发中修改:都是带条件修改 (推荐)

语法1:带条件修改

​ update 表名 set 字段名称 = 值 where 条件 ;

举例:

-- 需求:将name为张佳宁的学生id改为8
UPDATE student SET id = 8 WHERE NAME = '张佳宁';
-- 需求:修改id为6的学生的姓名为 '姚笛' (id字段在实际开发中:都是非业务字段,以后唯一的)
UPDATE student SET NAME = '姚笛' WHERE id =  6;
-- 查看表的信息
SELECT * FROM student;

运行结果:
在这里插入图片描述

语法2:带条件修改,一次性修改多个字段

update 表名 set 字段名称1 = 值 ,字段名称2 =值2.... where 条件;

举例:

-- 需求:将id为6的学生 的年龄改为25,性别改为女,地址改为上海
UPDATE student SET age = 25,gender = '女',address= '上海市' WHERE id = 6;
-- 查看表的信息
SELECT * FROM student;

运行结果:
在这里插入图片描述

语法3:不带条件 属于批量修改 (部分场景可以用的)

​	update 表名 set 字段名称= 值,字段名称2 =值2....

代码举例:

-- 需求:将address全部改为鄠邑区
UPDATE student SET address = '鄠邑区';
-- 查看表的信息
SELECT * FROM student;

运行结果:
在这里插入图片描述

3.DML语句之删除表的记录

语法
​	delete  from 表名 where 条件 ; 带条件删除记录 (使用的非业务字段id删除)

代码举例:

-- 需求:删除id为7的学生信息
DELETE FROM student WHERE id = 7;
-- 查看表的信息
SELECT * FROM student;

运行结果:
在这里插入图片描述

删除全表数据
		方式1:delete from 表名 :删除全表数据
		方式2:truncate table 表名; 删除全表数据

delete from 表名 和 truncate table 表名 :两个区别?
共同点:都是可以删除全表的记录的;
不同点:
delete from 表名 ; 仅仅只是将表的全部记录删除了,表还在!
它针对id(非业务字段:设置主键并且自增长),它不影响自增长主键的这个值; (数据库约束后面讲)
truncat table 表名; 将表所有数据删除,而且还会把删除之后,
自动创建一个张一模一样的表,影响自增主键的值!

举例:
​	先删除之前的学生表;
​	创建一个学生表,对id字段加入主键(不断的自增1)进行约束

代码:

-- 删除之前的学生表;
DROP TABLE student;
-- 创建一个学生表,id 加入主键(非空且唯一)和自增长(不断的自增1)约束
CREATE TABLE student(
	id INT PRIMARY KEY AUTO_INCREMENT, -- id主键并且自增长
	NAME VARCHAR(20),-- 姓名
	age INT 
);
-- 一次插入4条
INSERT INTO student(NAME,age) VALUES
			('高圆圆',42),
			('张佳宁',32),
			('文章',35),
			('王宝强',38);
-- 查看表的信息
SELECT * FROM student;

运行结果:
在这里插入图片描述

自增长的id可以自己给个值

代码;

-- 添加一个id为15的
INSERT INTO student  VALUES(15,'高圆圆2',42);
-- 添加一个没有id的     id会自动改为16
INSERT INTO student(NAME,age) VALUES('姚笛',35);
-- 查看表的信息
SELECT * FROM student;

运行结果:
在这里插入图片描述

4.DQL语句最通用的语法:查询表的全部数据

*代表所有字段,仅仅是自己玩的时候可以用,实际开发中不能用*,需要写上全部的字段名称
SELECT * FROM student ;

创建一个student3表,添加id,NAME,age,sex,address,math,english字段,添加8个实例

代码:

CREATE TABLE student3 ( 
	 id INT, -- 编号
	 NAME VARCHAR(20), -- 姓名
	 age INT, -- 年龄 
	 sex VARCHAR(5), -- 性别 
	 address VARCHAR(100), -- 地址 
	 math INT, -- 数学
	 english INT -- 英语
  );
 INSERT INTO student3(id,NAME,age,sex,address,math,english) 
 VALUES (1,'马云',55,'男',' 杭州',66,78),
	(2,'马化腾',45,'女','深圳',98,87),
	(3,'马景涛',55,'男','香港',56,77),
	(4,'柳岩 ',20,'女','湖南',76,65),
	(5,'柳青',20,'男','湖南',86,NULL),
	(6,'刘德华',57,'男','香港 ',99,99),
	(7,'马德',22,'女','香港',99,99),
	(8,'德玛西亚',18,'男','南京',56,65);
-- 查看表的信息
SELECT * FROM student3;

运行结果:
在这里插入图片描述

5.DQL语句之数据库的查询语句.里面语法是最多的

5.1 最基本的查询语句 select

查询全表数据:select * from 表名;
SELECT * FROM student3 ;
实际开发中查询全部字段,把字段名称全部写上

代码举例:

SELECT 
	id,
	NAME,
	age,
	sex,
	address,
	math,
	english
FROM 
	student3;
运行结果和上边的效果一样,只是写法不同

查询全部字段的时候,给字段起一个别名 as ‘别名名称’ ,as省略

代码:

SELECT 
  id AS '编号',
  NAME AS '姓名',
  age AS '年龄',
  sex AS '性别',
  address  '地址',	  -- as 可以省略
  math  '数学成绩',		 -- as 可以省略
  english  '英语成绩' 	 -- as 可以省略
FROM
  student3;

运行结果:
在这里插入图片描述

-- 当表的名称比较长的时候,可以给表名起一个别名;
SELECT 
  s.`id` '学生编号',
  s.`name` '学生姓名',
  s.`age` '学生年龄',
  s.`sex` '学生性别',
  s.`address` '学生地址',
  s.`math` '数学成绩',
  s.`english` '英语成绩' 
FROM
  student3 s;-- 起了一个别名s 

运行结果:在这里插入图片描述

可以查询部分字段

代码:

-- 需求:查询学生的姓名以及数学和英语成绩
 SELECT 
	NAME '姓名',
	math '数学成绩',
	english '英语成绩'
 FROM
     student3;

运行结果:
在这里插入图片描述
代码:

-- 需求:查询学生的地址信息
SELECT 

	address
FROM 
	student3;

运行结果:
在这里插入图片描述

上图:有两个湖南和两个香港

字段冗余(重复度大)

字段去重 使用  DISTINCT 后面跟上字段名称  

代码:

SELECT  DISTINCT address FROM student3;

运行结果:
在这里插入图片描述

5.2 DQL语句之条件查询 where 关键字

  • 使用 赋值运算符=,比较运算符 <,<=,>=,>,!=, mysql中的不等于 <>
  • Java中逻辑运算符:&&,|| mysql推荐使用 and , or
  • 针对两个范围查询: 可以使用&&,可以使用and, 也可以 “字段名称 between 值1 and 值2”
-- 需求:查询年龄大于20岁的学生所有信息     
SELECT
	 *
FROM
	student3 
WHERE  
	age > 20;

运行结果:
在这里插入图片描述

-- 需求:查询年龄在20到30之间的学生的姓名,年龄,住址 ,数学和英语成绩信息
	-- 方式1:&& 逻辑双与
SELECT 
  NAME '姓名',
  age '年龄',
  address '住址',
  math '数学成绩',
  english '英语成绩' 
FROM
  student3 
WHERE age >= 20 && age <= 30; -- && 逻辑双与

	-- 方式2:mysql中使用and 并列关系
SELECT 
  NAME '姓名',
  age '年龄',
  address '住址',
  math '数学成绩',
  english '英语成绩' 
FROM
  student3 
WHERE age >= 20 AND age <= 30; -- and 连接

	-- 方式3:使用的between 值1 and 值2
SELECT
    NAME '姓名',
    age '年龄',
    address '住址',
    math '数学成绩',
    english '英语成绩' 
FROM
    student3 
WHERE 
	age BETWEEN 20 AND 30; -- between 值1 and 值2

运行结果:
在这里插入图片描述

三种方式运行结果相同

代码:

-- 需求:查询年龄是20岁学生的所有信息
SELECT  * FROM student3 WHERE age = 20;

运行结果:
在这里插入图片描述
代码:

-- 需求:查询年龄不是20岁的学生的所有信息
	-- 方式1:
SELECT * FROM student3 WHERE age != 20; -- != Java中 的用法
	-- 方式2:
SELECT * FROM student3 WHERE age <> 20;-- mysql中的不等于 <>

运行结果:
在这里插入图片描述

两种方式运行结果相同

代码:

-- 需求:查询年龄是18岁或者是20或者是45岁的学生的所有信息
	-- 方式1:Java中逻辑双或||
SELECT 
	* 
FROM 
	student3
WHERE 
	age = 18 || age =20 || age = 45; -- Java中逻辑双或||
	
	-- 方式2:or
SELECT 
	* 
FROM 
	student3
WHERE 
	age = 18 OR age =20 OR age = 45; -- Mysql中的or这个表示 或(并集)

	-- 方式3:上面这个格式优化为 in(值1,值2,值3..值n);in集合语句	
SELECT  
    *
FROM
    student3
WHERE 
	age IN(18,20,45);-- in集合语句

运行结果:
在这里插入图片描述

三种方式运行结果相同

Java语言中:去判断某个条件的内容为null ,mysql语言不支持这个格式 ==null

代码举例:

-- 需求:查询学生的英语成绩为null的学生所有信息
-- 执行下边这行语句会报错
select * from student3 where english == null;

运行结果:
在这里插入图片描述

正确语法:

​ mysql中判断某个字段为null,使用的语法是 is null

​ mysql中判断某个字段不为null,使用的语法是 is not null

正确代码:

-- 需求:查询学生的英语成绩为null的学生所有信息
SELECT * FROM student3 WHERE english IS NULL;

运行结果:
在这里插入图片描述
代码:

-- 需求:查询学生的英语成绩不为null的学生的所有信息
SELECT * FROM student3 WHERE english IS NOT NULL;	

运行结果:
在这里插入图片描述

关于int类型字段求和的时候,注意: int类型的值 + null 值 = null;

-- 需求:查询学生的姓名以及英语和数学总分
SELECT  
    NAME '姓名',
    (math+english) '总分'
FROM
    student3;

运行结果:
在这里插入图片描述

上面这种情况:不太友好,数学成绩有值,但是结果求和是null

mysql提供函数 ifnull(字段名称,值); 如果字段名称是null,给一个默认值

代码:

SELECT  
    NAME '姓名',
    (math+IFNULL(english,0)) '总分'
FROM
    student3;

运行结果:
在这里插入图片描述

5.3 DQL语句之 where条件后面加入模糊查询 —关键字 like

语法:

​ select 字段列表 from 表名 where 字段名称 like ‘%xxx%’ ;

​ 解释:

​ %:代表任何多个字符或者某个字符 (使用居多):网站门户系统—“搜索商品” ,模糊搜索
​ _:代表某个单个字符

代码:

-- 需求:查询所有姓马的学生信息
SELECT
    *
FROM
    student3
WHERE 
    NAME LIKE '%马%';

运行结果:
在这里插入图片描述
代码:

-- 查询学生姓名三个字符并且第二个字符是化的人
SELECT 
    *
FROM 	
     student3
WHERE 
     NAME  LIKE '_化_';

运行结果:
在这里插入图片描述
代码:

-- 查询姓名为三个字符的学生信息
SELECT 
    *
FROM 
	student3
WHERE 
	NAME LIKE '___' ;-- 这里是三个_

运行结果:
在这里插入图片描述

5.4 聚合函数查询 :针对int类型 :单行单列数据

格式:

​ select 聚合函数 from 表名 where 还可以指定条件;

  • count(字段名称):查询表中记录 ,字段名称使用都是id,非业务字段
  • avg(字段名称): 查询这个字段中平均值
  • sum(字段列表):求和函数
  • max(字段名称):最大值
  • min(字段名称):最小值

代码:

-- 需求:查询表的总记录数
-- select count(english) '总记录数' from student3; -- 前提条件使用业务字段查询,不能有null值
-- select count(ifnull(english,0)) '总记录数' from student3; 
SELECT COUNT(id) '总条数' FROM student3;

运行结果:
在这里插入图片描述
代码:

-- 查询数学平均分 avg(字段名称)
SELECT AVG(math) '数学平均分' FROM student3;

运行结果:
在这里插入图片描述
代码:

-- 数学和英语成绩求和的学生信息(姓名,和总分)
SELECT  
	SUM(math+IFNULL(english,0)) '总分'
FROM
	student3;

运行结果:
在这里插入图片描述
代码:

-- max()和min()
SELECT MAX(math) '数学最高分' FROM student3;

运行结果:
在这里插入图片描述

select语句嵌套select语句 — 子查询

代码:

-- 需求:查询出学生数学成绩大于 数学平均分的学生所有信息;
-- 使用where 条件 后面带上 比较运算符...

-- 1)查询数学平均分是多少
SELECT AVG(math) FROM student3; -- 79.5000
-- 2)查询大于数学平均分的学生信息
SELECT 
	*
FROM 
	student3
WHERE 
	math > 79.5000;
-- ----------------------------	
-- 嵌套方式:
SELECT 
	*
FROM 
	student3
WHERE 
	math >  (SELECT AVG(math) FROM student3);

运行结果:
在这里插入图片描述
代码:

-- 查询数学成绩最高分的学生的姓名,年龄,地址以及数学成绩;
-- 1)查询最高分是多少
SELECT  MAX(math) FROM student3; -- 99
-- 2)查询最高分是这个成绩的学生信息
SELECT 
    NAME '姓名',
    age '年龄',
    address '地址',
    math '数学成绩'
FROM 
    student3 
 WHERE 
	math = 99;
-- ---------------------------
-- 嵌套方式
SELECT 
    NAME '姓名',
    age '年龄',
    address '地址',
    math '数学成绩'
FROM 
    student3 
 WHERE 
	math = 
	(SELECT  MAX(math) FROM student3);

运行结果:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值