企业网站wap源码,佛山关键词排名工具,手机网站切图,福州网站建设 找燕狂徒 04目录
#x1f6a9;数据库操作
#x1f388;创建数据库
#x1f388;使用数据库
#x1f388;删除数据库
#x1f6a9;数据类型
#x1f6a9;表的操作
#x1f388;创建表
#x1f308;查看表结构
#x1f388;删除表
❗练习(综合运用)
#x1f5a5;️新增…目录
数据库操作
创建数据库
使用数据库
删除数据库
数据类型
表的操作
创建表
查看表结构
删除表
❗练习(综合运用)
️新增数据
单行数据 全列插入
多行数据 指定列插入
️查询Retrieve
全列查询
指定列查询
查询字段为表达式
别名
去重DISTINCT
排序ORDER BY
条件查询WHERE
✅select条件查询执行顺序 这是准备工作数据库是大小写不区分的所以我建议是大家都写小写可读性好。
数据库操作
创建数据库
创建数据库的语法就是 create database zyficl;
我们也可以加上 if not exists 代表的意思是 如果你现在创建的数据库存在那么就不添加反之添加。 如果你所创建的数据库已经存在但是你没有添加if not exists那么就会报错 所以我们以后可以加上上面一段那样就不会报错了 说明当我们创建数据库没有指定字符集和校验规则时系统使用默认字符集utf8校验规则 是utf8_ general_ ciMySQL的utf8编码不是真正的utf8没有包含某些复杂的中文字符。MySQL真正的utf8是使用utf8mb4建议大家都使用utf8mb4 设置字符集 CHARACTER SET 字符集; 所以最完美的写法就是 create database if not exists do_test character set utf8mb4; 使用数据库 因为我们再进入命令行中的时候默认是系统的数据库我们一般都不在系统默认的数据库下进行数据的增删查改而是在自己所建的数据库中对数据管理所以我们就要 进入自己的数据库中这时候我们就用到下面的语句 use 数据库名; 删除数据库 drop database [if exists] db_name;
上面增加数据库用到if not exists表示是否不存在 现在删除数据库需要用到if exists表示是否存在。 数据库删除以后内部看不到对应的数据库里边的表和数据全部被删除所以要慎重删除。 数据类型
我们下面会根据题目来针对性的对一些数据类型进行描述我们现在利用主要的几个类型 INT整型 比如 年龄商品编号身份证号等等这些是int类型。 DECIMAL(M, D)浮点数类型 钱价格这个基本上都是精确到小数位比如99.9 这里的decimal中的俩个参数分别是 M表示长度 D是代表小数点位数。比如99.9 M是3 D是1长度是3小数点位数是1.像100.0,100,1.25,都是不合法的。 VARCHAR(SIZE)字符串类型 并不说是size大小的而是如果你达到size大小的时候 是可变的。 CHAR(SIZE):字符类型 是不可变长的 TIMESTAMP日期类型 DATETIME:日期类型
后面再插入数据的时候会详细说明。 表的操作
需要操作数据库中的表时我们需要先使用数据库。 use 数据库名; 创建表
可以使用comment增加字段说明
CREATE TABLE table_name (field1 datatype, 字段 类型field2 datatype, 字段 类型field3 datatype 字段 类型
); 我们创建一个学生表里面包含的字段 姓名年龄密码性别身高体重生日留言) 查看表结构 删除表 -- 删除 stu_test 表
drop table stu_test;
-- 如果存在 stu_test 表则删除 stu_test 表
drop table if exists stu_test; ❗练习(综合运用) 商品 goods( 商品编号 goods_id 商品名 goods_name, 单价 unitprice, 商品类别 category, 供 应商 provider) 1.创建数据库 并且设置编码 utf8mb4 create database if not exists test_goodsdefault character set utf8mb4; 2.选择数据库 use test_goods; 3.创建goods表并添加字段 商品 goods( 商品编号 goods_id 商品名 goods_name, 单价 unitprice, 商品类别 category, 供 应商 provider) create table if not exists goods(goods_id int comment商品编号,goods_name varchar(32) comment商品名称,unitprice int comment单价.单位分,category varchar(12) comment商品分类,provider varchar(64) comment供应商名称); 对于钱最好的设定类型是int因为 0.5元相当于 50分. ️新增数据 个数类型要和表结构匹配。 现在创建一个学生表 drop table if exists student;
create table student(id int,sn int comment学号,name varchar(20) comment姓名,qq_mail varchar(20) commentqq邮箱) default character set utf8; 单行数据 全列插入 insert into 表名 values(值,值,值....); 插入两条记录value_list 数量必须和定义表的列的数量及顺序一致 insert into student values(100,10000,唐三藏,NULL);insert into student values(101,10001,孙悟空,1111); 多行数据 指定列插入 insert into 表名(列名,列名....)values(值,值.....); 只给某指定的列进行插入数据。其实就是增加行元素。 insert into student(id,sn,name)values(102,20001,曹孟德),(103,20002,孙仲谋); 补充 在MySQL中你可以使用DATETIME数据类型来表示日期和时间。DATETIME类型以YYYY-MM-DD HH:MM:SS的格式存储日期和时间。 以下是如何在MySQL中使用DATETIME类型的示例 CREATE TABLE example_table ( id INT AUTO_INCREMENT PRIMARY KEY, event_datetime DATETIME ); 在这个示例中我们创建了一个名为example_table的表其中包含一个名为event_datetime的DATETIME类型列。 你可以使用INSERT语句向表中插入日期时间值如下所示 INSERT INTO example_table (event_datetime) VALUES (2024-03-09 15:30:00); 你也可以使用DATETIME函数来获取当前日期时间 INSERT INTO example_table (event_datetime) VALUES (NOW()); 在检索数据时DATETIME值将以YYYY-MM-DD HH:MM:SS的格式返回。 ️查询Retrieve 全列查询 select*from 表名; //行和列都查询出来 这就是我们刚刚插入的数据。 我们新建一个表更加直观的用于下面的案例 -- 创建考试成绩表 create table if not exists exam_result(id int,name varchar(20),chinese decimal(3,1),math decimal(3,1),english decimal(3,1))default character set utf8; -- 插入测试数据 INSERT INTO exam_result (id,name, chinese, math, english) VALUES(1,唐三藏, 67, 98, 56),(2,孙悟空, 87.5, 78, 77),(3,猪悟能, 88, 98.5, 90),(4,曹孟德, 82, 84, 67),(5,刘玄德, 55.5, 85, 45),(6,孙权, 70, 73, 78.5),(7,宋公明, 75, 65, 30); 指定列查询 指定列的顺序不需要按定义表的顺序来 select 列名,列名,列名 from 表名; select id,name,english from exam_result; 我指定要查找姓名英语成绩id号从成绩表中 查询字段为表达式 查询每个学生语文数学英语的总成绩 select name,chineseenglishmath from exam_result; -- 表达式不包含字段
SELECT id, name, 10 FROM exam_result;
-- 表达式包含一个字段
SELECT id, name, english 10 FROM exam_result;
-- 表达式包含多个字段
SELECT id, name, chinese math english FROM exam_result; 补充 SELECT id, name, english 10 FROM exam_result; mysql是一个“客户端服务器”结构程度。我们看到上面的结果后我们得出一个结论把这一列所有的行带入到表达式中参与运算操作不会修改数据库服务器上原始的数据最终只是临时结果做计算服务器读出来的时候返回客户端以临时表的形式(只出现一次i 别名 为查询结果中的列指定别名表示返回的结果集中以别名作为该列的名称语法 select 列名 as 别名 from 表名; select name,mathenglishchinese as total from exam_result; 去重DISTINCT
我增加一个和唐三藏一样的数学成绩的陈陈然后我要去重相同的数学成绩 一列 我们看到最后的98.0和第一个98.0删除了最后只保留一个。
俩列
如果是俩列必须是俩者都相同才能去重如果俩者都相同只保留一个操作。不相同删除不了。 我现在插入一个姓名陈陈”数学成绩是98.0的
insert into exam_result (name,math) values (陈陈,98.0); 此时我来去重此时就剩下一个了。 排序ORDER BY
明确排序规则以行排列 但是比较的是列与列之间。
a.针对哪个列进行比较b.升序asc)降序(desc),默认是asc
select 列名 from 表名 order by 列名 (asc/desc/不写); 1. 没有 ORDER BY 子句的查询返回的顺序是未定义的永远不要依赖这个顺序 sql不加order by 此时查询结果数据顺序是不确定/无序 的因为我们在自己机器上做的是一些简单的操作顺序没变但是如果进行一些更复杂的操作就不一定了。意思就是如果我们查看全列表数据因为我们插入的数据都是简单的所以每次查看到的时候发现都是一样的排序但是如果我们操作的复杂那么会导致每次查看数据的时候就不一定是还是和之前一次是一样的。 我们不能依赖顺序尤其在代码中不能依靠上述顺序展开逻辑因为数据库没有承诺你这个数据库是有序的。所以在后来我们运用了复杂的操作每次操作展示的顺序是不同的是不确定。 2. NULL 数据排序视为比任何值都小升序(src)出现在最上面降序(desc)出现在最下面 3.使用表达式及别名排序 4. 可以对多个字段进行排序排序优先级随书写顺序 条件查询WHERE
会指定具体的条件按照条件针对数据进行筛选。 sql中没有使用表示比较相等。 NULL98NULL NULL200 NULL false 等于NULL 不安全例如 NULL NULL 的结果是 NULL 等于NULL 安全例如 NULL NULL 的结果是 TRUE(1)! , 不等于BETWEEN a0 AND a1 范围匹配[a0, a1]如果 a0 value a1返回 TRUE(1)IN (option, ...) 如果是 option 中的任意一个返回 TRUE(1)IS NULL 是 NULLIS NOT NULL 不是 NULLLIKE 模糊匹配。% 表示任意多个包括 0 个任意字符_ 表示任意一个字符 1.基本查询 -- 查询英语不及格的同学及英语成绩 ( 60 ) SELECT name, english FROM exam_result WHERE english 60; -- 查询语文成绩好于英语成绩的同学 SELECT name, chinese, english FROM exam_result WHERE chinese english --查询总分在 200 分以下的同学 select name,chineseenglishmath from exam_result where chineseenglishmath200; 如果我们用as别名 会报错所以我们要注意 WHERE条件可以使用表达式但不能使用别名。 ✅select条件查询执行顺序 1.遍历表中的每个记录2.当前记录值带入条件根据条件进行筛选 where3.如果这个记录条件成立就要保留进行表达式计算4.如果有order by所以都执行完之后在进行排序所以上面的order by可以定义别名 所以where可以使用表达式但是不能使用别名。 2.AND与OR and是且俩个都得成立才成立 or是或其实一个成立就成立 -- 查询语文成绩大于80分且英语成绩大于80分的同学 select name,chinese,english from exam_result where chinese80 and english80; -- 查询语文成绩大于80分或英语成绩大于80分的同学其中一个满足即可 -- 查询语文成绩大于80分或数学成绩大于70并且英语成绩大于70 的同学意思就是语文和数学成绩其中一个满足即可但是英语成绩必须大于70
我们不用记and优先级大于or我们只需要将or操作打上括号即可。 AND的优先级高于OR在同时使用时需要使用小括号()包裹优先执行的部分 3.范围查询between..and 闭区间 In() ---查询语文成绩在 [80, 90] 分的同学及语文成绩 闭区间 select name,chinese from exam_result where chinese between 80 and 90; select name,chinese from exam_result where chinese80 and chinese90; In相当于随机抽取学生而不是一个范围 -- 查询数学成绩是 98 或者 65 或者 84 的同学及数学成绩 select name,math from exam_result where math in(98,65,84); 使用 OR 也可以实现 SELECT name, math FROM exam_result WHERE math 58 OR math 65 OR math98 ; 4.模糊查询LIKE -- % 匹配任意多个包括 0 个字符 我要找名字里包含孙的人 孙开头 select name from exam_result where name like 孙%; 孙结尾 select name from exam_result where name like %孙; 包含孙 select name from exam_result where name like %孙%; -- _ 匹配严格的一个任意字符 我要找名字姓孙俩个字名字的人 5.NULL 的查询IS [NOT] NULL 查询 english成绩 已知的同学姓名 查询 english成绩 未知的同学姓名 5.分页查询LIMIT -- 起始下标为 0
-- 从 0 开始筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 从 s 开始筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
-- 从 s 开始筛选 n 条结果比第二种用法更明确建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;
按id进行分页每页三条记录分别显示123页 接下来就是从下标3开始 接下来就是从下标3开始 此时为空。因为表中只有9行。 自信大方机会总是留给有准备的人的。