草庐IT

day03-MySQL基础知识02

liyuelian 2023-03-28 原文

MySQL基础知识02

4.CRUD

数据库CRUD语句:增(create)、删(delete)、改(update)、查(Retrieve)

  1. Insert 语句 (添加数据)
  2. Update 语句(更新数据)
  3. Delete 语句(删除数据)
  4. Select 语句 (查找数据)

指对数据库中表记录的操作(DML 操作)

注意:

alter属于DDL,用来修改基本表,是对表的结构进行操作,比如对字段增加,删除,修改类型;

DML 操例,如update是用来修改表中的数据,修改某一行某一列的值

对行是数据操纵DML(update),对列是数据定义DDL(alter)

4.1Insert语句

  • 使用INSERT 语句向表中插入数据
INSERT INTO tablename [(column [,column ...])]
VALUES 	(value[, value...]);

例子

  1. 创建一商品表goods(id int, goods_name varchar(10),price double);
  2. 添加两条记录
# 练习insert语句
-- 1. 创建一商品表goods(id int, goods_name varchar(10),price double);
CREATE TABLE goods(
	id INT,
	goods_name VARCHAR(10),
	price DOUBLE)
	
-- 2. 添加两条记录
INSERT INTO goods (id,goods_name,price)
	VALUES(10,'华为手机',2000);
	
INSERT INTO goods (id,goods_name,price)
	VALUES(20,'苹果手机',3000);

SELECT * FROM goods;
  • INSERT语句注意事项

细节说明:

  1. 插入的数据应该与字段的数据类型相同,比如把 'abc' 添加到 int 类型会错误

  2. 数据的长度应在列的规定范围之内,例如:不能将一个长度为80的字符串加入到长度为40的列中

  3. 在values中列出的数据位置必须与被加入的列的排列位置对应

  4. 字符和日期型数据应包含在单引号中

  5. 列可以插入空值[前提是该字段允许为空],insert into table value(null)

  6. insert into table_name(列名...) values (),(),() 形式添加多条记录

  7. 如果是给表中的所有字段添加数据,可以不写前面的字段名称

  8. 默认值的使用,当不给某个字段值时,如果有默认值就会添加默认值,否则报错

    如果某个列没有指定not null,那么当添加数据时,没有给定值,则会默认给null

    如果我们希望指定某个默认值,可以在创建表时指定

-- - INSERT语句注意事项
-- 细节说明:
-- 1. 插入的数据应该与字段的数据类型相同
INSERT INTO goods VALUES('北京','小米手机',2000)-- 失败,id对应的列类型是int

-- 2. 数据的长度应在列的规定范围之内,例如:不能将一个长度为80的字符串加入到长度为40的列中
INSERT INTO goods VALUES(40,'vovo手机vovovovo手机vovovovo手机vovo',2000)-- 失败

-- 3. 在values中列出的数据位置必须与被加入的列的排列位置对应
INSERT INTO goods (goods_name,id,price)-- 成功,即使改变了列属性的位置,只要值是对应的,就ok
	VALUES('vivo手机',50,1800)


-- 4. 字符和日期型数据应包含在单引号中
INSERT INTO goods VALUES(60,小米手机,2000)-- 失败,字符串应该加上单引号

-- 5. 列可以插入空值[前提是该字段允许为空],insert into table value(null)
INSERT INTO goods (id,goods_name,price)
	VALUES(11,'boluo手机',NULL)-- 成功,该字段允许为空

-- 6. insert into table_name(列名...) values (),(),() 形式添加多条记录
INSERT INTO goods VALUES(13,'三星手机',2300),(14,'四星手机',2300)-- ok

-- 7. 如果是给表中的所有字段添加数据,可以不写前面的字段名称
INSERT INTO goods (id) VALUES(66); -- ok,指定了字段

-- 8. 默认值的使用,当不给某个字段值时,如果有默认值就会添加默认值,否则报错
	-- 如果某个列没有指定not null,那么当添加数据时,没有给定值,则会默认给null
INSERT INTO goods (id,goods_name) 
	VALUES(88,'格力手机');-- 这里的price默认设为null
SELECT * FROM goods;
		
-- 如果我们希望指定某个默认值,可以在创建表时指定
-- 例如
CREATE TABLE goods2 (
	id INT ,
	goods_name VARCHAR(10),
	price FLOAT NOT NULL DEFAULT 100);
INSERT INTO goods2 (id,goods_name) VALUES(1,'大西瓜手机');
SELECT * FROM goods2;

goods表:

goods2表:

4.2Update语句

  • 语法:
UPDATE tab_name 
	SET col_name1=expr1[, col_name2=expr2...]
	[WHERE where_definition]

例子

要求:在上面创建的epm表中修改表中的记录

  1. 将所有员工的薪水改为5000元
  2. 将姓名为‘小妖怪’的员工薪水改为3000元
  3. 将老妖怪的薪水在原有的基础上加1000元
-- 要求:在上面创建的epm表中修改表中的记录
SELECT * FROM emp

-- 1. 将所有员工的薪水改为5000元
UPDATE emp SET salary = 5000


-- 2. 将姓名为‘小妖怪’的员工薪水改为3000元
UPDATE emp SET salary = 3000 WHERE user_name = '小妖怪'

-- 3. 将老妖怪的薪水在原有的基础上加1000元
INSERT INTO emp 
	VALUES(200,'老妖怪','1990-1-1','2004-4-12 12:22:09','捶背的',5000,'给大王捶背','111')
 
 UPDATE emp 
	SET salary = salary + 1000, job='出主意的'
	WHERE user_name = '老妖怪'

  • 使用细节
  1. UPDATE 语法可以用新值更新原有表行中的各列
  2. set子句指示要修改哪些列和要给予哪些值
  3. WHERE子句指定应更新哪些行,如果没有WHERE子句,则更新所有的记录。因此要慎用
  4. 如果需要修改多个字段,可以通过set字段1=值1,字段2=值2...

4.3Delete语句

  • 语法
delete from tbl_name 
		[WHERE where_definition]

例子

-- delete语句演示
-- 删除表中名称为'老妖怪'的记录
DELETE FROM emp WHERE user_name ='老妖怪'

-- 删除表中所有记录
DELETE FROM emp

SELECT * FROM emp

  • 使用细节
  1. 如果不使用子句,将删除表中所有数据
  2. delete语句不能删除某一列的值(可使用update设为null或者 '')
  3. 使用delete语句仅删除记录,不删除表本身。如果要删除表,使用drop 语句:drop table 表名;

4.4Select语句(单表)

4.4.1基本查询

SELECT [DISTINCT] * |{column1,column2,column3..}
	FROM table_name;
  • 注意事项
  1. select指定查询哪些列的数据
  2. column指定列名
  3. *号代表查询所有列
  4. from指定查询哪张表
  5. distinct可选,指显示结果时,是否去掉重复数据

课堂练习

  1. 查询表中所有学生的信息
  2. 查询表中所有学生的姓名对应的英语成绩
  3. 过滤表中的重复数据distinct
  4. 要过滤的记录,每个字段都相同才会去重
CREATE TABLE student (
	id INT NOT NULL DEFAULT 1,
	`name` VARCHAR(20) NOT NULL DEFAULT '',
	chinese FLOAT NOT NULL DEFAULT 0.0,
	english FLOAT NOT NULL DEFAULT 0.0,
	math FLOAT NOT NULL DEFAULT 0.0
);

-- 先插入数据
INSERT INTO student(id,`name`,chinese,english,math) 
	VALUES(1,'张飞',89,78,90),
		(2,'宋江',67,98,56),
		(3,'关羽',87,78,77),
		(4,'赵云',88,98,90),
		(5,'欧阳锋',55,85,45),
		(6,'黄蓉',75,65,30),
		(7,'刘备',98,57,88)

-- 1. 查询表中所有学生的信息
SELECT * FROM student;
-- 2. 查询表中所有学生的姓名对应的英语成绩
SELECT `name`,english FROM student
-- 3. 过滤表中的重复数据distinct
SELECT DISTINCT english FROM student;
-- 4. 要过滤的记录,(要查询的)每个字段都相同才会去重	

4.4.2使用表达式对查询的列进行运算

SELECT *|{ column1|expression, column2|expression, ...}
	FROM tablename;
  • 在select语句中可使用as语句
SELECT column_name as 别名 from 表名;

练习

  1. 统计每个学生的总分
  2. 给所有学生总分加10分
  3. 使用别名表示学生分数
-- 1. 统计每个学生的总分
SELECT `name`,(chinese+english+math) FROM student;

-- 2. 给所有学生总分加10分
SELECT `name`,(chinese+english+math+10) FROM student;

-- 3. 使用别名表示学生分数
SELECT `name` AS `名字`,(chinese+english+math) AS `total` FROM student;

image-20221003162112889

4.4.3在where子句中经常使用的运算符

使用wher子句进行过滤查询

练习1

-- 1. 查询姓名为赵云的学生的成绩
SELECT * FROM Student 
	WHERE `name` = '赵云'
	
-- 2. 查询英语成绩大于90分的同学
SELECT * FROM Student 
	WHERE english > 90
	
-- 3. 查询总分大于200分的所有同学
SELECT * FROM Student 
	WHERE (chinese + english + math) > 200

-- 4. 查询math大于60且id大于4的学生成绩
SELECT * FROM student 
	WHERE math > 60 AND id > 4

-- 5. 查询英语成绩大于语文成绩的同学
SELECT * FROM student 
	WHERE math > chinese

-- 6. 查询总分大于200分的,且数学成绩小于语文成绩的姓宋的同学
-- 宋% 表示名字以宋开头的
SELECT * FROM student 
	WHERE (chinese + english + math) > 200 
	AND math < chinese 
	AND `name` LIKE '宋%'

练习2

-- 查询英语成绩分数在80-90之间的同学
SELECT * FROM student
	WHERE english BETWEEN 80 AND 90
	
-- 查询数学成绩分数为89,90,91之间的同学(也可以用or)
SELECT * FROM student
	WHERE math IN(89,90,91)
	
-- 查询所有姓宋的学生的成绩
SELECT * FROM student
	WHERE `name` LIKE '宋%'
	
-- 查询数学分数大于80,语文分大于80的同学	
SELECT * FROM student
	WHERE math > 80 AND chinese >80

练习3

-- 查询语文在70到80之间的同学
SELECT * FROM student
	WHERE  chinese <= 80 AND chinese >=70

-- 查询总分为189,190,191的同学
SELECT * FROM student
	WHERE (chinese + english + math) IN (189,190,191)
	
-- 查询所有姓李或姓宋的学生的成绩
SELECT * FROM student
	WHERE `name` LIKE '宋%' OR `name` LIKE '李%'
	
-- 查询数学比语文多10分的同学
SELECT * FROM student
	WHERE  chinese = math+10

4.4.4使用order by 子句排序查询结果

SELECT column1,column2,column3...
	FROM table;
	order by column asc|desc,...
  1. order by 指定排序的列,排序的列既可以是表中的列名,也可以是select语句后指定的列名
  2. asc升序(默认),desc降序
  3. order by子句应位于select语句的结尾

练习

-- 对数学成绩排序后输出(升序)
SELECT * FROM student
	ORDER BY math
	
-- 对总分按从高到低的顺序输出
SELECT `name`,(chinese + math +english)AS total FROM student
	ORDER BY total descd
	
-- 对姓张的学生成绩排序输出(升序)
INSERT INTO student(id,`name`,chinese,english,math) 
	VALUES(8,'张三',65,45,99)
	
SELECT `name`,(chinese + math +english)AS total FROM student
	WHERE `name` LIKE '张%'
	ORDER BY total

有关day03-MySQL基础知识02的更多相关文章

  1. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  2. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  3. postman——集合——执行集合——测试脚本——pm对象简单示例02 - 2

    //1.验证返回状态码是否是200pm.test("Statuscodeis200",function(){pm.response.to.have.status(200);});//2.验证返回body内是否含有某个值pm.test("Bodymatchesstring",function(){pm.expect(pm.response.text()).to.include("string_you_want_to_search");});//3.验证某个返回值是否是100pm.test("Yourtestname",function(){varjsonData=pm.response.json

  4. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  5. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  6. 牛客网专项练习30天Pytnon篇第02天 - 2

    1.在Python3中,下列关于数学运算结果正确的是:(B)a=10b=3print(a//b)print(a%b)print(a/b)A.3,3,3.3333...B.3,1,3.3333...C.3.3333...,3.3333...,3D.3.3333...,1,3.3333...解析:    在Python中,//表示地板除(向下取整),%表示取余,/表示除(Python2向下取整返回3)2.如下程序Python2会打印多少个数:(D)k=1000whilek>1:    print(k)k=k/2A.1000 B.10C.11D.9解析:    按照题意每次循环K/2,直到K值小于等

  7. ruby-on-rails - 无法安装 mysql2 0.3.14 gem - 2

    我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby​​目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin

  8. ruby - 如何使用 ruby​​ mysql2 执行事务 - 2

    我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi

  9. ruby-on-rails - rails : Find tasks that were created on a certain day? - 2

    我有一个任务列表(名称、starts_at),我试图在每日View中显示它们(就像iCal)。deftodays_tasks(day)Task.find(:all,:conditions=>["starts_atbetween?and?",day.beginning,day.ending]end我不知道如何将Time.now(例如“2009-04-1210:00:00”)动态转换为一天的开始(和结束),以便进行比较。 最佳答案 deftodays_tasks(now=Time.now)Task.find(:all,:conditio

  10. ruby - 我怎样才能更好地了解/了解更多关于 Ruby 的知识? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?

随机推荐